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