代码改变世界

随笔分类 -  00.SQL Server

SQL Server 数据变更时间戳(timestamp)在复制中的运用

2013-12-20 10:43 by 听风吹雨, 28001 阅读, 收藏, 编辑
摘要: 一.本文所涉及的内容(Contents)本文所涉及的内容(Contents)背景(Contexts)方案(Solution)方案一(Solution One)方案二(Solution Two)方案三(Solution Three)实现过程(Process)注意事项(Attention)参考文献(References)二.背景(Contexts) SQL Server数据库中Basic与Group两个表需要提供部分字段给其它程序读取,程序把这两个表的数据缓存到内存中,但是程序想知道这两个表数据的变更信息,包括:Insert/Update/Delete,有什么方式可以实现呢?三.方案(Solut. 阅读全文

SQL Server 更改跟踪(Chang Tracking)监控表数据

2013-12-19 17:24 by 听风吹雨, 17520 阅读, 收藏, 编辑
摘要: 一.本文所涉及的内容(Contents)本文所涉及的内容(Contents)背景(Contexts)主要区别与对比(Compare)实现监控表数据步骤(Process)参考文献(References)二.背景(Contexts) 在SQL Server 2008以上版本中,对数据库中的用户表所做的 DML 更改(插入、更新和删除操作)除了:SQL Server 变更数据捕获(CDC)监控表数据之外,还有一个新增功能,那就是:更改跟踪(Chang Tracking),它跟CDC有什么不同呢?使用场景有什么区别呢?三.主要区别与对比(Compare)1. SQL Server 2008 引入了两. 阅读全文

SQL Server 变更数据捕获(CDC)监控表数据

2013-12-18 09:47 by 听风吹雨, 28896 阅读, 收藏, 编辑
摘要: 一.本文所涉及的内容(Contents)本文所涉及的内容(Contents)背景(Contexts)实现过程(Realization)补充说明(Addon)参考文献(References)二.背景(Contexts) 在SQL Server 2008版本之前,对表数据库的变更监控,我们通常使用DML触发器进行监控,把DML操作中的INSERT/UPDATE/DELETE数据记录下来,但是触发器的维护比较困难; 当SQL Server 2008新功能:变更数据捕获(Change Data Capture,即CDC)出来之后,我发现这正是我想要的,因为我之前使用DML触发器实现的时候也是把UP.. 阅读全文

SQL Server 事件通知(Event notifications)

2013-12-13 17:21 by 听风吹雨, 11168 阅读, 收藏, 编辑
摘要: SQL Server事件通知有什么用呢?如果你想监控SQL Server的DDL操作,你可以通过DDL触发器(参考:SQL Server DDL触发器运用),也可以通过SQL Server 事件通知把这个事件相关的信息发送到 Service Broker 服务;他们最大的区别就是DDL触发器可以进行ROLLBACK,而事件通知不行;还有,事件通知是异步发送消息的;   SQL Server 事件通知还可以响应部分SQL跟踪事件,即SQL Trace (参考:SQL Server 默认跟踪(Default Trace)、SQL Server 创建跟踪); 阅读全文

SQL Server 堆表行存储大小(Record Size)

2013-11-19 15:01 by 听风吹雨, 4714 阅读, 收藏, 编辑
摘要: 有的时候你需要计算堆表的一行记录有多大?又或者想计算一个数据页(8K)能保存多少条记录?字段类型是设计成nchar还是nvarchar?他们有什么区别呢?在做数据库表设计的时候会经常出现这些问题。要计算一行记录的大小,并不是简单把列字段类型大小直接相加就行的,具体原因请看下文。 下面是计算堆表行记录大小的公式,它引自MSDN:估计堆的大小 计算公式:Row_Size = Fixed_Data_Size + Variable_Data_Size + Null_Bitmap + 4 阅读全文

SQL Server DDL触发器运用

2013-10-11 13:44 by 听风吹雨, 12966 阅读, 收藏, 编辑
摘要: 一.本文所涉及的内容(Contents)本文所涉及的内容(Contents)背景(Contexts)基础知识(Rudimentary Knowledge)DDL运用场景(DDL Scene)补充说明(Addon)疑问(Questions)参考文献(References)二.背景(Contexts) 说到触发器,大家都会想到这样的使用场景:当一个表的数据修改了,运用DML触发插入或者更新到其它表中;那DDL触发器(SQL Server 2005引入的新功能)会运用到什么场景中呢?本文将为你讲述4种运用DDL触发器的场景: 1) 禁止用户修改和删除表; 2) 禁止用户删除数据库; 3) 记... 阅读全文

SQL Server 默认跟踪(Default Trace)

2013-10-09 12:54 by 听风吹雨, 21062 阅读, 收藏, 编辑
摘要: 一.本文所涉及的内容(Contents)本文所涉及的内容(Contents)背景(Contexts)基础知识(Rudimentary Knowledge)查看默认跟踪信息(Default Trace)补充说明(Addon)参考文献(References)二.背景(Contexts) 思考这样的场景:数据库的表、存储过程经常别修改,当这些修改造成BUG的时候,很多开发都不承认是他们干的,那我们有没办法找出谁干的呢? SQL Server有Default Trace默认跟踪,数据库记录信息到log.trc文件,可以查看trace_event_id,46表示Create对象(Object:Cre.. 阅读全文

SQL Server 创建数据库邮件

2013-10-09 12:21 by 听风吹雨, 9076 阅读, 收藏, 编辑
摘要: 一、 背景 数据库发邮件通知数据库的运行状态(状态可以通过JOB形式获取)和信息,达到预警的效果。二、 基础知识 msdb系统数据库保存有关Job,Database Mail,Nodifyication等等之类信息的。MSSQL2005之后的邮件功能,使用了Services Broker进行了队列处理。然后使用外部进程,这个可以在配置成功Mail以后查看任务管理器中的进程。 另外 sp_send_dbmail是手动发送邮件的存储过程,我们必须显示的赋值才能发送。三、 图形界面方式创建数据库邮件下面就以SSMS的图形界面 阅读全文

SQL Server 复制系列(文章索引)

2013-09-30 17:04 by 听风吹雨, 2918 阅读, 收藏, 编辑
摘要: 二.前言(Introduction)   SQL Server的复制、日志传送、镜像等几个高级功能中,个人感觉复制是比较符合我的生产环境的要求的,其实搭建复制并不难,但是在网上关于:通过备份文件初始化复制、跨网段(跨机房)复制的文章会比较少,这里就着重讲讲这些内容; 三.复制逻辑结构图(Construction)   下图是一个关于SQL Server通过备份文件初始化复制的逻辑结构图:(Figure1:SQL Server备份文件初始化订阅逻辑结构图) 为了与SQL Server的复制进行对比,我们去了解下一下MySQL的Master/Slave 阅读全文

SQL Server 跨网段(跨机房)FTP复制

2013-09-24 17:53 by 听风吹雨, 6356 阅读, 收藏, 编辑
摘要: 二.背景(Contexts)   搭建SQL Server复制的时候,如果网络环境是局域网内,通过主机名就可以实现了,但是如果是跨网段、跨机房异地搭建复制的时候就需要注意了,因为SQL Server复制不支持通过IP连接分发服务器,那有什么办法解决跨网段、跨机房的问题呢?   我在SQL Server跨网段(跨机房)复制已经讲到了两种解决方法,如果想用请求订阅模式,共享快照文件权限的配置比较麻烦,更好更安全的方式是通过FTP形式读取快照文件进行初始化; 阅读全文

SQL Server 跨网段(跨机房)复制

2013-09-18 15:30 by 听风吹雨, 11302 阅读, 收藏, 编辑
摘要: 搭建SQL Server复制的时候,如果网络环境是局域网内,通过主机名就可以实现了,但是如果是跨网段、跨机房异地搭建复制的时候就需要注意了,因为SQL Server复制不支持通过IP连接分发服务器,那有什么办法解决跨网段、跨机房的问题呢? 在跨网段、跨机房进行SQL Server复制的时候需要区分两种情况:一种是外网IP的1433端口对应了这台机器SQL Server的数据库端口;另外一种情况是外网IP对应SQLServer机器的端口不是1433;下面是几种解决方案: 阅读全文

SQL Server 通过备份文件初始化复制

2013-09-09 11:39 by 听风吹雨, 7851 阅读, 收藏, 编辑
摘要: MySQL在对有历史数据的数据库进行搭建复制(Master/Slave)的时候,可以通过在Master服务器备份历史数据,利用这个备份文件在Slave进行还原;这样做的好处是可以更加快速的搭建好环境,因为可以对备份文件进行压缩、分包,并且可以使用FTP等工具保证传输过程的安全与快捷;详情可参考:Windows下搭建MySQL Master Slave 当SQL Server遇到同样需要对历史数据库搭建复制,通常的做法是在本地发布快照,再由订阅传输数据 阅读全文

SQL Server 复制:事务发布

2013-09-06 17:33 by 听风吹雨, 17525 阅读, 收藏, 编辑
摘要: 一、背景 在复制的运用场景中,事务发布是使用最为广泛的,我遇到这样一个场景:在Task数据库中有Basic与Group两个表,需要提供这两个表的部分字段给其它程序读取放入缓存,程序需要比较及时的获取到这些数据,作为DBA你需要从权限和性能控制的角度出发,我采用了SQL Server的事务复制技术和timestamp,下面只讲述事务复制的搭建过程; 二、实现过程 (一) 环境信息 系统环境:Windows Server 2008 + SQL Server 2008 R2 阅读全文

SQL Server 维护计划实现数据库备份(策略实战)

2013-08-29 09:08 by 听风吹雨, 13354 阅读, 收藏, 编辑
摘要: 一、背景 之前写过一篇关于备份的文章:SQL Server 维护计划实现数据库备份,上面文章使用完整备份和差异备份基本上能解决数据库备份的问题,但是为了保障数据更加安全,我们需要再次完善我们的备份计划; 下面这篇文章主要加入了日志备份,并对设计备份的频率和设计命名规范等问题进行实战; 二、最佳实践 (一) 备份计划 1) 每周星期日的2:00:00执行数据库的完整备份; 2) 每周星期一至星期六每天的2:00:00执行数据库的差异备份; 3) 每天在8:00:00和23:59:59之间、每1小时执行数据库的日志备份; 阅读全文

SQL Server 自动增长过大

2013-08-07 12:32 by 听风吹雨, 4331 阅读, 收藏, 编辑
摘要: 一、背景我们遇到的问题如下图所示:自动增长无端端就按照这样的比例进行增长;(Figure1:问题所在)尝试使用SSMS修改自动增长值,就会出现下面的错误:(Figure2:错误信息)遇到上面的问题,我们需要解决两个问题:1. 把数据文件收缩到一定范围内的值,腾出磁盘空间;2. 重新设置自动增长的值,可以按照百分比,也可以使用指定的空间大小,我个人倾向使用n*1024M这样的值,仅供参考;3. 如果有需要你也可以进行日志文件的收缩;二、解决过程1. 使用下面的脚本修改自动增长的值:--1024ALTER DATABASE [DataBaseName]MODIFY FILE ( NAME = N& 阅读全文

SQL Server 迁移数据到MySQL

2013-08-05 11:59 by 听风吹雨, 61127 阅读, 收藏, 编辑
摘要: 一、背景由于项目开始时候使用的数据库是SQL Server,后来把存储的数据库调整为MySQL,所以需要把SQL Server的数据转移到MySQL;由于涉及的表比较多,所以想在MySQL中生成对应表并导入数据;上网找了些资料,如:将ACCESS和MSSQL导入MYSQL中、MySQL Migration 实现 MSSQL 到 MySQL数据迁移,虽然不知道里面的做法是否可以成功转移,但是里面的过程比较复杂,没有去尝试,后来自己找到了方法,最重要就是简单和准确 阅读全文

SQL Server 解读【已分区索引的特殊指导原则】(3) - 非聚集索引分区

2013-07-26 15:01 by 听风吹雨, 2805 阅读, 收藏, 编辑
摘要: 一、前言在MSDN上看到一篇关于SQL Server 表分区的文档:已分区索引的特殊指导原则,如果你对表分区没有实战经验的话是比较难理解文档里面描述的意思。这里我就里面的一些概念进行讲解,方便大家的交流。SQL Server 解读【已分区索引的特殊指导原则】(1)- 索引对齐SQL Server 解读【已分区索引的特殊指导原则】(2)- 唯一索引分区二、解读【对非聚集索引进行分区】“对唯一的非聚集索引进行分区时,索引键必须包含分区依据列。对非唯一的非聚集索引进行分区时 阅读全文

SQL Server 解读【已分区索引的特殊指导原则】(2)- 唯一索引分区

2013-07-26 14:52 by 听风吹雨, 2195 阅读, 收藏, 编辑
摘要: 一、前言在MSDN上看到一篇关于SQL Server 表分区的文档:已分区索引的特殊指导原则,如果你对表分区没有实战经验的话是比较难理解文档里面描述的意思。这里我就里面的一些概念进行讲解,方便大家的交流。SQL Server 解读【已分区索引的特殊指导原则】(1)二、解读【对唯一索引进行分区】“对唯一索引(聚集或非聚集)进行分区时,必须从唯一索引键使用的分区依据列中选择分区依据列。此限制将使 SQL Server 只调查单个分区,以确保表中不存在重复的新键值。 阅读全文

SQL Server 解读【已分区索引的特殊指导原则】(1)- 索引对齐

2013-07-25 16:51 by 听风吹雨, 4822 阅读, 收藏, 编辑
摘要: 一、前言在MSDN上看到一篇关于SQL Server 表分区的文档:已分区索引的特殊指导原则,如果你对表分区没有实战经验的话是比较难理解文档里面描述的意思。这里我就里面的一些概念进行讲解,方便大家的交流。(Figure0:索引与基表对齐)二、解读“索引要与其基表对齐,并不需要与基表参与相同的命名分区函数。但是,索引和基表的分区函数在实质上必须相同,即:1) 分区函数的参数具有相同的数据类型;2) 分区函数定义了相同数目的分区;3) 分区函数为分区定义了相同的边界值。 阅读全文

SQL Server 错误日志过滤(ERRORLOG)

2013-06-24 15:54 by 听风吹雨, 19373 阅读, 收藏, 编辑
摘要: 一、背景 有一天我发现SQL Server服务器的错误日志中包括非常多关于sa用户的登陆错误信息:“Login failed for user 'sa'. 原因: 评估密码时出错。[客户端: XX.XX.XX.XX]”。可是我很久之前就已经禁用了sa用户,怎么还会有那么多的sa用户登陆信息呢?我猜... 阅读全文