天天看點

檢查修複資料庫常用方法

摘自: http://wenku.baidu.com/link?url=QYrNtEu3F3-3fhW45imoNIKkArcMAfqfUc6PNhvpv0UCHu4ChjF-OEiveN2xqPcwnGF6-1UiQY4Tyo4km5qAP_jRi-PJhub6OidIWgFZNl_

A、檢查資料庫常用方法:

隔一定時間或計算機經常當機、突然掉電、軟體經常連接配接不上資料庫時,需要進行檢查資料庫的完整性和正确性。

一、進入sqlserver“查詢分析器”,選中“消費資料庫”後輸入檢測資料庫指令:

DBCC CHECKDB ('消費資料庫名稱', NOINDEX)

二、Sqlserver開始檢查“消費資料庫”的完整性和正确性。

檢查結果:

    1、如果為“0個配置設定性錯誤,0個一緻性錯誤”,消費資料庫正常。退出。

    2、否則“消費資料庫”需要進行恢複。

       步驟:

           1、把“查詢分析器”的目前資料庫改為master資料庫。

           2、在查詢分析器裡面依次執行下面指令:

              A、SP_DBOPTION '消費資料庫名稱','SINGLE USER',TRUE

              B、DBCC CHECKDB('消費資料庫名稱',REPAIR_ALLOW_DATA_LOSS)

              C、SP_DBOPTION '消費資料庫名稱','SINGLE USER',FALSe

    3、最後重複步驟一再次檢查資料庫正确性

B、LOG檔案損壞處理方法:

  1、停止服務,copy mdf與ldf檔案到别處(不要做sp_detach_db分離資料庫)

  2、建立一個新資料庫

  3、将你複制出去的 mdf檔案改名字,替換剛剛建立的資料庫的mdf檔案(此時你再重新整理資料庫仍為置疑狀态,可以不管)

  4、進入查詢分析器,運作以下語句

      USE MASTER

      GO

      

      SP_CONFIGURE 'ALLOW UPDATES',1

      GO

      RECONFIGURE WITH OVERRIDE

      GO

   

      UPDATE SYSDATABASES SET STATUS=-32768 WHERE NAME='資料庫名稱'

  5、重建LOG

      DBCC REBUILD_LOG('資料庫名稱','C:PROGRAM FILESMICROSOFT SQL SERVERMSSQLDATA資料庫名稱_LOG.LDF')

      如果提示“檔案已存在”的話,請在相應目錄下把原來的LOG檔案删除

  

  6、DBCC檢查 DBCC CHECKDB('資料庫名稱')

  7、設定資料庫為正常狀态

      UPDATE SYSDATABASES SET STATUS =28 WHERE NAME='資料庫名稱'

      GO

  8、不允許對系統目錄直接修改

      SP_CONFIGURE 'ALLOW UPDATES',0

      GO

   

      RECONFIGURE WITH OVERRIDE

      GO

  9、以上步驟執行完畢後應該就可以進入系統了,但有可能資料庫還是有錯誤,這時可以使用A中的方法對資料庫進行修複

  10、如在執行“SP_DBOPTION '消費資料庫名稱','SINGLE USER',TRUE”報錯“伺服器: 消息 5070,級别 16,狀态 2,行 1

    如果其他使用者正使用資料庫 'elong',則資料庫狀态不能更改 伺服器: 消息 5069,級别 16,狀态 1,行 1 ALTER DATABASE 語句失敗。 sp_dboption 指令失敗。”

    就進行以下步驟: 進入查詢分析器 執行以下語句(注意資料庫名稱)

      use master

      go

     

      --kill所有會話

      Declare @tblConnectedUsers Table (SPID int)

      Declare @vcSQLText varchar(200),@iSPID int

      Insert into @tblConnectedUsers

      Select p.spid

          from master.dbo.sysprocesses p (nolock)

          join master..sysdatabases d (nolock) on p.dbid = d.dbid

          Where d.[name] = '資料庫名稱'

        

      While 1 = 1

      Begin

          Select top 1 @iSPID = SPID

              From @tblConnectedUsers

              Where SPID > IsNull(@iSPID, 0)

              order by SPID asc

          If @@RowCount = 0

            Break

          Set @vcSQLText = 'Kill ' + Convert(varchar(10), @iSPID)

          

          Exec(@vcSQLText)

      End

11、再重新操作A中的步驟修複資料庫