修复数据库出现一致性错误和分配错误方法 一些数据库服务器在使用中有时由于非正常关闭或重新启动服务器,可能会发生数据库错误,目前我们的方法基本上是把数据库导入到另外一个空数据库中来修复。这种方法是可以修复成功的,但是耗时比较长。对于一些比较简单的数据库错误(比较少的一致性错误和非配错误)我们可以通过如下方法来修复数据,这样操作更快.注意:在做任何数据库操作前请一定注意备份数据库。并把其它使用数据库的应用程序停止掉,只启动SQLSERVER服务。
第一步:在服务器上,使用命令行 运行OSQL –E 命令进入数据库,
第二步:选择所使用的数据库(DbName),并检查该数据库是否存在错误。 从检查图中我们可以看到该数据库存在4个分配错误和1个一致性错误。 (注:DbName--为你实际要处理 的数据库.)
第三步:发现错误后我们要开始修复,所使用语句下:
sp_dboption 'DbName', 'single user', 'true'--把数据库置为单用户模式
DBCC checkdb('DbName',REPAIR_ALLOW_DATA_LOSS)--在允许数据丢失情况下修复数据库。
如果DBCC checkdb('DbName',REPAIR_A LLOW_DATA_LOSS)语句执行一次不行,可以在多执行几次直到没有再提示数据库有错误为止。
第四步:检查没有错误后,把数据库重新设置为多用户模式
sp_dboption 'local', 'single user', 'false'--设置为多用户模式
这样这个数据库的错误修复就完成了 。
然后停止掉SQLSERVER,重新启动服务器就可以.这种方法对于一般出现问题可以不用安装企业管理器。直接在服务器用OSQL –E 进入数据库。然后通过上面两条命令来修复数据库。这样速度比较快。
下面是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"选项时,在检查数据表的同时会自动修复数据表中有问题的页面。