sqlserver系統(tǒng)表損壞處理方法_第1頁
sqlserver系統(tǒng)表損壞處理方法_第2頁
sqlserver系統(tǒng)表損壞處理方法_第3頁
免費預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、SQL Serve系統(tǒng)表損壞的處理方法一、SQL SV瞰據(jù)庫中三張重要的系統(tǒng)表sysobjects :在數(shù)據(jù)庫內(nèi)創(chuàng)建的每個對象(約束、默認值、日志、規(guī)則、存 儲過程等)在表中占一行。sysindexes :數(shù)據(jù)庫中的每個索引和表在表中各占一行。syscolum ns :每個表和視圖中的每列在表中占一行,存儲過程中的每個參數(shù) 在表中也占一行。這三張表用ID (表ID)字段關(guān)聯(lián)。這三張系統(tǒng)表一旦損壞,與之對應(yīng)數(shù)據(jù)庫對 象將無法訪問,其作用相當(dāng)于 DOS的“文件分配表”。二、系統(tǒng)表損壞的癥狀用DBCCCHECKD攜帶任何參數(shù)都無法修復(fù)數(shù)據(jù)庫,也就是說:DBCCCHECKDB 對這個帳套根本不起作用;

2、無法執(zhí)行如下操作:select * from sysobjects 或 select * from sysindexes 或 select * from syscolumns ;無法用SQL server DTS或其他SQL腳本導(dǎo)庫工具進行導(dǎo)庫,導(dǎo)庫的中途失 敗,報告:連接中斷;在企業(yè)管理器或查詢分析器中,部分用戶數(shù)據(jù)表無法訪問。三、處理方法處理這種數(shù)據(jù)庫,分為兩個大的步驟:第一步:處理可以訪問的數(shù)據(jù)表1)找出哪些表不可訪問,即:系統(tǒng)表中哪些記錄損壞;2)用SQL server DTS把能夠訪問的用戶數(shù)據(jù)表導(dǎo)入一個新的 DataBase。 在導(dǎo)庫時,不能選折(1)中不能訪問的數(shù)據(jù)表。第二步:處

3、理不可訪問的數(shù)據(jù)表:1)找出系統(tǒng)表中錯誤記錄的ID ;2)根據(jù)“錯誤記錄的 ID”,刪除 sysobjects、sysindexes、syscolumns 表 錯誤的記錄;3)根據(jù)“錯誤記錄的ID” ,重建系統(tǒng)表記錄;4)重建完畢,如果該表可以訪問,那么用DTS單獨將此表導(dǎo)入新的DataBase。說明:重建系統(tǒng)表方式不一定會成功,比如由于DISK I/O錯誤,如果僅僅是保存系統(tǒng)表的磁盤扇區(qū)出錯,那么重建系統(tǒng)表方式可以挽回數(shù)據(jù)。如果保存用戶數(shù)據(jù)表的磁盤扇區(qū)出錯,那么即使重建系統(tǒng)表也不能解決問題。如果重要的用戶數(shù)據(jù)表無法導(dǎo)庫,如:t_Voucher、IcStockbill 、ICSale等,那么可

4、以用用“第二步”中的方法一試。四、例例:一 sql svr 數(shù)據(jù)庫,實體名為:AIS20030529181217用DBCC CHECK檢測,報告(用DBCC CHECKDB任何參數(shù)都是以下提示):服務(wù)器:消息8966,級別16,狀態(tài)1,行1未能讀取并閂鎖頁(1:29262)(用閂鎖類型 SH)。SYSOBJECT缺敗。DBCC執(zhí)行完畢。如果 DBCC輸出了錯誤信息,請與系統(tǒng)管理員聯(lián)系。執(zhí)行 select * from sysobjects,報告如下:服務(wù)器:消息644,級別21,狀態(tài)3,行1未能在索引頁 (1:29262) 中找到 RID 6243a6d19100的索引條目(索引 ID 0,數(shù)

5、 據(jù)庫 AIS20030529181217 ')。連接中斷但是執(zhí)行 select * from sysindexes 和 select * from syscolumns 正常。 這說明只有 sysobjects 表損壞,而 sysindexes 和 syscolumns 沒有問題。處理步驟:第一步:處理可以訪問的數(shù)據(jù)表(1.1) 找出哪些表不可訪問;新建立一個sql svr數(shù)據(jù)庫,數(shù)據(jù)庫實體名為AisNew。進入查詢分析器,執(zhí) 行如下SQL*use AIS20030529181217DECLARTbNameVARCHA(RO)DECLARFi ndErrTable SCROLL CU

6、RSOR FORselect namefrom AisNew.dbo. sysobjects where xtype= u" order by nameOPENFi ndErrTableFETCHFi ndErrTableINTO TbNameWHILE FETCH_STA<USBEGINprint TbNameexec( select top 1 * from ' + TbName)FETCHFi ndErrTableINTO TbNameENDPRINT Scan Complate 'CLOSED ndErrTableDEALLOCATEi ndErrTab

7、le*執(zhí)行此SQL給出的報告的最后幾行為:T_voucher服務(wù)器:消息644,級別21,狀態(tài)3,行1未能在索引頁(1:29262) 中找到RID 1'61dd201a100'的索引條目(索引 ID 0,數(shù)據(jù)庫 AIS20030529181217 )。連接中斷根據(jù)以上報告可以知道T_voucher表在sysobjects表中的對應(yīng)記錄出錯,造 成T_voucher不能訪問。修改上面的SQL在聲明游標的記錄集中屏蔽 T_voucher表。 即:'and name !='voucherDECLARFi ndErrTableSCROLL CURSOR FORselec

8、t name from AisNew.dbo. sysobjects where xtype= order by n ame修改完畢,繼續(xù)執(zhí)行此SQL如此反復(fù),就能夠不斷報告出 sysobjects中那些 表不能訪冋(1.2) 導(dǎo)庫用SQL DTS工具將AIS20030529181217中可以訪問的數(shù)據(jù)表導(dǎo)入 AisNew。第二步:處理不可訪問的數(shù)據(jù)表:(2.1)找出系統(tǒng)表中錯誤記錄的ID-獲得 AIS20030529181217中 T_voucher 表在 sysobjects 中的 ID :SELECTid FROMMS20030529181217.dbo. sysobjects WHER

9、Eame= 't_voucher '=123(說明:通常即使sysobjects 表損壞,不能做select * from sysobjects 查詢, 但是可以做 select ID,name from sysobjects 查詢。如果 select ID,name from sysobjects 查詢也不能執(zhí)行,可以對照 AisNew和AIS20030529181217兩個數(shù)據(jù)庫 中的同名表:syscolumns。根據(jù) AisNew.dbo. syscolumns 表中 T_voucher 所占字段 的個數(shù)以及各個字段的名稱,在AIS20030529181217.dbo.

10、syscolumns中找出T_voucher所對應(yīng)的記錄,由此獲得 T_voucher在AIS20030529181217數(shù)據(jù)庫的系 統(tǒng)表中所分配的ID。)-獲得 AisNew 中 T_voucher 表在 sysobjects 中的 ID :SELECTid FROMAisNew.dbo. sysobjects WHEREame= 't_voucher '=456(2.2) 刪除AIS20030529181217中系統(tǒng)表中錯誤記錄:WHEREI=123WHEREI=123DELETEAIS20030529181217.dbo. sysobjectsDELETEAIS20030

11、529181217.dbo. sysin dexessyscolumns WHERid=123DELETEAIS20030529181217.dbo.(2.3) 重建系統(tǒng)表記錄-重建 AIS20030529181217.dbo.sysobjects 表中 T_voucher 表對應(yīng)的記錄:INSERT INTO AIS20030529181217.dbo. sysobjects(n ame,id,xtype,uid,i nfo,status,base_schema_ver,repli nfo,pare nt_o bj,crdate,ftcatid)SELECTt_voucher_b :123,

12、xtype,uid,info,status,base_schema_ver,replinfo,parent_obj,crdate,ftcatidFROM AisNew.dbo. sysobjects WHERid=456-重建 AIS20030529181217.dbo.sysindexes 表中 t_voucher 表對應(yīng)的記錄:INSERT INTO AIS20030529181217.dbo. sysin dexes(id,status,first,i ndid,root, minlen ,keyc nt,groupid,dpages,reserved,used,rowc nt,rowm

13、 odctr,reserved3,reserved4,xmaxle n,maxirow,OrigFillFactor,StatVersio n,reserved2,Fir stIAM,impid,lockflags,pgmodctr,keys ,n ame,statblob)SELECT123,status,first,i ndid,root, minlen ,keyc nt,groupid,dpages,reserved,used,rowc nt,rowm odctr,reserved3,reserved4,xmaxle n,maxirow,OrigFillFactor,StatVersio

14、 n,reserved2,Fir stIAM,impid,lockflags,pgmodctr,keys ,n ame,statblobFROMXisNew.dbo. sysindexes WHERid=456-重建 AIS20030529181217.dbo.syscolumns 表中 t_voucher 表對應(yīng)的記錄:INSERT INTO AIS20030529181217.dbo. syscolu mns(n ame,id,xtype,typestat,xusertype,le ngth,xprec,xscale,colid,xoffset,bitpos,reserve d,colst

15、at,cdefault,doma in,nu mber,colorderby,autoval,offset,collati oni d,la nguage) SELECTn ame,123,xtype,typestat,xusertype,le ngth,xprec,xscale,colid,xoffset,bitpos,reserved,colstat,cdefault,doma in,nu mber,colORDERBY,autoval,offset,collati oni d,la nguage FROMXisNew.dbo. syscolumns WHERid=456(2.4 )用DTS單獨將t_voucher_b表導(dǎo)入新的DataBase經(jīng)過以上操作,A

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論