如何检查数据库中数据的一致性?

简介:
+关注继续查看

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

    1. 使用checkstorage 或 checktable 及 checkdb 在页一级和行一级检查页链及数据指针。
    2. 使用checkstorage, checkalloc, 或 checkverify, tablealloc, 及indexalloc 检查页分配。

  在下列情况中需要使用 dbcc 命令:

    1. 作为数据库日常维护工作的一部分, 数据库内部结构的完整性决定于sa 或dbo 定期地运行 dbcc 检查。
    2. 在系统报错以后, 确定数据库是否有损坏。
    3. 在备份数据库之前, 确保备份的完整性。
    4. 如果怀疑数据库有损坏时, 例如, 使用某个表时报出表损坏的信息, 可以使用 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数据库的一致性

    1. 单用户模式启动Server:
      $SYBASE/install startserver -f RUN_server_name -m
    2. 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
    3. isql -Usa -Pxxxxxx -SSYBASE <dbcc_db.sql >dbcc_db.out
    4. grep Msg dbcc_db.out

  举例2: Unix平台检查pubs2数据库中titles表的一致性

    1. vi dbcc_table.sql
      use pubs2
      go
      dbcc checktable(titles)
      go
      dbcc tablealloc(titles)
      go
    2. isql -Usa -Pxxxxxx -SSYBASE < dbcc_table.sql > dbcc_table.out
    3. grep Msg dbcc_table.out
本文转自holy2009 51CTO博客,原文链接:http://blog.51cto.com/holy2010/362379
相关文章
|
2月前
|
SQL 数据库
一篇了解数据库中的控制事务
一篇了解数据库中的控制事务
18 0
|
4月前
|
安全 API 数据库
关于系统数据库丢失的解决方案
关于系统数据库丢失的解决方案
35 1
|
8月前
|
缓存 JSON NoSQL
如何处理缓存跟数据库数据不一致?
如何处理缓存跟数据库数据不一致?
如何处理缓存跟数据库数据不一致?
|
12月前
|
消息中间件 缓存 NoSQL
数据库与缓存一致性方案分享
数据库与缓存一致性方案分享
数据库与缓存一致性方案分享
|
存储 缓存 算法
数据库故障恢复机制的前世今生
在数据库系统发展的历史长河中,故障恢复问题始终伴随左右,也深刻影响着数据库结构的发展变化。通过故障恢复机制,可以实现数据库的两个至关重要的特性:Durability of Updates以及Failure Atomic,也就是我们常说的的ACID中的A和D。文章将首先描述故障恢复问题本身;然后按照基本的时间顺序介绍传统数据库中故障恢复机制的演进及优化;之后思考新硬件带来的机遇与挑战;并引出围绕新硬件的两个不同方向的研究成果。
185 0
|
SQL Oracle 关系型数据库
超级详细的数据库中的事务机制学习笔记
事务的英文是transaction,从英文中你也能看出来它是进行一次处理的基本单元,要么完全执行,要么都不执行。 事务的特性:ACID……
95 0
|
消息中间件 缓存 NoSQL
Redis缓存与数据库一致性解决方案(下)
Redis缓存与数据库一致性解决方案
264 0
Redis缓存与数据库一致性解决方案(下)
|
缓存 NoSQL 数据库
Redis缓存与数据库一致性解决方案(上)
Redis缓存与数据库一致性解决方案
262 0
Redis缓存与数据库一致性解决方案(上)
|
架构师 关系型数据库 MySQL
事务已提交,数据却丢了,赶紧检查下这个配置!!! | 数据库系列
有个星球水友提问: 沈老师,我们有一次MySQL崩溃,重启后发现有些已经提交的事务对数据的修改丢失了,不是说事务能保证ACID特性么,想问下什么情况下可能导致“事务已经提交,数据却丢失”呢?
554 0
事务已提交,数据却丢了,赶紧检查下这个配置!!! | 数据库系列
相关产品
云迁移中心
推荐文章
更多