谈一下SQL数据库的修复方法

    由于突然断电等原因,数据库会被损坏,提示莫名奇妙的错误,比如连接失败,或某个系统表出现错误等。这样的数据库分为两类,一类是可以用查询分析器连接进去,这种是可以进行修复的;第二类是查询分析器连不上的,据我所知这种还没有什么修复办法。

    但凡修复一词,无论数据库还是实物,都不会像修复前那样完整,可能会造成数据丢失,或多或少的问题。下面是我工作当中修复数据库的一点经验,分为几个步骤,如果前面的步骤就可以解决,不必往下进行。

   第一步,只是某个表损坏。修复语句为: 

  ==================================================

  --修复数据库的某个表
  --用下面的语句进行修复  
   
    exec sp_dboption   '数据库名',   'single user',   'true'  
    Go       
    DBCC CHECKTABLE('表名',repair_allow_data_loss)  
    go       
    sp_dboption   '数据库名',   'single user',   'false'  
    Go  

  ==================================================

  根据我的经验,一般用户表修复的几率比较大,系统表修复的几率比较小;

 

  第二步,错误不确定是那个或哪几个表,或任何其他错误,按照数据库损坏来修复。修复语句为:

  ==================================================

  --修复整个数据库
  --用下面的语句进行修复  
   
  ALTER DATABASE [数据库名] SET SINGLE_USER
  GO
  DBCC CHECKDB('数据库名',repair_allow_data_loss) WITH TABLOCK
  GO
  ALTER DATABASE [数据库名] SET MULTI_USER
  GO

  ==================================================

 

  第三步,以上两种都试过不行,可以用导入导出功能。

  方法是新建一个空表数据库,从损坏的数据库中把表结构和数据导过来,也可以先在原数据库中生成sql脚本,在空数据库中执行先建立数据库结构然后只导数据,这样的成功率高一些。导入的时候可能会遇到错误提示,比如提示某个表有错误,可以暂时不导这个,单独处理。这部分可以灵活处理。

  第四步,导出导入功能也不行,就是老提示错误,怎么都导不了,那就这样做:

  1、建立一个空白数据库,我们叫库1,在原数据库中执行这个数据转移语句:select * into [库1].[dbo].[表名] from 表名,这个语句只会将表的字段和表中的数据转移过去,不会复制约束索引,所以一般都可以复制过去;

  2、建立第二个空白数据库,我们叫库2,用原数据库的sql脚本建立结构,然后用导入导出功能将库1的数据到入到库2.

  这个方法一般数据库都可以解决。

  第五步,能保留多少算多少。以上皆行不通,那就看能留下什么算什么吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值