(本文部分內容摘自DM產品技術支援培訓文件,如需要更詳細的文件,請查詢官方操作手冊,謝謝)
一、原理
1、DM8備份還原簡介
1.1、基本概念
(1)表空間與資料檔案
▷▶ DM8表空間型別:
▷▶ SYSTEM
▷▶ ROLL
▷▶ TEMP
▷▶ MAIN
▷▶ HMAIN(不支援對HMAIN表空間備份還原)
▷▶ 使用者自定義表空間
(2)重做日誌
▷▶REDO 日誌,記錄了所有物理頁的修改,基本資訊包括操作型別、表空間號、檔案號、頁號、頁內偏移、實際資料等。
▷▶資料庫中INSERT、DELETE、UPDATE 等DML操作以及CREATE TABLE等DDL操作最終都會轉化為對某些資料檔案、某些資料頁的修改。
▷▶DM8預設的兩個聯機重做日誌:DAMENG01.log,DAMENG02.log。
(3)歸檔日誌
▷▶在歸檔模式下,聯機REDO 日誌被連續拷貝到歸檔日誌後就生成了歸檔日誌檔案。
▷▶歸檔日誌檔案以歸檔時間命名。例如: ARCHIVE_LOCAL1_20160217171507968.log。
▷▶開啟歸檔模式會對系統效能產生一定影響,但更安全。
(4)PWR記錄
▷▶REDO 日誌中包含有一種特殊的記錄,稱為PWR(Page Written Record)日誌。
▷▶PWR 日誌包含表空間ID、檔案ID、資料在檔案中的頁號和頁的當前LSN資訊。
▷▶每次資料頁刷盤時,系統都會生成一條對應的PWR日誌。
▷▶可用來提升系統故障恢復速度。在引入PWR記錄之前,資料庫故障重啟時需要重做所有有效的REDO 日誌記錄。根據PWR記錄可以快速判斷資料頁是否已刷盤,有效避免無用IO。
(5)檢查點與日誌序列號
▷▶檢查點的功能是按照資料頁第一次被修改的順序,依次將BUFFER緩衝區中的髒頁寫入磁碟,並在這個過程中動態調整CKPT_LSN值,釋放日誌空間。
▷▶LSN (LOG SEQUENCE NUMBER),即日誌序列號,表示REDO 日誌產生的順序,系統為每個REDO 日誌分配一個LSN值。
(6)備份集
一個備份集對應一次完整備份,為一個目錄,由一個或多個備份片和一個後設資料檔案組成。
▷▶備份片(字尾為.bak)是用來儲存備份資料的檔案。備份時,目標資料檔案內容或歸檔日誌內容經過處理後,都會存放到這些備份片檔案中。
▷▶後設資料檔案(字尾為.meta)用來儲存備份資訊。包括:
2.1、備份
備份集本身相關的資訊
備份源庫的建庫引數資訊
備份集中備份資料檔案資訊
備份集中備份片的資訊
(7)備份
▷▶將待備份的資料經過處理如加密、壓縮等後,寫到備份片檔案中,並將相關備份資訊寫到後設資料檔案中的過程。
▷▶DM8中對備份的劃分標準有如下幾種:
①備份組織形式:物理備份和邏輯備份
②備份時,資料庫是否執行:聯機備份和離線備份
③備份的粒度大小:庫備份、表空間備份、歸檔備份和表備份
歸檔備份支援聯機和離線;
歸檔備份會把收集到的歸檔檔案,備份到備份集中的每一個備份片。必要的時候可以使用歸檔備份集,還原歸檔。
④備份資料的一致性:一致性備份和非一致性備份
⑤備份資料的完整性:完全備份和增量備份
(8)還原
▷▶把備份集中的備份資料經過處理後,寫回到還原目標庫中相應的資料檔案中的過程。
注:還原回來的資料通常是處於非一致性狀態,需要執行恢復操作,使得目標資料庫資料一致,才能對外提供服務。
▷▶分類
與備份的分類類似,還原也可按照以下標準進行劃分:
①還原組織形式:物理還原和邏輯還原
②還原時,資料庫是否執行:聯機還原和離線還原
③還原的粒度大小:庫還原、表空間還原、歸檔還原和表還原
④還原資料的完整性:完全備份還原和增量備份還原
(9)恢復
▷▶恢復是重做本地歸檔日誌或者備份集中備份的歸檔日誌的過程。
沒有經過恢復的還原資料庫是不允許啟動的。
表空間和表還原均為聯機執行,都不需要再執行恢復操作。此處恢復是指資料庫恢復操作。
▷▶根據恢復過程中是否重做歸檔,及重做歸檔日誌的來源,可將恢復分三類:
①更新DB_MAGIC
DB_MAGIC記錄資料庫的變化,當資料庫經過備份還原並恢復後,DB_MAGIC就會改變(SELECT DB_MAGIC FROM V$RLOG;)
在不需要重做歸檔日誌恢復資料的情況下,可以直接更新DB_MAGIC 來完成最後的恢復工作。
②從備份集恢復
利用備份集中備份日誌的恢復過程。
③從歸檔恢復
利用重做本地歸檔日誌來恢復資料的過程。
從歸檔恢復可恢復到最新狀態,或指定的時間點、指定的LSN值
2、DM8備份還原原理
(1)備份過程
▷▶庫級和表空間級備份
屬於物理備份
聯機庫級和表空間備份要求配置歸檔
都可進行完全備份和增量備份
備份物件:資料檔案和歸檔日誌
▷▶歸檔備份
是把歸檔目錄下,符合條件的歸檔檔案都備份下來
歸檔備份物件:包含了後設資料資訊和REDO 日誌的歸檔檔案
▷▶表級備份
過程包含資料備份和元資訊備份
表資料通過表上的聚集索引排序,表級資料備份針對表的聚集索引進行
表級備份元資訊包括建表語句、重建約束語句、重建索引語句等
表級備份均為完全備份和一致性備份,不需要配置歸檔
實現過程採用表的記憶體邏輯儲存結構,所訪問的頁均為有效頁,故無需進行智慧抽取
(2)智慧抽取
▷▶僅限備份資料檔案過程中使用
▷▶在遍歷各檔案中資料頁時,根據描述頁的標記判斷資料頁是否被分配、使用,將未使用的資料頁剔除,僅保留有效資料頁進行備份。
▷▶相對於直接拷貝資料檔案方式,物理備份產生的備份集更小,有效減少IO數量,提升備份還原的效率
(3)加密與壓縮
▷▶壓縮和加密均由使用者顯式指定;
▷▶壓縮級別支援1~9級,級別越高壓縮比越高,但同時壓縮速度越慢。預設採用壓縮級別1;
▷▶加密:加密密碼、加密型別(簡單加密or完全加密)和加密演算法;
▷▶若同時指定加密和壓縮,則先壓縮後加密;
▷▶增量備份,若指定加密,且基備份也存在加密,則使用的加密演算法和加密密碼必須與其基備份中一致
(4)PWR優化
▷▶PWR (Page Written Record)日誌會記錄每次刷盤時資料在資料頁中的編號及所屬資料頁的LSN資訊等。
▷▶增量備份的常規實現:需要掃描所有的資料檔案頁,再依次取出LSN >=基備份START_LSN的資料頁。
▷▶採用PWR優化:通過掃描歸檔日誌中PWR 日誌,直接比較日誌LSN值與基備份的START_LSN,就可確定需備份的資料頁。
▷▶在備份語句中指定USE PWR來啟動增量備份的PWR優化,預設不使用。
(5)並行備份
▷▶DM8支援對庫級、歸檔備份和表空間級的並行備份
▷▶可通過關鍵字PARALLEL指定是否執行並行備份,以及並行數.預設並行數為4,指定值為0或1則按非並行處理。
▷▶並行備份以資料檔案為單位,實際可使用的最大並行數就是目標備份資料檔案的個數。
▷▶增量備份是否並行及並行數取決於其基備份
▷▶並行備份的結果包括一個主備份集目錄和幾個子備份集目錄
▷▶一個並行數為4的離線並行備份集(左)和非並行離線備份集(右)比較
2.2、還原與恢復
2.2.1 還原過程
(1)庫還原和表空間還原
▷▶庫還原需要使用者準備目標庫,目標庫建庫引數需與備份庫匹配(可通過DMRMAN的show功能檢視備份資訊)
▷▶表空間還原則不允許跨庫還原,只能在源庫上執行還原
(2)歸檔還原
▷▶過程概述:
1) 讀取後設資料檔案,獲取備份資訊,校驗備份集是否有效;
2) 從使用者指定的備份集中,收集歸檔檔案,根據使用者指定的過濾條件,過濾需要還原哪些歸檔;
3) 根據使用者指定的OVERWRITE引數,確定如果目標歸檔檔案已經存在的處理策略:
新增一條日誌繼續還原其他歸檔檔案;
直接終止還原,報錯範圍;
強制覆蓋處理。
4) 執行歸檔還原,從備份片中把資料去除,必要時經過解壓縮&解密處理後回寫到新的歸檔檔案中,還原結束。
(3)表還原
1)表結構還原
目標表存在,清除資料、二級索引和約束;
目標表不存在,利用備份集中記錄的建表語句重建
2)表資料還原
3)索引和約束的重建
2.2.2 恢復過程
▷▶備份集恢復有以下幾種情況:
如果備份集中備份了歸檔日誌,則只要將備份集中備份的歸檔日誌讀出並生成到一個臨時歸檔檔案中,然後重做該臨時歸檔檔案即可;
如果備份集中沒有備份歸檔日誌,則只需要重做本地歸檔中備份集START_LSN到END_LSN之間的一段歸檔即可;
如果START_LSN和END_LSN之間無日誌,即START_LSN = END_LSN+1,那麼只要更新DB_MAGIC即可。
2.2.3 解密和解壓縮
▷▶DM8 還原恢復時的解密過程如下:
首先,通過比對使用者輸入與從後設資料檔案得到備份集加密資訊來檢驗加密密碼和演算法是否正確;
然後,從備份片檔案中讀取備份資料之後,寫到目標檔案(包括目標資料檔案和臨時歸檔檔案)之前執行解密操作。
▷▶解壓縮是自動進行的,不需要使用者手動指定什麼
▷▶若備份集同時存在加密和壓縮,那麼與備份過程處理相反,會先解密再解壓縮,然後將處理的最終資料寫入到目標檔案中。
2.2.4 並行還原
▷▶對應並行備份集的還原,非並行備份集不能執行並行還原;
▷▶並行數使用目標並行備份集並行數;
▷▶並行備份集還支援非並行還原(指定關鍵字NOT PARALLEL)
2.3、介質管理層
▷▶介質管理層(MML)
DM8根據自身實現自定義了一套API介面SBT來負責備份資料在儲存介質上的實際讀寫操作。
整個儲存介質上的讀寫操作,由MML呼叫SBT完成。
目前 DM8 備份還原支援磁碟(DISK)和磁帶(TAPE)兩種儲存介質。
磁碟介質SBT介面實現為dmsbt( WINDOWS 上為 dmsbt.dll,非 WINDOWS 上為 dmsbt.so)
磁帶介質實現為dmsbtex(WINDOWS上命名為dmsbtex.dll, Linux上命名為dmsbtex.so)
其他第三方磁帶儲存實現,僅需將庫檔名命名為 dmsbtex.dll(WINDOWS)或dmsbtex.so(非 WINDOWS),並替換掉DM8的相應dmsbtex庫檔案即可。
2.4、 應用場景分析
2.4.1 選擇備份、還原方式
▷▶庫級
理論上無論出現哪種損壞都可以採用庫級備份還原修復,建議物理損壞情況下使用;
邏輯損壞導致庫資料丟失比較嚴重或者表空間已經被刪除,也可採用庫級備份還原;
要求還原的目標庫離線且正常退出。需藉助DMRMAN工具完成。
▷▶表空間級
若邏輯損壞導致某個表空間中多個表資料丟失時,可以考慮採用表空間級備份還原。
DM8支援從庫級備份中還原表空間。
▷▶歸檔
歸檔還原僅能恢復歸檔檔案。
很多時候可以利用歸檔檔案修復資料,若條件允許,最好保留儘量多的歸檔檔案。
▷▶表級
因邏輯損壞導致個別表資料丟失, 可以採用表級備份還原。建議對資料庫中頻繁操作的重要表進行表級備份。
將指定表資料從一個表遷移到另外一個表中,也可使用表級備份還原。
表級備份還原過程中,其他表可以正常工作。
▷▶完全,還是增量
當庫或表空間的基礎資料量很大而資料修改操作不太頻繁時,強烈建議使用增量備份(前提是至少有一個完全備份)
建議當進行一定次數的增量備份後,應重新做一個完全備份。
2.4.2 選擇恢復方式
▷▶表空間還原後的恢復操作由DM8自動執行;表還原後已經是一致性狀態,不需要進行恢復操作。
▷▶提供三種庫級恢復方式:
若還原時指定備份集為離線庫備份集(LEVEL=1)或者聯機庫備份集(LEVEL=0), 但過程中無日誌(START_LSN = END_LSN+1),且僅需將庫恢復到備份時狀態,建議選擇更新DB_MAGIC恢復方式;
若還原時指定的備份集為聯機備份集(LEVEL=0)且備份了日誌(備份時不指定 WITHOUT LOG 引數),且僅需要庫恢復到備份時狀態,可以選擇從備份集恢復;
除以上情況外,均可以採用從本地歸檔恢復。可指定想要恢復到的 LSN(大於備份結束END_LSN)和時間點(大於備份時間BACKUP_TIME)。不指定則恢復到最新狀態。
二、應用
1、DM8的備份還原方法
Disql 工具:聯機資料備份與還原,包括庫備份、表空間備份與還原、表備份與還原;
DMRMAN 工具:離線資料庫備份還原與恢復;
客戶端工具 MANAGER和CONSOLE:對應命令列工具DIsql和DMRMAN的功能,分別用於聯機和離線備份還原資料。
1.1 冷備
不需要開啟歸檔,針對整庫做備份需要開啟dmap服務,需要關閉資料庫例項
1.1.1 console工具備份
[dmdba@localhostbin]$./DmServiceDMSERVER stop [dmdba@localhostbin]$./DmAPService status DmAPService(pid13623) is running.
1.1.2 用dmrman工作備份,只支援冷備
cd /dm8/bin/ ./dmrman RMAN>backup database '/dm8/data/DAMENG/dm.ini' backupset '/dm8/backup'
1.2 熱備
需要開啟歸檔,資料庫需要聯機
可以備份資料庫、表空間、表、歸檔日誌檔案
檢視資料庫歸檔模式:
SQL>select name,arch_mode from v$database;
1.2.1 歸檔配置
1、使用SQL 進行歸檔配置
首先使用disql登陸進資料庫
進入\dmdbms\bin目錄,輸入如下命令:
./disql SYSDBA/SYSDBA@localhost:5236 ----第一個SYSDBA指角色,第二個指密碼
1)修改資料庫為mount狀態,SQL如下:
alter database mount;
2)配置本地文件
alter database add archivelog ‘dest=/home/dmdba/dm_arch,type=local,file_size=1024,space_limit=2048';
3)開啟歸檔模式
alter database archivelog;
4)修改資料庫為open狀態
alter database open;
也可手動配置歸檔檔案
轉到/home/dmdba/dmdbms/data/DAMENG路徑下,編輯dmarch.ini檔案,之後儲存到該目錄,dmarch.ini內容如下
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /home/dmdba/dm_arch/arch
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 2048
編輯 dm.ini 檔案,設定arch_ini=1,儲存
啟動資料庫服務。
1.2.2 聯機執行SQL語句進行備份還原
最簡單的資料庫備份語句:
backup database backupset 'db_bak_01';
指定備份集路徑、設定備份名、指定介質型別、新增備份描述、限制備份片大小、備份壓縮、並行備份:
backup database to weekly_full_bak backupset '/home/dmdba/dm_bak/db_bak_3_02' device type tape backupinfo '完全備份' maxpiecesize 300 compressed level 5 parallel 8;
注:指定的備份名、加密密碼、加密演算法名長度限制為128位元組;
MOUNT模式下不允許資料庫備份。
完全備份語句:
full引數可以省略,預設為完全備份
backup database full backupset '/home/dmdba/dm_bak/db_full_bak_01';
完全備份中,可指定DDL_CLONE(資料庫克隆)引數,只備份定義不備份資料。該引數只用於資料庫級完全備份中。
增量備份語句:
backup database increment with backupdir '/home/dmdba/dm_bak/' backupset '/home/dmdba/dm_bak/db_increment_bak_02';
表空間備份:
表空間備份只能聯機,還原只能離線
表備份:
backup table "TEST"."TEST_EMP" to "TAB_TEST_TEST_EMP_2020_09_23_15_43_53" backupset 'TAB_TEST_TEST_EMP_2020_09_23_15_43_53';
歸檔備份:
backup archivelog all to "ARCH_2020_09_23_15_53_34" backupset '/dm8/backup/ARCH_2020_09_23_15_53_34';
1.3 物理還原
檢查備份集是否有效
RMAN>check backupset '/dm8/backup';
整庫還原:
dmrman還原:
RMAN>restore database '/dm8/data/DAMENG/dm.ini' from backupset'/dm8/backup';
資料庫恢復:
RMAN>recover database '/dm8/data/DAMENG/dm.ini' with archivedir'/dm8/arch';
更新資料庫魔數
RMAN>recover database '/dm8/data/DAMENG/dm.ini' update db_magic;
表空間還原:
RMAN>restore database '/dm8/data/DAMENG/dm.ini' from backupset '/dm8/backup' tablespace DMHR;
表空間恢復:
RMAN>recover database '/dm8/data/DAMENG/dm.ini' tablespace dmhr;