代码改变世界

随笔分类 -  00.SQL Server

SQL Server 表分区注意事项

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

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

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

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

2011-02-25 17:31 by 听风吹雨, 6925 阅读, 收藏, 编辑
摘要: 一、目的在前面的文章中我已经介绍了SQL Server合并(删除)分区解惑 和SQL Server 2005 分区模板与实例 和SQL Server 动态生成分区脚本,这篇文章就是在上面3篇文章衍生出来的。我们的服务器的数据已经有了800G,并且每天进数据大概有120W条记录(数据空间大概为7G),而服务器现在已经没有太多的磁盘空间了,面对这样的问题,一般都是使用交换表分区来快速删除数据,并使用之前的分区来存放新进的数据,如果每次都人工的话就太麻烦了 阅读全文

SQL Server 动态生成分区脚本

2011-01-14 14:48 by 听风吹雨, 12762 阅读, 收藏, 编辑
摘要: 一、前言前段时间使用表分区比较多,虽然已经写了SQL Server 合并(删除)分区解惑、SQL Server 2005 分区模板与实例,但是在实践中一直感觉修改SQL脚本的时间比较多,一直想抽个时间来把分区脚本进行动态化,今天终于付之于行动了。需要说明的一点,下面的脚本并不能满足所有情况,用户可以根据自己的需要进行相应的调整,应该可以满足你的需求的。在SQL Server 2005中只能通过SQL脚本来创建表分区,而在SQL Server 2008的SSMS中已经提供了操作界面进行表分区 阅读全文

SQL Server 2005 分区模板与实例

2010-12-31 16:23 by 听风吹雨, 8097 阅读, 收藏, 编辑
摘要: 一、场景这一段时间使用SQL Server 2005 对几个系统进行表分区,这几个系统都有一些特点,比如数据库某张表持续增长,给数据库带来了很大的压力。现在假如提供一台新的服务器,那么我们应该如何规划这个数据库呢?应该如何进行最小宕机时间的数据库转移呢?如果规划数据库呢?二、环境准备要搭建一个好的系统,首先要从硬件和操作系统出发,好的设置和好的规划是高性能的前提,下面我就来说说自己的一些看法,欢迎大家提出异议;1) 对磁盘做RAID0(比如3*300G) 阅读全文

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

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

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

2010-11-16 11:38 by 听风吹雨, 11112 阅读, 收藏, 编辑
摘要: 数据库服务器主要用于存储、查询、检索企业内部的信息,因此需要搭配专用的数据库系统,对服务器的兼容性、可靠性和稳定性等方面都有很高的要求。 下面是进行笼统的技术点说明,为的是让大家有一个整体的概念,如果想深入可以逐个击破; 希望大家能一起补充完善。一、服务器规划: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 听风吹雨, 14446 阅读, 收藏, 编辑
摘要: 一、准备在SQL Server 2005版本之后就有了表分区的概念与应用,在分区操作里面有一个叫做合并分区的功能,也被称为删除分区。分区所处的文件组和文件是不会被删除的,只会对数据进行转移合并。合并分区时需要注意所带来的IO问题。合并分区常见情景:发现某个分区的数据很少,为了方便管理可以考虑合并分区。需要进行统计、四则运算的时候也可以考虑合并分区,这种情形下并没有对比合并与分区之间的性能,如果某位童鞋有兴趣和环境的话可以提供这方面的数据 阅读全文

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

2010-10-20 09:41 by 听风吹雨, 7301 阅读, 收藏, 编辑
摘要: 一、数据库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 听风吹雨, 4200 阅读, 收藏, 编辑
摘要: 一、需求我们通常的时候,都是先有站点地图,之后对URL的地址进行判断和导航的,那么我们是否可以根据所有收集到的URL来进行分解,从而生成出所有可能的地址,最主要的是要有一个层级的关系。我们的数据一般都是如下图1所示的格式,那么我们如何在页面上展现出图2的效果呢?(图1:原始表)(图2:页面效果图) 其实就普通树形来说,ID与ParentID这两个字段是少不了的。(图3:数据效果图)二、逻辑分析1. 使用字符串分割法 阅读全文

SQL Server 创建链接服务器

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

SQL Server 游标运用:游标模板

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

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

2010-09-06 14:35 by 听风吹雨, 2914 阅读, 收藏, 编辑
摘要: 需求:我们的一个系统有这样一个功能:记录用户访问网站页面的轨迹,比如A->B->C->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 听风吹雨, 11405 阅读, 收藏, 编辑
摘要: 在很多的时候,我们会在数据库的表中设置一个字段: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 听风吹雨, 3766 阅读, 收藏, 编辑
摘要: 一.数据库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 听风吹雨, 3255 阅读, 收藏, 编辑
摘要: 在使用SQL Server2005扩展函数进行性能优化已经提到过把SQL Server中的表装载到内存中,通常这样做的目的是让频繁的表查询能通过在内存中查找来优化数据库性能,从而减少表的查询,减少IO方面的消耗。 这篇文章的目的就是为了解决使用SQL Server2005扩展函数进行性能优化中表记录更新导致函数返回结果有误的问题。产生这个问题的原因是:如果表更新了,而程序已经把整个表加载到内存了,所以会导致调用函数时返回的结果有误。我们需要重新注册函数,如果不重新注册函数,那么就需要数据库重启服务了,因为那个程序集是在服务启动的时候就初始化了。 上面这个问题的解决方案就是: 在表中创建一个.. 阅读全文

SQL Server 批量生成bcp命令

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

留念2010年6月1日——SQL

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

纯真QQIP库导入到SQL Server详解

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