Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103068972
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: Sybase

2008-05-17 21:48:14

  来源:

Q.如何检查数据库中数据的一致性?
A.数据库一致性检查(dbcc)提供了一些命令用于检查数据库的逻辑和物理一致性。Dbcc主要有两个功能:

  使用checkstorage 或 checktable 及 checkdb 在页一级和行一级检查页链及数据指针。
  使用checkstorage, checkalloc, 或 checkverify, tablealloc, 及indexalloc 检查页分配。
  在下列情况中需要使用 dbcc 命令:

  作为数据库日常维护工作的一部分, 数据库内部结构的完整性决定于sa 或dbo 定期地运行 dbcc 检查。
  在系统报错以后, 确定数据库是否有损坏。
  在备份数据库之前, 确保备份的完整性。
  如果怀疑数据库有损坏时, 例如, 使用某个表时报出表损坏的信息, 可以使用 dbcc 确定数据库中其他
  表是否也有损坏。
  下面是dbcc的简单用法:

  dbcc checktable (table_name)
  检查指定的表, 检查索引和数据页是否正确链接, 索引是否正确排序, 所有指针是否一致, 每页的数据
  信息是否合理, 页偏移是否合理。

  dbcc checkdb (database_name)
  对指定数据库的所有表做和checktable 一样的检查。
  dbcc checkalloc (database_name,fix|nofix)
  检查指定数据库, 是否所有页面被正确分配, 是否被分配的页面没被使用。当使用"fix"选项时,
  在检查数据库的同时会自动修复有问题的页面。(若数据库数据量很大,则该过程会持续很长时间。)
  dbcc tablealloc (table_name,fix|nofix)
  检查指定的表, 是否所有页面被正确分配, 是否被分配的页面没被使用。是 checkalloc 的缩小版本,
  对指定的表做完整性检查。当使用"fix"选项时,在检查数据表的同时会自动修复数据表中有问题的页
  面。
  关于上述命令的其它选项及详细使用方法和checkstorage, checkverify, indexalloc 的详细使用方
  法, 请参阅有关命令手册。

  举例1: Unix平台检查pubs2数据库的一致性

  单用户模式启动Server:
   $SYBASE/install startserver -f RUN_server_name -m
  vi dbcc_db.sql
  use master
  go
  sp_dboption pubs2,"single user",true
  go
  use pubs2
  go
  checkpoint
  go
  dbcc checkdb(pubs2)
  go
  dbcc checkalloc(pubs2,fix)
  go
  dbcc checkcatalog(pubs2)
  go
  use master
  go
  sp_dboption pubs2,"single user",false
  go
  use pubs2
  go
  checkpoint
  go
  quit
  go
  isql -Usa -Pxxxxxx -SSYBASE dbcc_db.out
  grep Msg dbcc_db.out
  举例2: Unix平台检查pubs2数据库中titles表的一致性

  vi dbcc_table.sql
  use pubs2
  go
  dbcc checktable(titles)
  go
  dbcc tablealloc(titles)
  go
  isql -Usa -Pxxxxxx -SSYBASE < dbcc_table.sql > dbcc_table.out
  grep Msg dbcc_table.out

阅读(556) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~