App下載

如何修復(fù) SQL Server 數(shù)據(jù)庫(kù)中的恢復(fù)掛起狀態(tài)?

廢話輸出機(jī)器 2021-09-17 09:49:28 瀏覽數(shù) (23029)
反饋

當(dāng)我們想與關(guān)系數(shù)據(jù)庫(kù)交互時(shí),SQL 就會(huì)出現(xiàn)并幫助用戶與數(shù)據(jù)庫(kù)進(jìn)行交互。SQL 從高級(jí)語(yǔ)言中獲取用戶的輸入,然后訪問(wèn)將代碼轉(zhuǎn)換為機(jī)器可理解的形式。SQL 確實(shí)會(huì)恢復(fù)數(shù)據(jù)庫(kù)文件,但有時(shí) SQL 服務(wù)器恢復(fù)暫掛階段會(huì)進(jìn)入帳戶,這會(huì)停止恢復(fù)過(guò)程并將關(guān)系數(shù)據(jù)庫(kù)置于恢復(fù)暫掛狀態(tài)。在本文中,將向你提供各種方法來(lái)修復(fù) SQL Server 數(shù)據(jù)庫(kù)中的恢復(fù)掛起狀態(tài)。

將 SQL 數(shù)據(jù)庫(kù)置于恢復(fù)模式的原因

SQL 服務(wù)器恢復(fù)掛起可能是因?yàn)樵诮馕鰯?shù)據(jù)庫(kù)中的某些事務(wù)期間系統(tǒng)關(guān)閉不當(dāng)。

當(dāng)你的硬盤(pán)或 RAM 中沒(méi)有足夠的空間時(shí),有時(shí)運(yùn)行各種查詢會(huì)導(dǎo)致 SQL 數(shù)據(jù)庫(kù)恢復(fù)掛起狀態(tài)。各種用戶移動(dòng)他們的日志文件,以便可以增加系統(tǒng)的吞吐量,但在傳輸 SQL 文件時(shí),他們的數(shù)據(jù)被損壞,這迫使數(shù)據(jù)庫(kù)處于恢復(fù)掛起狀態(tài)。 

SQL Server 數(shù)據(jù)庫(kù)中的各個(gè)階段

SQL Server 數(shù)據(jù)庫(kù)中存在三個(gè)管理階段,它們根據(jù)損壞的嚴(yán)重程度進(jìn)行劃分。 

在線階段- 如果用戶在 SQL 數(shù)據(jù)庫(kù)服務(wù)器上工作時(shí)正在執(zhí)行查詢并且一個(gè)數(shù)據(jù)庫(kù)文件在此過(guò)程之間損壞,則數(shù)據(jù)庫(kù)保持在線并且仍然可以在線訪問(wèn)。這個(gè)階段被稱(chēng)為在線階段。

可疑階段- 在 SQL 應(yīng)用程序啟動(dòng)時(shí),如果服務(wù)器無(wú)法恢復(fù)數(shù)據(jù)庫(kù),則 SQL 將數(shù)據(jù)庫(kù)標(biāo)記為可疑。

恢復(fù)掛起階段- 此階段發(fā)生在 SQL Server 知道必須運(yùn)行數(shù)據(jù)庫(kù)恢復(fù)但有什么阻止它啟動(dòng)時(shí)。在這種情況下,SQL Server 會(huì)將 DB 標(biāo)記為“Recovery Pending”狀態(tài)。

恢復(fù)待處理

你可以通過(guò)在 SQL 數(shù)據(jù)庫(kù)上運(yùn)行以下命令來(lái)自行檢查處于恢復(fù)掛起狀態(tài)的數(shù)據(jù)庫(kù)。

從 sys.databases SELECT name, state_desc 并寫(xiě) GO 并按回車(chē)查看 SQL 數(shù)據(jù)庫(kù)恢復(fù)掛起狀態(tài)為;

腳本結(jié)果

可以看出結(jié)果中位置6的Demo是一個(gè)?RECOVERY PENDING STATE?的數(shù)據(jù)庫(kù)。

現(xiàn)在讓我們研究一下恢復(fù) SQL server 恢復(fù)掛起階段的方法。

SQL Server 數(shù)據(jù)庫(kù)中的手動(dòng)恢復(fù)掛起狀態(tài)

在恢復(fù)模式下解決 SQL 數(shù)據(jù)庫(kù)問(wèn)題的手動(dòng)方法是通過(guò)兩個(gè)步驟完成的。在我們研究這些步驟之前,我建議復(fù)制一份你的 SQL 數(shù)據(jù)庫(kù),這樣如果你無(wú)法解析這些步驟,那么你的數(shù)據(jù)就不會(huì)受到損壞。

第 1 步

在緊急模式下勾選 SQL 并強(qiáng)制修復(fù)它。使用 Alter DB 和 CHECKDB 命令刪除 MS SQL 恢復(fù)掛起狀態(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 通過(guò)將 SQL 服務(wù)器從緊急階段中解放出來(lái)來(lái)幫助他們的用戶,但如果上述命令不能幫助你解決問(wèn)題,那么,

使用以下命令將數(shù)據(jù)庫(kù)置于緊急模式,

?ALTER DATABASE mydatabase SET EMERGENCY?。使用此命令后,緊急標(biāo)記將放置在文件后面。

對(duì)象瀏覽器

現(xiàn)在,你必須通過(guò)應(yīng)用以下查詢將 SQL 數(shù)據(jù)庫(kù)從緊急模式設(shè)置回正常模式,

ALTER DATABASE mydatabase SET ONLINE?。

第 2 步

將數(shù)據(jù)庫(kù)設(shè)置為緊急模式并分離并重新連接主數(shù)據(jù)庫(kù)

要執(zhí)行此步驟以克服 ?SQL server recovery Pending ?狀態(tài),你需要執(zhí)行與步驟 1 中所做的相同的步驟,將數(shù)據(jù)庫(kù)置于緊急狀態(tài)。此用戶需要通過(guò)運(yùn)行查詢使 MS SQL 脫機(jī),然后再次聯(lián)機(jī),以克服 MS SQL 恢復(fù)掛起狀態(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)建一個(gè)新的日志文件,損壞的文件會(huì)自動(dòng)從數(shù)據(jù)庫(kù)中刪除。讓我們看看你在使用第 1 步和第 2 步消除 SQL 服務(wù)器恢復(fù)掛起問(wèn)題時(shí)將遇到的問(wèn)題。

手動(dòng)方法限制

  • 在修復(fù) SQL Server 數(shù)據(jù)庫(kù)中的恢復(fù)掛起狀態(tài)時(shí),數(shù)據(jù)庫(kù)損壞程度可能很高。
  • 如果你不熟練或來(lái)自技術(shù)領(lǐng)域,你將無(wú)法很好地運(yùn)行這些命令,從而導(dǎo)致 SQL 數(shù)據(jù)庫(kù)文件混亂。
  • 手動(dòng)將 SQL 服務(wù)器聯(lián)機(jī)或脫機(jī)可能會(huì)使你的應(yīng)用程序完全損壞,因此關(guān)系數(shù)據(jù)庫(kù)會(huì)受到很大的挫折,從而導(dǎo)致整個(gè)安裝應(yīng)用程序崩潰。

現(xiàn)在讓我們轉(zhuǎn)向另一種控制 SQL 服務(wù)器數(shù)據(jù)庫(kù)恢復(fù)掛起問(wèn)題的方法。

SQL Server 數(shù)據(jù)庫(kù)中的專(zhuān)業(yè)恢復(fù)掛起狀態(tài) 

克服 SQL 服務(wù)器恢復(fù)掛起問(wèn)題的專(zhuān)業(yè)方法比手動(dòng)方法更好。在這方面,我們使用SQL 數(shù)據(jù)庫(kù)恢復(fù)工具來(lái)修復(fù)和恢復(fù) SQL 數(shù)據(jù)庫(kù)的損壞文件,并幫助你修復(fù) SQL 服務(wù)器數(shù)據(jù)庫(kù)中的恢復(fù)掛起狀態(tài)。此工具支持 MDF 和 NDF 文件。使用此實(shí)用程序可以恢復(fù)你的數(shù)據(jù)庫(kù)表、觸發(fā)器、記錄、函數(shù)和存儲(chǔ)過(guò)程。 

牢記數(shù)據(jù)的重要性,此實(shí)用程序強(qiáng)制執(zhí)行兩種標(biāo)準(zhǔn)和高級(jí)恢復(fù)模式。在使用 SQL 數(shù)據(jù)庫(kù)恢復(fù)工具進(jìn)行修復(fù)后,用戶還可以將文件從一臺(tái) SQL 服務(wù)器保存到另一臺(tái)。這個(gè)工具歡迎所有版本的windows。使用此軟件時(shí)也可以考慮架構(gòu)和快照。 

使用 SQL 數(shù)據(jù)庫(kù)恢復(fù)工具后,您不會(huì)在修復(fù) SQL Server 數(shù)據(jù)庫(kù)恢復(fù)掛起狀態(tài)時(shí)遇到任何問(wèn)題。

總結(jié)

為了解決 SQL 服務(wù)器恢復(fù)掛起狀態(tài),我描述了導(dǎo)致系統(tǒng)處于恢復(fù)掛起狀態(tài)的 SQL 數(shù)據(jù)庫(kù)文件損壞和損壞的各種原因。在此之后介紹了糾正階段手動(dòng)方式,它分為 2 個(gè)部分。但是由于用戶在執(zhí)行手動(dòng)查詢時(shí)遇到的問(wèn)題,自動(dòng) SQL 數(shù)據(jù)庫(kù)恢復(fù)工具進(jìn)入了帳戶。 


SQL

0 人點(diǎn)贊