達夢數(shù)據(jù)庫文件故障的恢復(fù)方法
1、概述
1.1 概述
本文介紹了達夢數(shù)據(jù)庫文件損壞或誤刪除后的恢復(fù)方法。這里的數(shù)據(jù)庫文件包括,表空間數(shù)據(jù)文件、重做日志文件、UNDO文件、TEMP文件、控制文件等。介紹了兩種恢復(fù)場景,第一種場景是使用備份集恢復(fù),第二種場景是在沒有備份集的情況下嘗試恢復(fù)。
1.2 環(huán)境介紹
數(shù)據(jù)庫版本:DM Database 64 V8 03134284094-20231108-207962-20067
操作系統(tǒng)版本:Linux version 4.19.90-24.4.v2101.ky10.x86_64
2、使用備份集的恢復(fù)方法
本章模擬了幾種故障場景及還原、恢復(fù)方法,不介紹備份還原理論,學(xué)習(xí)備份還原理論知識可以參考官方文檔《DM8備份與還原》。
2.1 實驗準備
聯(lián)機備份
SQL> backup database backupset '/dm8/backup/fullbak_20241126_002' compressed level 1;
2.2 誤刪除“用戶表空間數(shù)據(jù)文件”
1) 制造故障
表空間數(shù)據(jù)文件損壞:
rm /dm8/data/DAMENG/MAIN.DBF
2)還原方法
數(shù)據(jù)文件誤刪除,如果數(shù)據(jù)庫沒有關(guān)閉,應(yīng)該優(yōu)先考慮從操作系統(tǒng)找回,優(yōu)點是不需要關(guān)閉數(shù)據(jù)庫,相關(guān)方法我們在第3章介紹。這里介紹的是用備份集還原的方法。
dmrman RESTORE DATABASE '/dm8/data/DAMENG/dm.ini' TABLESPACE MAIN FROM BACKUPSET '/dm8/backup/fullbak_20241126_002'; RECOVER DATABASE '/dm8/data/DAMENG/dm.ini' TABLESPACE MAIN;
2.3 誤刪除SYSTEM.DBF
系統(tǒng)表空間數(shù)據(jù)文件故障,不能使用2.2節(jié)還原表空間的方法,需要全庫還原。
全庫還原有兩種方法,方法1是重新初始化一個新庫,在這個新庫上做還原;方法2是將備份集還原到指定目錄。
1)制造故障,刪除SYSTEM.DBF
rm /dm8/data/DAMENG/SYSTEM.DBF
2)恢復(fù)SYSTEM.DBF
如果磁盤空間充足,可以考慮將數(shù)據(jù)庫目錄備份出來
mv /dm8/data/DAMENG /dm8/data/DAMENG_BAK
方法1:重新初始化一個新庫,在這個新庫上做還原
dminit path=/dm8/data/ RESTORE DATABASE '/dm8/data/DAMENG/dm.ini' FROM BACKUPSET '/dm8/backup/fullbak_20241126_002'; RECOVER DATABASE '/dm8/data/DAMENG/dm.ini' FROM BACKUPSET '/dm8/backup/fullbak_20241126_002'; RECOVER DATABASE '/dm8/data/DAMENG/dm.ini' UPDATE DB_MAGIC;
方法2:數(shù)據(jù)庫還原到指定目錄
RESTORE DATABASE TO '/dm8/data/DAMENG/' OVERWRITE FROM BACKUPSET '/dm8/backup/fullbak_20241126_002'; RECOVER DATABASE '/dm8/data/DAMENG/dm.ini' FROM BACKUPSET '/dm8/backup/fullbak_20241126_002'; RECOVER DATABASE '/dm8/data/DAMENG/dm.ini' UPDATE DB_MAGIC;
2.4 誤刪除ROLL.DBF
1)制造故障,刪除ROLL.DBF
rm /dm8/data/DAMENG/ROLL.DBF
2)使用備份集還原
dmrman RESTORE DATABASE '/dm8/data/DAMENG/dm.ini' TABLESPACE ROLL FROM BACKUPSET '/dm8/backup/fullbak_20241126_002'; RECOVER DATABASE '/dm8/data/DAMENG/dm.ini' TABLESPACE ROLL;
2.5 誤刪除REDO日志文件
REDO文件損壞,需要使用備份集全庫還原,可以參考2.3節(jié)SYSTEM.DBF恢復(fù)方法。
3、無備份集的恢復(fù)方法
3.1 誤刪除“表空間數(shù)據(jù)文件”
LINUX 系統(tǒng)中被刪除的文件,只要其句柄沒有被關(guān)閉,可以在/proc/<pid>/fd 中找到其對應(yīng)的文件副本。其中<pid>指打開該文件的進程 id。
利用該方法,結(jié)合 OS 命令,DM 提供失效文件的恢復(fù)方案如下:
1、 調(diào)用系統(tǒng)過程 SP_TABLESPACE_PREPARE_RECOVER(表空間名稱)準備進行恢復(fù);
2、 如果使用過程中 DM 報錯表空間數(shù)據(jù)文件被刪除,通過操作系統(tǒng)的 ps 命令找到當前 dmserver 的 PID:ps -ef|grep dmserver;
3、 使用操作系統(tǒng) ll 命令查看被刪除文件對應(yīng)的副本:ll /proc/<PID>/fd,會發(fā)現(xiàn)被刪除的文件后有(deleted)字樣;
4、 使用操作系統(tǒng)的 cp 命令將文件復(fù)制到原位置:cp 源路徑 目的路徑;
5、 復(fù)制成功后,調(diào)用系統(tǒng)過程 SP_TABLESPACE_RECOVER(表空間名稱)完成表空間失效文件的恢復(fù)。注意,要保證數(shù)據(jù)文件正確修復(fù),需要保證在 SP_TABLESPACE_PREPARE_RECOVER后進行數(shù)據(jù)文件的復(fù)制。
故障模擬:
一、制造故障
1、查看表空間對應(yīng)的數(shù)據(jù)文件
select t.name,d.path from SYS.V$TABLESPACE t left join SYS.V$DATAFILE d on(d.GROUP_ID=T.ID);
2、模擬誤刪除數(shù)據(jù)文件
rm /dm8/data/DAMENG/DMHR.DBF
二、恢復(fù)方法
1、 表空間失效文件恢復(fù)準備
SP_TABLESPACE_PREPARE_RECOVER('DMHR');
2、 查找dmserver 進程號
ps -ef|grep dmserver dmdba 1798 1 0 09:14 ? 00:00:05 /dm8/dmdbms/bin/dmserver path=/dm8/data/DAMENG/dm.ini -noconsole
3、 查看進程目錄下的文件
ll /proc/1798/fd
4、 還原文件
cp -p /proc/1798/fd/17 /dm8/data/DAMENG/DMHR.DBF
5、 修復(fù)表空間文件
SP_TABLESPACE_RECOVER('DMHR');
6、驗證
SELECT count(*) FROM DMHR.EMPLOYEE;
恢復(fù)成功!
3.2 誤刪除控制文件
控制文件恢復(fù)方法:
到ctl_bak目錄,找到時間最近的備份,名稱改為dm.ctl即可。
3.3 誤刪除ROLL.DBF
1)制造故障,刪除ROLL.DBF
rm /dm8/data/DAMENG/ROLL.DBF
2)使用其他數(shù)據(jù)庫的ROLL文件冒充誤刪除的文件
使用其他數(shù)據(jù)庫的ROLL文件冒充誤刪除的文件。
修改 dm.ini 參數(shù) PSEG_RECV 為 0,可以選擇跳過 ROLL.DBF 啟動數(shù)據(jù)庫臨時啟動數(shù)據(jù)庫(危險操作,可能破壞事務(wù)的原子性)。
PSEG_RECV 參數(shù)釋意: 系統(tǒng)故障重啟時,對活動事務(wù)和已提交事務(wù)的處理方式。 0:跳過回滾活動事務(wù)和 PURGE 已經(jīng)提交事務(wù)的步驟。 1:回滾活動事務(wù)并 PURGE 已經(jīng)提交事務(wù); 2:延遲 PURGE 已提交事務(wù),延遲回滾活動事務(wù); 3:回滾活動事務(wù),延遲 PURGE 已提交事務(wù)。
vi dm.ini PSEG_RECV =0
拷貝其他數(shù)據(jù)庫ROLL.DBF冒充誤刪除的文件
cp /dm8/data/PROD/ROLL.DBF /dm8/data/DAMENG/ #拷貝其他庫的ROLL.DBF
啟動數(shù)據(jù)庫
dmserver ./dm.ini
數(shù)據(jù)庫啟動,恢復(fù)成功!
3.4 誤刪除REDO日志文件
重做日志文件損壞,推薦使用備份集恢復(fù)。
在沒有備份的情況下,可以嘗試使用沒損壞的redo文件或使用新建相同配置數(shù)據(jù)庫的redo文件冒充損壞的redo文件。通常要用dmmdf工具修改db_magic、pemnt_magic。不過這么做是有問題的,首先如果成功了,存在數(shù)據(jù)不一致的風(fēng)險;其次,不一定能成功,至少在本文涉及的版本上,博主沒有恢復(fù)成功。
3.5 誤刪除TEMP.DBF
1)制造故障,刪除TEMP.DBF
rm /dm8/data/DAMENG/TEMP.DBF
2)臨時表空間數(shù)據(jù)文件誤刪除后不用還原,重啟數(shù)據(jù)庫后會重新生成TEMP.DBF文件
數(shù)據(jù)庫啟動后重新創(chuàng)建了TEMP.DBF。
以上就是達夢數(shù)據(jù)庫文件故障的恢復(fù)方法的詳細內(nèi)容,更多關(guān)于達夢數(shù)據(jù)庫文件故障的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
一次因表變量導(dǎo)致SQL執(zhí)行效率變慢的實戰(zhàn)記錄
這篇文章主要給大家介紹了一次因表變量導(dǎo)致SQL執(zhí)行效率變慢的實戰(zhàn)記錄,本文通過圖文以及示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者了解sql具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2021-11-11從Bak文件中恢復(fù)SQL數(shù)據(jù)庫的三種方法
在數(shù)據(jù)庫管理和維護過程中,數(shù)據(jù)的安全性和完整性至關(guān)重要,備份文件(.bak 文件)是 SQL Server 中常用的數(shù)據(jù)庫備份格式,本文將介紹從 .bak 文件恢復(fù) SQL 數(shù)據(jù)庫的基本步驟和最佳實踐,需要的朋友可以參考下2024-09-09SQL數(shù)據(jù)庫的所有命令(函數(shù)、運算符)匯總大全
結(jié)構(gòu)化查詢語言(Structured?Query?Language)簡稱SQL,結(jié)構(gòu)化查詢語言是一種數(shù)據(jù)庫查詢和程序設(shè)計語言,用于存取數(shù)據(jù)以及查詢、更新和管理關(guān)系數(shù)據(jù)庫系統(tǒng)。sql語句就是對數(shù)據(jù)庫進行操作的一種語言。2023-01-01StarRocks數(shù)據(jù)庫詳解(什么是StarRocks)
StarRocks是一個高性能的全場景MPP數(shù)據(jù)庫,支持多種數(shù)據(jù)導(dǎo)入導(dǎo)出方式,包括Spark、Flink、Hadoop等,它采用分布式架構(gòu),支持多副本和彈性容錯,本文介紹StarRocks詳解,感興趣的朋友一起看看吧2025-03-03dbeaver導(dǎo)入導(dǎo)出數(shù)據(jù)庫圖文教程(sql文件形式)
這篇文章主要介紹了如何使用DBeaver復(fù)制數(shù)據(jù)庫,在導(dǎo)出和導(dǎo)入數(shù)據(jù)庫時,需要注意編碼一致性,以避免導(dǎo)入錯誤,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2025-02-02