教你快速掌握两个SQL Server的维护技巧
作者:61901 发布时间:2009-01-15 13:31:00
在工作中,作为一名开发者的你,也许偶尔需要从事维护数据库的工作。下面我们来介绍一下两个SQL服务器的维护技巧:轻松改变数据库拥有者、整理索引碎片。
在重指定数据库拥有者当回复或者新建数据库时,我们应当注意到SQL Server已经把把数据库的拥有者置为你的NT登录名,这样做是为了确保不同数据库间的一致性(更别提安全性因素了),你也许考虑用系统过程sp_changedbowner来把数据库拥有者改为其它用户如系统管理员(SA)。你也许已经写了这样一段脚本用来扫描所有用户数据库并把数据库拥有者重指定为系统管理员。
系统过程sp_changedbowner有一个参数,即@map,其缺省值为空(null),该过程可以把数据库旧有的拥有者的别名重映射为新的数据库拥有者,如系统管理员。
为了演示该过程,让我们首先建立一个尽可能小的数据库模型,然后运行sp_helpuser指令来看看新创建的用户名清单:
CREATE DATABASE luck GO USE luck GO EXEC sp_helpuser GO
这些代码执行后,输出应该列出数据库拥有者的清单(db_owner)。如果你使用Windows NT认证身份,那么清单中应该有一个NULL的登录名字和一个SID值。
然后,让我们加上两个登录用户:ISUser1和ISUser2作为db_owner的别名,并把数据库的拥有者改为系统管理员:
EXEC sp_addlogin @loginame = 'ISUser1',
@passwd = 'ISUser1',@defdb = 'master'
EXEC sp_addlogin @loginame = 'ISUser2',
@passwd = 'ISUser2',@defdb = 'master'
EXEC sp_addalias @loginame = 'ISUser1',
@name_in_db = 'dbo' EXEC sp_changedbowner @loginame = 'sa',
@map = 'TRUE' EXEC sp_helpuser
输出内容应该显示出系统管理员作为db_owner、ISUser1作为db_owner的别名。
现在我们用过程sp_changedbowner来指定ISUser2为数据库新的拥有者。我们将使用该过程的@map参数并把该参数赋值为“否”,这样把用户将为别名。
EXEC sp_changedbowner @loginame = 'ISUser2', @map = 'FALSE'
EXEC sp_helpuser GO
输出应当显示出ISUser2现在成为数据库新的拥有者,ISUser1降为别名。下面,我们应该停止这个数据库并结束本演示过程。
USE master GO DROP DATABASE luck GO
用DBCC INDEXDEFRAG命令来实现维护
对索引进行维护工作是一件冗长费力的工作,不过在SQL Server 2000中,微软已经引入了一条维护命令DBCC INDEXDEFRAG,它相对SQL Server7.0的DBREINDEX命令来说,有好几个优点。最主要的优点就是它是一种在线操作,这样,在该命令运行期间用户仍可以连续工作。这是因为它不像DBREINDEX那样在运行时需要锁定操作所涉及的资源,它还可以降低内容阻塞。
DBCC INDEXDEFRAG操作一小段、一小段的数据,这样该操作随时都可以停止下来并跟踪它已经完成的工作。该操作每隔五分钟就报告一次估计已完成工作的百分比。
从技术的角度来看,DBCC INDEXDEFRAG从新安排了目标索引所在的当前分配页上的物理叶。当操作完成后,目标索引的物理顺序与它的逻辑顺序相对应,因此可以加速索引的扫描速度。
该操作还重新安排分配分配给目标索引的空间中的其它索引页。SQL Server将会为以一个填充因子为目标、根据索引数据的密度和为该索引分配的空间大小,来为索引缓冲页上的空间。操作后空下来的页将会被释放。
注释:DBCC INDEXDEFRAG有几个缺点我们需要注意,如果一个表格中的两个索引共享一个盘区的同一个空间,而这两个索引并不相邻,那么最好重新建立索引让它们相邻。
假如索引中的碎片太多,那么DBCC INDEXDEFRAG命令执行的速度可能要低于 DBREINDEX命令;但是如果索引中的碎片不太多,那么DBCC INDEXDEFRAG 应该比DBREINDEX快的多,用DBCC INDEXDEFRAG取代DBREINDEX则会显现很多的优越性,此文中不再赘述。
猜你喜欢
- 这些导航菜单来自于Dribbble网站,出自于世界各地的优秀设计师之手,涵盖了各种不同的风格,个个都非常精美。这里我将这些导航菜单展示出来,
- 注:对多选按钮操作。 1:批量全选添加、批量移除。 2:行单选添加、移除。 3:分页之后(全选或不选)状态标识依然存在 /* *****&g
- <div id="msg"></div> <input type="text&q
- 1.获得盘名os.path.splitdrive(path)import ospath="C:\\Users\\wuyanzu\\
- 在很多企业会使用闲置的 Windows 机器作为临时服务器,有时候我们想远程调用里面的程序或查看日志文件Windows 内置的服务
- 起步利用 html5 的 <video> 标签可以播放:<video width="320" heig
- 文档介绍利用python写“猜数字”,“猜词语”,“谁是卧底”这三个游戏,从而快速掌握python编程的入门知识,包括python语法/列表
- 使用python实现简单倒计时exe,供大家参考,具体内容如下使用tkinter制作界面实现倒计时功能。使用time.sleep(1)实现
- 目录1、索引失效原因2、再来看看哪些情况会破坏索引的有序性。- 对索引字段做函数操作- 隐式类型转换- 隐式字符编码转换3、总结1、索引失效
- 一般情况下,tensorflow里面变量初始化过程为: #variables ........... #......
- 跨平台的事件EventUtil对象 EventUtil: var EventUtil={ addEventHandler:function(
- 组件值校验,即在组件值变化时判断是否满足校验逻辑,若不满足校验逻辑,可以拿到校验错误信息进行错误提示或其他逻辑处理。声明 valueVali
- Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AM Select
- 例如“I am a boy”,逆序排放后为“boy a am I”所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符。lis
- 本文实例讲述了Python实现批量读取图片并存入mongodb数据库的方法。分享给大家供大家参考,具体如下:我的图片放在E:\image\中
- 学生信息管理系统负责编辑学生信息,供大家参考,具体内容如下第一次发帖,下面通过python实现一个简单的学生信息管理系统要求如下:1.添加学
- 新建py文件,在里面写入Python代码,代码的功能是打印10次“Hello!”,将代码文件保存到桌面上:在命令行中运行Python脚本,并
- 故事的开始:.count()假设你有一个Notification Model类,保存的主要是所有的站内通知:class Notificati
- 简单的XML操作:XML文件创建把下面的代码复制到按钮事件中编译执行后可在相应物理路径中产生Pos.xml文件XmlTextWriter x
- 如下所示:try: f =open("D:/1.txt",'r') f.clos