恢復SQL資料庫

2021-04-14 14:04:22 字數 2302 閱讀 2443

復sql資料庫

近日,使用者打**請求技術支援,說素材採集資料庫連線不上,筆者在網管控制台啟動應用程式,發現確實如此,如圖1所示。

圖1  錯誤資訊

筆者進行了簡單的測試:ping資料庫伺服器沒有問題,證明網路連線沒有問題:odbc連線也可以連線到資料庫伺服器的master資料庫,證明客戶端沒有問題。問題應該出在cms應用資料庫上。

直到現在筆者還沒有認識到問題的嚴重性。開啟企業管理器,檢視cms資料庫的狀態,竟然是「置疑」!

出現「置疑」狀態有幾種可能:

 資料庫檔案或者相關的日誌檔案丟失。

 資料庫所在的路徑發生變化。

 磁碟可用空間不足。

 sql server可能沒有足夠的時間來恢復資料庫。

 資料庫在資料寫入的過程中資料頁因為停電或者記憶體洩漏等操作被損壞。

為了檢視故障情況,首先重新啟動了資料庫伺服器,檢視sql server服務管理器中的sql server的運作狀況,發現其執行正常,說明sql server服務是正常的。開啟企業管理器,故障情況依舊。

首先向部門領導報告了故障發生的情況,請示以後緊急啟用了一台臨時伺服器。

根據故障的狀況和「置疑」發生的可能性,筆者逐一進行了排查。檔案路徑沒有改變,檔案也沒有丟失,磁碟空間還有30gb,沒有進行資料庫恢復操作,那就只有最後一種可能了。問一下同事資料中心是否停過電,回答是沒有。仔細問了一下,有沒有異常發生,這時候有個同事說剛才在除錯kvm的時候不小心把電源線給拔下來了,由於沒有認識到連線的是伺服器,連續接插了幾次。啊!這可是資料儲存的server啊!不過還好,資料庫檔案、日誌檔案還在,可以使用資料庫附加到伺服器。開啟查詢分析器輸入以下指令碼命令:

exec sp_attach_db @dbname = n'cms', 

@filename1 = n'd:/data/cms.mdf',

@filename2 = n'e:/data/cms_log.ldf'

要以單使用者方式啟動資料庫,必須在啟動引數中輸入-cm,重新啟動資料庫就以單使用者方式啟動了。

重新進入還原master資料庫視窗,選擇備份檔案,確定即可。至此,已經成功還原了master資料庫,同時又自動關閉了sql server服務。為了避免因為操作失誤或者其他的原因導致恢復出現錯誤,決定先在自己的機器上模擬一下恢復過程。

於是,在自己的pc上,建立乙個資料庫test,只建立了乙個表qq,輸入5條資料,然後完整備份這個test資料庫,因為是完整備份而且是第一次,所以選擇「追加到**」或者「重寫現有**」均可。這個完全備份相當於星期日凌晨2:00的完全備份。再給test資料庫插入5條資料。現在給這個資料庫做一次差異備份,這個差異備份的目的相當於星期一凌晨2:00的差異備份。

開啟test資料庫,進入備份資料庫視窗,選取剛建立的備份裝置,選擇差異備份,注意,選擇「追加到**」。用同樣的操作再給資料庫插入5條記錄,完成星期二凌晨的差異備份。

然後是最重要的,現在資料庫中有15條記錄,我再加入10條記錄,這10條記錄就是我做完差異備份以後沒有進行備份的資料,也就是我要恢復的關鍵資料。我們現在看一下資料庫的記錄情況:新加的10條資料就是新增加的,也是要恢復的。到現在為止,已經全部**了我們的備份狀況。按照正常的恢復辦法只能恢復15條資料,那最後增加的資料也就是今天的上萬條資料就不能恢復了。到底該怎麼辦呢?

無奈之中,只好求助於好友,好友告訴我,這個情況是可以恢復的,不過要兩個前提條件。第乙個條件是資料庫的還原模型是完全模式。筆者這邊的資料庫還原模式是完全模式,這個沒有問題。第二個條件,事務日誌是完好的。在查詢分析器中開啟master,執行「backup log test to test_data_backup」,如果執行成功代表log日誌正常。馬上進行了測試,沒有問題,看來問題可以解決。筆者查詢了一下日誌的資料:

執行 backup log 語句以備份當前活動的事務日誌,同時指定要備份的事務日誌所屬的資料庫名稱。事務日誌備份將寫入的備份裝置。no_truncate 子句,通過它備份事務日誌而不截斷該事務日誌的非活動部分。只要事務日誌檔案是可訪問的並且沒有損壞,那麼即使資料庫不可訪問,此子句也允許備份事務日誌的活動部分。

現在的狀況是資料庫損壞但是log檔案還是好的,而且現在要做的話,肯定要加上no_truncate測試一下。停止sql server服務,刪掉test資料庫,重新重新整理企業管理器,看到的test資料庫的狀態也是「置疑」。在查詢分析器中,進入到master資料庫,敲入指令碼命令「backup log test to test_data_backup with no_truncate」。

結果處理成功。也就是說在資料庫損壞或者遺失的情況下,日誌檔案是可以手工恢復的。

如果沒有確認故障的原因,不要在伺服器上做任何系統級別的操作。想辦法模擬環境,在類似的狀態下操作,保證資料的安全性。

SQL資料庫置疑恢復

資料庫置疑恢復 步驟1 建立乙個新的資料庫,命名為原來資料庫的名字。步驟2 停止sql server 步驟3 把老資料庫的mdf檔案替換新資料庫的相應的mdf檔案,並把ldf檔案刪除。步驟4 重新啟動sql server服務,然後執行如下命令 use master gosp configure al...

SQL資料庫恢復技術

sql server 修復,sql恢復,誤刪除表,sql 資料恢復,sql server 資料庫恢復修復,sql 找回業務。使用資料庫的過程中,由於斷電或其他原因,有可能導致資料庫出現一些小錯誤,如檢索某些錶比特別慢,查詢不到符合條件的資料等。sql server資料庫備份有兩種方式,一種是使用ba...

c 備份恢復sql資料庫

很多人想實現在c 中備份與恢復sql資料庫,又想要有在sql中那種進度條的狀態.其實用c 的sqldmo就可以實現 資料庫備份 string backaway textbox1.text.trim sqldmo.backup obackup new sqldmo.backupclass sqldmo...