‘数据库’ 分类下的所有文章
2013十一月8

redis使用

redis 评论关闭
使用场景
1,做缓存,不经常变动的数据加载到缓存中。定时的去更新缓存。
2,热点数据处理,如计数,在线会员列表,最新文章等。
 
redis持久化
rob方式:通过快照完成,当符合一定条件时redis会自动将内存中的所有数据进行快照并存储到硬盘上。
进行快照的条件有两个:时间与改动的键的个数。 redis默认采用rob方式,文件在当前目录的dump.rdb文件
在redis启动时会读取rdb快照文件。
aof方式:每执行一条会更改redis中数据的命令,就将该命令写入硬盘的aof文件

redis入门指南笔记


一、安装
wget http://download.redis.io/redis-stable.tar.gz
tar xzf redis-stable.tar.gz
cd redis-stable
make

启动
src/redis-server
停止 redis-cli shutdown

客户端:
src/redis-cli

cp redis-benchmark redis-cli redis-server /usr/bin/ #这个倒是很有用,这样就不用再执行时加上./了,而且可以在任何地方执行

在线测试 http://try.redis.io/

二、各种类型

键命名:对象类型:对象ID:对象属性

设置 set myname asong
获取 get myname
判断存在 exists myname
删除 del myname

mset,mget设置获取多个键
mset myname asong age 28

查询所有键:keys *
查询以w开头的键 keys w*
type key 获取类型

是原子的,避免冲突
整数自增 incr i
decr i
incrby i 10
decrby i 10

加小数
incrbyfloat i 1.5

向尾部添加值,若不存在,则新值
append myname hello

获取长度 strlen myname

类型:
字符串类型,整数类型

散列类型:用来存储对象
hset user name asong
hget  user name
设置多个值
hmset user name asong age 28
hgetall user --显示所有
hexists user name 判断字段是否存在
hincry user age
hdel user age
hkeys user
hlen user --获取字段数量

列表类型:存储一个有序的字符串列表,在列表两端添加元素,或者获得列表的某一个片段,一双向链表,顺序即插入的次序。
若是一个对象,可以序列化成字符串存储
应用:网站上的最新文章top 10
直接从列表类型中取出即可,因为每次都将最新的插入到头部

lpush users asong fang bcc
rpush users dd ff

从列表删除元素
lpop users
rpop users

获取片段
lrange users 1 10

删除列表指定的值
lrem users -1 asong
lrem key count value
count>0 从列表左边开始删除前count个值为value的元素。
<0,从右边
=0 删除所有值为value的元素

获取指定位置的值
lindex users 1

向列表指定位置插入元素
linsert users before 7 niuniu

集合类型:
集合:无序的每个元素唯一的合集
sadd users asong fangfang
获取: smembers users
删除:sren users asong
判断集合是否存在 sismember users asong
集合运算
sdiff:多个集合差集 属于A但不属于B的集合
sinter:交集
sunion:并集

有序集合类型:插入数据时指定权重,自动处理排序
zadd users asong 100 fang 200 niu 1000
获得元素的权重
zscore users asong

获取权重在某个范围的元素列表
zrange users 1 10
 
2013十一月5

数据库文件损坏修复

sql server 评论关闭

【场景】:
对象浏览器中只有数据库名,数据库展不开,查看日志【由于数据库没有完全关闭,无法重新生成日志。】,推测原因是服务器异常关停,造成数据库没有正常写完数据造成。

【处理方法】:修复数据,舍弃异常数据。
DBCC CHECKDB (mydb, REPAIR_ALLOW_DATA_LOSS),前提是要在单用户下

【完整的处理方法】:

ALTER DATABASE [mydb] SET EMERGENCY
--EMERGENCY状态下 数据库标记为 READ_ONLY,并禁用日志记录,并且仅限 sysadmin 固定服务器角色的成员进行访问。 EMERGENCY 主要用于故障排除。
ALTER DATABASE [mydb] SET SINGLE_USER
DBCC CHECKDB (mydb, REPAIR_ALLOW_DATA_LOSS)
ALTER DATABASE [mydb] SET MULTI_USER

【注】
若以上执行不成功,按以下方式处理:
1,数据库mydb脱机
2,将mdf文件copy到新位置
3,删除原数据库mydb
4,建立新库mydb
5, 脱机mydb
6, 将备份的mdf文件覆盖新库
7,联机新库,此时是置疑状态
8,执行【完整的处理方法】

2013十月31

sqlserver系统存储过程源码

sql server 评论关闭
2013十月30

mongodb性能监控

mongodb 评论关闭
profile 可以监控所有慢的以及不慢的查询。
Profiler默认是关闭的,你可以选择全部开启,或者有慢查询的时候开启。
开启:
db.setProfilingLevel(2);
关闭
db.setProfilingLevel(0)
 
开启后会在所在库下生成一个system.profile集合,可利用此集合进行查询,如按查询时间倒排
 
 
 
 
2013十月29

mongodb备份与恢复

mongodb 评论关闭
备份
T:\mongodb\bin\mongodump.exe -h 127.0.0.1 -d BRM_Message  -u saadmin -p L123 -o "d:\backup\mongobak\%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%"
mongorestore -h 127.0.0.1 -d BRM_Message --directoryperdb /backup/mongobak/3/  -u saadmin -p L123

还原:
E:\mongodb\bin>E:\mongodb\bin\mongorestore -h 127.0.0.1 -d BRM_Message  --drop -
-directoryperdb "E:\mongodb\back\11231629\BRM_Message"
connected to: 127.0.0.1
 

http://docs.mongodb.org/v2.2/reference/mongorestore/

 
 
2013十月24

异常连接数据库

sql server 评论关闭

SELECT CONVERT(VARCHAR(50),CONNECTIONPROPERTY('local_net_address'))host ,client_net_address,program_name,db.NAME,convert(varchar(max),t.[text]) SQLText,CONVERT(varchar(20),login_time,120) login_time,
CONVERT(VARCHAR(20),last_request_end_time,120) last_request_end_time,login_name,s.session_id

FROM master.sys.dm_exec_sessions AS s (nolock)
INNER JOIN master.sys.dm_exec_connections AS c (nolock) ON s.session_id=c.session_id
INNER JOIN master.sys.databases db ON s.database_id = db.database_id
OUTER APPLY master.sys.dm_exec_sql_text(c.most_recent_sql_handle) AS t
LEFT JOIN dbo.mdSystemIP msi ON client_net_address = msi.IP
WHERE
NOT EXISTS( –非限定IP访问
SELECT 1 FROM dbo.mdSystemIP ms WHERE client_net_address = ms.IP
)
OR

( –服务器访问但是非合法客户端,包含用ssms直联也是不合法
EXISTS(SELECT 1 FROM dbo.mdSystemIP ms WHERE client_net_address = ms.IP AND VisitType='Server')
AND program_name NOT LIKE '.Net SqlClient Data Provider%' –程序连接
AND program_name NOT LIKE 'SqlQuery%' –缓存,数据库依赖
AND program_name NOT LIKE 'SQLAgent%' –job
AND program_name NOT LIKE 'Repl%' –复制分发
AND program_name NOT LIKE 'DATABASE%' –复制分发
AND program_name NOT LIKE 'SQLCLUSTER%' –复制分发
AND program_name != 'Microsoft SQL Server' –自身执行
AND program_name != 'Microsoft® Windows® Operating System'
AND login_name != 'NT AUTHORITY\SYSTEM'
AND db.NAME NOT IN('master','msdb','distribution')
)

2013十月5

注册服务器下空白

sql server 评论关闭

sqlserver在新增注册服务器时,发现框里空白,没有数据库引擎的选项。引起的原因是将其他服务器的注册配置文件导入过来引起,处理方法:
删除:C:\Users\Administrator\AppData\Roaming\Microsoft\Microsoft SQL Server\110\Tools\Shell\RegSrvr.xml
重启ssms

2013九月27

数据库压缩备份

sqlserver2008开始提供压缩备份,好处是备份与还原时间缩短,备份文件也很小,测试结果显示文件小了2/3,不过不好的地方在于CPU要大量计算,CPU要占不少资源,不过若放在晚上执行的话,cpu可以忽略。

SELECT name,backup_start_date,backup_finish_date,compressed_backup_size
FROM msdb..backupset;
 

备份压缩 (SQL Server)

2013九月27

触发器的替代-cdc数据变更记录更好的方式

sql server 评论关闭

SQL Server 2008提供了内建的方法“”变更数据捕获“”(Change Data Capture 即CDC)以实现异步跟踪用户表的数据修改,而且这一功能拥有最小的性能开销。可以用于其他数据源的持续更新,例如将OLTP数据库中的数据变更迁移到数据仓库数据库。

--开启cdc
EXEC sys.sp_cdc_enable_db

--net_changes说的是针对一行记录,如果有多个更改的话,那么以最后的一条为准。
EXEC sys.sp_cdc_enable_table @source_schema='dbo',@source_name='frmuser',@capture_instance='frmuser',@supports_net_changes=0,@role_name=null 

--确认表已经被跟踪  

SELECT is_tracked_by_cdc FROM sys.tables
WHERE name = 'frmuser' and schema_id = SCHEMA_ID('dbo')  

EXEC sys.sp_cdc_help_change_data_capture 'dbo', 'frmuser' 

--更改表数据查询效果
UPDATE a
SET a.isvalid  = 0
FROM frmuser a
WHERE Account ='sa'

SELECT TOP 50 *
FROM [cdc].[frmuser_CT]

DECLARE @FromLSN varbinary(10) =
sys.fn_cdc_map_time_to_lsn
( 'smallest greater than or equal' , '2013-09-27 08:30')  

DECLARE @ToLSN varbinary(10) =
sys.fn_cdc_map_time_to_lsn
( 'largest less than or equal' , '2013-09-27 23:59:59')  

--注意若在上面的日期范围内无数据的话,将提示参数不足
SELECT
CASE __$operation
WHEN 1 THEN 'DELETE'
WHEN 2 THEN 'INSERT'
WHEN 3 THEN 'Before UPDATE'
WHEN 4 THEN 'After UPDATE'
END   ,a.*
FROM [cdc].[fn_cdc_get_all_changes_frmuser]
(@FromLSN, @ToLSN, 'all')   a

--撤销CDC
EXEC sys.sp_cdc_disable_table 'dbo',
'FactInternetSales','All'

EXEC sys.sp_cdc_disable_db
更改是不会永远保存,会定期清除
捕获和清除作业都是使用默认参数创建的。将立即启动捕获作业。它连续运行,每个扫描周期最多可处理 1000 个事务,并在两个周期之间停顿 5 秒钟。清除作业在每天凌晨 2 点运行一次。它将更改表项保留三天(4320 分钟),可使用单个删除语句最多删除 5000 项。
 

 
 
 
 
2013九月24

mongodb主从复制配置

准备:
1,主服务器和从服务器的admin数据库中必须有全局用户。
2,主服务器的local数据库和从服务器的local数据均有名为repl且密码相同的用户名。
3,主服务器和从服务器必须开启安全认证:–auth
步骤:
分别连接上主从服务器设置账号
  >use admin
   >db.addUser('sa','LifeIsGood')
   >use local
   >db.addUser('repl','repl')
   >exit
开启:
主服务器重新启动,带参数–auth –master
从服务器重新启动,带参数–auth –slave –source 172.16.88.241

注:从服务器不能进行数据更新操作,只能查询

http://docs.mongodb.org/manual/core/master-slave/

2013九月23

mongodb安装成服务及账号建立

mongodb 评论关闭

一、安装成服务

1、解压mongodb-win32-x86_64-2.4.6.zip到 D:\mongodb
2、在D:\mongodb下创建目录data 与 logs
3、在D:\mongodb\logs下创建mongodb.log文件
4、配置为服务
1)开始–运行–cmd
2)cd D:\Mongodb\bin
3)D:\Mongodb\bin>mongod –logpath D:\MongoDB\logs\MongoDB.log –logappend –dbpath D:\MongoDB\data –directoryperdb –serviceName MongoDB –install
4) net start mongodb

二、账号建立
1,利用mongoVUE连接上去,在admin的users建立账号
2,让mongodb进入授权模式,在启动时增加参数auth
net stop mongodb
sc delete mongodb
mongod –logpath D:\MongoDB\logs\MongoDB.log –logappend –dbpath D:\MongoDB\data –directoryperdb –serviceName MongoDB –install –auth

2013九月22

MongoDB资料汇总专题

mongodb 评论关闭
2013九月22

mongodb 更改数据类型

mongodb 评论关闭

db.bmdMessage.find( { '_id' : { $type : 2 } } ).forEach( function (x) { x._id=ObjectId(x._id); db.bmdMessage.save(x); });

注意:_id的类型创建了则不允许更改。
参考:
修改MongoDB 字段的类型
官方文档

2013八月29

隐藏数据库

sql server 评论关闭
USE MASTER
GO
GRANT VIEW ANY DATABASE TO PUBLIC; -- turn this back on if it was off
GO
DENY VIEW ANY DATABASE TO USER_A;
GO

How to hide SQL Server user databases in SQL Server Management Studio

2013八月23

全局存储过程sp_

sql server 评论关闭

以SP_开头的存储过程不是会先去找系统存储过程。 是先去master数据库中找这个存储过程。。。之后再去用户数据库中找这个存储过程,所以假如自己写了一个对index操作的SP。 直接放在master数据库中,以SP_开头。 这样在Job的定义中。 选择到用户数据库,然后执行这个SP即可。

这样就可实现在master建立一存储过程,在所有库中均可调用。
2013八月20

配置job管理权限

sql server 评论关闭

若要配置用户以创建或执行 Microsoft SQL Server 代理作业,必须先将某个现有 SQL Server 登录名或 msdb 角色添加到 msdb 数据库中的下列 SQL Server 代理固定数据库角色之一:SQLAgentUserRole、SQLAgentReaderRole 或 SQLAgentOperatorRole。

配置帐户以创建和管理 SQL Server 代理作业

2013八月16

复制分发参数配置

通过sp_help_agent_profile查看代理类型所对应的profile_id,下面是此过程的返回结果 profile_id    profile_name    agent_type    type    description    def_profile
1    默认代理配置文件    1    0    NULL    1
2    默认代理配置文件    2    0    NULL    1
3    详细历史记录代理配置文件    2    0    用于详细历史记录日志的代理配置文件。    0
4    默认代理配置文件    3    0    NULL    1
5    详细历史记录代理配置文件    3    0    用于详细历史记录日志的代理配置文件。    0
6    默认代理配置文件    4    0    NULL    1
7    慢速链接代理配置文件    4    0    用于低带宽连接的代理配置文件。    0
8    详细历史记录代理配置文件    4    0    用于详细历史记录日志的代理配置文件。    0
9    Windows Synchronization Manager profile    4    0    Windows 同步管理器所用的配置文件。    0
10    Windows Synchronization Manager profile    3    0    Windows 同步管理器所用的配置文件。    0
11    默认代理配置文件    9    0    用于已复制的排队事务读取器的代理配置文件。    1
12    行计数验证配置文件    4    0    合并代理用于执行行计数验证的配置文件。    0
13    行计数和校验和验证配置文件    4    0    合并代理用于执行行计数和校验和验证的配置文件。    0
14    遇到数据一致性错误时继续。    3    0    用于跳过数据一致性错误的代理配置文件。它只能由 SQL Server 订阅服务器使用。    0
15    大容量服务器对服务器的配置文件    4    0    合并代理配置文件已经优化,适用于服务器之间的大容量同步。    0
16    用于 OLEDB 流式处理的分发配置文件    3    0    使用 OLEDB 流式处理为处理 LOB 数据启用的分发代理配置文件。    0


通常 快照代理 agent_type = 1,所对应的profile_id = 1

日志读取代理 agent_type = 2,所对应的profile_id = 2

分发代理 agent_type = 3,所对应的profile_id = 4

如下命令返回某个代理的配置信息,注意后面的参数是profile_id

sp_help_agent_parameter @profile_id

sp_help_agent_parameter 1 返回快照代理配置参数

profile_id parameter_name value

1 -BcpBatchSize 100000

1 -HistoryVerboseLevel 2

1 -LoginTimeout 15

1 -QueryTimeout 1800

在快照代理中增加MaxBcpThreads配置参数为20

sp_add_agent_parameter 1,'MaxBcpThreads',20

在日志读取代理中修改PollingInterval配置参数为3

sp_change_agent_parameter 2,'PollingInterval',3

2013八月16

复制分发跳过错误

sql server 评论关闭
 
1,临时跳过
–@publisher @@SERVERNAME,
–@publisher_db db_name(),
–@publication dbo.MSpublication publication,
–@subscriber sysname,
–@subscriber_db sysname
 
–在分发数据库上执行
sp_helpsubscriptionerrors 'SQLCLUSTER','brm_lvjian','brm_lvjian','DATABASED','brm_lvjian'
 
–跳过事务的命令(在订阅服务器上执行),对等数据不支持
sp_setsubscriptionxactseqno 'DATABASED','brm_lvjian','brm_lvjian',0x0005168B000054AA000500000000
 
2,遇到错误自动跳过
分发代理的 -SkipErrors 参数,可用来跳过某种类型的错误。
配置:本地发布-分发服务器属性-常规-右下默认配置文件-分发代理
-SkipErrors 参数
默认情况下,发布代理遇到错误时就会停止。 如果使用 -SkipErrors 参数,并指定了预期的或不想让其干扰复制的错误,则代理就会记录错误信息,然后继续运行。 例如,如果要指定分发代理,使其记录重复键违规但继续处理后续事务,就需要指定代理跳过错误 2601(不能在具有唯一索引 '%.*ls' 的对象 '%.*ls' 中插入重复键的行。)和 2627(违反了 %ls 约束 '%.*ls'。 不能在对象 '%.*ls' 中插入重复键):-SkipErrors 2601;2627 
-SkipErrors 参数的最常见用法是使用标题为“遇到数据一致性错误时继续”的分发代理配置文件。 这样,分发代理就会跳过错误 2601、2627 和 20598(应用复制的命令时在订阅服务器上找不到该行)。 有关详细信息,请参阅复制代理配置文件。 除了此预定义的配置文件之外,还可以在创建或修改的代理配置文件中,或在命令行中,指定该参数。 
 
 
 
sp_helpsubscriptionerrors

http://msdn.microsoft.com/zh-cn/library/ms173427.aspx

 
sp_setsubscriptionxactseqno

http://msdn.microsoft.com/zh-cn/library/ms188764.aspx 


 
2013八月16

修改数据库默认位置

sql server 评论关闭
–修改数据库默认位置
USE [master]
GO
EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'DefaultData', REG_SZ, N'D:\SQLDATA'
GO
EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'DefaultLog', REG_SZ, N'D:\SQLDATA'
GO
EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'BackupDirectory', REG_SZ, N'D:\SQLDATA'
GO
 
2013八月16

更改服务器名

sql server 评论关闭
exec sp_dropserver <(用select @@SERVERNAME显示出来的旧名)>
GO
exec sp_addserver <你现在的计算机名>, LOCAL
GO

SELECT @@SERVERNAME,SERVERPROPERTY('ServerName')