DM7使用联机执行SQL语句进行备份还原

使用联机执行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

发表评论

电子邮件地址不会被公开。