代码改变世界

随笔分类 - 00.SQL Server

QunInfo群数据库的还原与优化

2015-02-28 17:02 by 听风吹雨, 3672 阅读, 收藏, 编辑
摘要:一、 背景 这个数据库的数据文件mdf大概有8.5G左右,当还原数据库之后感觉可以做很多性能方面上的调优,合并数据后mdf数据文件大概有6.2G左右,行压缩后mdf数据文件大概有4.8G左右,页压缩后mdf数据文件大概有4.5G左右,这里处于技术研究的目的,讲讲研究的成果分析,不用于商业目的;二、... 阅读全文

二、八、十、十六进制转换(图解篇)

2015-01-19 14:46 by 听风吹雨, 152339 阅读, 收藏, 编辑
摘要:<img src="http://images.cnitblog.com/blog/48305/201501/191445561883615.png" class="desc_img" style="width:153px;height:116px; box-shadow: 5px 5px 5px #CCCCCC;border:1px solid #ccc;"/> 之前使用SQL把十进制的整数转换为三十六进制,SQL代码请参考:SQL Server 进制转换函数,其实它是基于二、八、十、十六进制转换的计算公式的,进制之间的转换是很基础的知识,但是我发现网络上没有一篇能把它说的清晰、简单、易懂的文章,所以我才写这篇文章的念头,希望能让你再也不用担心、害怕进制之间的转换了。   下面是二、八、十、十六进制之间关系的结构图: 阅读全文

GroupData群数据库的还原与优化

2014-12-18 14:07 by 听风吹雨, 3953 阅读, 收藏, 编辑
摘要:<img src="http://files.cnblogs.com/gaizai/logo_t-sql.ico" class="desc_img" style="width:153px;height:116px; box-shadow: 5px 5px 5px #CCCCCC;border:1px solid #ccc;"/> 这个数据库的数据文件mdf大概有83G左右,当还原数据库之后感觉可以做很多性能方面上的调优,合并数据后mdf数据文件大概有59G左右,行压缩后mdf数据文件大概有39G左右,页压缩后mdf数据文件大概有34G左右,这里处于技术研究的目的,讲讲研究的成果分析,不用于商业目的;优化项 我们可以从下面4个不同的方面来优化这两个数据库: (一)对表进行分区; (二)创建合适表索引; (三)使用行压缩,压缩行数据; (四)重新设计表结构,优化表空间; 阅读全文

SQL Server 系列文章快速导航(SWF版)

2014-11-10 15:46 by 听风吹雨, 4693 阅读, 收藏, 编辑
摘要:<img src="http://images.cnitblog.com/blog/48305/201411/101637349913144.jpg" class="desc_img" style="width:153px;height:116px; box-shadow: 5px 5px 5px #CCCCCC;border:1px solid #ccc;"/> 一.前言 在博客园写博客不自不觉已经有5个年头了,一开始只是为了记录工作中遇到的问题和解决办法,后来写的文章不自不觉的侧重在SQL Server方面的技术文章,在2014年1月终于鼓起勇气申请了微软SQL Server方面的最有价值专家(MVP),并荣幸的在4月份获得此殊荣。   今天整理了下文章,为了让大家更容易检索到(这里指人而不是所谓的SEO)我的文章,所以生成了一份SWF,以图形的方式,大家可以通过里面的链接快速进入文章,而且大家也可以下载这份SWF到本地,同样可以快速浏览。 阅读全文

SQL Server 动态生成数据库所有表Insert语句

2014-10-31 10:27 by 听风吹雨, 6599 阅读, 收藏, 编辑
摘要:<img src="http://files.cnblogs.com/gaizai/logo_t-sql.ico" class="desc_img" style="width:153px;height:116px; box-shadow: 5px 5px 5px #CCCCCC;border:1px solid #ccc;"/> 一、 背景 SQL Server,如果我们需要把数据库A的所有表数据到数据库B中,通常我们会怎么做呢?我会使用SSMS的导入导出功能,进行表数据的导入导出,无可厚非,这样的导入非常简单和方便; 但是,当我们的表有上百个,而且有些表是有自增ID的,那么这个时候使用SSMS的话,你需要一个个手动设置(如图1),你要知道,需要设置上百个的这些选项是件多么痛苦的事情,而且最后很可能会因为外键约束导致导入导 阅读全文

SQL Server 进制转换函数

2014-09-29 21:30 by 听风吹雨, 26756 阅读, 收藏, 编辑
摘要:<img src="http://files.cnblogs.com/gaizai/logo_t-sql.ico" class="desc_img" style="width:153px;height:116px; box-shadow: 5px 5px 5px #CCCCCC;border:1px solid #ccc;"/> 一、背景 前段时间群里的朋友问了一个问题:“在查询时增加一个递增序列,如:0x00000001,即每一个都是36进位(0—9,A--Z),0x0000000Z后面将是0x00000010,生成一个像下面的映射表“: 二、十进制转换为十六进制 在网上有很多资料关于使用SQL语句把十进制转换为十六进制的资料,比如: --方式1 SELECT CONVERT(VARBINARY(50), 23785) 执行返回值为0x00005CE9,但是需要注意的是,这本应该返回二进制的 阅读全文

谈谈我的微软特约稿:《SQL Server 2014 新特性:IO资源调控》

2014-07-01 10:19 by 听风吹雨, 4333 阅读, 收藏, 编辑
摘要:<img src="http://images.cnitblog.com/blog/48305/201407/011018414964331.png" class="desc_img" style="width:153px;height:116px; box-shadow: 5px 5px 5px #CCCCCC;border:1px solid #ccc;"/> 写这篇文章的目的是想记录这次的撰写文章的经历,其实一篇技术文章来得并不容易,之前自己写博客的随意性很强,排版可以根据自己喜好,但是一篇文章要被大家所接受,让大家愿意读完其实是一件很难的事情,所以排版还是挺重要的,这里我想提示下IT168的编辑,我的SQL代码其实是有高亮的,但是编辑发出来后发现高亮不见,阅读起来的确很不爽,估计大家也有同样的感觉。再者就是讲讲这次的技术内容,其实在SQL Server 2014之前就有资源调控器这个功能了,所以网上也不少这方面的资料,所以要写这个主题就需要找到一些新的亮点(新功能+通俗类比) 阅读全文

微软MVP攻略 (如何成为MVP?一个SQL Server MVP的经验之谈)

2014-06-16 10:46 by 听风吹雨, 14150 阅读, 收藏, 编辑
摘要:<img src="http://images.cnitblog.com/blog/48305/201406/161045263474114.png" class="desc_img" style="width:153px;height:116px; box-shadow: 5px 5px 5px #CCCCCC;border:1px solid #ccc;"/> 二.初衷   搞微软技术的,大家或多或少都有听说过微软的“最有价值专家”(MVP),网上也有不少资料对这个称谓做了介绍,但是都是一些大体的描述,并没有更加细节方面的,比如申请成为MVP的流程,成为MVP有那些资料需要填写、在哪里填写等等,所以我才萌发了以一个过来人的身份写一份关于微软MVP的攻略手册,希望能为想成为MVP的你提供指引。 三.什么是微软MVP?MVP(Most Valuable Professionals,最有价值专家)是指具备一种或多种微软技术专业知识,并且积极参与在线或离线的社群活动,经常与其他专业人士分享知识和专业技能,受人尊敬、信任,而且平易近人的专家。 阅读全文

SQL Server 动态行转列(参数化表名、分组列、行转列字段、字段值)

2014-05-26 16:09 by 听风吹雨, 66715 阅读, 收藏, 编辑
摘要:<img src="http://files.cnblogs.com/gaizai/logo_t-sql.ico" class="desc_img" style="width:153px;height:116px; box-shadow: 5px 5px 5px #CCCCCC;border:1px solid #ccc;"/> 其实行转列并不是一个什么新鲜的话题了,甚至已经被大家说到烂了,网上的很多例子多多少少都有些问题,所以我希望能让大家快速的看到执行的效果,所以在动态列的基础上再把表、分组字段、行转列字段、值这四个行转列固定需要的值变成真正意义的参数化,大家只需要根据自己的环境,设置参数值,马上就能看到效果了(可以直接跳转至:“参数化动态PIVOT行转列”查看具体的脚本代码)。行转列的效果图如图1所示: 阅读全文

SQL Server 在多个数据库中创建同一个存储过程(Create Same Stored Procedure in All Databases)

2014-05-13 10:35 by 听风吹雨, 6294 阅读, 收藏, 编辑
摘要:<img src="http://files.cnblogs.com/gaizai/logo_t-sql.ico" class="desc_img" style="width:153px;height:116px; box-shadow: 5px 5px 5px #CCCCCC;border:1px solid #ccc;"/> 在我的数据库服务器上,同一个实例下面挂载着许多相同结构的数据库,他们为不同公司提供着服务,在许多时候我需要同时创建、修改、删除一些对象,存储过程就是其中一个,但是想要批量创建存储,这有些特殊,下面就教你如何实现在多个数据库中创建同一个存储过程(Create Same Stored Procedure in All Databases) 三.遇到的问题(Problems)   在之前的文章中多次谈到使用游标的方式处理的各种问题: 阅读全文

大数据时代下的SQL Server第三方负载均衡方案----Moebius测试

2014-04-04 09:29 by 听风吹雨, 27114 阅读, 收藏, 编辑
摘要:<img src="http://images.cnitblog.com/blog/48305/201404/040928357655580.jpg" class="desc_img" style="width:153px;height:116px; box-shadow: 5px 5px 5px #CCCCCC;border:1px solid #ccc;"/> 前几天在SQL Server MVP宋大侠(宋沄剑)的一篇文章"数据库集群技术漫谈”中看到了格瑞趋势在SQL Server上的负载均衡产品Moebius,搞数据库的都知道:在Oracle上有RAC,MySQL也有对应的方案(可参考:MySQL搭建Amoeba系列),而SQL Server上直到SQL Server 2012版本的AlwaysOn到来,微软都没有提供一个负载均衡方案,我从宋大侠那里找来一个Moebius的测试版本进行一下测试,下面是我测试的过程。 阅读全文

SQL Server 大数据搬迁之文件组备份还原实战

2014-03-05 11:15 by 听风吹雨, 12981 阅读, 收藏, 编辑
摘要:<img src="http://images.cnitblog.com/blog/48305/201403/051112480381076.jpg" class="desc_img" style="width:153px;height:116px; box-shadow: 5px 5px 5px #CCCCCC;border:1px solid #ccc;"/> 有一个数据库大概在700G左右,需要从服务器A搬迁到服务器B,两台服务器网络传输速度可以达到8MB/s,怎么做才能更快的搬迁并且宕机时间最短呢?   数据库业务逻辑概述:这个数据库只会插入数据,每天大概有300W条数据,不会对数据进行修改,只有一个表比较大,并且这个表是以自增ID作为分区依据列的,文件组会被重用,数据库为简单恢复模式,我定时会对表数据进行交换分区删除数据;三.解决方案(Solution)之前我也写过关于搬迁数据库的一些文章: 阅读全文

SQL Server 批量主分区备份(Multiple Jobs)

2014-02-11 11:21 by 听风吹雨, 2387 阅读, 收藏, 编辑
摘要:<img src="http://files.cnblogs.com/gaizai/logo_t-sql.ico" class="desc_img" style="width:153px;height:116px; box-shadow: 5px 5px 5px #CCCCCC;border:1px solid #ccc;"/> 在公司的内网有台数据库的测试服务器,这台服务器是提供给开发人员使用的,在上面有很多的数据库,有些是临时系统用到的数据库,这些数据库有一个共同点:数据库表结构比较重要,数据库只有一些测试数据,也就是说这些数据库都很小,而整台服务器的数据库又非常多;   现在有这样一个需求,希望间隔一段时间就备份所有数据库,所以这里写了这篇文章,这也是另外一篇文章SQL Server 批量备份数据库(主分区)的基础; 阅读全文

SQL Server 批量完整备份

2014-02-10 14:59 by 听风吹雨, 8818 阅读, 收藏, 编辑
摘要:<img src="http://files.cnblogs.com/gaizai/logo_t-sql.ico" class="desc_img" style="width:153px;height:116px; box-shadow: 5px 5px 5px #CCCCCC;border:1px solid #ccc;"/> 在公司的内网有台数据库的测试服务器,这台服务器是提供给开发人员使用的,在上面有很多的数据库,有些是临时系统用到的数据库,这些数据库有一个共同点:数据库表结构比较重要,数据库只有一些测试数据,也就是说这些数据库都很小,而整台服务器的数据库又非常多;   现在有这样一个需求,希望间隔一段时间就备份所有数据库,所以这里写了这篇文章,这也是另外一篇文章SQL Server 批量备份数据库(主分区)的基础; 阅读全文

SQL Server 游标运用:鼠标轨迹字符串分割

2014-02-07 17:04 by 听风吹雨, 1778 阅读, 收藏, 编辑
摘要:<img src="http://files.cnblogs.com/gaizai/logo_t-sql.ico" class="desc_img" style="width:153px;height:116px; box-shadow: 5px 5px 5px #CCCCCC;border:1px solid #ccc;"/> 我们的系统中记录了用户的鼠标行为轨迹字符串,这些字符串的格式是:PosSet:[573,1103,2010-09-03 22:32:35],[864,110,2010-09-03 22:32:57],这个字段表示用户点击页面的X坐标,Y坐标,时间。现在要求对这样字符串进行分割。   需要注意的是当字符串只有一个坐标的时候,如:PosSet:[513,1303,2010-09-03 22:34:35],你需要考虑这种情况的处理,因为这个时候就没有分隔字符在字符串了。   还需要考虑字符串不规则的时候的异常处理; 阅读全文

SQL Server 批量主分区备份(One Job)

2014-01-28 12:18 by 听风吹雨, 2518 阅读, 收藏, 编辑
摘要:<img src="http://files.cnblogs.com/gaizai/logo_t-sql.ico" class="desc_img" style="width:153px;height:116px; box-shadow: 5px 5px 5px #CCCCCC;border:1px solid #ccc;"/> 一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents)背景(Contexts)案例分析(Case)实现代码(SQL Codes)主分区完整、差异还原(Primary Backup And Restore)参考文献(References)二.背景(Contexts) 在我的数据库实例中,有很多下图所示的数据库,这些数据库的名称是有规律的,每个数据库包含的表都是相同的,其中2个表是类似流水记录的表,表的数据量会比较大,占用的空间有几十G到上百G不等,这2个表相对于其它的配置表来说是比较不重要的 阅读全文

SQL Server 即时文件初始化

2014-01-13 09:43 by 听风吹雨, 3969 阅读, 收藏, 编辑
摘要:<img src="http://files.cnblogs.com/gaizai/logo_step-by-step.ico" class="desc_img" style="width:153px;height:116px; box-shadow: 5px 5px 5px #CCCCCC;border:1px solid #ccc;"/> 数据库服务器在为表分配初始值的时候很慢,分配初始值40GB的数据文件,花了30多分钟,一开始的时候一直认为是服务器磁盘的写入速度太慢造成的,后来经过北京-宋沄剑的提醒:即时文件初始化(Instant File Initialization),设置这一选项之后,速度提升到了19秒,下面将描述这个优化的设置过程。 三.基础知识(Rudimentary Knowledge) 就数据库而言,以下几种情况需要对文件初始化: 1. 创建数据库; 2. 向现有数据库中添加文件、日志或数据; 3. 增大现有文件的大小(包括自动增长操作); 阅读全文

SQL Server 链接服务器的安全

2014-01-03 19:42 by 听风吹雨, 8383 阅读, 收藏, 编辑
摘要:<img src="http://files.cnblogs.com/gaizai/logo_step-by-step.ico" class="desc_img" style="width:153px;height:116px; box-shadow: 5px 5px 5px #CCCCCC;border:1px solid #ccc;"/> 一.背景(Contexts) 当需要用远程服务器数据库和本地进行数据交互的时候(例如导数据等),我们通常会在本地创建一个远程服务器的数据库链接,关于创建创建链接服务器可以参考:SQL Server 创建链接服务器,但是我们很少去关注链接服务器的安全性问题。 为了控制链接服务器的安全性,我们采取的方法是:控制只有某个用户能使用这个链接服务器,实现的效果就如Figure1和Figure2所示,TestLink用户能看到并使用链接服务器:[192.168.1.5],而sa用户却无法看到链接服务器 阅读全文

SQL Server Audit监控触发器状态

2013-12-31 14:14 by 听风吹雨, 2433 阅读, 收藏, 编辑
摘要:<img src="http://files.cnblogs.com/gaizai/logo_sqlserver.ico" class="desc_img" style="width:153px;height:116px; box-shadow: 5px 5px 5px #CCCCCC;border:1px solid #ccc;"/> DML触发器一般会运用在业务系统的逻辑处理上,在你对数据库用户权限控制不当的时候,这些DML触发器很可能莫名的被禁用或者删除了,你作为数据库管理员你想做冤大头嘛?背黑锅嘛?如果不想,下面给出4种解决方案: 1. 使用DDL触发器对服务级别或者数据库级别进行监控,可以参考文档:SQL Server DDL触发器运用,效果如下图所示: (Figure1:触发器的日志) 2. 也可以使用数据库DDL事件通知,可以参考文档:SQL Server 事件通知(Event notifications),效果如上图所示; 阅读全文

SQL Server 监控系列(文章索引)

2013-12-20 16:32 by 听风吹雨, 2238 阅读, 收藏, 编辑
摘要:<img src="http://images.cnitblog.com/blog/48305/201312/23134828-7d16b3938eb540889419eb7b23ebca2c.jpg" class="desc_img" style="width:153px;height:116px; box-shadow: 5px 5px 5px #CCCCCC;border:1px solid #ccc;"/> 一.前言(Introduction) SQL Server监控在很多时候可以帮助我们了解数据库做了些什么,比如谁谁在什么时候修改了表结构,谁谁在删除了某个对象,当这些事情发生了,老板在后面追着说这是谁干的,如果你找不出元凶,那么就成为背黑锅的人了。 如果你想更了解什么时候需要对数据库做什么监控,那么我建议你看看本系列文章; 下图是一个关于SQL Server可用做监控功能的逻辑关系图: (Figure1:SQL Server可用做监控功能的逻辑关系图) 二.系列文章索引(Catalog) 阅读全文

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

2013-12-20 10:43 by 听风吹雨, 24235 阅读, 收藏, 编辑
摘要:一.本文所涉及的内容(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 听风吹雨, 10672 阅读, 收藏, 编辑
摘要:一.本文所涉及的内容(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 听风吹雨, 17996 阅读, 收藏, 编辑
摘要:一.本文所涉及的内容(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 听风吹雨, 8492 阅读, 收藏, 编辑
摘要:<img src="http://images.cnitblog.com/blog/48305/201312/13172014-2f37a93889874bd1a8ff7de6b7ca4f0b.png" class="desc_img" style="width:153px;height:116px; box-shadow: 5px 5px 5px #CCCCCC;border:1px solid #ccc;"/> 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 听风吹雨, 3204 阅读, 收藏, 编辑
摘要:<img src="http://images.cnitblog.com/blog/48305/201311/19150003-0cfc13fc6fb6419abea7130a66e2fec5.jpg" class="desc_img" style="width:153px;height:116px; box-shadow: 5px 5px 5px #CCCCCC;border:1px solid #ccc;"/> 有的时候你需要计算堆表的一行记录有多大?又或者想计算一个数据页(8K)能保存多少条记录?字段类型是设计成nchar还是nvarchar?他们有什么区别呢?在做数据库表设计的时候会经常出现这些问题。要计算一行记录的大小,并不是简单把列字段类型大小直接相加就行的,具体原因请看下文。 下面是计算堆表行记录大小的公式,它引自MSDN:估计堆的大小 计算公式:Row_Size = Fixed_Data_Size + Variable_Data_Size + Null_Bitmap + 4 阅读全文

SQL Server DDL触发器运用

2013-10-11 13:44 by 听风吹雨, 9702 阅读, 收藏, 编辑
摘要:一.本文所涉及的内容(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 听风吹雨, 15845 阅读, 收藏, 编辑
摘要:一.本文所涉及的内容(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 听风吹雨, 7335 阅读, 收藏, 编辑
摘要:<img src="http://files.cnblogs.com/gaizai/logo_step-by-step.ico" class="desc_img" style="width:153px;height:116px; box-shadow: 5px 5px 5px #CCCCCC;border:1px solid #ccc;"/> 一、 背景 数据库发邮件通知数据库的运行状态(状态可以通过JOB形式获取)和信息,达到预警的效果。二、 基础知识 msdb系统数据库保存有关Job,Database Mail,Nodifyication等等之类信息的。MSSQL2005之后的邮件功能,使用了Services Broker进行了队列处理。然后使用外部进程,这个可以在配置成功Mail以后查看任务管理器中的进程。 另外 sp_send_dbmail是手动发送邮件的存储过程,我们必须显示的赋值才能发送。三、 图形界面方式创建数据库邮件下面就以SSMS的图形界面 阅读全文

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

2013-09-30 17:04 by 听风吹雨, 2187 阅读, 收藏, 编辑
摘要:<img src="http://images.cnitblog.com/blog/48305/201309/30170336-067a31d70a424ed396a65a41b789a038.png" class="desc_img" style="width:153px;height:116px; box-shadow: 5px 5px 5px #CCCCCC;border:1px solid #ccc;"/> 二.前言(Introduction)   SQL Server的复制、日志传送、镜像等几个高级功能中,个人感觉复制是比较符合我的生产环境的要求的,其实搭建复制并不难,但是在网上关于:通过备份文件初始化复制、跨网段(跨机房)复制的文章会比较少,这里就着重讲讲这些内容; 三.复制逻辑结构图(Construction)   下图是一个关于SQL Server通过备份文件初始化复制的逻辑结构图:(Figure1:SQL Server备份文件初始化订阅逻辑结构图) 为了与SQL Server的复制进行对比,我们去了解下一下MySQL的Master/Slave 阅读全文

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

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

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

2013-09-18 15:30 by 听风吹雨, 8728 阅读, 收藏, 编辑
摘要:<img src="http://images.cnitblog.com/blog/48305/201309/18152459-0be73b226f4943c2bb21744529ee47fa.png" class="desc_img" style="width:153px;height:116px; box-shadow: 5px 5px 5px #CCCCCC;border:1px solid #ccc;"/> 搭建SQL Server复制的时候,如果网络环境是局域网内,通过主机名就可以实现了,但是如果是跨网段、跨机房异地搭建复制的时候就需要注意了,因为SQL Server复制不支持通过IP连接分发服务器,那有什么办法解决跨网段、跨机房的问题呢? 在跨网段、跨机房进行SQL Server复制的时候需要区分两种情况:一种是外网IP的1433端口对应了这台机器SQL Server的数据库端口;另外一种情况是外网IP对应SQLServer机器的端口不是1433;下面是几种解决方案: 阅读全文

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

2013-09-09 11:39 by 听风吹雨, 5529 阅读, 收藏, 编辑
摘要:<img src="http://images.cnitblog.com/blog/48305/201309/09113923-f4a75576211548078f2feb1be9fb751f.jpg" class="desc_img" style="width:153px;height:116px; box-shadow: 5px 5px 5px #CCCCCC;border:1px solid #ccc;"/> MySQL在对有历史数据的数据库进行搭建复制(Master/Slave)的时候,可以通过在Master服务器备份历史数据,利用这个备份文件在Slave进行还原;这样做的好处是可以更加快速的搭建好环境,因为可以对备份文件进行压缩、分包,并且可以使用FTP等工具保证传输过程的安全与快捷;详情可参考:Windows下搭建MySQL Master Slave 当SQL Server遇到同样需要对历史数据库搭建复制,通常的做法是在本地发布快照,再由订阅传输数据 阅读全文

SQL Server 复制:事务发布

2013-09-06 17:33 by 听风吹雨, 13356 阅读, 收藏, 编辑
摘要:<img src="http://files.cnblogs.com/gaizai/logo_step-by-step.ico" class="desc_img" style="width:153px;height:116px; box-shadow: 5px 5px 5px #CCCCCC;border:1px solid #ccc;"/> 一、背景 在复制的运用场景中,事务发布是使用最为广泛的,我遇到这样一个场景:在Task数据库中有Basic与Group两个表,需要提供这两个表的部分字段给其它程序读取放入缓存,程序需要比较及时的获取到这些数据,作为DBA你需要从权限和性能控制的角度出发,我采用了SQL Server的事务复制技术和timestamp,下面只讲述事务复制的搭建过程; 二、实现过程 (一) 环境信息 系统环境:Windows Server 2008 + SQL Server 2008 R2 阅读全文

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

2013-08-29 09:08 by 听风吹雨, 10037 阅读, 收藏, 编辑
摘要:<img src="http://files.cnblogs.com/gaizai/logo_SQLSERVER.ico" class="desc_img" style="width:153px;height:116px; box-shadow: 5px 5px 5px #CCCCCC;border:1px solid #ccc;"/> 一、背景 之前写过一篇关于备份的文章: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 听风吹雨, 3221 阅读, 收藏, 编辑
摘要:一、背景我们遇到的问题如下图所示:自动增长无端端就按照这样的比例进行增长;(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 听风吹雨, 46804 阅读, 收藏, 编辑
摘要:<img src="http://files.cnblogs.com/gaizai/logo_step-by-step.ico" class="desc_img" style="width:153px;height:116px; box-shadow: 5px 5px 5px #CCCCCC;border:1px solid #ccc;"/> 一、背景由于项目开始时候使用的数据库是SQL Server,后来把存储的数据库调整为MySQL,所以需要把SQL Server的数据转移到MySQL;由于涉及的表比较多,所以想在MySQL中生成对应表并导入数据;上网找了些资料,如:将ACCESS和MSSQL导入MYSQL中、MySQL Migration 实现 MSSQL 到 MySQL数据迁移,虽然不知道里面的做法是否可以成功转移,但是里面的过程比较复杂,没有去尝试,后来自己找到了方法,最重要就是简单和准确 阅读全文

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

2013-07-26 15:01 by 听风吹雨, 2156 阅读, 收藏, 编辑
摘要:<img src="http://files.cnblogs.com/gaizai/logo_sqlserver.ico" class="desc_img" style="width:153px;height:116px; box-shadow: 5px 5px 5px #CCCCCC;border:1px solid #ccc;"/> 一、前言在MSDN上看到一篇关于SQL Server 表分区的文档:已分区索引的特殊指导原则,如果你对表分区没有实战经验的话是比较难理解文档里面描述的意思。这里我就里面的一些概念进行讲解,方便大家的交流。SQL Server 解读【已分区索引的特殊指导原则】(1)- 索引对齐SQL Server 解读【已分区索引的特殊指导原则】(2)- 唯一索引分区二、解读【对非聚集索引进行分区】“对唯一的非聚集索引进行分区时,索引键必须包含分区依据列。对非唯一的非聚集索引进行分区时 阅读全文

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

2013-07-26 14:52 by 听风吹雨, 1682 阅读, 收藏, 编辑
摘要:<img src="http://files.cnblogs.com/gaizai/logo_sqlserver.ico" class="desc_img" style="width:153px;height:116px; box-shadow: 5px 5px 5px #CCCCCC;border:1px solid #ccc;"/> 一、前言在MSDN上看到一篇关于SQL Server 表分区的文档:已分区索引的特殊指导原则,如果你对表分区没有实战经验的话是比较难理解文档里面描述的意思。这里我就里面的一些概念进行讲解,方便大家的交流。SQL Server 解读【已分区索引的特殊指导原则】(1)二、解读【对唯一索引进行分区】“对唯一索引(聚集或非聚集)进行分区时,必须从唯一索引键使用的分区依据列中选择分区依据列。此限制将使 SQL Server 只调查单个分区,以确保表中不存在重复的新键值。 阅读全文

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

2013-07-25 16:51 by 听风吹雨, 3589 阅读, 收藏, 编辑
摘要:<img src="http://images.cnitblog.com/blog/48305/201309/17153511-9c9456558050416495f97cb5cac06364.png" class="desc_img" style="width:153px;height:116px; box-shadow: 5px 5px 5px #CCCCCC;border:1px solid #ccc;"/> 一、前言在MSDN上看到一篇关于SQL Server 表分区的文档:已分区索引的特殊指导原则,如果你对表分区没有实战经验的话是比较难理解文档里面描述的意思。这里我就里面的一些概念进行讲解,方便大家的交流。(Figure0:索引与基表对齐)二、解读“索引要与其基表对齐,并不需要与基表参与相同的命名分区函数。但是,索引和基表的分区函数在实质上必须相同,即:1) 分区函数的参数具有相同的数据类型;2) 分区函数定义了相同数目的分区;3) 分区函数为分区定义了相同的边界值。 阅读全文

SQL Server 错误日志过滤(ERRORLOG)

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

SQL Server 错误日志收缩(ERRORLOG)

2013-06-24 15:15 by 听风吹雨, 2812 阅读, 收藏, 编辑
摘要:一、基础知识默认情况下,错误日志位于 :C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\LOG\ERRORLOG和ERRORLOG.n 文件中。默认保留有7个 SQL Server 错误日志文件,分别是:ErrorLog,Errorlog.1~Errorlog.6 ,当前的错误日志(文件ErrorLog)没有扩展名。每当启动 SQL Server 实例时,将创建新的错误日志ErrorLog,并将之前的ErrorLog更名为ErrorLog.1,之前的ErrorLog.1更名为ErrorLog.2,依次类推,原先的ErroLog.6被删除。 阅读全文

SQL Server 限制IP登陆(登陆触发器运用)

2013-05-23 16:51 by 听风吹雨, 22604 阅读, 收藏, 编辑
摘要:<img src="http://files.cnblogs.com/gaizai/logo_t-sql.ico" class="desc_img" style="width:153px;height:116px; box-shadow: 5px 5px 5px #CCCCCC;border:1px solid #ccc;"/> 一、背景在MySQL的mysql.User表保存了登陆用户的权限信息,Host和User字段则是关于登陆IP的限制。但是在SQL Server没有这样一个表,那SQL Server有什么办法可以实现类似的安全控制的功能呢?SQL Server 包括三种常规类型的触发器:DML触发器、DDL触发器和登录触发器。DML触发器是比较常使用的,它通常在表或视图中修改数据(INSERT、UPDATE和DELETE 等)为了保证业务数据的完整性和一致性,可以对事务进行回滚等操作;如果你对DDL触发器感兴趣,可以参考:SQL Server DDL触发器运用 阅读全文

SQL Server 游标运用:查看所有数据库所有表大小信息(Sizes of All Tables in All Database)

2013-05-08 15:32 by 听风吹雨, 6237 阅读, 收藏, 编辑
摘要:<img src="http://files.cnblogs.com/gaizai/logo_t-sql.ico" class="desc_img" style="width:153px;height:116px; box-shadow: 5px 5px 5px #CCCCCC;border:1px solid #ccc;"/> 之前写了篇关于:SQL Server 游标运用:查看一个数据库所有表大小信息(Sizes of All Tables in a Database)的文章,它罗列出某个数据所有表的信息,这些信息包括:表的记录数、数据记录占用空间、索引占用空间、没使用的空间等(如Figure1所示),现在我来讲述如何获取整个数据库实例中所有数据库所有表的信息(如Figure2所示)。 下面内容讲述了在实现Figure2过程中遇到的一些问题,如果你对这些问题不感兴趣可以直接看最后实现的SQL脚本。下面讲述了4种实现方法: 阅读全文

SQL Server 游标运用:查看一个数据库所有表大小信息(Sizes of All Tables in a Database)

2013-05-07 12:09 by 听风吹雨, 3436 阅读, 收藏, 编辑
摘要:<img src="http://files.cnblogs.com/gaizai/logo_t-sql.ico" class="desc_img" style="width:153px;height:116px; box-shadow: 5px 5px 5px #CCCCCC;border:1px solid #ccc;"/> 一、背景在性能调优或者需要了解某数据库表信息的时候,最直观的方式就是罗列出这个数据所有表的信息,这些信息包括:表的记录数、数据记录占用空间、索引占用空间、未使用的空间等(如Figure1所示),有了这些信息你可以简单的判断这个数据库来自数据上的压力可能是某个表造成的。因为表数据越大,对数据库性能的影响越大。要实现某个数据库所有表的信息,可以通过游标的形式获取相应的数据,下图Figure1返回某数据库中所有表的信息:(Figure1:某数据库所有表信息)也许你并不满足于Figure1的信息,你希望获取整个数据库实例中所有数据库所有表的信息(如Figure2所示) 阅读全文

SQL Server 重置Identity标识列的值(INT爆了)

2013-04-23 17:45 by 听风吹雨, 24212 阅读, 收藏, 编辑
摘要:一、背景 SQL Server数据库中表A中Id字段的定义是:[Id] [int] IDENTITY(1,1),随着数据的不断增长,Id值已经接近2147483647(int的取值范围为:-2 147 483 648 到 2 147 483 647)了,虽然已经对旧数据进行归档,但是这个表需要保留最近的1亿数据,有什么方法解决Id值就快爆的问题呢? 解决上面的问题有两个办法:一个是修改表结构,把Id的int数据类型修改为bigint;第二个是重置Id(Identity标识列)的值,使它重新增长。 当前标识值:current identity value,用于记录和保存最后一次系统分配的I... 阅读全文

SQL Server 磁盘空间告急(磁盘扩容)

2012-11-27 10:00 by 听风吹雨, 12709 阅读, 收藏, 编辑
摘要:<img src="http://images.cnblogs.com/cnblogs_com/gaizai/SQLServerPar/%E5%85%B3%E7%B3%BB%E5%9B%BE2_publish.jpg" class="desc_img" style="width:153px;height:116px; box-shadow: 5px 5px 5px #CCCCCC;border:1px solid #ccc;"/> 一、背景在线上系统中,如果我们发现存放数据库文件的磁盘空间不够,我们应该怎么办呢?新买一个硬盘挂载上去可以嘛?(linux下可以直接挂载硬盘进行扩容),但是我们的SQL Server是运行在Windows下的,有什么办法可以解决这燃眉之急呢?有两种方法可以解决上面的问题:第一种就是把数据库磁盘转换为【动态磁盘】,新增新的磁盘就可以解决了;第二种就是我今天要讲述的,使用SQL Server在其它磁盘(或者逻辑分区)中添加新的文件,添加完成后,SQL Server马上就能进新的数据了 阅读全文

SQL Server 数据库帐号密码生成

2012-03-23 16:35 by 听风吹雨, 5143 阅读, 收藏, 编辑
摘要:<img src="http://files.cnblogs.com/gaizai/logo_t-sql.ico" class="desc_img" style="width:153px;height:116px; box-shadow: 5px 5px 5px #CCCCCC;border:1px solid #ccc;"/> 一、背景作为一个DBA,或许你有很多的系统需要管理,而且不同的系统使用了不同的数据库,通常的情况下,我们都是通过sa进行设置密码的,而且在config文件里面明文的写上我们的帐号和密码,这样的设计我们是否太大方了呢?或许你会说,我们的数据库是安全的,因为我们的数据库是只有内网可以访问的,但是那台机器的安全性呢?因为能进入操作系统就能看到我们的帐号密码了。再加上有些时候我们不希望客户能看到数据库密码的。那么应该如何保证我们的数据库账号密码的安全性呢? 二、架构设计针对上面的安全性问题,我设计了下面的方案,主要是运用加密算法进行加密,再通过分离一些职 阅读全文

SQL Server 数据库帐号密码安全设计

2012-03-07 17:20 by 听风吹雨, 6558 阅读, 收藏, 编辑
摘要:<img src="http://images.cnblogs.com/cnblogs_com/gaizai/%E6%95%B0%E6%8D%AE%E5%BA%93/%E8%AE%BE%E8%AE%A1_Publish.jpg" class="desc_img" style="width:153px;height:116px; box-shadow: 5px 5px 5px #CCCCCC;border:1px solid #ccc;"/> 一、背景作为一个DBA,或许你有很多的系统需要管理,而且不同的系统使用了不同的数据库,通常的情况下,我们都是通过sa进行设置密码的,而且在config文件里面明文的写上我们的帐号和密码,这样的设计我们是否太大方了呢?或许你会说,我们的数据库是安全的,因为我们的数据库是只有内网可以访问的,但是那台机器的安全性呢?因为能进入操作系统就能看到我们的帐号密码了。再加上有些时候我们不希望客户能看到数据库密码的。那么应该如何保证我们的数据库账号密码的安全性呢? 二、架构设计针对上面的安全性问题,我设计了下面的方案,主要是运用加密算法进行加密,再通过分离一些职 阅读全文

SQL Server 当表分区遇上唯一约束

2012-02-23 18:58 by 听风吹雨, 5006 阅读, 收藏, 编辑
摘要:一、前言我已经在高兴对服务器创建了表分区并且获得良好性能和自动化管理分区切换的时候,某一天,开发人员告诉我,某表的两个字段的数据不唯一,需要为这两个字段创建唯一索引的时候,这一切就变得不完美了。列的唯一,这个实际上是一个唯一索引。使用关键字unique建立。二、背景我有一个表TestUnique,这个表使用分区方案[Sch_TestUnique_Id],它是以Id做为分区依据列的,这个Id也是一个聚集索引,表中其它索引是跟分区对齐的(创建其它非聚集索引的时候使用了分区方案或者不指定-默认就是分区方案),而且我我这个表很大,我需要定时的进行交换分区(SWITCH PARTITION、滑动窗口、切 阅读全文

SQL Server 性能优化实战系列(文章索引)

2012-01-20 14:54 by 听风吹雨, 8737 阅读, 收藏, 编辑
摘要:<img src="http://images.cnitblog.com/blog/48305/201312/23114048-759f49e147a4471da0f991e0110bcaa6.jpg" class="desc_img" style="width:153px;height:116px; box-shadow: 5px 5px 5px #CCCCCC;border:1px solid #ccc;"/> 二.前言(Introduction) 性能优化是数据库方向一个很重要的技能,这也是快速提供企业级应用性能最快捷的方式,所以性能优化的高低很大程度上表现了个人技能的高低。 下面的文章是我在实际项目中性能优化的一些经验,希望对那些需要实战帮助的童鞋有一点提示和帮助。希望大家拍砖。 三.调优流程图(Process) 下图是一个关于SQL Server性能调优步骤的流程图:(Figure1:调优基本流程图) 四.系列文章索引(Catalog) 阅读全文

SQL Server 游标运用:批量创建、删除链接服务器

2012-01-20 10:47 by 听风吹雨, 3047 阅读, 收藏, 编辑
摘要:<img src="http://files.cnblogs.com/gaizai/logo_t-sql.ico" class="desc_img" style="width:153px;height:116px; box-shadow: 5px 5px 5px #CCCCCC;border:1px solid #ccc;"/> 一、背景我们的数据库比较多,它们提供了外网的访问,我现在想对这些数据库进行一些管理,获取这些数据库的一些信息,我们可以通过什么方式实现呢?在SQL Server2005版本之后有一个叫做链接服务器的新功能,基本的操作可以参考:SQL Server 2005链接服务器,我们就通过这个链接服务器来获取我们需要的数据,但是我们的服务器比较多,这个批量创建链接服务器和批量删除链接服务器就呼之欲出了。二、设计过程设计简述:创建如下图的表结构,LinkName保存远程链接的别名,LinkName2是创建链接方式2的一个补充字段,LinkIP代表远程服务器的地址,如果有端口的还需要加上端口 阅读全文

SQL Server 置疑、可疑、正在恢复

2011-12-19 20:59 by 听风吹雨, 8157 阅读, 收藏, 编辑
摘要:一、出错情况有些时候当你重启了数据库服务,会发现有些数据库变成了正在恢复、置疑、可疑等情况,这个时候DBA就会很紧张了,下面是一些在实践中得到证明的方法。在一次重启数据库服务后,数据库显示正在恢复,过了很久还是这个状态,离线时间不能太长,所以就想起了一个方法,就是把数据库服务停止了,把数据文件mdf和ldf拷贝出来,删除了ldf文件,按照之前的经验,好像是在没有ldf的情况下可以使用mdf来恢复数据库。创建了一个同名的数据库,停止数据库服务,覆盖mdf文件,再启动数据库服务,这个时候还是处于可疑的状态。其中使用mdf来附加数据库是附加不了的,一直报错。二、解决步骤方法一:使用脚本进行数据库恢复 阅读全文

SQL Server 维护计划实现数据库备份(Step by Step)

2011-11-18 17:51 by 听风吹雨, 9057 阅读, 收藏, 编辑
摘要:<img src="http://files.cnblogs.com/gaizai/logo_step-by-step.ico" class="desc_img" style="width:153px;height:116px; box-shadow: 5px 5px 5px #CCCCCC;border:1px solid #ccc;"/> 一、前言SQL Server 备份和还原全攻略,里面包括了通过SSMS操作还原各种备份文件的图形指导,SQL Server 数据库最小宕机迁移方案,里面使用SQL脚本(T-SQL)完成完全备份、差异备份、完全还原、差异还原等; 有了上面的基础,我们加入了数据库的备份元素,通过维护计划来生成数据库的备份文件,这包括两种文件,数据库的完全备份与差异备份,有了这两个文件,我们可以通过SQL Server 备份和还原全攻略(图形操作)或者SQL Server 数据库最小宕机迁移方案(代码操作)的方法来还原我们的数据; 阅读全文

SQL Server 维护计划备份主分区

2011-10-09 11:52 by 听风吹雨, 12298 阅读, 收藏, 编辑
摘要:<img src="http://files.cnblogs.com/gaizai/logo_t-sql.ico" class="desc_img" style="width:153px;height:116px; box-shadow: 5px 5px 5px #CCCCCC;border:1px solid #ccc;"/> 经过一段时间表分区的实践,我们先对表进行分区(形成表分区模板);表数据搬迁模板(迁移数据到新的分区表);分区管理自动化(自动化进行交换分区);详情请见:SQL Server 表分区实战系列(文章索引) 再进一步延伸,我们就需要对这些做了表分区的库进行备份了,之前写过一篇博文:SQL Server 备份和还原全攻略,这里描述了MSSQL的一些备份概念,今天这里虽然没有用到,但是像差异备份在备份比较大的情况下使用就会有很好的效果。 阅读全文

SQL Server 重复执行作业中某个步骤

2011-09-14 14:58 by 听风吹雨, 4373 阅读, 收藏, 编辑
摘要:<img src="http://files.cnblogs.com/gaizai/logo_sqlserver.ico" class="desc_img" style="width:153px;height:116px; box-shadow: 5px 5px 5px #CCCCCC;border:1px solid #ccc;"/> 一、说明在SQL Server 的作业中,有些时候我们希望步骤在执行失败后可以重复执行多几次,而我产生这个念头的是因为我在执行某个步骤(这个步骤对分区表进行修改分区方案、分区函数)的时候出现死锁了,如下面描述:消息1205,级别13,状态55,第1 行事务(进程ID 115)与另一个进程被死锁在锁资源上,并且已被选作死锁牺牲品。请重新运行该事务。我想到解决这个问题的方法是重复执行多几次这个步骤(经测试执行几次可行),所以这里就讲讲如果让数据库作业完成这一动作。二、测试实验(一)测试方案:我们在作业中设置了简单的两个步骤,步骤1往表中插入一条数据 阅读全文

SQL Server 设计开发系列(文章索引)

2011-08-29 15:47 by 听风吹雨, 3408 阅读, 收藏, 编辑
摘要:一.前言(Introduction)数据库的设计与开发包括了很多东西,也许就是一个设计思想:比如空间换时间方案,读写分离,水平切分表,HA群集等;开发方面就包括脚本的开发、扩展函数,涉及到一些SQL的使用。 该系列还在完善中,欢迎大家指出还缺少些什么内容的维护,我会在后面的文章中陆续补充的。二.系列文章索引(Catalog)SQL Server数据库帐号密码安全设计简单实用SQL脚本简单实用SQL脚本Part2:日期和时间函数简单实用SQL脚本Part:游标模板简单实用SQL脚本Part:查找SQL Server 自增ID值不连续记录简单实用SQL脚本Part:生成站点导航树形结构简单实用SQ 阅读全文

SQL Server 自动化管理分区设计方案(图解)

2011-07-21 14:49 by 听风吹雨, 4205 阅读, 收藏, 编辑
摘要:<img src="http://images.cnblogs.com/cnblogs_com/gaizai/%E6%95%B0%E6%8D%AE%E5%BA%93/%E6%95%B4%E4%BD%93%E6%A6%82%E5%BF%B5%E5%9B%BE.jpg" class="desc_img" style="width:153px;height:116px; box-shadow: 5px 5px 5px #CCCCCC;border:1px solid #ccc;"/> 一、设计说明设计这个自动化的目的是想要交替、重复地使用固定的几个分区(分区编号01~05)来保存数据,当最后一个分区就是快满的时候,我们会把最旧数据的分区的数据清空出分区,新数据就可以使用老分区空间了。应用这个自动化管理分区的环境是有些限制的,其一:分区的数据是呈现递增的,比如分区字段是自增Id值,或者是以日期作为分区;其二:可以接受历史数据被移除分区表带来的问题。其三:一天进库的数量不应大于分区管理表 阅读全文

SQL Server 维护管理系列(文章索引)

2011-07-15 14:52 by 听风吹雨, 2744 阅读, 收藏, 编辑
摘要:一.前言(Introduction)数据库的维护其实包括很多方面,用户权限、数据备份等,这方面的积累也是必不可少的,所以这里把一些常用的的维护进行一些总结,这些文章的特点就是我会使用比较多的图片进行说明,大家看起来会比较直观。 该系列还在完善中,欢迎大家指出还缺少些什么内容的维护,我会在后面的文章中陆续补充的。二.系列文章索引(Catalog)SQL Server 数据库帐号密码生成SQL Server 维护计划实现数据库备份SQL Server 备份和还原全攻略SQL Server 数据库迁移偏方SQL Server 数据库最小宕机迁移方案SQL Server 数据库服务器高性能设置SQL 阅读全文

SQL Server 2005 控制用户权限访问表

2011-07-14 18:11 by 听风吹雨, 35525 阅读, 收藏, 编辑
摘要:<img src="http://files.cnblogs.com/gaizai/logo_step-by-step.ico" class="desc_img" style="width:153px;height:116px; box-shadow: 5px 5px 5px #CCCCCC;border:1px solid #ccc;"/> 一、需求在管理数据库过程中,我们经常需要控制某个用户访问数据库的权限,比如只需要给这个用户访问某个表的权限,甚至是CRUD的权限,更小粒度的还可以去到某几个字段的访问权限。写这篇文章就是说明下这个操作过程。其实这只是SQL Server权限管理很简单的一小块,有些地方并没有深入理解和讲述,只是希望对一些刚入门的童鞋有帮助,其它大侠就当是:我当堂吓一跳,然后得啖笑。(赌圣)二、操作步骤1. 首先进入数据库级别的【安全性】-【登录名】-【新建登录名】(图1:新建登录名)2. 在【常规】选项卡中,如下图所示,创建登陆名 阅读全文

SQL Server 表分区实战系列(文章索引)

2011-07-01 15:45 by 听风吹雨, 18466 阅读, 收藏, 编辑
摘要:<img src="http://images.cnitblog.com/blog/48305/201311/29102140-f0771fc269bc4b4697b0d23797cbada9.jpg" class="desc_img" style="width:153px;height:116px; box-shadow: 5px 5px 5px #CCCCCC;border:1px solid #ccc;"/> 前段时间在忙数据库的表分区,经常会去上网找资料,但是在找到都是测试表分区的文章,没有实战经验的,所以在我把表分区运用到实际项目中的时候遇到了很多问题。 比如:如何确认分区字段?分区字段与聚集索引的区别与联系?如何存储分区索引?MSDN说交换分区是以秒计算,但执行40G交换分区超时?如何解决分区不断增长的问题?自动化交换分区的陷阱? 这些问题都只能自己在实战中摸索答案,后来我写了几篇关于这些问题的博文,希望对那些需要实战帮助的童鞋有一点提示和帮助。希望大家拍砖。 阅读全文

SQL Server 备份和还原全攻略

2011-06-29 17:03 by 听风吹雨, 60690 阅读, 收藏, 编辑
摘要:一、知识点完全备份: 备份全部选中的文件夹,并不依赖文件的存档属性来确定备份那些文件。(在备份过程中,任何现有的标记都被清除,每个文件都被标记为已备份,换言之,清除存档属性)。完全备份也叫完整备份。差异备份: 差异备份是针对完全备份:备份上一次的完全备份后发生变化的所有文件。(差异备份过程中,只备份有标记的那些选中的文件和文件夹。它不清除标记,即:备份后不标记为已备份文件,换言之,不清除存档属性)。增量备份: 增量备份是针对于上一次备份(无论是哪种备份):备份上一次备份后,所有发生变化的文件。(增量备份过程中,只备份有标记的选中的文件和文件夹,它清除标记,即:备份后标记文件,换言之,清除存档属 阅读全文

SQL Server 表分区注意事项

2011-05-31 17:51 by 听风吹雨, 8453 阅读, 收藏, 编辑
摘要:<img src="http://files.cnblogs.com/gaizai/logo_sqlserver.ico" class="desc_img" style="width:153px;height:116px; box-shadow: 5px 5px 5px #CCCCCC;border:1px solid #ccc;"/> 一、表分区文章索引SQL Server 合并(删除)分区解惑SQL Server 2005 分区模板与实例SQL Server 动态生成分区脚本SQL Server 2005 自动化删除表分区设计方案二、目的这段时间,在SQL Server的生产环境中尝试了不同方式的表分区,积累了一些这方面的经验,这里就表分区的一些注意事项做些记录。三、注意事项1. 表分区的边界值问题,在使用Left和Right的时候需要注意,特别是在时间分割上需要特别注意,通常情况下,以00:00:00.000是最可靠的 阅读全文

SQL Server 数据库迁移偏方

2011-04-28 17:51 by 听风吹雨, 9246 阅读, 收藏, 编辑
摘要:一、目的之前在博文SQL Server 数据库最小宕机迁移方案中提到了使用了完全备份+差异备份的功能完成了数据库的转移,但是这个方法在遇到了700多G的数据时显然不适用,所以这篇中我是如何迁移700G的数据库到新的服务器的。二、分析与设计思路(一)环境描述我们的数据库使用了SQL Server 2005的,部署在Windows Server 2003 x86位操作系统上,有一个表占了这个数据库大部分的空间。面对上面的情况,我们的数据库压力比较大了,所以我们打算在同一个集群中找另外一台机器,转移这个数据库的数据过去,通过设置新服务器的一些参数来达到优化这个数据库的目的。(二)数据分析在拿到一个数 阅读全文

SQL Server 数据库最小宕机迁移方案

2011-03-30 17:44 by 听风吹雨, 7522 阅读, 收藏, 编辑
摘要:一、目的在做SQL Server数据库维护的时候,当上司要求我们把几十G的数据文件搬动到其它服务器,并且要求最小宕机时间的时候,我们有没什么方案可以做到这些要求呢?在这里我们假设这两台机器并不是在一个机房上,这样看起来我们的解决方案才更有意义,如果你那么好运这两台机器在同一个局域网,那么恭喜你,你可以多很多的方案可以做到。二、分析与设计思路其实我们假设的环境有两个特点:第一个是数据库文件比较大;第二个就是我们的传送文件的速度可能会比较慢。也许这传送速度我们是没有办法了,但是我们可以就从文件的大小这个问题出发,结合SQL Server的特性,这样就有了下面的解决方案了。为了使宕机时间最短,我们这 阅读全文

SQL Server 2005 自动化删除表分区设计方案

2011-02-25 17:31 by 听风吹雨, 6064 阅读, 收藏, 编辑
摘要:<img src="http://files.cnblogs.com/gaizai/logo_t-sql.ico" class="desc_img" style="width:153px;height:116px; box-shadow: 5px 5px 5px #CCCCCC;border:1px solid #ccc;"/> 一、目的在前面的文章中我已经介绍了SQL Server合并(删除)分区解惑 和SQL Server 2005 分区模板与实例 和SQL Server 动态生成分区脚本,这篇文章就是在上面3篇文章衍生出来的。我们的服务器的数据已经有了800G,并且每天进数据大概有120W条记录(数据空间大概为7G),而服务器现在已经没有太多的磁盘空间了,面对这样的问题,一般都是使用交换表分区来快速删除数据,并使用之前的分区来存放新进的数据,如果每次都人工的话就太麻烦了 阅读全文

SQL Server 动态生成分区脚本

2011-01-14 14:48 by 听风吹雨, 10923 阅读, 收藏, 编辑
摘要:<img src="http://files.cnblogs.com/gaizai/logo_t-sql.ico" class="desc_img" style="width:153px;height:116px; box-shadow: 5px 5px 5px #CCCCCC;border:1px solid #ccc;"/> 一、前言前段时间使用表分区比较多,虽然已经写了SQL Server 合并(删除)分区解惑、SQL Server 2005 分区模板与实例,但是在实践中一直感觉修改SQL脚本的时间比较多,一直想抽个时间来把分区脚本进行动态化,今天终于付之于行动了。需要说明的一点,下面的脚本并不能满足所有情况,用户可以根据自己的需要进行相应的调整,应该可以满足你的需求的。在SQL Server 2005中只能通过SQL脚本来创建表分区,而在SQL Server 2008的SSMS中已经提供了操作界面进行表分区 阅读全文

SQL Server 2005 分区模板与实例

2010-12-31 16:23 by 听风吹雨, 7171 阅读, 收藏, 编辑
摘要:<img src="http://images.cnblogs.com/cnblogs_com/gaizai/%E6%95%B0%E6%8D%AE%E5%BA%93/%E5%88%86%E5%8C%BA_%E5%AD%98%E5%82%A8%E4%BD%8D%E7%BD%AE%E5%AF%B9%E9%BD%90.jpg" class="desc_img" style="width:153px;height:116px; box-shadow: 5px 5px 5px #CCCCCC;border:1px solid #ccc;"/> 一、场景这一段时间使用SQL Server 2005 对几个系统进行表分区,这几个系统都有一些特点,比如数据库某张表持续增长,给数据库带来了很大的压力。现在假如提供一台新的服务器,那么我们应该如何规划这个数据库呢?应该如何进行最小宕机时间的数据库转移呢?如果规划数据库呢?二、环境准备要搭建一个好的系统,首先要从硬件和操作系统出发,好的设置和好的规划是高性能的前提,下面我就来说说自己的一些看法,欢迎大家提出异议;1) 对磁盘做RAID0(比如3*300G) 阅读全文

SQL Server datetime数据类型设计、优化误区

2010-11-26 10:58 by 听风吹雨, 17119 阅读, 收藏, 编辑
摘要:一、场景在SQL Server 2005中,有一个表TestDatetime,其中Dates这个字段的数据类型是datetime,如果你看到表的记录如下图所示,你最先想到的是什么呢?(图1:数据列表)你看到这些数据,是不是觉得这样的设计既浪费了存储空间,又使得这个列的索引增大,查询起来更慢,你也想使用一些其它的数据类型来代替这个datetime吧? 其实大家都是这么想的,这个方向是100%正确的,但是在写这篇文章以前,我进入了两个误区:(如果你中了下面的两个误区,那么请你看看这篇文章吧。)误区一: 把Dates字段的datetime数据类型换成smalldatetime,这样数据就由:‘200 阅读全文

SQL Server数据库服务器高性能设置

2010-11-16 11:38 by 听风吹雨, 10004 阅读, 收藏, 编辑
摘要:数据库服务器主要用于存储、查询、检索企业内部的信息,因此需要搭配专用的数据库系统,对服务器的兼容性、可靠性和稳定性等方面都有很高的要求。 下面是进行笼统的技术点说明,为的是让大家有一个整体的概念,如果想深入可以逐个击破; 希望大家能一起补充完善。一、服务器规划:1. 使用64位的操作系统,最好是2008的;(Windows Server 2008 64位)2. 使用64位的数据库程序,最好是2008的;(SQL Server 2008 64位)3. 使用千兆网卡;4. 使用硬RAID5;5. 使用64K的簇大小;6. LUN0用作系统盘,LUN1用作程序(主要是数据库程序)安装盘,LUN2.. 阅读全文

SQL Server 合并(删除)分区解惑

2010-11-05 16:33 by 听风吹雨, 11626 阅读, 收藏, 编辑
摘要:<img src="http://images.cnblogs.com/cnblogs_com/gaizai/%E6%95%B0%E6%8D%AE%E5%BA%93/%E5%90%88%E5%B9%B6%E5%88%86%E5%8C%BAright.jpg" class="desc_img" style="width:153px;height:116px; box-shadow: 5px 5px 5px #CCCCCC;border:1px solid #ccc;"/> 一、准备在SQL Server 2005版本之后就有了表分区的概念与应用,在分区操作里面有一个叫做合并分区的功能,也被称为删除分区。分区所处的文件组和文件是不会被删除的,只会对数据进行转移合并。合并分区时需要注意所带来的IO问题。合并分区常见情景:发现某个分区的数据很少,为了方便管理可以考虑合并分区。需要进行统计、四则运算的时候也可以考虑合并分区,这种情形下并没有对比合并与分区之间的性能,如果某位童鞋有兴趣和环境的话可以提供这方面的数据 阅读全文

简单实用SQL脚本Part:sql多行转为一列的合并问题

2010-10-20 09:41 by 听风吹雨, 6292 阅读, 收藏, 编辑
摘要:一、数据库SQL Server列值链式合并需求:原始表的数据的结构如图1所示,把相同guid的code值生成一个链式字符串。(图1)目标:我们希望达到的效果如图2所示,这里的guid变成唯一的了,这行的记录中包含了这个guid所对应的code字段值的链式字符串。(图2)分析与实现:要实现图1到图2的转变,这使用SQL Server 2005的新功能:XML,下面我们来讲讲具体的实现:1. 首先我们先创建一个测试表,方便后面的效果展现;Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHi 阅读全文

简单实用SQL脚本Part:生成站点导航树形结构

2010-09-16 22:30 by 听风吹雨, 3661 阅读, 收藏, 编辑
摘要:<img src="http://files.cnblogs.com/gaizai/logo_t-sql.ico" class="desc_img" style="width:153px;height:116px; box-shadow: 5px 5px 5px #CCCCCC;border:1px solid #ccc;"/> 一、需求我们通常的时候,都是先有站点地图,之后对URL的地址进行判断和导航的,那么我们是否可以根据所有收集到的URL来进行分解,从而生成出所有可能的地址,最主要的是要有一个层级的关系。我们的数据一般都是如下图1所示的格式,那么我们如何在页面上展现出图2的效果呢?(图1:原始表)(图2:页面效果图) 其实就普通树形来说,ID与ParentID这两个字段是少不了的。(图3:数据效果图)二、逻辑分析1. 使用字符串分割法 阅读全文

SQL Server 创建链接服务器

2010-09-09 14:43 by 听风吹雨, 56187 阅读, 收藏, 编辑
摘要:适用场景:对远程的DB进行操作。2000与2005对比:在SQL Server 2000版本中也有链接远程DB的SQL,但是功能比较弱,扩展性差,支持的查询比较简单。而SQL Server 2005版本的SSMS中已经有了 服务器对象-&gt;链接服务器 的功能点,用户首先创建一个远程DB的链接对象,之后就可以像本地表一样执行表的DML了。创建步骤:在SQL Server 2005版本打开SSMS,服务器对象-&gt;链接服务器-&gt;右击 新建链接服务器,在图2中是一种设置方式,也有其它的设置方式,比如:[图解]sqlserver中创建链接服务器,图3是安全性选项中设置远程数据库的账号和密 阅读全文

SQL Server 游标运用:游标模板

2010-09-08 17:22 by 听风吹雨, 1552 阅读, 收藏, 编辑
摘要:一、 背景 游标在我维护SQL Server的过程中经常被使用到,如果游标使用得好,在很多时候可以给予我们开发过程带来很多的便利,所以这里提供一个游标模板;二、 游标模板 在正式解决问题之前我先提供一个游标的模板,它简单的实现了找出数据库中所有的数据库名,其实这个模板的目的是为了提供一个规范化的游标SQL代码模板,下面SQL脚本实现了通过游标打印出用户数据库:-- =============================================-- Author: -- Blog: -- Create date: -- Description: -- ==... 阅读全文

简单实用SQL脚本Part9:纵向回填信息

2010-09-06 14:35 by 听风吹雨, 2381 阅读, 收藏, 编辑
摘要:需求:我们的一个系统有这样一个功能:记录用户访问网站页面的轨迹,比如A-&gt;B-&gt;C-&gt;D(A、B、C、D表示不同的页面URL),在系统的业务上用户可以使用帐号访问网站,也可以使用匿名访问网站,而用户使用的机器已经被标识为一个GUID,所以当用户使用了匿名访问A、B页面后在C页面使用帐号登陆了系统,那么为了对用户进行分析,我们需要把A、B页面的登录名设置登陆的账号,这样用户的访问过程就有了一个完整的一条线。(如图1所示) 注意1:的是一台机器(GUID)有可能使用了多个帐号进行登陆,那么同一个GUID就有可能包含了匿名、帐号a、帐号b的交替记录。(如图1所示) 注意2:这个表中 阅读全文

简单实用SQL脚本Part:查找SQL Server 自增ID值不连续记录

2010-08-30 20:11 by 听风吹雨, 10462 阅读, 收藏, 编辑
摘要:在很多的时候,我们会在数据库的表中设置一个字段:ID,这个ID是一个IDENTITY,也就是说这是一个自增ID。当并发量很大并且这个字段不是主键的时候,就有可能会让这个值重复;或者在某些情况(例如插入数据的时候出错,或者是用户使用了Delete删除了记录)下会让ID值不是连续的,比如1,2,3,5,6,7,10,那么在中间就断了几个数据,那么我们希望能在数据中找出这些相关的记录,我希望找出的记录是3,5,7,10,通过这些记录可以查看这些记录的规律来分析或者统计;又或者我需要知道那些ID值是没有的:4,8,9。 解决办法的核心思想是: 获取到当前记录的下一条记录的ID值,再判断这两个ID值.. 阅读全文

简单实用SQL脚本Part6:特殊需要的行转列

2010-08-12 22:51 by 听风吹雨, 3382 阅读, 收藏, 编辑
摘要:一.数据库SQL Server 行转列(Row To Column)(一)需求 原始表的数据的结构如图1所示,把相同的guid的code值转换为列值。(图1)(二)目标 我们希望达到的效果如图2所示,这里的guid变成唯一的了,这行的记录中包含了这个guid所对应的code字段值。(图2)(三)分析与实现 要实现图1到图2的转变,这就是所谓的行转列,下面我们来讲讲具体的实现:1.首先我们先创建一个测试表,方便后面的效果展现;Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHigh... 阅读全文

SQL Server Url正则表达式 内存常驻 完美解决方案

2010-07-31 04:12 by 听风吹雨, 2748 阅读, 收藏, 编辑
摘要:在使用SQL Server2005扩展函数进行性能优化已经提到过把SQL Server中的表装载到内存中,通常这样做的目的是让频繁的表查询能通过在内存中查找来优化数据库性能,从而减少表的查询,减少IO方面的消耗。 这篇文章的目的就是为了解决使用SQL Server2005扩展函数进行性能优化中表记录更新导致函数返回结果有误的问题。产生这个问题的原因是:如果表更新了,而程序已经把整个表加载到内存了,所以会导致调用函数时返回的结果有误。我们需要重新注册函数,如果不重新注册函数,那么就需要数据库重启服务了,因为那个程序集是在服务启动的时候就初始化了。 上面这个问题的解决方案就是: 在表中创建一个.. 阅读全文

SQL Server 批量生成bcp命令

2010-06-02 15:41 by 听风吹雨, 3118 阅读, 收藏, 编辑
摘要:特别说明一下,这个批量生成bcp命令是有一些条件限制的:需要导出数据的表的名称是要有规律的,表的名称是需要连续、不间断的,表名最好是以数字来递增的,不过也可以是字母的。 我之所以会写这个批量生成SQL是因为我数据库中表名类似于:RawActivatePDPContextReq_0401,RawActivatePDPContextReq_0402,RawActivatePDPContextReq_0403等等,所以下面的SQL对大部分人来说没有什么意义,但我想表达的是:我们可以SQL来解决一些问题。 图1是一个适用使用本文这个脚本的数据库表列表,我们的需求是为gbRawActivate2... 阅读全文

留念2010年6月1日——SQL

2010-06-02 14:22 by 听风吹雨, 590 阅读, 收藏, 编辑
摘要:今天做了一些SQL的题目,感觉自己还是有很多地方不足的。比如一些函数的使用,要么是函数名记不得,要么就是函数中的参数记不得,所以,决定以后多敲敲SQL代码。 今天就先贴些被遗忘的SQL,以便以后提醒自己下次不能再犯同样的错误。[代码] 记得还有一道这样的题目:查询出最低分数的记录。这样的需求最容易被认为使用top 1就可以解决了,但是在很多情况下有可能最低分数的记录有多条,这样会漏掉很多的记录。我... 阅读全文

纯真QQIP库导入到SQL Server详解

2010-05-27 22:49 by 听风吹雨, 5013 阅读, 收藏, 编辑
摘要:相信很多人都是需要通过用户的IP来确认用户是属于哪个区域的,最新的QQIP数据库纯真版20100515,里面的IP数据记录已经达到了:378448条。它收集了包括中国电信、中国移动、中国联通、长城宽带、聚友宽带等 ISP 的最新准确 IP 地址数据。包括最全的网吧数据。本来这个IP库的用意是在QQ上能显示对方的地理位置,在我们的程序中也偶尔有需要的时候,所以把它导入到我们的数据库中成为一张表是非常... 阅读全文

使用SQL Server 扩展函数进行性能优化

2010-05-26 21:55 by 听风吹雨, 4513 阅读, 收藏, 编辑
摘要:<img src="http://images.cnblogs.com/cnblogs_com/gaizai/%E6%95%B0%E6%8D%AE%E5%BA%93/udf_logo.jpg" class="desc_img" style="width:153px;height:116px; box-shadow: 5px 5px 5px #CCCCCC;border:1px solid #ccc;"/> SQL Server2005扩展函数已经不是一件什么新鲜的事了,但是我看网上的大部分都是说聚合函数,例子也比较浅,那么这里就讲讲我运用扩展函数来优化数据库性能的例子,希望和大家一起分享这个经验。如果你还不知道什么是SQLCLR,那么你可以参考:SQL Server扩展函数的基本概念。需求说明大家在使用SQL Server开发的时候一定会遇到这样的需求,那就是通过Table_Name1表的两个字段Column1、Column2来查询在Table_Name2表中符合这两个条件的记录 阅读全文

SQL Server扩展函数的基本概念

2010-05-26 19:57 by 听风吹雨, 3710 阅读, 收藏, 编辑
摘要:<img src="http://images.cnblogs.com/cnblogs_com/gaizai/%E6%95%B0%E6%8D%AE%E5%BA%93/SQLCLR_%E6%B5%81%E7%A8%8B%E5%9B%BE_logo.jpg" class="desc_img" style="width:153px;height:116px; box-shadow: 5px 5px 5px #CCCCCC;border:1px solid #ccc;"/> 什么是SQL Server扩展函数呢?它实际上就是把C#或VB.NET的代码拿到SQL Server上去执行。反过来思考,那就是当你想对表数据进行比较复杂的逻辑处理时,写SQL又太麻烦,那么你就可以是否可以通过SQLCLR来解决这个问题了。下面是我摘自wikipedia对SQLCLR的解释。SQL CLR(SQL Common Language Runtime) 是自 SQL Server 2005 才出现的新功能,它将.NET Framework中的CLR服务注入到 SQL Server 中,让 SQL Server 阅读全文

SQL Server 全文索引的硬伤

2010-05-13 21:10 by 听风吹雨, 23308 阅读, 收藏, 编辑
摘要:本文关键字:SQL Server全文索引、CONTAINS、FREETEXT、CONTAINSTABLE、FREETEXTTABLE等谓词。想象这样一个场景:在DataBase_name.dbo.Table_name中有一个名为Title(标题)和Contents(内容)的字段,现在需要查询在Title或者Contents中包括“qq”字符的所有记录。面对这样的一个场景,我们通常都会写这样一个脚本:SELECT * FROM DataBase_name.dbo.Table_name WHERE Title LIKE &#39;%qq%&#39; OR Contents LIKE &#39;%q 阅读全文

简单实用SQL脚本Part2:日期和时间函数

2010-04-21 18:25 by 听风吹雨, 2304 阅读, 收藏, 编辑
摘要:一、SQL Server 日期函数集合Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--&gt;--参考http://msdn.microsoft.com/zh-cn/library/ms186724.aspx--1:获取系统日期和时间值函数--getdate()SELECTGETDATE()AS&#39;today&#39;--getutcdate()SELECTGETUTCDATE()AS&#39;today&#39;--2:修改日期和时间值函数- 阅读全文

SQL Server 使用bcp进行大数据量导出导入

2010-04-17 20:03 by 听风吹雨, 10045 阅读, 收藏, 编辑
摘要:SQL Server的导出导入方式有:在SQL Server中提供了导入导出的界面操作。在界面操作中又分【复制一个或多个表或视图的数据】和【编写查询以指定要传输的数据】两种模式,第一种是直接对表、视图进行全部字段、记录进行导出,而第二种就是可以通过SQL语句来控制导出导入的字段和行。使用 简单但有用的SQL脚本 中的【表复制】这里面的方法。 再一种就是在命令行中使用bcp命令来导入导出数据,需要特别说明的是,这是对大数据量导入导出就好的办法。下面是我实践出来可以使用的脚本,但是我在使用bcp的时候遇到了一些问题,希望大家给于帮助。谢谢。(PS:问题在下面代码中)使用xp_cmdshel... 阅读全文

使用Excel批量生成SQL脚本(小技巧)

2010-04-15 14:18 by 听风吹雨, 19449 阅读, 收藏, 编辑
摘要:需求: 我们需要把Excel中的一些资料更新到数据库表中,比如学生的考试系统,在数据中已经有了考生的ID,这里有一份考生ID和考生成绩的Excel表,我们如何把考生成绩更新到数据库表中呢?方案:我们最常使用的做法就是把这个Excel表导入到数据库中,在使用update语句来更新表。没错,这就是我通常使用的方法,但是有些人他们不安常理出牌,有时候客户说:我只会执行SQL,我不知道怎么把Excel导入到数据库中。这个时候我们如何把要更新的内容生产SQL语句给到客户呢?如何是一两条记录,我们手动写SQL就可以了,但是如果有几百个学生,我们要手动写几百条语句吗?是否有批量生成SQL脚本的方法?这就是. 阅读全文

简单实用SQL脚本

2010-04-09 18:32 by 听风吹雨, 41309 阅读, 收藏, 编辑
摘要:<img src="http://files.cnblogs.com/gaizai/logo_t-sql.ico" class="desc_img" style="width:153px;height:116px; box-shadow: 5px 5px 5px #CCCCCC;border:1px solid #ccc;"/>行列互转Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ createtabletest(idint,namevarchar(20),quarterint,profileint)insertintotestvalues(1,'a',1,1000) insertintotestvalues(1,'a',2,2000)insertintotestvalues(1,'a',3,4000)insertint 阅读全文

SQL Server 空间换时间的数据库设计

2010-03-30 11:45 by 听风吹雨, 4948 阅读, 收藏, 编辑
摘要:<img src="http://images.cnblogs.com/cnblogs_com/gaizai/%E6%95%B0%E6%8D%AE%E5%BA%93/%E5%8F%91%E9%80%81%E7%9F%AD%E4%BF%A1%E9%80%BB%E8%BE%912.jpg" class="desc_img" style="width:153px;height:116px; box-shadow: 5px 5px 5px #CCCCCC;border:1px solid #ccc;"/> 我们的系统中很常会用到SMS、Email等的发送,在我们的设计中通常会创建一个Tb_outbox表,当产生数据时,插入到Tb_outbox表,由定时器去读取Tb_outbox的数据进行发送,发送完了再修改Tb_outbox的发送状态。是的,这就是通常的做法,但是当我们的SMS、Email的发送频率和数量足够大的时候,我们的系统就会出现性能、表被锁等问题。那我们如何是好呢? 下面的设计的一个思想就是如标题所述:空间换时间。就个人而言,我感觉这个描述更加贴切:对象的职责分离,把Insert、U 阅读全文

肤浅的 SQL Server 2000、2005对比

2010-03-16 15:28 by 听风吹雨, 1780 阅读, 收藏, 编辑
摘要:使用过2000和2005的童鞋对它们的不同一定有一定的看法,而且网上也有很多的资料,特别是官方网站上,SQL Server 2005 Beta 2 Transact-SQL 增强功能,但是今天就让我这个浅薄的人来讲讲它们之间肤浅的不同吧。界 面风格2000的界面比较低调、暗淡;2005的界面比较圆滑一点,一个很重要的成功 点,就是字体使用了【微软雅黑】,呵呵; 操作2000 有一个企业管理器、一... 阅读全文

SQL Server 索引中include的魅力(具有包含性列的索引)

2010-01-11 20:44 by 听风吹雨, 37766 阅读, 收藏, 编辑
摘要:<img src="http://images.cnblogs.com/cnblogs_com/gaizai/Include%E7%B4%A2%E5%BC%953.png" class="desc_img" style="width:153px;height:116px; box-shadow: 5px 5px 5px #CCCCCC;border:1px solid #ccc;"/> 开文之前首先要讲讲几个概念 【覆盖查询】 当索引包含查询引用的所有列时,它通常称为“覆盖查询”。 【索引覆盖】 如果返回的数据列就包含于索引的键值中,或者包含于索引的键值+聚集索引的键值中,那么就不会发生Bookup Lookup,因为找到索引项,就已经找到所需的数据了,没有必要再到数据行去找了。这种情况,叫做索引覆盖; 【复合索引】 和复合索引相对的就是单一索引了,就是索引只包含一个字段,所以复合索引就是包含两个或者多个字段的索引 阅读全文

数据库调优积累系列(6):读书笔记

2009-12-28 20:05 by 听风吹雨, 1863 阅读, 收藏, 编辑
摘要:【揭秘SQL Server 2000中的Bookmark Lookup】:http://www.cnblogs.com/Yahong111/archive/2007/09/13/891641.html 起因 在执行计划中看到了Bookmark Lookup操作符,于是就上网去逛逛,最后发现这篇牛文; 主要内容摘要 非聚集索引有一个与聚集索引中相似的B树索引结构,但是他对数据行的顺序不起作用,... 阅读全文

数据库调优积累系列(5):专业术语

2009-12-28 20:04 by 听风吹雨, 425 阅读, 收藏, 编辑
摘要:性能调优 测试基线 测试用例,测试场景 聚集索引、非聚集索引 索引覆盖 复合索引、组合索引、单一索引、哈希索引 高选择性 计划缓存、执行计划、编译、重编译 缓存命中率 查询计划(编译-优化-执行) 查询优化器、查询执行引擎 物理操作符、逻辑操作符 行定位器 谓词 填充因子 Index Seek(索引查找)、Index Scan(索引扫描)、Bookmark Looku... 阅读全文

数据库调优积累系列(4):数据库设计

2009-12-28 20:02 by 听风吹雨, 532 阅读, 收藏, 编辑
摘要:数据库设计 如果某表经常出现死锁,那就要做对象职责分离,就是把插入、更新、删除等分离;在设计或创建表的时候,我们往往会把Id字段设置为聚集索引,但是我们这样的习惯可能不是最优的,因为聚集索引和非聚集索引的区别就是一个是物理存储的,所以在查询的时候如果使用聚集索引的话,可能会比非聚集索引要开,因为关系到数据页的分布,因此我们有时可以根据我们的需要来设置聚集索引,比如待办待阅一般都是按照时间来倒排的,... 阅读全文

数据库调优积累系列(2):查询

2009-12-28 19:49 by 听风吹雨, 666 阅读, 收藏, 编辑
摘要:SQL Server 查询 查询的时候应该尽量按照复合索引中的顺序来做条件查询;(比如IXC中spInterActiveInstance_GetByIDToStat条件and ProcessState&lt;&gt;99的位置); 如果在程序中有For或者是Foreach,在存储过程中又有IF Exists,那就要看是否可以在表中加入复合索引了,IF Not Exists可以转换为IF Ex... 阅读全文

数据库调优积累系列(3):游标

2009-12-28 19:49 by 听风吹雨, 410 阅读, 收藏, 编辑
摘要:游标 尽量少用游标,如果不得不用,那就要看是否可以对逻辑进行整合,分出不同的情况,让在一部分情况是使用insert select的方式来一次性插入;(注意下例中的业务分析,这个是关键); 如果存储过程花费的时间比较长,而且无法避免使用游标,那我们就要分析系统的业务,看大部分的情况是走那条路的,那我们对大部分会发生的事做优化,也是可以达到我们优化的目的的;(比如IXC发起时候在insert到tb... 阅读全文

数据库调优积累系列(1):索引

2009-12-28 19:47 by 听风吹雨, 920 阅读, 收藏, 编辑
摘要:索引 复合索引(where A And B)如果没有对A和B做单一索引,查询的时间为a;如果对A做单一索引,查询时间为b;如果对B做单一索引,查询时间为c;如果对A、B做复合索引,查询的时间为d,那时间的比较就应该是a&gt;b=c&gt;d;(比如spMsgReader_Distribute中使用WHERE InfoID=@infoID AND UserID=@userID,插入7000次的... 阅读全文