软件测试


网站首页 | 软件测试论坛 | 软件测试培训 | 软件测试博客 | 软件测试杂志 | 软件测试沙龙 | 软件测试下载 | 软件测试顾问
业界新闻 | 软件测试人才 | 软件测试技术 | 软件测试工具 | 行业软件测试 | 软件测试管理 | 软件质量专栏 | 软件开发专栏
当前位置:首页>>软件开发专栏>>数据库>>正文
两个SQL Server维护技巧
文章出处: 作者:IT168  发布时间:2006-10-26

确实,数据库的维护常常交给那些专业的数据库管理员,但是作为一个开发者,你也许偶尔需要暂时从事这个工作。所以,试一试这两个SQL服务器维护技巧:轻松改变数据库拥有者、整理索引碎片。谁会想到你甚至可以给那些数据库管理员教上一两个新技巧呢?重指定数据库拥有者当回复或者新建数据库时,你有没有注意到SQL Server把数据库的拥有者置为你的NT登录名?仅仅为了确保不同数据库间的一致性(更别提安全性因素了),你也许考虑用系统过程sp_changedbowner来把数据库拥有者改为其它用户如系统管理员(SA)。你也许已经写了这样一段脚本用来扫描所有用户数据库并把数据库拥有者重指定为系统管理员。
  
  系统过程sp_changedbowner有一个参数,即@map,其缺省值为空(null),该过程可以把数据库旧有的拥有者的别名重映射为新的数据库拥有者,如系统管理员。
  
  为了演示该过程,让我们首先建立一个尽可能小的数据库模型,然后运行sp_helpuser指令来看看新创建的用户名清单:

  CREATE DATABASE test  GO  USE test  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 test  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的好处网上有介绍。
  非叶式(nonleaf)索引页不能重新排序。
  DBCC INDEXDEFRAG不能更新统计数字。

站内搜索
相关文章
◎微软工程师讲解 SQL Server 阻塞
◎Oracle 操作经验谈
◎测试Oracle在不同系统中的IO能力
◎用sp_lock诊断SQL Sever的性能问题
◎MSSQL2005的新功能创建数据库快照
◎SQL与Oracle、DB2的性能比较
◎精妙Sql语句
◎SQL Server连接中的四个最常见错误
◎mysql的备份
◎管理常用SQL语句
◎SQL Server应用程序中的高级SQL注入
◎实例说明sql优化的重要性
◎SQLServer性能分析参数
◎Oracle的入门心得
◎SQL Server 2005——下一代的数据管理和分析软件
◎MySQL数据库函数详解
◎数据库设计三大范式应用实例剖析
◎大中型数据库数据导入中存在的部分问题及对策
◎ORACLE 常用脚本(4)
◎ORACLE 常用脚本(3)
◎ORACLE 常用脚本(2)
◎ORACLE 常用脚本(1)
◎ORACLE性能调优原则
◎oracle中关于null排序的问题
◎mysql数据库优化
◎把Access数据库移植到SQL
◎如何把Access的数据导入到Mysql
◎数据库设计三大范式应用实例剖析
◎SQL Server 2000 JDBC驱动的完整安装及测试说明
◎论数据库技术的发展史
◎MySQL索引分析和优化
◎检测和解决 SQL Server 2000 SP 4 中的延迟和阻塞 I/O 问题
◎几大数据仓库方案特性比较
◎SQL语句导入导出大全
◎从SQL Server 向Oracle 8迁移的技术实现方案
◎SQL Server连接中三个常见的错误分析
◎数据库性能分析及调整一例
◎手动建立Oracle9i数据库
◎如何连接SQL Server与Oracle数据库
◎利用 DBCA 建立 Oracle9i 数据库
◎Oracle9i 数据库实体结构
◎如何安装Oracle 9i Enterprise Edition for Linux
◎DB2数据库的安装
◎DB2/Sybase/Oracle的比较
热门文章
◎SQL Server 2000 JDBC驱动的完整安装及测试说明
◎ORACLE 常用脚本(3)
◎如何连接SQL Server与Oracle数据库
◎ORACLE 常用脚本(1)
◎管理常用SQL语句
◎SQL语句导入导出大全
◎如何安装Oracle 9i Enterprise Edition for Linux
◎Oracle的入门心得
◎精妙Sql语句
◎手动建立Oracle9i数据库
◎DB2/Sybase/Oracle的比较
◎ORACLE 常用脚本(2)
◎数据库性能分析及调整一例
◎ORACLE 常用脚本(4)
◎数据库设计三大范式应用实例剖析
◎利用 DBCA 建立 Oracle9i 数据库
◎ORACLE性能调优原则
◎SQLServer性能分析参数
◎实例说明sql优化的重要性
◎大中型数据库数据导入中存在的部分问题及对策
◎SQL Server连接中三个常见的错误分析
◎SQL与Oracle、DB2的性能比较
◎几大数据仓库方案特性比较
◎从SQL Server 向Oracle 8迁移的技术实现方案
◎Oracle9i 数据库实体结构
◎SQL Server应用程序中的高级SQL注入
◎论数据库技术的发展史
◎SQL Server 2005——下一代的数据管理和分析软件
◎SQL Server连接中的四个最常见错误
◎数据库设计三大范式应用实例剖析
◎微软工程师讲解 SQL Server 阻塞
◎mysql数据库优化
◎检测和解决 SQL Server 2000 SP 4 中的延迟和阻塞 I/O 问题
◎把Access数据库移植到SQL
◎oracle中关于null排序的问题
◎MySQL数据库函数详解
◎如何把Access的数据导入到Mysql
◎DB2数据库的安装
◎Oracle 操作经验谈
◎MySQL索引分析和优化
◎mysql的备份
◎测试Oracle在不同系统中的IO能力
◎用sp_lock诊断SQL Sever的性能问题
◎MSSQL2005的新功能创建数据库快照
◎oracle9i的安装过程
◎实现ClearQuest数据库(SQL Server2000)迁移

Google提供的广告