數據庫損壞和置疑修復方法目錄前言1數據庫損壞的常規修復處理方法1數據庫損壞的災難性修復方法—BCP處理方案2數據庫置疑的修復處理方法3前言Sql 數據庫本身依賴于操作系統、文件讀寫存儲等環境,數據庫經常因為操作系統、異常關機、異常終止退出或者SQL 數據庫本身的機制問題均會導致數據庫無故損壞,其中數據庫損壞的主要原因如下:事務日志問題。比如事務日志文件丟失;事務日志文件在操作過程中被誤刪;事務日志文件被損壞以及事務日志文件過大,導致硬盤的空間不足等。意外掉電或異常強制關機,造成數據文件損壞,主要數據庫正在被讀寫過程中異常關機。數據庫的表被破壞或索引等被破壞,或者數據庫的其他對象被破壞或丟失等。刪除了數據文件,或者更改了它的名字。硬盤損壞,造成數據和日志文件讀寫錯誤。感染病毒或者其他人為因素破壞。其他文件讀寫、存儲等原因。數據庫損壞的常規修復處理方法以商業之星7為例:一般數據庫的損壞,修復數據庫按如下步驟操作:--請在查詢分析器中執行下列語句.執行前斷開其它所有數據庫連接,最好是斷開網線--如果不是該數據庫名代碼數據庫置疑原因,請將數據庫改為要修復的數據庫USE --單用戶模式 '', ' user', 'TRUE'go--數據庫檢查DBCC ('')Go--如果返回結果出現了紅色的提示文字,說明數據庫中存在錯誤,需要修復--數據庫修復DBCC ('','')Go--再次數據庫檢查,如果返回結果中沒有了紅色的提示文字,說明修復成功;DBCC ('')Go--否則意味著還需要更高級別的修復;嘗試將上面修復語句的''換為'ss'再試,之后再次檢查數據庫。
--注意:語句DBCC ('','')和語句DBCC ('',' ss ')可多次執行(一般情況下5次都可修復成功),直到執行完后用數據庫檢查語句DBCC ('')后沒有了紅色的提示文字,并且會 發現了 0 個分配錯誤和 0 個一致性錯誤(在數據庫 '' 中),這樣表示數據庫修復OK,--如果還有錯誤未修復,請把這些信息以文字的方式發給我們--退出前請一定要執行以下語句返回到多用戶模式EXEC '', ' user','FALSE'go?注:都要把 替換成真實的數據庫名字,每個產品的數據庫名稱是不一樣的。數據庫損壞的災難性修復方法—BCP處理方案以商業之星7為例,一般是通過“數據庫修復的常規處理方法”還無法修復的,用DBCC無法修復的,表能在查詢分析里查出來,比如可以通過 * FROM 可查出數據,大部分數據因為索引破壞。
在進行操作前,請先備份數據庫,同時備份mdf和log文件),操作步驟如下:首先在D盤建立目錄,并在查詢分析器中選擇思迅數據庫運行:use 'bcp ..'+name + ' out '+'d:\\'+name+'.txt -c -Usa –S -P' FROM WHERE TYPE = 'U' order by BY NAME--把查詢的結果集全部復制下來,新建一個文本文件取名為“導出.bat”把結果集復制進去并保存,--把該文件存放在d盤目錄下。在查詢分析器中選擇思迅數據庫運行: 'bcp ..'+name + ' in '+'d:\\'+name+'.txt -c -Usa –S -P ' FROM WHERE TYPE = 'U' order by name order by name把查詢的結果集全部復制下來,新建一個文本文件取名為“導入.bat”把結果集復制進去并保存,把該文件存放在d盤目錄下。
運行“導出.bat”(注意:該文件雙擊即可運行),數據庫中的數據會倒出到目錄中。刪除原來的問題數據庫,用服務端安裝程序.exe重新安裝空庫。在查詢分析器中選擇思迅數據庫運行:use ' '+name FROM WHERE TYPE = 'U' order by --然后把返回的結果集復制,新建一個查詢分析器窗口,把復制的內容粘貼后運行!最后運行“導入.bat” ,倒入成功后就恢復數據庫了!最后在查詢分析器中選擇思迅數據庫運行use set =( max() from where num2=1) where =''go在查詢分析器中選擇思迅數據庫運行,此步驟可不做,但做一下最好。use ' '+name FROM WHERE TYPE = 'U' order by --然后把返回的結果集復制,新建一個查詢分析器窗口,把復制的內容粘貼后運行!日結,檢查數據。
--注:都要把 替換成真實的數據庫名字,每個產品的數據庫名稱是不一樣的。數據庫置疑的修復處理方法以商業之星7為例:停止SQL 的服務,備份SQL 安裝目錄下的\data子目錄一個.ldf(也有可能非此命名)。啟動SQL 服務(如已停止),創建一個新的數據庫,命名為原來數據庫的名字,比如商業之星7的總部數據庫為,分店為。停止SQL 把老數據庫的MDF文件(.mdf)替換新數據庫的相應的MDF文件代碼數據庫置疑原因,并把LDF文件(.ldf)刪除。重新啟動SQL 服務,然后在查詢分析器里運行如下命令:Use ? 'allow ', with set = 32768 where name = '' 停止SQL然后重新啟動SQL 服務,然后在查詢分析器里運行如下命令,(更換日志文件路徑地址):use (3604)DBCC ('','c:\ Files\ SQL \MSSQL\Data\.ldf')--在這里,請輸入你的數據庫的路徑Go?停止SQL然后重新啟動SQL 服務,然后在查詢分析器里運行:use set = 8 where name = ''go? 'allow ', with ?運行dbcc () 檢查數據庫的完整性一般情況下置疑后都需要修復數庫,按如下步驟操作,以下部分同“數據庫損壞的常規修復處理方法”。
--請在查詢分析器中執行下列語句.執行前斷開其它所有數據庫連接,最好是斷開網線--如果不是該數據庫名,請將數據庫改為要修復的數據庫USE --單用戶模式 '', ' user', 'TRUE'go--數據庫檢查DBCC ('')Go--如果返回結果出現了紅色的提示文字,說明數據庫中存在錯誤,需要修復--數據庫修復DBCC ('','')Go--再次數據庫檢查,如果返回結果中沒有了紅色的提示文字,說明修復成功;DBCC ('')Go--否則意味著還需要更高級別的修復;嘗試將上面修復語句的''換為'ss'再試,之后再次檢查數據庫。--注意:語句DBCC ('','')和語句DBCC ('',' ss ')可多次執行(一般情況下5次都可修復成功),直到執行完后用數據庫檢查語句DBCC ('')后沒有了紅色的提示文字,并且會 發現了 0 個分配錯誤和 0 個一致性錯誤(在數據庫 '' 中),這樣表示數據庫修復OK,--如果還有錯誤未修復,請把這些信息以文字的方式發給我們?--退出前請一定要執行以下語句返回到多用戶模式EXEC '', ' user','FALSE'go?注:都要把 替換成真實的數據庫名字,每個產品的數據庫名稱是不一樣的。