談一下SQL資料庫的修複方法

來源:互聯網
上載者:User

    由於突然斷電等原因,資料庫會被損壞,提示莫名奇妙的錯誤,比如串連失敗,或某個系統資料表出現錯誤等。這樣的資料庫分為兩類,一類是可以用查詢分析器串連進去,這種是可以進行修複的;第二類是查詢分析器連不上的,據我所知這種還沒有什麼修複辦法。

    但凡修複一詞,無論資料庫還是實物,都不會像修複前那樣完整,可能會造成資料丟失,或多或少的問題。下面是我工作當中修複資料庫的一點經驗,分為幾個步驟,如果前面的步驟就可以解決,不必往下進行。

   第一步,只是某個表損壞。修複語句為: 

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

  --修複資料庫的某個表
  --用下面的語句進行修複  
   
    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.

  這個方法一般資料庫都可以解決。

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.