當我們想與關(guān)系數(shù)據(jù)庫交互時,SQL 就會出現(xiàn)并幫助用戶與數(shù)據(jù)庫進行交互。SQL 從高級語言中獲取用戶的輸入,然后訪問將代碼轉(zhuǎn)換為機器可理解的形式。SQL 確實會恢復數(shù)據(jù)庫文件,但有時 SQL 服務器恢復暫掛階段會進入帳戶,這會停止恢復過程并將關(guān)系數(shù)據(jù)庫置于恢復暫掛狀態(tài)。在本文中,將向你提供各種方法來修復 SQL Server 數(shù)據(jù)庫中的恢復掛起狀態(tài)。
將 SQL 數(shù)據(jù)庫置于恢復模式的原因
SQL 服務器恢復掛起可能是因為在解析數(shù)據(jù)庫中的某些事務期間系統(tǒng)關(guān)閉不當。
當你的硬盤或 RAM 中沒有足夠的空間時,有時運行各種查詢會導致 SQL 數(shù)據(jù)庫恢復掛起狀態(tài)。各種用戶移動他們的日志文件,以便可以增加系統(tǒng)的吞吐量,但在傳輸 SQL 文件時,他們的數(shù)據(jù)被損壞,這迫使數(shù)據(jù)庫處于恢復掛起狀態(tài)。
SQL Server 數(shù)據(jù)庫中的各個階段
SQL Server 數(shù)據(jù)庫中存在三個管理階段,它們根據(jù)損壞的嚴重程度進行劃分。
在線階段- 如果用戶在 SQL 數(shù)據(jù)庫服務器上工作時正在執(zhí)行查詢并且一個數(shù)據(jù)庫文件在此過程之間損壞,則數(shù)據(jù)庫保持在線并且仍然可以在線訪問。這個階段被稱為在線階段。
可疑階段- 在 SQL 應用程序啟動時,如果服務器無法恢復數(shù)據(jù)庫,則 SQL 將數(shù)據(jù)庫標記為可疑。
恢復掛起階段- 此階段發(fā)生在 SQL Server 知道必須運行數(shù)據(jù)庫恢復但有什么阻止它啟動時。在這種情況下,SQL Server 會將 DB 標記為“Recovery Pending”狀態(tài)。
你可以通過在 SQL 數(shù)據(jù)庫上運行以下命令來自行檢查處于恢復掛起狀態(tài)的數(shù)據(jù)庫。
從 sys.databases SELECT name, state_desc 并寫 GO 并按回車查看 SQL 數(shù)據(jù)庫恢復掛起狀態(tài)為;
可以看出結(jié)果中位置6的Demo是一個?RECOVERY PENDING STATE
?的數(shù)據(jù)庫。
現(xiàn)在讓我們研究一下恢復 SQL server 恢復掛起階段的方法。
SQL Server 數(shù)據(jù)庫中的手動恢復掛起狀態(tài)
在恢復模式下解決 SQL 數(shù)據(jù)庫問題的手動方法是通過兩個步驟完成的。在我們研究這些步驟之前,我建議復制一份你的 SQL 數(shù)據(jù)庫,這樣如果你無法解析這些步驟,那么你的數(shù)據(jù)就不會受到損壞。
第 1 步
在緊急模式下勾選 SQL 并強制修復它。使用 Alter DB 和 CHECKDB 命令刪除 MS SQL 恢復掛起狀態(tài),如下所示:
ALTER DATABASE [DBName] SET EMERGENCY;
ALTER DATABASE [DBName] set single_user;
DBCC CHECKDB ([DBName], REPAIR_ALLOW_DATA_LOSS) WITH ALL_ERRORMSGS;
ALTER DATABASE [DBName] set multi_user
SQL 通過將 SQL 服務器從緊急階段中解放出來來幫助他們的用戶,但如果上述命令不能幫助你解決問題,那么,
使用以下命令將數(shù)據(jù)庫置于緊急模式,
?ALTER DATABASE mydatabase SET EMERGENCY
?。使用此命令后,緊急標記將放置在文件后面。
現(xiàn)在,你必須通過應用以下查詢將 SQL 數(shù)據(jù)庫從緊急模式設(shè)置回正常模式,
ALTER DATABASE mydatabase SET ONLINE
?。
第 2 步
將數(shù)據(jù)庫設(shè)置為緊急模式并分離并重新連接主數(shù)據(jù)庫
要執(zhí)行此步驟以克服 ?SQL server recovery Pending
?狀態(tài),你需要執(zhí)行與步驟 1 中所做的相同的步驟,將數(shù)據(jù)庫置于緊急狀態(tài)。此用戶需要通過運行查詢使 MS SQL 脫機,然后再次聯(lián)機,以克服 MS SQL 恢復掛起狀態(tài)。
ALTER [DBName] SET EMERGENCY;
ALTER DATABASE [DBName] set multi_user
EXEC sp_detach_db '[DBName]'
EXEC sp_attach_single_file_db @DBName = '[DBName]', @physname = N'[mdf path]'
使用第二步,用戶將能夠創(chuàng)建一個新的日志文件,損壞的文件會自動從數(shù)據(jù)庫中刪除。讓我們看看你在使用第 1 步和第 2 步消除 SQL 服務器恢復掛起問題時將遇到的問題。
手動方法限制
- 在修復 SQL Server 數(shù)據(jù)庫中的恢復掛起狀態(tài)時,數(shù)據(jù)庫損壞程度可能很高。
- 如果你不熟練或來自技術(shù)領(lǐng)域,你將無法很好地運行這些命令,從而導致 SQL 數(shù)據(jù)庫文件混亂。
- 手動將 SQL 服務器聯(lián)機或脫機可能會使你的應用程序完全損壞,因此關(guān)系數(shù)據(jù)庫會受到很大的挫折,從而導致整個安裝應用程序崩潰。
現(xiàn)在讓我們轉(zhuǎn)向另一種控制 SQL 服務器數(shù)據(jù)庫恢復掛起問題的方法。
SQL Server 數(shù)據(jù)庫中的專業(yè)恢復掛起狀態(tài)
克服 SQL 服務器恢復掛起問題的專業(yè)方法比手動方法更好。在這方面,我們使用SQL 數(shù)據(jù)庫恢復工具來修復和恢復 SQL 數(shù)據(jù)庫的損壞文件,并幫助你修復 SQL 服務器數(shù)據(jù)庫中的恢復掛起狀態(tài)。此工具支持 MDF 和 NDF 文件。使用此實用程序可以恢復你的數(shù)據(jù)庫表、觸發(fā)器、記錄、函數(shù)和存儲過程。
牢記數(shù)據(jù)的重要性,此實用程序強制執(zhí)行兩種標準和高級恢復模式。在使用 SQL 數(shù)據(jù)庫恢復工具進行修復后,用戶還可以將文件從一臺 SQL 服務器保存到另一臺。這個工具歡迎所有版本的windows。使用此軟件時也可以考慮架構(gòu)和快照。
使用 SQL 數(shù)據(jù)庫恢復工具后,您不會在修復 SQL Server 數(shù)據(jù)庫恢復掛起狀態(tài)時遇到任何問題。
總結(jié)
為了解決 SQL 服務器恢復掛起狀態(tài),我描述了導致系統(tǒng)處于恢復掛起狀態(tài)的 SQL 數(shù)據(jù)庫文件損壞和損壞的各種原因。在此之后介紹了糾正階段手動方式,它分為 2 個部分。但是由于用戶在執(zhí)行手動查詢時遇到的問題,自動 SQL 數(shù)據(jù)庫恢復工具進入了帳戶。