轉載請注明出處:https://www.cnblogs.com/fengaix6/p/11996588.html
數據庫備份是非常重要的工作內容。DBA不僅要保證備份成功,還要保證一旦數據庫發生故障時備份可還原可恢復。
一、概述
DM7數據庫中的數據存儲在數據庫的物理數據文件中,數據文件按照頁、簇和段的方式進行管理,數據頁是最小的數據存儲單元。任何一個對DM7數據庫的操作,歸根結底都是對某個數據文件頁的讀寫操作。
DM7備份的本質就是從數據庫文件中拷貝有效的數據頁保存到備份集中,這里的有效數據頁包括數據文件的描述頁和被分配使用的數據頁。
而在備份的過程中,如果數據庫系統還在繼續運行,這期間的數據庫操作並不是都會立即體現到數據文件中,而是首先以日志的形式寫到歸檔日志中,因此,為了保證用戶可以通過備份集將數據恢復到備份結束時間點的狀態,就需要將備份過程中產生的歸檔日志也保存到備份集中。
還原與恢復是備份的反過程。
還原是將備份集中的有效數據頁重新寫入目標數據文件的過程。恢復則是指通過重做歸檔日志,將數據庫狀態恢復到備份結束時的狀態;也可以恢復到指定時間點和指定LSN。
恢復結束以后,數據庫中可能存在處於未提交狀態的活動事務,這些活動事務在恢復結束后的第一次數據庫系統啟動時,會由DM7數據庫服務器自動進行回滾。
二、表空間
在創建DM7數據庫時,系統會自動創建5個表空間:SYSTEM表空間、ROLL表空間、MAIN表空間、TEMP表空間和HMAIN表空間。DM7自動為這幾個自動創建的表空間分別生成默認的數據文件:SYSTEM.DBF、ROLL.DBF、MAIN.DBF和TEMP.DBF,HMAIN表空間沒有默認的數據文件。
用戶也可以創建自己的表空間,由用戶創建的表空間統稱為用戶自定義表空間,在創建自定義表空間時需要為表空間指定數據文件。
- SYSTEM表空間
存放了DM7數據庫全局字典信息和全局系統數據,是DM7數據庫能夠正常運行的必要前提,默認對應數據文件SYSTEM.DBF。CREATE TABLE等DDL操作會修改SYSTEM表空間數據。
- ROLL表空間
存放DM7數據庫運行過程中產生的所有回滾記錄。DM7中幾乎所有的數據庫修改操作都會生成回滾記錄,並保存在ROLL表空間的數據文件中。ROLL表空間是數據庫全局對象,不論修改哪一個表空間,生成的回滾記錄都是寫入ROLL表空間,該表空間由系統自動維護,默認數據文件為ROLL.DBF。
- TEMP表空間
存放臨時表數據以及數據庫運行過程中產生的臨時數據。在數據庫運行過程中,SORT、HASH JOIN等操作都可能會生成臨時結果集,它們作為臨時數據存放在TEMP表空間中。TEMP表空間是數據庫全局對象,由系統自動維護。若數據庫重啟,保存在TEMP表空間中的所有數據都會丟失。TEMP表空間的默認數據文件為TEMP.DBF。
- MAIN表空間
在創建用戶時,如果沒有指定默認表空間,系統自動指定MAIN表空間為用戶默認的表空間。
- HMAIN表空間
DM7的HUGE表空間,用來存放HUGE表數據文件。HMAIN表空間和HUGE表相關知識可參考《DM7系統管理員手冊》。
注:DM7的物理備份還原不支持:
1. TEMP表空間。
2. HUGE表空間,即數據庫備份和還原不包括HMAIN和用戶創建的HUGE表空間;也不支持對HMAIN和用戶創建的HUGE表空間進行表空間備份和還原。DM7提供了HUGE表備份還原系統函數支持HUGE表的聯機備份還原,可參考《DM7_SQL語言使用手冊》
三、達夢備份與恢復
達夢備份包括有:邏輯備份、物理備份、聯機備份、脫機備份、數據備份、歸檔日志備份、完全備份、增量備份等。
- 邏輯備份
邏輯備份是指利用dexp導出工具,將指定對象(庫級、模式級、表級)的數據導出到文件的備份方式。
- 物理備份
物理備份則直接掃描數據庫文件,找出那些已經分配、使用的數據頁,拷貝並保存到備份集中。
- 聯機備份
聯機備份是指數據庫處於運行狀態、並正常提供數據庫服務情況下進行的備份操作。
聯機備份可使用客戶端工具DISQL連接到服務器實例后,通過執行SQL語句進行;也可以通過配置作業,定時完成自動備份。聯機備份不影響數據庫正常提供服務,是最常用的備份手段之一。
- 脫機備份
數據庫處於關閉狀態時進行的備份操作,被稱為脫機備份。
從V2.0版本開始,使用數據庫自帶的DMRMAN工具進行脫機備份,並且支持對異常關閉的數據庫進行脫機庫備份。備份異常關閉的數據庫,要求配置了本地歸檔,如果本地歸檔不完整,則需要先修復本地歸檔,再進行備份。
- 數據備份
數據備份主要針對數據文件內容,包括庫備份、表空間備份和表備份。
- 歸檔日志備份
歸檔日志備份,是專門針對歸檔日志文件進行操作,不涉及任何數據文件內容。歸檔日志備份掃描歸檔目錄收集歸檔文件,並將歸檔日志寫入到備份集中。
- 完全備份
完全備份生成的備份集包含了指定庫(或者表空間)的全部有效數據頁。當數據規模比較大的情況下,生成的完全備份集通常會比較大,而且備份時間也會比較長。
- 增量備份
增量備份是在某個特定備份集基礎上,收集數據庫新修改的數據頁進行備份,可以有效減少備份集的空間占用、提高備份速度。
根據對基備份的要求不同,DM的增量備份分為以下兩種:
1. 差異增量備份
差異增量備份的基備份既可以是一個完全備份集,也可以是一個增量備份集。
2. 累積增量備份
累積增量備份的基備份只能是完全備份集,而不能是增量備份集。
四、備份恢復示例
以下過程演示DM7在中標麒麟Linux6環境中的脫機備份、聯機備份、表空間恢復。
- 脫機備份
脫機備份時,先關閉數據庫實例,並且DmAP服務是處於運行狀態。
兩個服務都運行狀態,先關閉數據庫實例:
執行脫機備份:
[dmdba@dca7 ~]$ cd $DM_HOME/bin
[dmdba@dca7 bin]$ ./dmrman
備份成功。
備份集保存路徑為:
[/dm7/data/DAMENG/bak/DB_DAMENG_FULL_20191206_162759_000485]
- 聯機備份
聯機備份時,數據庫實例是聯機運行狀態,並且DmAP服務是處於運行狀態,同時數據庫是要設置打開歸檔模式。
1、設置歸檔模式,操作命令如下:
SQL> alter database mount; --mount狀態
SQL> alter database add archivelog 'type=local,dest=/dm7/arch,file_size=64,space_limit=0';
-- file_size是指單個REDO日志歸檔文件大小,取值范圍(64M~2048M),缺省1024M。
SQL> alter database open; ---open狀態
SQL> select name,status$,arch_mode from v$database; ---查數據庫的狀態。
已經設置歸檔模式。
SQL> select * from v$dm_arch_ini; ---查歸檔參數。
2、備份數據庫(全備和增量備份)
SQL> backup database full backupset '/dm7/backup/full_bak';
全備備份成功。
SQL> select checkpoint(0);
創建測試數據。
SQL> backup database increment backupset '/dm7/backup/incr_bak';
如果出現上述提示,可繼續創建測試數據,或重啟下數據庫實例服務。
增量備份成功。
- 表空間恢復
以下過程,模擬表空間數據文件(DMHR.DBF)損壞,並將其從備份文件中恢復出來。
$ mv /dm7/data/DAMENG/DMHR.DBF /dm7/data/DMHR.DBF.bak
重啟下數據庫服務:
$ service DmServiceDMSERVER restart
數據庫處於MOUNT狀態,這是由於數據文件故障所導致。
先把數據庫打開到OPEN狀態:
查看表空間狀態:
可以看到表空間DMHR狀態為1,即OFFLINE狀態。
表空間狀態包括:ONLINE(聯機狀態)、OFFLINE(脫機狀態)、RES_OFFLINE(還原狀態)、CORRUPT(損壞狀態)。0/1/2/3分別代表ONLINE狀態/OFFLINE狀態/RES_OFFLINE狀態/CORRUPT狀態。
恢復表空間DMHR:
SQL> restore tablespace DMHR from backupset '/dm7/backup/full_bak';
恢復完成,通過查看數據文件也已經恢復成功。
把表空間ONLINE:
至此,表空間恢復完成。
-- < END > --