sql server系統表損壞的解決方法
如果sql server系統表損壞了,應該怎么辦呢?下面就教您一個sql server系統表損壞的解決方法,供您參考,希望對您能夠有所幫助。
一、sql server數據庫中三張重要的sql server系統表
sysobjects:在數據庫內創建的每個對象(約束、默認值、日志、規則、存儲過程等)在表中占一行。
sysindexes:數據庫中的每個索引和表在表中各占一行。
syscolumns:每個表和視圖中的每列在表中占一行,存儲過程中的每個參數在表中也占一行。
這三張表用ID(表ID)字段關聯。這三張系統表一旦損壞,與之對應數據庫對象將無法訪問,其作用相當于DOS中的“文件分配表” 。
二、sql server系統表損壞的癥狀
用 DBCC CHECKDB 攜帶任何參數都無法修復數據庫,也就是說:DBCC CHECKDB對這個帳套根本不起作用;
無法執行如下操作:
select * from sysobjects 或select * from sysindexes 或select * from syscolumns ;
無法用SQL server DTS或其他SQL 腳本導庫工具進行導庫,導庫的中途失敗,報告:連接中斷;
在企業管理器或查詢分析器中,部分用戶數據表無法訪問。
三、處理方法
處理這種數據庫,分為兩個大的步驟:
第一步:處理可以訪問的數據表
1)找出哪些表不可訪問,即:sql server系統表中哪些記錄損壞;
2)用SQL server DTS把能夠訪問的用戶數據表導入一個新的DataBase 。
在導庫時,不能選折(1)中不能訪問的數據表。
第二步:處理不可訪問的數據表:
1)找出系統表中錯誤記錄的ID;
2)根據“錯誤記錄的ID”,刪除sysobjects、sysindexes、syscolumns 表錯誤的記錄;
3)根據“錯誤記錄的ID” ,重建系統表記錄;
4)重建完畢,如果該表可以訪問,那么用DTS單獨將此表導入新的DataBase。
說明:重建sql server系統表方式不一定會成功,比如由于DISK I/O錯誤,如果僅僅是保存系統表的磁盤扇區出錯,那么重建系統表方式可以挽回數據。 如果保存用戶數據表的磁盤扇區出錯,那么即使重建系統表也不能解決問題。如果重要的用戶數據表無法導庫,如:t_Voucher、 IcStockbill、ICSale等,那么可以用用“第二步”中的方法一試。
【編輯推薦】