--SQL SERVER資料庫置疑後恢複步驟<br />--1. 恢複步驟:<br />--a.將smlog_log.ldf檔案備份到其它目錄下;<br />--b.將來源目錄下的smlog_log.ldf檔案改名為smlog_log_bak.ldf;<br />--c.執行以下語句修改資料庫的狀態:<br />use Master<br />go<br />update sysdatabases set status=32768 where name='資料庫名稱' --修改狀態,設為緊急狀態<br />go<br />shutdown with nowait --停止資料庫伺服器<br />go<br />--d.退出SQL並在(COMMAND)命令列模式中通過下面的代碼重新啟動SQL:<br />sqlservr -c -T3608 -T4022 --安全模式啟動SQL SERVER<br />--e.在查詢分析器中執行以下語句來查看剛剛修改過狀態的資料庫狀態:<br />select Name,Status from sysdatabases where Name='資料庫名稱'<br />--f.執行以下代碼建立記錄檔:<br />dbcc traceon(3604)--跟蹤<br />dbcc rebuild_log('資料庫名稱','記錄檔全路徑') --檔案名稱要有全路徑和副檔名<br />--dbcc rebuild_log('prs_msc','d:/mscsql/mssql/data/prs_msc_log.ldf<br />--g.將資料庫置回正常狀態:<br />update sysdatabases set status=0 where name='資料庫名稱'<br />--h.重新啟動資料庫後執行以下語句檢查資料庫:<br />DBCC CHECKDB --如果執行完有錯誤用以下語句修複<br />--i.要修複資料庫必需將資料庫改為單一使用者模式:<br />Exce sp_dboption '資料庫名稱','single user','true'---('false'恢複多使用者)<br />--j.執行以下語句修複資料庫:<br />DBCC CHECKDB('資料庫名稱',REPAIR_ALLOW_DATA_LOSS)<br />REPAIR_ALLOW_DATA_LOSS:是比較進階的修複方式<br />REPAIR_FAST:是簡單快速的修複方式
/*<br />處理狀態就為"置疑"的數據庫<br />備份資料檔案,然後按下面的步驟處理:<br />1.建立一個同名的資料庫(資料檔案與原來的要一致)<br />2.再停掉sql server(注意不要分離資料庫)<br />3.用原資料庫的資料檔案覆蓋掉這個建立的資料庫<br />4.再重啟sql server<br />5.此時開啟企業管理器時會出現置疑,先不管,執行下面的語句(注意修改其中的資料庫名)<br />6.完成後一般就可以訪問資料庫中的資料了,這時,資料庫本身一般還要問題,解決辦法是,利用資料庫的指令碼建立一個新的資料庫,並將資料導進去就行了.<br />*/<br />USE MASTER<br />GO<br />SP_CONFIGURE 'ALLOW UPDATES',1<br />GO<br />RECONFIGURE WITH OVERRIDE<br />GO<br />UPDATE SYSDATABASES SET STATUS =32768 WHERE NAME='置疑的資料庫名'<br />Go<br />sp_dboption '置疑的資料庫名','single user','true'<br />Go<br />DBCC CHECKDB('置疑的資料庫名')<br />Go<br />update sysdatabases set status=28 where name='置疑的資料庫名'<br />Go<br />sp_configure 'allow updates',0<br />GO<br />reconfigure with override<br />Go<br />sp_dboption '置疑的資料庫名', 'single user','false'<br />Go
/*<br />只有mdf檔案的恢複技術<br />由於種種原因,我們如果當時僅僅備份了mdf檔案,那麼恢複起來就是一件很麻煩的事情了。<br />如果您的mdf檔案是當前資料庫產生的,那麼很僥倖,也許你使用sp_attach_db或者sp_attach_single_file_db可以恢複資料庫,但是會出現類似下面的提示資訊<br />裝置啟用錯誤。物理檔案名稱 'C:/Program Files/Microsoft SQL Server/MSSQL/data/test_Log.LDF' 可能有誤。<br />已建立名為 'C:/Program Files/Microsoft SQL Server/MSSQL/Data/test_log.LDF' 的新記錄檔。<br />但是,如果您的資料庫檔案是從其他電腦上複製過來的,那麼很不幸,也許上述辦法就行不通了。你也許會得到類似下面的錯誤資訊<br />伺服器: 訊息 1813,層級 16,狀態 2,行 1<br />未能開啟新資料庫 'test'。CREATE DATABASE 將終止。<br />裝置啟用錯誤。物理檔案名稱 'd:/test_log.LDF' 可能有誤。<br />怎麼辦呢?別著急,下面我們舉例說明恢複辦法。<br />*/<br />--A.我們使用預設建立一個供恢複使用的資料庫(如test)。可以在SQL Server Enterprise Manager裡面建立。<br />--B.停掉資料庫伺服器。<br />--C.將剛才產生的資料庫的記錄檔test_log.ldf刪除,用要恢複的資料庫mdf檔案覆蓋剛才產生的資料庫資料檔案test_data.mdf。<br />--D.啟動資料庫伺服器。此時會看到資料庫test的狀態為“置疑”。這時候不能對此資料庫進行任何操作。<br />--E.設定資料庫允許直接作業系統表。此操作可以在SQL Server Enterprise Manager裡面選擇資料庫伺服器,按右--鍵,選擇“屬性”,在“伺服器設定”頁面中將“允許對系統目錄直接修改”一項選中。也可以使用如下語句來實現。<br />use master<br />go<br />sp_configure 'allow updates',1<br />go<br />reconfigure with override<br />go<br />--F.設定test為緊急修複模式<br />--在查詢管理器裡設定如下命令:<br />update sysdatabases set status=-32768 where dbid=DB_ID('test')<br />--此時可以在SQL Server Enterprise Manager裡面看到該資料庫處於“唯讀/置疑/離線/緊急模式”可以看到資料庫裡面的表,但是僅僅有系統資料表<br />--G.下面執行真正的恢複操作,重建資料庫記錄檔<br />dbcc rebuild_log('test','C:/Program Files/Microsoft SQL Server/MSSQL/Data/test_log.ldf')<br />/*<br />執行過程中,如果遇到下列提示資訊:<br />伺服器: 訊息 5030,層級 16,狀態 1,行 1<br />未能排它地鎖定資料庫以執行該操作。<br />DBCC 執行完畢。如果 DBCC 輸出了錯誤資訊,請與系統管理員聯絡。<br />說明您的其他程式正在使用該資料庫,如果剛才您在F步驟中使用SQL Server Enterprise Manager開啟了test庫的系統資料表,那麼退出SQL Server Enterprise Manager就可以了。<br />正確執行完成的提示應該類似於:<br />警告: 資料庫 'test' 的日誌已重建。已失去事務的一致性。應運行 DBCC CHECKDB 以驗證物理一致性。將必須重設資料庫選項,並且可能需要刪除多餘的記錄檔。<br />DBCC 執行完畢。如果 DBCC 輸出了錯誤資訊,請與系統管理員聯絡。<br />此時開啟在SQL Server Enterprise Manager裡面會看到資料庫的狀態為“只供DBO使用”。此時可以訪問資料庫裡面的使用者表了。<br />*/<br />--H.驗證資料庫一致性(可省略)<br />dbcc checkdb('test')<br />/*一般執行結果如下:<br />CHECKDB 發現了 0 個分配錯誤和 0 個一致性錯誤(在資料庫 'test' 中)。<br />DBCC 執行完畢。如果 DBCC 輸出了錯誤資訊,請與系統管理員聯絡。*/<br />--I.設定資料庫為正常狀態<br />sp_dboption 'test','dbo use only','false'<br />--如果沒有出錯,那麼恭喜,現在就可以正常的使用恢複後的資料庫啦。<br />--J.最後一步,我們要將步驟E中設定的“允許對系統目錄直接修改”一項恢複。因為平時直接作業系統表是一件比較危險的事情。當然,我們可以在SQL Server Enterprise Manager裡面恢複,也可以使用如下陳述式完成<br />sp_configure 'allow updates',0<br />go<br />reconfigure with override<br />go
--記錄檔出現問題(丟失或檔案格式非法),怎麼使資料庫恢複正常<br />--如果用sp_attach_single_file 'TEST','C:/Program Files/Microsoft SQL Server/MSSQL/Data/test_log.mdf'失敗則需要用下列步驟完成<br />--1.將置疑的資料庫分離,將mdf檔案移走或改名!<br />sp_detach_db 'TEST'<br />--2.重新在原來目錄下建立同名的資料庫TEST<br />--3.停掉SQL Service,將先前的mdf檔案拷貝回來覆蓋(或改名),刪除原來的log檔案(或改名)<br />--4.啟動SQL Service(否則下面的語句沒辦法運行)<br />--5.將資料庫設成緊急模式(status=32768)<br />sp_configure 'allow updates',1<br />reconfigure with override<br />update sysdatabases set status=32768 where name='TEST'<br />--重建立立記錄檔<br />DBCC traceon(3604)<br />dbcc rebuild_log('test','C:/Program Files/Microsoft SQL Server/MSSQL/Data/test_log.ldf')<br />Go<br />--6.重新啟動SQL Service<br />--7.將資料庫設定成單一使用者模式(下面三個語句均可)<br />--sp_dboption 'TEST','single user','true'<br />update sysdatabases set status=4096 where name='TEST'<br />--alter database TEST set Single_user </p><p>--8.檢查資料庫的完整性和一致性,OK了就可以用了<br />DBCC CheckDB(TEST) </p><p>--9.將資料的存取權限設定成多使用者模式<br />sp_dboption 'TEST','single user','false'<br />--或alter database TEST set multi_user </p><p>--10.關閉進階選項<br />sp_configure 'allow updates',0<br />reconfigure with override<br />--結束
SQL2000資料庫離線/唯讀/緊急模式 修複<br />資料加路徑下,有兩個檔案,一個是 .mdf 另外一個是.ldf,其中,.mdf是資料檔案,裡面存放著資料資訊,<br />而.ldf檔案是記錄檔,但缺一不可<br />修複方法按以下步驟。<br />1,停止服務管理員。<br />2,進入資料庫安裝路徑,我是裝的D盤 (D:/Program Files/Microsoft SQL Server/MSSQL/Data),找到tiger.ldf,刪除 (這裡就以tiger為講解對象,其它資料庫當然要找到相對應的名稱進行刪除)<br />3,啟動服務管理員<br />4,進入查詢分析器,<br />輸入以下語句<br />use master<br />go<br />sp_configure 'allow updates',1<br />go<br />reconfigure with override<br />go<br />注意輸正確,如果輸入後執行此語句,並且下面顯示<br />DBCC 執行完畢。如果 DBCC 輸出了錯誤資訊,請與系統管理員聯絡。<br />已將配置選項 'allow updates' 從 0 改為 1。請運行 RECONFIGURE 語句以安裝。<br />說明執行正確,如果不顯示以上資訊,請檢查是否有輸錯!<br />此語句是的作用是:設定資料庫允許直接作業系統表。<br />5,執行第4步成功後, 接著設定資料庫為緊急修複模式。<br />update sysdatabases set status=-32768 where dbid=db_id('tiger')<br />下面顯示<br />(所影響的行數為 1 行)<br />6,繼續,重新資料庫日誌(ldf)檔案。<br />dbcc rebulid_log('tiger','D:/Program Files/Microsoft SQL Server/MSSQL/Data/tiger.ldf')<br />這裡需要注意,我電腦資料庫檔案是裝在D盤,所以上面路徑是D盤,如果不同,要修改。<br />這樣,就重建了 tiger的ldf記錄檔。<br />下面顯示:<br />警告: 資料庫 'test' 的日誌已重建。已失去事務的一致性。應運行 DBCC CHECKDB 以驗證物理一致性。<br />將必須重設資料庫選項,並且可能需要刪除多餘的記錄檔。<br />7,現在檢查有沒有錯誤,再輸入文法<br />dbcc checkdb('tiger')<br />下面顯示<br />CHECKDB 發現了 0 個分配錯誤和 0 個一致性錯誤(在資料庫 'tiger' 中)。<br />那說明第6步就建立成功沒問題了,下面就可以把SQL復原模式了<br />8,設定資料庫為正常狀態<br />sp_dhoption 'tiger','dho use only','false'<br />9,最後一步,們要將步驟E中設定的“允許對系統目錄直接修改”一項恢複。因為平時直接作業系統表是一件比較危險的事情<br />