DM7使用聯機執行SQL語句進行備份還原

eric0435發表於2021-02-08

使用聯機執行SQL語句進行備份還原
1. 資料備份
1.1 備份資料庫
系統提供聯機SQL命令執行資料庫備份。語法如下:

BACKUP DATABASE [FULL |INCREMENT WITH BACKUPDIR ‘< 備份目錄>’{,‘< 備份目錄>’}] TO < 備份名> [BAKFILE ‘< 備份路徑>’]
[BACKUPINFO ‘< 備份描述>’] [MAXSIZE < 限制大小>] [IDENTIFIED BY < 金鑰>[WITH ENCRYPTION][ENCRYPT WITH < 加密演算法>]]
[COMPRESSED [LEVEL < 壓縮級別>]][WITHOUT LOG][PARALLEL ‘< 並行對映檔案路徑>’];
FULL|INCREMENT:備份型別,FULL表示完全備份,INCREMENT表示增量備份。
< 備份目錄>:基礎備份所在的目錄,最大長度為256個位元組。
< 備份名>:備份的名稱,在DMDBMS中以此標識不同的備份。
< 備份路徑>:備份檔案存放的完整路徑。
< 備份描述>:備份的描述資訊。
< 限制大小>:最大備份檔案大小,以M為單位,取值範圍33M~2G。
< 金鑰>:備份加密透過使用IDENTIFIED BY來指定密碼。

WITH ENCRYPTION :用來指定加密型別,0表示不加密,1表示簡單加密,2表示複雜加密。
COMPRESSED:用來指定是否壓縮級別,取值範圍1~9。如果使用0,表示不壓縮,1表示壓縮快、但是壓縮比低,9表示壓縮慢、但是壓縮比高。
WITHOUT LOG:聯機資料庫備份是否備份日誌。如果使用,則表示不備份,否則表示備份。
PARALLEL:用來指定並行對映檔案的完整路徑。
PARALLEL:用來指定並行對映檔案的完整路徑。
< 並行對映檔案路徑>:並行對映檔案的完整路徑,最大長度為256個位元組,如: E:\bak.parallel;並行對映檔案的書寫請參考4.2.3.2。
< 加密演算法>:加密演算法具體見《DM7_SQL語言使用手冊》相關章節,但是不支援xxx_cbc和xxx_ecb演算法加密。預設情況下,演算法為AES256_CFB。

備份成功後會在備份預設目錄下生成備份檔案,若沒有指定備份檔名,則系統自動生成以“資料庫名_日期.bak”格式的備份檔案,透過該備份檔案可以進行資料庫還原。例如,執行資料庫備份,備份型別為完全備份,備份檔名為/dm_home/dmdba/dmdbms/backup/database_full_bak.bak。

SQL> backup database full to full_bak bakfile '/dm_home/dmdba/dmdbms/backup/database_full_bak.bak';
executed successfully
used time: 00:00:09.508. Execute id is 86138.

1.2 備份使用者表空間
系統提供聯機SQL命令執行表空間備份,不支援對系統表空間、日誌表空間、回滾表空間、臨時表空間執行備份操作。語法如下:

BACKUP TABLESPACE < 表空間名> [FULL| INCREMENT WITH BACKUPDIR '< 備份目錄>'{,'< 備份目錄>'}] TO < 備份名>
[BAKFILE '< 備份路徑>'] [BACKUPINFO '< 備份描述>'] [MAXSIZE < 限制大小>] [IDENTIFIED BY < 金鑰>[WITH ENCRYPTION ]]
[COMPRESSED[LEVEL < 壓縮級別>]];

例如,備份名為t1的表空間,備份型別為FULL,備份檔名為'/dm_home/dmdba/dmdbms/backup/tablespace_users.bak'。

SQL> backup tablespace users full to users_bak bakfile '/dm_home/dmdba/dmdbms/backup/tablespace_users.bak';
executed successfully
used time: 00:00:01.376. Execute id is 87164.

2. 資料還原
備份檔案和待還原資料庫的建庫引數USE_NEW_HASH應保持一致,若取值不一致,則還原時會報錯。

2.1 還原表空間
使用SQL命令對錶空間進行還原。與資料庫還原類似,表空間備份分為完全備份和增量備份,但表空間備份沒有聯機備份和離線備份之分,表空間備份只支援聯機備份。表空間還原根據不同的表空間備份型別選擇不同的還原策略對錶空間進行還原。與庫級還原和表級還原不同,表空間還原依賴於歸檔日誌,利用備份檔案還原表空間只能還原到備份時所在資料庫中,並且還原後,表空間處於最新狀態。由於待還原表空間的檔名和檔案數目可能與備份時的不一致,因此還原後需要更新檔案系統。另外,由於從備份表空間到還原表空間的時間間隔中,系統可能累積了很多歸檔日誌,為了保證跨表空間的物件資料同步,需要重做該表空間的所有歸檔日誌。

系統提供聯機SQL命令執行表空間還原,還原前需要將表空間置為離線狀態,不支援對系統表空間、日誌表空間、回滾表空間、臨時表空間執行還原操作。

RESTORE TABLESPACE < 表空間名> FROM ‘< 備份路徑>’ | BACKUP < 備份檔名> [ INDENTIFIED BY < 密碼>] [ WITH BACKUPDIR ‘< 備份 目錄>’{,‘< 備份目錄>’}][WITH ARCHIVEDIR ‘歸檔目錄’{,’歸檔目錄’}][DBFILE < 檔案ID> TO ‘< 檔案路徑>’ {,DBFILE < 檔案ID>
 TO ‘< 檔案路徑>’}] [MIRROR < 檔案ID> TO‘< 檔案路徑>’{,MIRROR < 檔案ID> TO ‘< 檔案路徑>’}];

< 表空間名>:需要還原的表空間名稱。
< 備份路徑>:備份檔案存放的完整路徑。
< 備份檔名>:備份的名稱,在DMDBMS中以此標識不同的備份。
< 密碼>:加密備份表空間時,使用者設定的密碼。
< 備份目錄>:蒐集備份檔案的目錄。
< 歸檔目錄>:還原時,蒐集歸檔檔案的目錄。
< 檔案ID>:需要重新設定檔案路徑檔案對應的檔案號。
< 檔案路徑>:設定還原後,資料檔案的路徑。
MIRROR:要使用資料檔案映象,必須在建庫時開啟頁校驗的引數page_check。
例如,利用備份檔案/dm_home/dmdba/dmdbms/backup/tablespace_users.bak還原表空間users。

SQL> alter tablespace users offline;
executed successfully
used time: 00:00:07.751. Execute id is 89303.
SQL> restore tablespace users from '/dm_home/dmdba/dmdbms/backup/tablespace_users.bak';
executed successfully
used time: 00:00:01.641. Execute id is 89348.
SQL> alter tablespace users online;
executed successfully
used time: 76.018(ms). Execute id is 89360.

對於表空間聯機還原,還原前需要將表空間置為離線狀態;還原後,為了使用表空間,需要重新將表空間置為聯機狀態。

在表空間還原的時候,如果出現異常(如掉電),還原表空間的操作異常終止,那麼表空間可能已經被損壞。這種情況下,只有再次還原才能夠修復。

3. 設定備份屬性
3.1 加密與壓縮
備份檔案中包含了資料庫中的原始資料,為提高備份資料的安全性,無論是普通備份還是B樹備份,DM都提供了對備份資料進行加密的功能。系統中支援簡單加密和複雜加密。簡單加密和複雜加密實現原理都是在備份過程中利用經典的加密演算法對資料頁面加密,然後將密文寫入備份檔案,區別在於複雜加密方式對寫入備份檔案的每一頁資料都進行加密,而簡單加密方式只是選擇性地對某些頁面進行加密。顯然,簡單加密的效率相對於複雜加密效率要高,但同時,簡單加密的備份資料不如複雜加密安全。

此外,DM還支援備份資料壓縮功能。壓縮功能的實現能有效縮短備份檔案的大小,減少所佔的磁碟空間。

不論是加密還是壓縮,都是在正常執行備份資料時的額外操作,與此同時,壓縮和加密的備份檔案用於還原時,還需要執行解壓縮和解密操作,因此會對備份、還原效能造成一定的影響。系統管理員應根據實際情況,在磁碟空間利用率、備份、還原效能,以及備份資料安全性之間做權衡,確定在執行備份操作時是否需要設定壓縮,加密引數。

舉例說明:
(1) 聯機備份資料庫,並對備份資料壓縮,備份檔案存放路徑為/dm_home/dmdba/dmdbms/backup/database_cpr.bak。

SQL> backup database full to cpr_bak bakfile '/dm_home/dmdba/dmdbms/backup/database_cpr.bak' compressed;
executed successfully
used time: 00:00:09.535. Execute id is 90807.

(2) 聯機備份名為t1的表空間,備份型別為FULL,對備份資料進行簡單加密,加密密碼為ABCDEF123,備份檔案存放路徑為/dm_home/dmdba/dmdbms/backup/tablespace_users_cpr.bak。

SQL> backup tablespace users full to ts_users_cpr_bak bakfile '/dm_home/dmdba/dmdbms/backup/tablespace_users_cpr.bak' identified by ABCDEF123 with encryption 1;
executed successfully
used time: 00:00:01.386. Execute id is 91101.

(3)聯機備份SYSDBA模式下的test表,對備份資料進行復雜加密,加密密碼為ABCDEF123,並且對備份資料壓縮。備份檔案存放路徑為/dm_home/dmdba/dmdbms/backup/table_t1_bak.bak。

SQL> backup table sysdba.t1 to table_t1_bak bakfile '/dm_home/dmdba/dmdbms/backup/table_t1_bak.bak' identified by ABCDEF123 with encryption 2 compressed;
executed successfully
used time: 00:00:01.121. Execute id is 91267.

3.2 並行對映檔案
為了提高資料庫備份效能,針對物理備份,系統提供了並行備份的功能。並行備份的核心思想是將對資料庫的備份拆分為對多個表空間的備份。系統在執行備份前,將物理儲存位置臨近的表空間作為基本備份單位,隨後同時備份不同的備份單位,從而使得系統在執行備份時,充分利用了CPU資源和磁碟組資源,達到提升備份效能的目的。利用並行備份功能,需要系統管理員配置並行對映檔案,對映檔案格式如下所示。對映檔案配置內容與系統並行備份的效能直接相關,因此,系統管理員應在充分了解資料庫中各個表空間所在磁碟的物理位置,合理設定配置檔案。此外,每個備份單位設定的備份目錄應儘量在不同的磁碟組,這樣能保證讀寫檔案都能充分利用磁碟IO,使備份效能最最佳化。

格式如下:
[表空間名,表空間名,……]=備份目錄1
[表空間名,表空間名,……]=備份目錄2
[表空間名,表空間名,……]=備份目錄3
……
[default]=備份目錄N
說明:
1. 備份目錄必需是本地物理磁碟上已經存在的目錄。
2. 設定表空間名必需存在,若不存在則報錯。
3. 每一行只能有一個“[表空間名,表空間名……]=備份目錄”項。
4. 自動忽略同一備份目錄下對應的多個同名表空間名,只取其中一個。
5. 一個表空間名不能對應多個備份目錄,否則報錯。
6. 對於相同的備份目錄,DM7自動將它們作為一個備份單位。
7. default:沒有顯示設定的表空間,備份資料都存放在default對應的目錄下。
8. [default]行必需存在,DM7認為[default]為最後一行,不統計[default]後續行的設定。
9. 對映檔案的副檔名為parallel。
10.不允許顯示設定系統表空間的磁碟目錄。
11.對於含有特殊字元的表空間名,比如逗號、空格、中括號、等號,系統不保證解析對映檔案的正確性。舉例說明:
(1)假設資料庫資料分佈在三個磁碟組DISK1,DISK2和DISK3中。SYSTEM,MAIN,ROLL表空間在磁碟組DISK1;TS1,TS2表空間在磁碟組DISK2;TS3表空間在DISK3,配置對映檔案bak.parallel如下:

[dmdba@shard1 dmdbms]$ vi bak.parallel
[DMHR,USERS]=/dm_home/dmdba/dmdbms/backup1
[FG_PERSON]=/dm_home/dmdba/dmdbms/backup2
[default]=/dm_home/dmdba/dmdbms/backup3

從上述配置內容可知,TS1,TS2作為一個備份單位,備份資料儲存在D:\DAMENG_1中;TS3作為一個備份單位,備份資料儲存在C:\DAMENG_2中;系統表空間作為一個備份單位,備份資料儲存在E:\DAMENG目錄中。

(2) 利用配置對映檔案/dm_home/dmdba/dmdbms/bak.parallel執行聯機並行備份操作,主備份檔案為/dm_home/dmdba/dmdbms/parallel.bak,各個子備份分別在/dm_home/dmdba/dmdbms/backup1,/dm_home/dmdba/dmdbms/backup2和/dm_home/dmdba/dmdbms/backup3目錄中。

SQL> backup database full to para_bak bakfile '/dm_home/dmdba/dmdbms/parallel.bak' parallel '/dm_home/dmdba/dmdbms/bak.parallel';
executed successfully
used time: 00:00:08.585. Execute id is 93997.
[dmdba@shard1 dmdbms]$ ls -lrt parallel*
-rw-r--r-- 1 dmdba dinstall 33554432 7月   1 17:30 parallel.bak
[dmdba@shard1 dmdbms]$ ls -lrt backup1/
總用量 1512
-rw-r--r-- 1 dmdba dinstall 33554432 7月   1 17:30 DB_jydm_20200701173032000519_1.bak
[dmdba@shard1 dmdbms]$ ls -lrt backup2/
總用量 28
-rw-r--r-- 1 dmdba dinstall 33554432 7月   1 17:30 DB_jydm_20200701173032000519_1.bak
[dmdba@shard1 dmdbms]$ ls -lrt backup3/
總用量 306072
-rw-r--r-- 1 dmdba dinstall 335544320 7月   1 17:30 DB_jydm_20200701173032000519_1.bak

(3)利用配置對映檔案/dm_home/dmdba/dmdbms/bak.parallel執行離線並行全量備份操作,主備份檔案為/dm_home/dmdba/dmdbms/parallel02.bak,各個子備份分別在各個子備份分別在/dm_home/dmdba/dmdbms/backup1,
/dm_home/dmdba/dmdbms/backup2和/dm_home/dmdba/dmdbms/backup3目錄中。

[dmdba@shard1 dmdbms]$ dmbackup type=full ini_path=/dm_home/dmdba/dmdbms/data/jydm/dm.ini name=test parallel=/dm_home/dmdba/dmdbms/bak.parallel
backup V7.1.6.46-Build(2018.02.08-89107)ENT
file dm.key not found, use default license!
[channel<5912>]start backup tablespaces group to directory /dm_home/dmdba/dmdbms/backup2.
[channel<5912>]start backup tablespace: FG_PERSON.
[channel<5912>]start backup file: /dm_home/dmdba/dmdbms/data/jydm/FG_PERSON.DBF, pages: 0
[channel<5911>]start backup tablespaces group to directory /dm_home/dmdba/dmdbms/backup1.
[channel<5911>]start backup tablespace: DMHR.
[channel<5911>]start backup file: /dm_home/dmdba/dmdbms/data/jydm/DMHR.DBF, pages: 0
[channel<5912>]end backup file: /dm_home/dmdba/dmdbms/data/jydm/FG_PERSON.DBF
[channel<5912>]end backup tablespace: FG_PERSON.
[channel<5912>]end backup tablespaces group.
[channel<5913>]start backup tablespaces group to directory /dm_home/dmdba/dmdbms/backup3.
[channel<5913>]start backup tablespace: SYSTEM.
[channel<5913>]start backup file: /dm_home/dmdba/dmdbms/data/jydm/SYSTEM.DBF, pages: 2944
[channel<5911>]end backup file: /dm_home/dmdba/dmdbms/data/jydm/DMHR.DBF
[channel<5911>]end backup tablespace: DMHR.
[channel<5911>]start backup tablespace: USERS.
[channel<5911>]start backup file: /dm_home/dmdba/dmdbms/data/jydm/users01.dbf, pages: 0
[channel<5911>]end backup file: /dm_home/dmdba/dmdbms/data/jydm/users01.dbf
[channel<5911>]end backup tablespace: USERS.
[channel<5911>]end backup tablespaces group.
[channel<5913>]end backup file: /dm_home/dmdba/dmdbms/data/jydm/SYSTEM.DBF
[channel<5913>]end backup tablespace: SYSTEM.
[channel<5913>]start backup tablespace: ROLL.
[channel<5913>]start backup file: /dm_home/dmdba/dmdbms/data/jydm/ROLL.DBF, pages: 0
[channel<5913>]end backup file: /dm_home/dmdba/dmdbms/data/jydm/ROLL.DBF
[channel<5913>]end backup tablespace: ROLL.
[channel<5913>]start backup tablespace: MAIN.
[channel<5913>]start backup file: /dm_home/dmdba/dmdbms/data/jydm/MAIN.DBF, pages: 0
[channel<5913>]end backup file: /dm_home/dmdba/dmdbms/data/jydm/MAIN.DBF
[channel<5913>]end backup tablespace: MAIN.
[channel<5913>]start backup tablespace: BOOKSHOP.
[channel<5913>]start backup file: /dm_home/dmdba/dmdbms/data/jydm/BOOKSHOP.DBF, pages: 0
[channel<5913>]end backup file: /dm_home/dmdba/dmdbms/data/jydm/BOOKSHOP.DBF
[channel<5913>]end backup tablespace: BOOKSHOP.
[channel<5913>]start backup tablespace: SYSAUX.
[channel<5913>]start backup file: /dm_home/dmdba/dmdbms/data/jydm/SYSAWR.DBF, pages: 0
[channel<5913>]end backup file: /dm_home/dmdba/dmdbms/data/jydm/SYSAWR.DBF
[channel<5913>]end backup tablespace: SYSAUX.
[channel<5913>]end backup tablespaces group.
backup fun end time used: 6701.450(ms)
backup successfully!
backup time used: 13028.166(ms)
[dmdba@shard1 dmdbms]$ ls -lrt backup3/
總用量 529716
-rw-r--r-- 1 dmdba dinstall 335544320 7月   1 17:30 DB_jydm_20200701173032000519_1.bak
-rw-r--r-- 1 dmdba dinstall 234881024 7月   1 17:35 DB_jydm_20200701173535000023_1.bak
[dmdba@shard1 dmdbms]$ ls -lrt backup2/
總用量 56
-rw-r--r-- 1 dmdba dinstall 33554432 7月   1 17:30 DB_jydm_20200701173032000519_1.bak
-rw-r--r-- 1 dmdba dinstall 33554432 7月   1 17:35 DB_jydm_20200701173535000023_1.bak
[dmdba@shard1 dmdbms]$ ls -lrt backup1/
總用量 3024
-rw-r--r-- 1 dmdba dinstall 33554432 7月   1 17:30 DB_jydm_20200701173032000519_1.bak
-rw-r--r-- 1 dmdba dinstall 33554432 7月   1 17:35 DB_jydm_20200701173535000023_1.bak

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26015009/viewspace-2756719/,如需轉載,請註明出處,否則將追究法律責任。

相關文章