以下內容摘自《中國計算機報》本次的內容針對 SQL Server 數據庫 ,但是相關原理應該可適用于其他數據庫。
數據庫系統主要由數據文件和日志文件兩大部分構成,數據文件存儲數據,日志文件存儲操作數據的行為。
數據文件
數據文件有兩種類型:主數據文件和次要數據文件。主數據文件是數據庫的起點,指向數據庫中的其他文件。每個數據庫都有一個主數據文件,其擴展名是 .mdf 。除了主數據文件外其他文件都是次要數據文件,次要數據文件擴展名為 .ndf 。
日志文件
日志文件記錄對數據庫操作的行為,下面過程是數據操作的過程,首先將數據操作命令寫入到緩存中,并立即寫入日志文件,但不會立即寫入數據文件。日志文
件通過一個標記來確定某個操作是否已將緩存中的數據寫入數據文件。當 SQL
Server 重啟后,會自動查看日志中最新的標記點,并將這個標記點后面的交易記錄抹去,因為這些交易記錄并沒有真正地將緩存中的數據寫入數據文件,這種
方式可以防止那些中斷的操作修改數據文件。
事務日志記錄數據庫操作命令,僅記錄執行數據發生的動作,而不是記錄數據的執行結果。因此備份事務日志后,將備份點之前已經完成的事務標記為“不活動”,而且在執行完整備份數據庫后,將自動截斷標記為“不活動”的日志記錄。合理的安排事務日志備份將提高數據恢復的能力,可以將數據恢復到發生故障前的 1 秒鐘。
各種文件丟失恢復方法
數據文件丟失
數據庫系統處于運行狀態時,數據庫文件處于“活動”狀態,數據庫文件不能被刪除。如果確實出現數據文件被刪除的情況,可能由于以下原因: MS SQL Server 數據庫服務停止;或者在企業管理器中,數據庫管理員使用“分離數據庫”功能,分離數據庫后將數據庫文件刪除。
當出現數據庫文件被刪除時,首先需要了解數據庫文件如何被刪除,再利用恢復軟件恢復被刪除的文件。如果是在服務被停止的狀態下刪除,數據庫文件恢復后,數據庫文件即可正常加載。如果是數據庫分離后的刪除,數據庫文件恢復后,在企業管理器中,使用附加數據庫功能即可。
日志文件丟失
日志文件丟失,經常出現在硬件出現故障時,主要體現在數據文件和日志分別存儲在不同的物理介質中,當介質損壞時,日志文件隨之丟失,丟失 SQL Server 日志文件分為兩類:無活動事務的日志和包含活動事務的日志。
SQL Server 在工作狀態下無法刪除日志文件,事務日志文件在 SQL Server 服務未啟動的情況正點可以被刪除。啟動 SQL 服務后,數據庫即被標志為“置疑”狀態,這種狀態下丟失的日志文件為無活動事務日志文件。無活動事務的日志文件丟失時,首先在企業管理器中,使用分離數據庫功能,分離“置疑”的數據庫。然后,使用附加數據庫功能附加數據庫,在附加的過程中創建新的日志文件即可。
當包含活動事務日志的文件丟失時,使用無活動事務的日志丟失處理方法,將顯示“數據庫和日志文件不符合,不能附加數據庫”錯誤信息。數據庫管理員首先要停止 SQL Server 服務,將數據文件備份到安全 區域。然后啟動 SQL Server 服務,創建新的同名數據庫,再停止 SQL Server 服務,用備份的數據文件覆蓋新創建的數據文件。以單用戶模式啟動 SQL Server 服務后,將數據庫模式設置為緊急模式,使用“ DBCC CHECKDB ”命令檢驗數據庫的狀態,完成后將數據庫設置為正常模式,即可完成數據庫的修復。
數據表文件丟失
在業務系統中提供的數據刪除功能和數據庫管理員的在維護數據庫過程中,使用 Delete 命令刪除數據表中的數據,產生的結果完全相同。在工作中經常會遇到誤刪數據的情況。管理員發出刪除數據命令后,首先將刪除命令記錄在日志文件中,然后在數據庫中執行刪除操作。由于數據行記錄在數據頁中,已經刪除的數據頁并沒有真正刪除“ Slot ”中的數據,只是將數據頁標記為已經使用,如果有新的數據寫入,不會對此類數據頁寫入數據。
在 SQL Server 數據庫中,沒有提供恢復數據行命令,標準的恢復刪除數據的方法是使用基于備份的事務日志時間點功能。管理員在使用日志恢復時,經過多次定位時間點,可以還原刪除的數據。
當數據庫管理員發現數據誤刪后,可以使用 Log Explorer for SQL Server 工具恢復數據。首先立即備份數據庫,停止 SQL Server 服務。然后啟動上述工具,使用離事務日志文件功能,加載誤刪的日志文件。選擇目標數據表以及執行刪除操作的數據用戶,設置過濾條件,在瀏覽日志窗口中顯示相關的日志,使有“ Undo Transactions ”功能生成 InsertSQL 代碼并保存到文本文件中,確認腳本正確后,使用“ Run SQL Script ”功能即可完成數據恢復。
數據庫恢復
數據庫恢復是數據庫管理員必須掌握的基本技能。 SQL Server 數據庫提供了 3 種數據庫恢復模型:簡單模型、完全模型和大容量日志記錄模型,如果數據庫可用,可按照如下流程恢復數據庫:
1.ant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;">
備份尾日志。尾日志記錄是自上一次數據庫完整備份、差異備份或者日志備份后生成的日志。
2.
還原數據庫備份 。該恢復過程可以在圖形模式和查詢分析器中完成。當數據庫不能訪問時,也可恢復數據庫或者日志,數據庫處于恢復過程中顯示的狀態為“正在裝載”。
3.
還原備份的事務日志備份,恢復參數為“ No Recovery ”。
4.
用同樣的方法還原尾日志。在還原尾日志的過程中恢復參數設置為“ With Recovery ”,恢復過程中自動回滾未提交的事務日志,根據需要選擇時間點,數據庫恢復即可完成。
企業備份數據的方法各不相同,數據庫管理員應該了解數據庫備份策略,要經常對數據庫恢復和恢復過程進行測試 ,以便應對突發的數據庫災難。