zoukankan      html  css  js  c++  java
  • SQL Server数据库损坏,会导致收缩数据库不起作用

    我们开发环境的SQL Server上有一个数据库叫"RawData",该数据库有大量的空间被占用,但是实际上这些空间都未被使用。可以通过下面的SQL语句查询数据库占用空间的比例:

    USE RawData
    
    EXEC sys.sp_spaceused

    然而无论我用什么办法,收缩数据库"RawData"都不起作用,收缩数据库操作完成后,数据库大小纹丝不动。。。

    后来发现原来数据库如果已经损坏,是无法进行收缩的,具体检查方法如下:

    对数据库运行DBCC CHECKDB命令,看是否有错误提示:

    DBCC CHECKDB(N'RawData')

    运行该命令后,检查到数据库"RawData"有如下错误提示:

    Msg 8905, Level 16, State 1, Line 1
    Extent (1:4312600) in database ID 100 is marked allocated in the GAM, but no SGAM or IAM has allocated it.

    看来这就是数据库无法收缩的原因了。。。

    修复数据库的方法大致分为三种:

    1、快速修复
    DBCC CHECKDB ('数据库名', REPAIR_FAST)    
    2、重建索引并修复
    DBCC CHECKDB ('数据库名', REPAIR_REBUILD)
    3、如果必要允许丢失数据修复
    DBCC CHECKDB ('数据库名'', REPAIR_ALLOW_DATA_LOSS)

    这三种修复,都要求数据库处于单用户模式下,而根据网上的资料,本文出现的数据库错误比较严重。。。只能用第三种方式进行修复,也就是会造成部分数据丢失,该错误更好的解决办法是使用以前的备份文件还原数据库,但是我们的开发环境没有做数据库定时备份,所以只能进行第三种修复。。。

    执行如下SQL语句修复数据库"RawData":

    ALTER DATABASE RawData SET SINGLE_USER WITH ROLLBACK IMMEDIATE
    DBCC CHECKDB(N'RawData', REPAIR_ALLOW_DATA_LOSS)
    ALTER DATABASE RawData SET MULTI_USER WITH ROLLBACK IMMEDIATE

    修复语句执行完毕后,再使用DBCC CHECKDB命令检查数据库是否还有错误:

    DBCC CHECKDB(N'RawData')

    确认没有错误返回后,就可以使用常规的方法来成功收缩数据库了。

  • 相关阅读:
    硬件设计问题——持续更新
    PCB设计资源整理
    PCB层叠设计和电源分割
    PCB设计技巧
    铜厚电流、Layout 3W原则 20H原则 五五原则
    final关键字
    面向对象——继承与组合
    面向对象——继承
    this总结
    static总结
  • 原文地址:https://www.cnblogs.com/OpenCoder/p/12404074.html
Copyright © 2011-2022 走看看