DM7使用DMRMAN执行归档备份

使用脱机工具DMRMAN执行归档备份
1. 概述
在DMRMAN工具中使用BACKUP命令你可以备份数据库的归档。关闭服务器在DMRMAN中输入以下命令即可备份归档:

RMAN> backup archive log database 'E:\dmdbms\data\jydm\dm.ini';
backup archive log database 'E:\dmdbms\data\jydm\dm.ini';
checking if the database under system path [E:\dmdbms\data\jydm] is running...[4].
checking if the database under system path [E:\dmdbms\data\jydm] is running...[3].
checking if the database under system path [E:\dmdbms\data\jydm] is running...[2].
checking if the database under system path [E:\dmdbms\data\jydm] is running...[1].
checking if the database under system path [E:\dmdbms\data\jydm] is running...[0].
checking if the database under system path [E:\dmdbms\data\jydm] is running, write dmrman info.
EP[0] max_lsn: 901685
BACKUP ARCHIVE LOG ALL, execute......
CMD CHECK LSN......
BACKUP ARCHIVE LOG ALL, collect dbf......
CMD CHECK ......
ARCH BACKUP SUBS......
total 1 packages processed...
total 2 packages processed...
total 3 packages processed...
total 4 packages processed...
ARCH BACKUP MAIN......
BACKUPSET [E:\dmdbms\data\jydm\bak\ARCH_LOG_20200531_193129_000908] END, CODE [0]......
META GENERATING......
total 5 packages processed...
total 5 packages processed!
CMD END.CODE:[0]
backup successfully!
time used: 7252.182(ms)

命令执行完后会在默认的备份路径下生成备份集目录,默认的备份路径为dm.ini中BAK_PATH的配置值,若未配置,则使用SYSTEM_PATH下的bak目录。这是最简单的脱机归档备份语句,如果要设置其他备份选项请参考下文的语法及使用说明。

语法如下:

BACKUP
[ALL | [FROM LSN ]|[UNTIL LSN ] | [LSN BETWEEN < lsn值> AND < lsn值>] | [FROM TIME '时间串'] |
[UNTIL TIME '时间串'] | [TIME BETWEEN '时间串' AND '时间串']] [][DELETE INPUT]
DATABASE ''
[TO < 备份名>] [BACKUPSET '< 备份集目录>'] [DEVICE TYPE < 介质类型>[PARMS '< 介质参数>']
[BACKUPINFO '< 备份描述>'] [MAXPIECESIZE < 备份片限制大小>]
[IDENTIFIED BY < 加密密码>[WITH ENCRYPTION][ENCRYPT WITH < 加密算法>]]
[COMPRESSED [LEVEL < 压缩级别>]][TASK THREAD < 线程数>][PARALLEL [< 并行数>]];
::=NOT BACKED UP
| NOT BACKED UP numTIMES
| NOT BACKED UP SINCE TIME 'datetime_string'

ALL:备份所有的归档;
FROM LSN ,UNTIL LSN:备份的起始和截止lsn。请参考3.2.2.4归档备份
FROM TIME:指定备份的开始时间点。例如,’2015-12-10’。
UNTIL TIME:指定备份的截止时间点。
BETWEEN …AND …:指定备份的区间,仅仅指备份区间内的归档文件。
:搜索过滤。搜索过滤仅限于根据备份指定条件能找到的所有归档备份集。1) num TIMES,指若归档文件已经备份了num次,则不再备份;否则备份。如num=3,则认为已经备份了3次的归档文件就不再备份。若num=0,则认为所有都不需要备份。2)SINCE TIME ‘datetime_String’,指定时间开始没有备份的归档文件进行备份。3)若以上两种均未指定,则备份所有未备份过的归档日志文件。
DELETE INPUT:用于指定备份完,是否删除归档操作。
DATABASE:必选参数。指定备份目标库的INI文件路径。
TO: 指定生成备份名称。若未指定,系统随机生成,默认备份名格式为:ARCH_备份时间。
BACKUPSET: 指定当前备份集生成目录。若指定为相对路径,则在默认备份路径中生成备份集。
DEVICE TYPE:指存储备份集的介质类型,支持DISK和TAPE,默认DISK。DISK表示存储备份集到磁盘,TAPE表示存储到磁带。
PARMS:只对介质类型为TAPE时有效。
BACKUPINFO:备份的描述信息。最大不超过256个字节。
MAXPIECESIZE:最大备份片文件大小上限,以M为单位,最小128M,32位系统最大2G,64位系统最大128G。
IDENTIFIED BY:指定备份时的加密密码。密码应用双引号括起来,这样避免一些特殊字符通不过语法检测。密码的设置规则遵行ini参数pwd_policy指定的口令策略。
WITH ENCRYPTION:指定加密类型,0表示不加密,不对备份文件进行加密处理;1表示简单加密,对备份文件设置口令,但文件内容仍以明文存;2表示完全数据加密,对备份文件进行完全的加密,备份文件以密文方式存储。
ENCRYPT WITH:加密算法。缺省情况下,算法为AES256_CFB。具体可以使用的加密算法参考联机数据库备份章节的参数说明。
COMPRESSED:取值范围0~9。0表示不压缩,1表示1级压缩,9表示9级压缩。压缩级别越高,压缩越慢,但压缩比越高。若未指定,但指定COMPRESSED,则默认1;否则,默认0。
TASK THREAD:备份过程中数据处理过程线程的个数,取值范围0~64,默认为4。若指定为0,则调整为1;若指定超过当前系统主机核数,则调整为主机核数。线程数(TASK THREAD)*并行数(PARALLEL)不得超过512。
PARALLEL:指定并行备份的并行数,取值范围0~128。若不指定,则默认为4,指定0或者1均认为为非并行备份。若未指定关键PARALLEL,则认为非并行备份。并行备份不支持介质为TAPE的备份。线程数(TASK THREAD)*并行数(PARALLEL)不得超过512。

2. 备份归档
本节主要描述使用DMRMAN如何执行基本的脱机归档备份及实施一些备份策略,包括:
1. 设置备份选项
2. 创建归档备份
3. 创建设置条件的归档备份

1.设置备份选项
备份命令如果仅指定了必选参数如“BACKUP ARCHIVE LOG DATABASE ‘/opt/dmdbms/data/DAMENG/dm.ini’”,那么DMRMAN会根据配置的环境及内置的参数默认值自动指定备份介质类型、备份路径、备份片大小等参数。用户备份时也可以指定这些参数来覆盖默认值,常见的备份选项有设置备份集路径、指定备份名、限制备份片大小、添加描述信息、并行备份等。DMRMAN脱机备份归档的语法与使用DIsql联机备份类似,关于备份选项的详细介绍及使用参见3.2.2.3.2 设置备份选项。

2.创建归档备份
执行归档备份要求数据库处于脱机状态。与联机备份数据库一样,脱机归档备份需要配置归档。一个完整的创建脱机数据库备份的示例如下:
1) 启动DMRMAN命令行工具。
2) 保证数据库处于脱机状态。
3) DMRMAN中输入以下命令:

RMAN> backup archive log all database 'E:\dmdbms\data\jydm\dm.ini' backupset 'E:\dmdbms\backup\arch_all_bak_01';
backup archive log all database 'E:\dmdbms\data\jydm\dm.ini' backupset 'E:\dmdbms\backup\arch_all_bak_01';
checking if the database under system path [E:\dmdbms\data\jydm] is running...[4].
checking if the database under system path [E:\dmdbms\data\jydm] is running...[3].
checking if the database under system path [E:\dmdbms\data\jydm] is running...[2].
checking if the database under system path [E:\dmdbms\data\jydm] is running...[1].
checking if the database under system path [E:\dmdbms\data\jydm] is running...[0].
checking if the database under system path [E:\dmdbms\data\jydm] is running, write dmrman info.
EP[0] max_lsn: 901685
BACKUP ARCHIVE LOG ALL, execute......
CMD CHECK LSN......
BACKUP ARCHIVE LOG ALL, collect dbf......
CMD CHECK ......
ARCH BACKUP SUBS......
total 1 packages processed...
total 2 packages processed...
total 3 packages processed...
total 4 packages processed...
ARCH BACKUP MAIN......
BACKUPSET [E:\dmdbms\backup\arch_all_bak_01] END, CODE [0]......
META GENERATING......
total 5 packages processed...
total 5 packages processed!
CMD END.CODE:[0]
backup successfully!
time used: 8221.506(ms)

命令中的ALL参数表示执行的备份为备份所有的归档,也可以不指定该参数,DMRMAN默认执行的备份类型为ALL类型归档备份。

3.创建设置条件的归档备份
设置条件的归档备份指通过设置LSN或者时间点,控制归档需要备份归档的范围。脱机设置条件归档备份。增量备份示例如下:

D:\>net start DmServicejydm
DmServicejydm 服务正在启动 ....
DmServicejydm 服务已经启动成功。


D:\>disql sysdba/xxzx7817600

服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间: 10.068(毫秒)
disql V7.1.6.48-Build(2018.03.01-89507)ENT
Connected to: DM 7.1.6.48
SQL> select * from v$arch_file;

行号       DB_MAGIC    STATUS   LEN                  FREE                 ARCH_LSN             CLSN                 ARCH_SEQ             NEXT_SEQ             CREATE_TIME                 CLOSE_TIME                  PATH
---------- ----------- -------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- --------------------------- --------------------------- ----------------------------------------------------------
1          -430050549  INACTIVE 225792               225792               892254               894139               161798               162230               2020-05-31 10:17:40.810000  2020-05-31 11:52:15.732000  E:\dmdbms\data\arch\ARCHIVE_LOCAL1_20200531101740800_0.log
2          -430050549  INACTIVE 282112               282112               894139               896221               162231               162773               2020-05-31 11:52:15.732000  2020-05-31 18:10:29.344000  E:\dmdbms\data\arch\ARCHIVE_LOCAL1_20200531115215733_0.log
3          -430050549  INACTIVE 198656               198656               896222               898933               162774               163153               2020-05-31 18:10:29.344000  2020-05-31 18:11:41.803000  E:\dmdbms\data\arch\ARCHIVE_LOCAL1_20200531181130589_0.log
4          -430050549  INACTIVE 202752               202752               898934               901685               163154               163541               2020-05-31 18:11:41.803000  2020-05-31 19:22:33.194000  E:\dmdbms\data\arch\ARCHIVE_LOCAL1_20200531192047977_0.log
5          -430050549  ACTIVE   1073741824           4608                 901686               901686               163542               163542               2020-05-31 19:22:33.194000  2020-05-31 19:41:37.396000  E:\dmdbms\data\arch\ARCHIVE_LOCAL1_20200531194137390_0.log

已用时间: 7.243(毫秒). 执行号:3.
SQL> begin
2   for i in 11 .. 20 loop
3   insert into t2 values(i);
4   end loop;
5   commit;
6   end;
7   /
DMSQL 过程已成功完成
已用时间: 3.688(毫秒). 执行号:4.
SQL> alter system switch logfile;
操作已执行
已用时间: 15.692(毫秒). 执行号:0.
SQL> select * from v$arch_file;

行号       DB_MAGIC    STATUS   LEN                  FREE                 ARCH_LSN             CLSN                 ARCH_SEQ             NEXT_SEQ             CREATE_TIME                 CLOSE_TIME                  PATH
---------- ----------- -------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- --------------------------- --------------------------- ----------------------------------------------------------
1          -430050549  ACTIVE   1073741824           4096                 0                    0                    0                    0                    2020-05-31 19:43:28.792000  2020-05-31 19:43:28.797000  E:\dmdbms\data\arch\ARCHIVE_LOCAL1_20200531194328794_0.log
2          -430050549  INACTIVE 225792               225792               892254               894139               161798               162230               2020-05-31 10:17:40.810000  2020-05-31 11:52:15.732000  E:\dmdbms\data\arch\ARCHIVE_LOCAL1_20200531101740800_0.log
3          -430050549  INACTIVE 282112               282112               894139               896221               162231               162773               2020-05-31 11:52:15.732000  2020-05-31 18:10:29.344000  E:\dmdbms\data\arch\ARCHIVE_LOCAL1_20200531115215733_0.log
4          -430050549  INACTIVE 198656               198656               896222               898933               162774               163153               2020-05-31 18:10:29.344000  2020-05-31 18:11:41.803000  E:\dmdbms\data\arch\ARCHIVE_LOCAL1_20200531181130589_0.log
5          -430050549  INACTIVE 202752               202752               898934               901685               163154               163541               2020-05-31 18:11:41.803000  2020-05-31 19:22:33.194000  E:\dmdbms\data\arch\ARCHIVE_LOCAL1_20200531192047977_0.log
6          -430050549  INACTIVE 143872               143872               901686               903130               163542               163814               2020-05-31 19:22:33.194000  2020-05-31 19:43:28.792000  E:\dmdbms\data\arch\ARCHIVE_LOCAL1_20200531194137390_0.log

6 rows got

已用时间: 8.257(毫秒). 执行号:5.
SQL> checkpoint(100);
DMSQL 过程已成功完成
已用时间: 19.634(毫秒). 执行号:6.
SQL> alter database archivelog current;
操作已执行
已用时间: 15.156(毫秒). 执行号:0.
SQL> select * from v$arch_file;

行号       DB_MAGIC    STATUS   LEN                  FREE                 ARCH_LSN             CLSN                 ARCH_SEQ             NEXT_SEQ             CREATE_TIME                 CLOSE_TIME                  PATH
---------- ----------- -------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- --------------------------- --------------------------- ----------------------------------------------------------
1          -430050549  ACTIVE   1073741824           4096                 0                    0                    0                    0                    2020-05-31 19:44:15.929000  2020-05-31 19:44:15.934000  E:\dmdbms\data\arch\ARCHIVE_LOCAL1_20200531194415931_0.log
2          -430050549  INACTIVE 225792               225792               892254               894139               161798               162230               2020-05-31 10:17:40.810000  2020-05-31 11:52:15.732000  E:\dmdbms\data\arch\ARCHIVE_LOCAL1_20200531101740800_0.log
3          -430050549  INACTIVE 282112               282112               894139               896221               162231               162773               2020-05-31 11:52:15.732000  2020-05-31 18:10:29.344000  E:\dmdbms\data\arch\ARCHIVE_LOCAL1_20200531115215733_0.log
4          -430050549  INACTIVE 198656               198656               896222               898933               162774               163153               2020-05-31 18:10:29.344000  2020-05-31 18:11:41.803000  E:\dmdbms\data\arch\ARCHIVE_LOCAL1_20200531181130589_0.log
5          -430050549  INACTIVE 202752               202752               898934               901685               163154               163541               2020-05-31 18:11:41.803000  2020-05-31 19:22:33.194000  E:\dmdbms\data\arch\ARCHIVE_LOCAL1_20200531192047977_0.log
6          -430050549  INACTIVE 143872               143872               901686               903130               163542               163814               2020-05-31 19:22:33.194000  2020-05-31 19:43:28.792000  E:\dmdbms\data\arch\ARCHIVE_LOCAL1_20200531194137390_0.log
7          -430050549  INACTIVE 9728                 9728                 903130               903130               163815               163825               2020-05-31 19:43:28.792000  2020-05-31 19:44:15.929000  E:\dmdbms\data\arch\ARCHIVE_LOCAL1_20200531194328794_0.log

7 rows got

1) 启动DMRMAN命令行工具。
2) 保证数据库处于脱机状态。

D:\>net stop DmServicejydm
DmServicejydm 服务正在停止...
DmServicejydm 服务已成功停止。

3) DMRMAN中输入以下命令:

RMAN> backup archive log lsn between 901686 and 903130 database 'E:\dmdbms\data\jydm\dm.ini' backupset 'E:\dmdbms\backup\arch_lsn_bak_01';
backup archive log lsn between 901686 and 903130 database 'E:\dmdbms\data\jydm\dm.ini' backupset 'E:\dmdbms\backup\arch_lsn_bak_01';
checking if the database under system path [E:\dmdbms\data\jydm] is running...[4].
checking if the database under system path [E:\dmdbms\data\jydm] is running...[3].
checking if the database under system path [E:\dmdbms\data\jydm] is running...[2].
checking if the database under system path [E:\dmdbms\data\jydm] is running...[1].
checking if the database under system path [E:\dmdbms\data\jydm] is running...[0].
checking if the database under system path [E:\dmdbms\data\jydm] is running, write dmrman info.
EP[0] max_lsn: 904411
BACKUP ARCHIVE LOG FROM LSN 901686 TO LSN 903130, execute......
CMD CHECK LSN......
BACKUP ARCHIVE LOG FROM LSN 901686 TO LSN 903130, collect dbf......
CMD CHECK ......
ARCH BACKUP SUBS......
total 1 packages processed...
total 2 packages processed...
ARCH BACKUP MAIN......
BACKUPSET [E:\dmdbms\backup\arch_lsn_bak_01] END, CODE [0]......
META GENERATING......
total 3 packages processed...
total 3 packages processed!
CMD END.CODE:[0]
backup successfully!
time used: 7313.615(ms)

命令中的LSN BETEEWN start AND end参数表示执行的备份为执行备份的区间,或者设置FROM LSN(TIME)以及UNTIL LSN(TIME)。

DM7使用脱机工具DMRMAN执行数据库备份

脱机工具DMRMAN执行数据库备份
1. 概述
在DMRMAN工具中使用BACKUP命令你可以备份整个数据库。使用DMRMAN备份数据库不需要设置归档,关闭服务器在DMRMAN中输入以下命令即可备份数据库:

C:\Users\Administrator>net stop DmServicejydm
DmServicejydm 服务正在停止..
DmServicejydm 服务已成功停止。

RMAN> backup database 'E:\dmdbms\data\jydm\dm.ini';
backup database 'E:\dmdbms\data\jydm\dm.ini';
checking if the database under system path [E:\dmdbms\data\jydm] is running...[4].
checking if the database under system path [E:\dmdbms\data\jydm] is running...[3].
checking if the database under system path [E:\dmdbms\data\jydm] is running...[2].
checking if the database under system path [E:\dmdbms\data\jydm] is running...[1].
checking if the database under system path [E:\dmdbms\data\jydm] is running...[0].
checking if the database under system path [E:\dmdbms\data\jydm] is running, write dmrman info.
EP[0] max_lsn: 898933
BACKUP DATABASE [jydm], execute......
CMD CHECK LSN......
BACKUP DATABASE [jydm], collect dbf......
CMD CHECK ......
DBF BACKUP SUBS......
total 1 packages processed...
total 2 packages processed...
total 3 packages processed...
total 4 packages processed...
total 5 packages processed...
total 6 packages processed...
total 7 packages processed...
total 8 packages processed...
DBF BACKUP MAIN......
BACKUPSET [E:\dmdbms\data\jydm\bak\DB_jydm_FULL_20200531_181250_000528] END, CODE [0]......
META GENERATING......
total 9 packages processed...
total 9 packages processed!
CMD END.CODE:[0]
backup successfully!
time used: 8302.098(ms)

命令执行完后会在默认的备份路径下生成备份集目录,默认的备份路径为dm.ini中BAK_PATH的配置值,若未配置,则为SYSTEM_PATH下的bak目录。这是最简单的脱机数据库备份语句,如果要设置其他备份选项请参考下文的语法及使用说明。语法如下:

BACKUP DATABASE '<INI文件路径>' [[[FULL][DDL_CLONE]] |INCREMENT [CUMULATIVE][WITH BACKUPDIR '<基备份搜索目录>'{,'<基备份搜索目录>'}]|[BASE ON BACKUPSET '<基备份集目录>']]
[TO <备份名>] [BACKUPSET '<备份集目录>'][DEVICE TYPE <介质类型>[PARMS '<介质参数>']
[BACKUPINFO '<备份描述>'] [MAXPIECESIZE <备份片限制大小>]
[IDENTIFIED BY <加密密码>[WITH ENCRYPTION][ENCRYPT WITH <加密算法>]]
[COMPRESSED [LEVEL <压缩级别>]][WITHOUT LOG]
[TASK THREAD <线程数>][PARALLEL [<并行数>]];

DATABASE:必选参数。指定还原目标库的INI文件路径。

FULL:备份类型。FULL表示完全备份,可不指定,DMRMAN会默认为完全备份。

DDL_CLONE:数据库克隆。该参数只能用于完全备份中,表示仅拷贝所有的元数据不拷贝数据。如对于数据库中的表来说,只备份表的定义不备份表中数据。

INCREMENT:备份类型。INCREMENT表示增量备份,若要执行增量备份必须指定该参数。

WITH BACKUPDIR:用于增量备份中,指定基备份的搜索目录,最大长度为256个字节。若不指定,服务器自动在默认备份目录下搜索基备份。如果基备份不在默认的备份目录下,增量备份必须指定该参数。

CUMULATIVE:用于增量备份中,指明为累积增量备份类型,若不指定则缺省为差异增量备份类型。

BASE ON BACKUPSET:用于增量备份中,为增量备份指定基备份集目录。,如果没有指定基备份集,则会自动搜索一个最近可用的备份集作为基备份集

TO:指定生成备份名称。若未指定,系统随机生成,默认备份名格式为:DB_备份类型_数据库名_备份时间。

BACKUPSET:指定当前备份集生成目录。若指定为相对路径,则在默认备份路径中生成备份集。

DEVICE TYPE:指存储备份集的介质类型,支持DISK和TAPE,默认DISK。DISK表示存储备份集到磁盘,TAPE表示存储到磁带。

PARMS:只对介质类型为TAPE时有效。

BACKUPINFO:备份的描述信息。最大不超过256个字节。

MAXPIECESIZE:最大备份片文件大小上限,以M为单位,最小128M,32位系统最大2G,64位系统最大128G。

IDENTIFIED BY:指定备份时的加密密码。密码应用双引号括起来,这样避免一些特殊字符通不过语法检测。密码的设置规则遵行ini参数pwd_policy指定的口令策略。

WITH ENCRYPTION:指定加密类型,0表示不加密,不对备份文件进行加密处理;1表示简单加密,对备份文件设置口令,但文件内容仍以明文存;2表示完全数据加密,对备份文件进行完全的加密,备份文件以密文方式存储。

ENCRYPT WITH:加密算法。缺省情况下,算法为AES256_CFB。具体可以使用的加密算法参考联机数据库备份章节的参数说明。

COMPRESSED:取值范围0~9。0表示不压缩,1表示1级压缩,9表示9级压缩。压缩级别越高,压缩越慢,但压缩比越高。若未指定,但指定COMPRESSED,则默认1;否则,默认0。

WITHOUT LOG:脱机数据库备份是否备份日志。如果使用,则表示不备份,否则表示备份。如果使用了WITHOUT LOG参数,则使用DMRMAN工具还原时,必须指定WITH ARCHIVEDIR参数。

TASK THREAD:备份过程中数据处理过程线程的个数,取值范围0~64,默认为4。若指定为0,则调整为1;若指定大于当前系统主机核数,则调整为当前主机核数。线程数(TASK THREAD)*并行数(PARALLEL)不得超过512。

PARALLEL:指定并行备份的并行数,取值范围0~128。若不指定,则默认为4,指定0或者1均认为为非并行备份。若未指定关键PARALLEL,则认为非并行备份。并行备份不支持介质为TAPE的备份。线程数(TASK THREAD)*并行数(PARALLEL)不得超过512。

使用说明:
1. 备份成功后会在<备份集目录>或者备份默认目录下生成备份集。备份集中包括一个备份元数据文件,后缀.meta,一个或多个备份片文件,后缀.bak。

2. 对于并行备份的备份集,备份集中还包括其他子备份集目录,但每个子备份集目录中也都包含一个meta文件,0个或者多个备份片文件。

3. DDL_CLONE库备份集不能作为增量备份的基备份,仅能用于库级还原。

4.脱机备份的数据库可以正常退出库,也可以是故障退出的数据库。若是故障退出的数据库,则备份前,需先进行归档修复。

5. 在执行脱机数据库备份过程中,如果报错归档不完整,则需要检查库是不是异常退出。如果库是异常退出,则需要先进行归档修复。

2. 备份数据库
本节主要描述使用DMRMAN如何执行基本的脱机数据库备份及实施一些备份策略,包括:
1. 设置备份选项
2. 创建完全备份
3. 创建增量备份

1.设置备份选项
备份命令如果仅指定了必选参数如“BACKUP DATABASE ‘/opt/dmdbms/data/DAMENG/dm.ini’”,那么DMRMAN会根据配置的环境及内置的参数默认值自动指定备份介质类型、备份路径、备份片大小等参数。用户备份时也可以指定这些参数来覆盖默认值,常见的备份选项有设置备份集路径、指定备份名、限制备份片大小、添加描述信息、并行备份等。DMRMAN脱机备份数据库的语法与使用DIsql联机备份类似。

2.创建完全备份
执行数据库备份要求数据库处于脱机状态。与联机备份数据库不同的是,脱机备份不需要配置归档。一个完整的创建脱机数据库备份的示例如下:
1) 启动DMRMAN命令行工具。
2) 保证数据库处于脱机状态。
3) DMRMAN中输入以下命令:

RMAN> backup database 'E:\dmdbms\data\jydm\dm.ini' full backupset 'E:\dmdbms\backup\db_full_bak_01';
backup database 'E:\dmdbms\data\jydm\dm.ini' full backupset 'E:\dmdbms\backup\db_full_bak_01';
checking if the database under system path [E:\dmdbms\data\jydm] is running...[4].
checking if the database under system path [E:\dmdbms\data\jydm] is running...[3].
checking if the database under system path [E:\dmdbms\data\jydm] is running...[2].
checking if the database under system path [E:\dmdbms\data\jydm] is running...[1].
checking if the database under system path [E:\dmdbms\data\jydm] is running...[0].
checking if the database under system path [E:\dmdbms\data\jydm] is running, write dmrman info.
EP[0] max_lsn: 898933
BACKUP DATABASE [jydm], execute......
CMD CHECK LSN......
BACKUP DATABASE [jydm], collect dbf......
CMD CHECK ......
DBF BACKUP SUBS......
total 1 packages processed...
total 2 packages processed...
total 3 packages processed...
total 4 packages processed...
total 5 packages processed...
total 6 packages processed...
total 7 packages processed...
total 8 packages processed...
DBF BACKUP MAIN......
BACKUPSET [E:\dmdbms\backup\db_full_bak_01] END, CODE [0]......
META GENERATING......
total 9 packages processed...
total 9 packages processed!
CMD END.CODE:[0]
backup successfully!
time used: 7256.870(ms)

RAC使用dmrman执行备份

[dmdba@dmrac1 bin]$ dmrman
dmrman V7.1.6.46-Build(2018.02.08-89107)ENT
RMAN> backup database '/dm7/data/rac0_config/dm.ini' backupset '/dm7/backup/bak/db_rac_full_bak_2020060801';
backup database '/dm7/data/rac0_config/dm.ini' backupset '/dm7/backup/bak/db_rac_full_bak_2020060801';
file dm.key not found, use default license!
Read ini warning, default backup path [/dm7data/bak] does not exist.
[-105]:Invalid control file

报错是因为对于rac环境来说在启动dmrman时需要指定dcr_ini参数

[dmdba@dmrac1 bin]$ dmrman dcr_ini=/dm7/data/dmdcr.ini
dmrman V7.1.6.46-Build(2018.02.08-89107)ENT
RMAN> backup database '/dm7/data/rac0_config/dm.ini';
backup database '/dm7/data/rac0_config/dm.ini';
file dm.key not found, use default license!
checking if the RAC database under system path [+DMDATA/data/rac] is running....
EP [0] is checking....
[-12000]:The specified instance has been started

报错是因为指定的数据库实例已经启动了,dmrman是用于脱机备份,所以需要停止数据库

RMAN> backup database '/dm7/data/rac0_config/dm.ini';
backup database '/dm7/data/rac0_config/dm.ini';
checking if the RAC database under system path [+DMDATA/data/rac] is running....
EP [0] is checking....
EP [1] is checking....
EP[0] max_lsn: 58852
EP[0] adjust cur_lsn from [58852] to [58867]
BACKUP DATABASE [rac], execute......
CMD CHECK LSN......
BACKUP DATABASE [rac], collect dbf......
CMD CHECK ......
DBF BACKUP SUBS......
total 1 packages processed...
total 2 packages processed...
total 3 packages processed...
total 4 packages processed...
total 5 packages processed...
DBF BACKUP MAIN......
BACKUPSET [+DMDATA/data/rac/bak/DB_rac_FULL_20200608_160009_000828] END, CODE [0]......
META GENERATING......
total 9 packages processed...
total 9 packages processed!
CMD END.CODE:[0]
backup successfully!
time used: 16303.415(ms)

命令中的FULL参数表示执行的备份为完全备份,也可以不指定该参数,DMRMAN默认执行的备份类型为完全备份。

3.创建增量备份
增量备份指基于指定的库的某个备份(完全备份或者增量备份),备份自该备份以来所有发生修改了的数据页。脱机增量备份要求两次备份之间数据库必须有操作,否则备份会报错。增量备份示例如下:
首先启动数据库执行一些操作

C:\Users\Administrator>net start DmServicejydm
DmServicejydm 服务正在启动 ....
DmServicejydm 服务已经启动成功。

SQL> create table t2(id int);
操作已执行
已用时间: 8.250(毫秒). 执行号:5.
SQL> begin
2   for i in 1 .. 10 loop
3   insert into t2 values(i);
4   end loop;
5   commit;
6   end;
7   /
DMSQL 过程已成功完成
已用时间: 2.845(毫秒). 执行号:6.
SQL> exit

1) 启动DMRMAN命令行工具。
2) 保证数据库处于脱机状态。

C:\Users\Administrator>net stop DmServicejydm
DmServicejydm 服务正在停止..
DmServicejydm 服务已成功停止。

3) DMRMAN中输入以下命令:

RMAN> backup database 'E:\dmdbms\data\jydm\dm.ini' increment with backupdir 'E:\dmdbms\backup' backupset 'E:\dmdbms\backup\db_full_bak_02';
backup database 'E:\dmdbms\data\jydm\dm.ini' increment with backupdir 'E:\dmdbms\backup' backupset 'E:\dmdbms\backup\db_full_bak_02';
checking if the database under system path [E:\dmdbms\data\jydm] is running...[4].
checking if the database under system path [E:\dmdbms\data\jydm] is running...[3].
checking if the database under system path [E:\dmdbms\data\jydm] is running...[2].
checking if the database under system path [E:\dmdbms\data\jydm] is running...[1].
checking if the database under system path [E:\dmdbms\data\jydm] is running...[0].
checking if the database under system path [E:\dmdbms\data\jydm] is running, write dmrman info.
EP[0] max_lsn: 901685
BACKUP DATABASE [jydm], execute......
CMD CHECK LSN......
BACKUP DATABASE [jydm], collect dbf......
CMD CHECK ......
DBF BACKUP SUBS......
total 1 packages processed...
total 2 packages processed...
total 3 packages processed...
total 4 packages processed...
total 5 packages processed...
total 6 packages processed...
total 7 packages processed...
total 8 packages processed...
DBF BACKUP MAIN......
BACKUPSET [E:\dmdbms\backup\db_full_bak_02] END, CODE [0]......
META GENERATING......
total 9 packages processed...
total 9 packages processed!
CMD END.CODE:[0]
backup successfully!
time used: 8219.138(ms)

命令中的INCREMENT参数表示执行的备份为增量备份,增量备份该参数不可省略。如果增量备份的基备份不在默认备份目录,必须指定WITH BACKUPDIR参数用于搜索基备份集,或者使用CONFIGURE…BACKUPDIR命令配置默认的基备份集搜索目录

达梦DMRMAN备份还原工具的介绍与配置

DMRMAN(DM RECOVERY MANEGER)是DM7的脱机备份还原管理工具,由它来统一负责库级脱机备份、脱机还原、数据库恢复等相关操作,该工具支持命令行指定参数方式和控制台交互方式执行,降低了用户的操作难度。

通过DMRMAN工具执行脱机操作过程中,仅会使用通过关键字DATABASE指定的目标库的本地归档配置信息,不会对本地归档配置文件中其他类型归档配置信息进行校验。例如:DATABASE指定目标库/opt/dmdbms/data/dm.ini,为单机环境且配置参数ARCH_INI为1,那么只会相应的读取dmarch.ini中本地归档日志信息。此时,即使dmarch.ini中配置了REALTIME、MARCH、TIMELY等其他类型的归档日志,也不会去校验dmmal.ini、dmtimer.ini等是否有效。

1. DMRMAN概述
DMRMAN是DM7提供的命令行工具,无需额外地安装。DMRMAN的结构比较复杂,为了更好地使用它我们需要了解它的结构。接下来将对DMRMAN的重要组成部分进行介绍。

源库
源库是待备份的数据库。使用DMRMAN工具只可对数据库进行脱机备份,联机备份需要通过DIsql工具实现。DMRMAN可以针对整个数据库执行脱机完全备份和增量备份,数据库可以配置归档也可以不配置。

目标库
目标库是待还原的数据库,即是用来做还原的库,也称为目标还原库。目标库可以是通过dm.ini文件指定的数据库,也可以是目标文件目录。通过dm.ini指定库时,dm.ini及其配置中的CTL_PATH必须有效,且库必须处于关闭状态;指定文件目录时,指定目录作为SYSTEM_PATH处理,可以存在,也可以不存在,但必须有效。目前目标库的还原仅支持脱机还原,可通过DMRMAN和CONSOLE工具实现。

DMRMAN客户端
DMRMAN客户端是DM7软件的一部分,用来执行目标数据库的备份和恢复操作。DMRMAN客户端是一个命令行工具,命令行的好处是管理员可以编写复杂的脚本,将DMRMAN和操作系统的任务调度结合起来可以实现备份的自动化。

备份集
利用DMRMAN工具将数据库中的一个或多个数据文件、数据库信息等备份到一个称为“备份集”的逻辑结构中,备份集的格式是特定的只能由DMRMAN创建和访问。一个备份集中会包含一个或多个二进制文件,这个二进制文件被称为备份片。备份数据库会产生一个备份集,这个备份集可能包含一个或者多个备份片。备份片的个数由数据库中数据文件的大小和文件系统对文件大小的限制共同决定。如果备份的数据文件大小超过了文件系统对文件大小的限制就会产生多个备份片。

在对数据库进行备份时可以指定备份片的大小来适应存储设备的容量。例如,一个数据库的产生的备份集大小约为40GB,一盘磁带的容量为10GB,这时可以指定备份片大小为10G,备份后备份集将包含4个备份片,正好使用4盘磁带。

2. 启动和配置DMRMAN
下面将介绍如何启动命令行工具DMRMAN并进行交互。主要内容包括:
1. 启动和退出DMRMAN
1.1 输入DMRMAN命令
1.2DMRMAN环境配置

1. 启动和退出DMRMAN
安装DM数据库后,DMRMAN可执行程序与数据库其他可执行程序一样位于安装路径的执行码目录下。比如,LINUX上数据库的执行码目录为/opt/dmdbms/bin,转到执行码目录直接在操作系统的命令行中输入以下命令就可启动DMRMAN。若配置了环境变量DM_HOME,可直接命令行执行:
./dmrman
启动后控制台中输入exit命令即可退出DMRMAN环境:
RMAN>exit

2. 输入DMRMAN命令
DMRMAN工具支持控制台输入命令、命令行设置参数两种操作方式。下面分别对这两种操作方式进行介绍。
DMRMAN控制台输入命令
当DMRMAN客户端已经启动且可以输入命令时会显示命令提示符。如下所示:

RMAN>

输入以下用于执行的DMRMAN命令:

RMAN>HELP
RMAN>BACKUP DATABASE'/opt/dmdbms/data/DAMENG/dm.ini';

大多数的DMRMAN命令会设置多个参数,命令的结尾可以加分号结束,也可以不使用分号。

DMRMAN控制台还可以执行脚本。如创建一个名为cmd_file.txt的文件,文件中包含“BACKUP DATABASE’/opt/dmdbms/data/DAMENG/dm.ini’”命令,保存到/home/dm_cmd目录下,执行方式如下:

RMAN>`/home/dm_cmd/cmd_file.txt

DMRMAN是按行解析命令,如果输入一行不完整的命令执行会报错,如一条完整的命令分三行输入会导致报错:

BACKUP
DATABASE
'/opt/dmdbms/data/DAMENG/dm.ini';

RMAN> help
help
格式: dmrman.exe KEYWORD=value

例程: dmrman.exe CTLFILE=c:\dm7data\dameng\res_ctl.txt



必选参数:

关键字            说明
------------     -----------------------------------------------------------------
CTLFILE          指定执行语句所在的文件路径
CTLSTMT         指定待执行语句
DCR_INI         指定dmdcr.ini路径;若未指定且当前目录中dmdcr.ini存在,则使用当前目录中的dmdcr.ini。可单独使用,也可与其他参数配合使用USE_AP 指定备份、还原执行载体,1/2:DMAP/进程自身,默认是? DMAP。
HELP            打印帮助信息

DMRMAN命令行设置参数执行
DMRMAN命令行设置参数执行又可分为命令行指定脚本、命令行指定语句两种执行方式。DMRMAN支持的参数如下所示。

CTLFILE:指定执行语句所在的文件路径,不能和CTLSTMT同时使用。脚本文件格式支持*.txt
CTLSTMT:指定待执行语句,不能和CTLFILE同时使用。如:CTLSTMT=”BACKUP DATABASE ‘/home/dmdbms/data/DAMENG/dm.ini'”DCR_INI:指定dmdcr.ini路径,用于ASM存储时访问ASM服务;若未指定,则认为不存在ASM存储使用。可单独使用,也可与其他参数配合使用。主要用于DMRAC环境

USE_AP:指定备份还原执行策略。取值1、2。默认为1。
1:使用DMAP插件方式执行备份还原;执行备份还原时要求先启动DMAP服务。
2:无插件方式,由DMSERVER进程自身完成备份还原,不再依赖DMAP服务;配置成2的情况下,不能执行第三方备份(指定DEVICE TYPE为TAPE)

命令行指定脚本执行,要求我们先创建一个包含DMRMAN命令的文件,然后设置CTLFILE参数,参数后面指定文件的路径。例如,创建一个名为cmd_rman.txt的文件,保存到/home/dm_cmd目录下,文件中包含一行如下所示的DMRMAN命令:

BACKUP DATABASE'/opt/dmdbms/data/DAMENG/dm.ini';

设置CTLFILE参数启动DMRMAN工具,指定脚本文件中的命令将被执行:

./dmrman CTLFILE=/home/dm_cmd/cmd_rman.txt

命令执行完后DMRMAN工具会自动退出。
命令行执行语句执行,是DMRMAN工具设置CTLSTMT参数,参数后面执行需要执行的DMRMAN命令,使用方法如下所示:

./dmrman CTLSTMT="BACKUP DATABASE'/opt/dmdbms/data/DAMENG/dm.ini';"

CTLFILE中存在多条语句或CTLSTMT中一次输入多条语句时,每条语句都必须以分号结尾;执行单条语句,语句结尾可以加分号也可以不加。

CTLSTMT中,待执行语句外层双引号一定要加。执行完毕后工具自动退出。CTLFILE和CTLSTMT不能同时指定。若使用DMASM文件系统,可通过DCR_INI指定目标联机的ASM服务器。

3. DMRMAN环境配置
使用CONFIGURE命令进行DMRMAN的默认参数配置,配置默认的存储介质类型、备份集搜集目录、归档日志搜集目录、跟踪日志文件。
1. 显示和清除现有参数的默认配置
2. 配置存储介质类型:DISK或TAPE
3. 配置备份集搜集目录
4. 配置归档日志搜集目录
5. 配置跟踪日志文件

语法如下:

CONFIGURE |
CONFIGURE CLEAR |
CONFIGURE DEFAULT 
::=
DEVICE [[TYPE<介质类型> [PARMS <第三方参数>]]|CLEAR] |
TRACE [[FILE <跟踪日志文件路径>][TRACE LEVEL <跟踪日志等级>]|CLEAR] |
BACKUPDIR [[ADD|DELETE] '<基备份搜索目录>'{,'<基备份搜索目录>' }|CLEAR] |
ARCHIVEDIR [[ADD|DELETE] '<归档日志目录>'{,'<归档日志目录>'}
{'<归档日志目录>'{,'<归档日志目录>'} }|CLEAR]

CONFIGURE:查看设置的默认值。
CLEAR:清理参数的默认值。
DEVICE TYPE:备份集存储的介质类型,DISK或者TAPE,默认DISK。DISK表示存储备份集到磁盘,TAPE表示存储到磁带。
PARMS:介质参数,供第三方存储介质(TAPE类型)管理使用。
BACKUPDIR:默认搜集备份的目录,可以设置为不存在但是在系统中是有效的路径。
ARCHIVEDIR :默认搜集归档的目录,可以设置为不存在但是在系统中是有效的路径。
ADD:添加默认备份集搜索目录或归档日志目录,若已经存在,则替换原来的。
DELETE:删除指定默认备份集搜索目录或者归档日志目录。
TRACE:介质存储过程中使用的跟踪日志配置,包括文件路径(TRACE FILE)和日志级别(TRACE LEVEL),其中日志级别有效值(1/2,不写/写;默认为1,不写)。不支持asm类型文件。若用户指定,则指定的文件不能为已经存在的文件,否则报错;也不可以为ASM文件。

使用说明:
1. 设置的参数默认值仅在此DMRMAN实例存活期间有效。
2. DMRMAN命令中如果指定了相同的参数,会覆盖CONFIGURE的默认设置。

1.显示和清除所有默认配置项
使用CONFIGURE命令就可显示DMRMAN配置项的当前值。示例如下:

RMAN> configure
configure
THE DMRMAN DEFAULT SETTING:

DEFAULT DEVICE:
MEDIA : DISK
DEFAULT TRACE :
FILE : ..\log\dm_SBTTRACE_202005.log
LEVEL : 1
DEFAULT BACKUP DIRECTORY:
TOTAL COUNT :0

DEFAULT ARCHIVE DIRECTORY:
TOTAL COUNT :0

time used: 18.563(ms)

使用CONFIGURE…CLEAR命令可恢复任意一个配置项到默认值。示例如下:

RMAN>CONFIGURE DEFAULT DEVICE CLEAR;

或使用CONFIGURE…CLEAR命令清除所有的默认配置。示例如下:

RMAN>CONFIGURE CLEAR;

2.配置存储介质类型:DISK或TAPE
备份时如果没指定备份介质类型参数,则会使用CONFIGURE中配置的默认介质类型。DMRMAN预先配置的介质类型为DISK,不需要特别指定。修改介质类型默认配置的步骤如下:
1) 启动DMRMAN。
2) 执行CONFIGURE命令查看介质类型当前的默认值。

RMAN>CONFIGURE;

3) 执行CONFIGURE DEFAULT DEVICE TYPE修改默认值。

RMAN>CONFIGURE DEFAULT DEVICE TYPE TAPE PARMS 'command';

3.配置备份集搜集目录
备份集搜索目录用于增量备份还原中搜索基备份。单个目录最大长度为256个字节,可配置的备份集搜索目录没有限制。如果不指定备份集搜集目录只会在库的默认备份目录和当前备份执行备份集目录的上级目录下搜索备份集。配置备份集搜索目录步骤如下:

RMAN>CONFIGURE DEFAULT BACKUPDIR;
RMAN>CONFIGURE DEFAULT BACKUPDIR '/home/dm_bak1' ,'/home/dm_bak2';

若要增加或删除部分备份集搜索目录,不需要对所有的目录重新进行配置,只要添加或删除指定的目录即可。

RMAN> configure default backupdir;
configure default backupdir;
THE DMRMAN DEFAULT BACKUP DIRECTORY SETTING:

DEFAULT BACKUP DIRECTORY:
TOTAL COUNT :0

time used: 14.267(ms)
RMAN> configure default backupdir 'E:\dmdbms\backup','E:\dmdbms\backup1';
configure default backupdir 'E:\dmdbms\backup' , 'E:\dmdbms\backup1';
configure default backupdir update successfully!
DEFAULT BACKUP DIRECTORY:
TOTAL COUNT :2

E:\dmdbms\backup
E:\dmdbms\backup1
time used: 11.640(ms)

若要增加或删除部分备份集搜索目录,不需要对所有的目录重新进行配置,只要添加或删除指定的目录即可。

RMAN> configure default backupdir add 'E:\dmdbms\backup2';
configure default backupdir add 'E:\dmdbms\backup2';
configure default backupdir add successfully!
DEFAULT BACKUP DIRECTORY:
TOTAL COUNT :3

E:\dmdbms\backup
E:\dmdbms\backup1
E:\dmdbms\backup2
time used: 11.426(ms)
RMAN> configure default backupdir delete 'E:\dmdbms\backup2';
configure default backupdir delete 'E:\dmdbms\backup2';
configure default backupdir delete successfully!
DEFAULT BACKUP DIRECTORY:
TOTAL COUNT :2

E:\dmdbms\backup
E:\dmdbms\backup1
time used: 11.564(ms)

4.配置归档日志搜集目录
归档日志搜索目录用于增量备份还原中搜索归档日志。单个目录最大长度为256个字节,可配置的归档日志搜索目录没有限制。配置归档日志搜索目录步骤如下:

RMAN> configure default archivedir 'E:\dmdbms\data\arch','E:\dmdbms\data\arch1';
configure default archivedir 'E:\dmdbms\data\arch' , 'E:\dmdbms\data\arch1';
configure default archivedir update successfully!
DEFAULT ARCHIVE DIRECTORY:
TOTAL COUNT :2

E:\dmdbms\data\arch
E:\dmdbms\data\arch1
time used: 10.620(ms)

若要增加或删除部分归档日志搜索目录,不需要对所有的目录重新进行配置,只要添加或删除指定的目录即可。

RMAN> configure default archivedir add 'E:\dmdbms\data\arch2';
configure default archivedir add 'E:\dmdbms\data\arch2';
configure default archivedir add successfully!
DEFAULT ARCHIVE DIRECTORY:
TOTAL COUNT :3

E:\dmdbms\data\arch
E:\dmdbms\data\arch1
E:\dmdbms\data\arch2
time used: 12.888(ms)
RMAN> configure default archivedir delete 'E:\dmdbms\data\arch2';
configure default archivedir delete 'E:\dmdbms\data\arch2';
configure default archivedir delete successfully!
DEFAULT ARCHIVE DIRECTORY:
TOTAL COUNT :2

E:\dmdbms\data\arch
E:\dmdbms\data\arch1
time used: 17.910(ms)

5.配置跟踪日志文件
跟踪日志文件记录了SBT接口的调用过程,用户通过查看日志可跟踪备份还原过程(见3.2.3 数据备份高级主题)。DMRMAN备份还原命令中不支持设置跟踪日志文件,只能用CONFIGURE命令配置,默认配置不记录跟踪日志。配置跟踪日志文件步骤如下:
1)显示TRACE文件的默认配置。

RMAN> configure ;
configure;
THE DMRMAN DEFAULT SETTING:

DEFAULT DEVICE:
MEDIA : DISK
DEFAULT TRACE :
FILE : ..\log\dm_SBTTRACE_202005.log
LEVEL : 1
DEFAULT BACKUP DIRECTORY:
TOTAL COUNT :2

E:\dmdbms\backup
E:\dmdbms\backup1
DEFAULT ARCHIVE DIRECTORY:
TOTAL COUNT :2

E:\dmdbms\data\arch
E:\dmdbms\data\arch1
time used: 38.030(ms)

2) 配置默认TRACE文件。

RMAN> configure default trace file 'E:\dmdbms\log\dm_trace.log';
configure default trace file 'E:\dmdbms\log\dm_trace.log';
configure default trace successfully!
time used: 2.877(ms)

3) 配置默认TRACE级别。

RMAN> configure default trace file '..\dm_SBTTRACE_202005.log' trace level 1;
configure default trace file '..\dm_SBTTRACE_202005.log' trace level 1;
configure default trace successfully!
time used: 45.502(ms)

MySQL InnoDB的索引扩展

索引扩展,InnoDB通过将主键列附加到每个辅助索引中来自动扩展该索引。创建如下表结构:

mysql> CREATE TABLE t1 (
    -> i1 INT NOT NULL DEFAULT 0,
    -> i2 INT NOT NULL DEFAULT 0,
    -> d DATE DEFAULT NULL,
    -> PRIMARY KEY (i1, i2),
    -> INDEX k_d (d)
    -> ) ENGINE = InnoDB;

Query OK, 0 rows affected (0.14 sec)

表t1在列(i1,i2)上定义了主键。同时也在列(d)上定义了一个辅助索引,但InnoDB扩展了这个索引并且将它视为(d,i1,i2)来处理。

在决定如何使用以及是否使用该索引时,优化器会考虑扩展辅助索引的主键列。这可以产生更高效的查询执行计划和更好的性能。

优化器可以使用扩展的二级索引来进行ref、range和index_merge索引访问,进行松散索引扫描,进行连接和排序优化,以及进行MIN()/MAX()优化。

下面的示例将显示优化器是否使用扩展辅助索引来影响执行计划 向表t1插入以下数据:


mysql> INSERT INTO t1 VALUES (1, 1, '1998-01-01'), (1, 2, '1999-01-01'), (1, 3, '2000-01-01'), (1, 4, '2001-01-01'),
    ->(1, 5, '2002-01-01'), (2, 1, '1998-01-01'), (2, 2, '1999-01-01'), (2, 3, '2000-01-01'),  (2, 4, '2001-01-01'),
    ->(2, 5, '2002-01-01'), (3, 1, '1998-01-01'), (3, 2, '1999-01-01'), (3, 3, '2000-01-01'), (3, 4, '2001-01-01'),
    ->(3, 5, '2002-01-01'), (4, 1, '1998-01-01'), (4, 2, '1999-01-01'), (4, 3, '2000-01-01'), (4, 4, '2001-01-01'),
    ->(4, 5, '2002-01-01'), (5, 1, '1998-01-01'), (5, 2, '1999-01-01'),  (5, 3, '2000-01-01'), (5, 4, '2001-01-01'),
    ->(5, 5, '2002-01-01');
Query OK, 25 rows affected (0.05 sec)
Records: 25  Duplicates: 0  Warnings: 0

假设执行下面的查询:

SET optimizer_switch = 'use_index_extensions=off';
explain select count(*) from t1 where i1=3 and d= '2000-01-01' ;

在这种情况下,优化器不能使用主键,因为主键包含列(i1、i2),并且查询没有引用i2。相反,优化器可以使用列(d)上的辅助索引k_d,执行计划取决于是否使用扩展索引。

当优化器不考虑索引扩展时,它将索引k_d仅视为(d)

mysql> SET optimizer_switch = 'use_index_extensions=off';
Query OK, 0 rows affected (0.00 sec)

mysql> explain select count(*) from t1 where i1=3 and d= '2000-01-01' \G;
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: t1
   partitions: NULL
         type: ref
possible_keys: PRIMARY,k_d
          key: PRIMARY
      key_len: 4
          ref: const
         rows: 5
     filtered: 20.00
        Extra: Using where
1 row in set, 1 warning (0.00 sec)

当优化器考虑到索引扩展时,它将k_d视为(d, i1, i2)。在这种情况下,它可以使用最左边的索引前缀(d, i1)来生成更好的执行计划

mysql> SET optimizer_switch = 'use_index_extensions=on';
Query OK, 0 rows affected (0.00 sec)

mysql> explain select count(*) from t1 where i1=3 and d= '2000-01-01' \G;
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: t1
   partitions: NULL
         type: ref
possible_keys: PRIMARY,k_d
          key: k_d
      key_len: 8
          ref: const,const
         rows: 1
     filtered: 100.00
        Extra: Using index
1 row in set, 1 warning (0.00 sec)

在这两种情况下,key表示优化器将使用辅助索引k_d,但是EXPLAIN输出显示了使用扩展索引所带来的这些改进:
.key_len从4字节变成了8字节,指示键查找使用了列d和i1,不仅仅是d。
.ref的值从const变成了const,const,因为键查找使用两个键的列而不是一个。
.rows:从5减到1,指示InnoDB将会检查更少的行来生成查询结果。
.Extra值从Using where;Using index变成了Using index。这意味着查询记录只需要使用索引而不用查询数据行记录。

可以使用show status来查看优化器在使用与不使用扩展索引时的差异:

mysql> flush table t1;
Query OK, 0 rows affected (0.01 sec)

mysql> flush status;
Query OK, 0 rows affected (0.03 sec)

上面的flush table和flush status语句用来清除表的缓存和清除状数据统计数据。

不使用索引扩展时show status产生的结果如下:

mysql> SET optimizer_switch = 'use_index_extensions=off';
Query OK, 0 rows affected (0.01 sec)

mysql> select count(*) from t1 where i1=3 and d= '2000-01-01';
+----------+
| count(*) |
+----------+
|        1 |
+----------+
1 row in set (0.00 sec)

mysql> show status like 'handler_read%';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| Handler_read_first    | 0     |
| Handler_read_key      | 1     |
| Handler_read_last     | 0     |
| Handler_read_next     | 5     |
| Handler_read_prev     | 0     |
| Handler_read_rnd      | 0     |
| Handler_read_rnd_next | 0     |
+-----------------------+-------+
7 rows in set (0.00 sec)

使用索引扩展时,show status产生的结果如下,其中handler_read_next的值从5减到1,指示使用这个索引更有效率:

mysql> flush table t1;
Query OK, 0 rows affected (0.01 sec)

mysql> flush status
    -> ;
Query OK, 0 rows affected (0.02 sec)

mysql> SET optimizer_switch = 'use_index_extensions=on';
Query OK, 0 rows affected (0.00 sec)

mysql> select count(*) from t1 where i1=3 and d= '2000-01-01';
+----------+
| count(*) |
+----------+
|        1 |
+----------+
1 row in set (0.00 sec)

mysql> show status like 'handler_read%';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| Handler_read_first    | 0     |
| Handler_read_key      | 1     |
| Handler_read_last     | 0     |
| Handler_read_next     | 1     |
| Handler_read_prev     | 0     |
| Handler_read_rnd      | 0     |
| Handler_read_rnd_next | 0     |
+-----------------------+-------+
7 rows in set (0.01 sec)

系统变量optimizer_switch的use_index_extensions标志允许优化器在决定如何使用InnoDB表的辅助索引时使不使用主键列。默认情况下,use_index_extensions是启用的。为了检查禁用索引扩展是否可以提高性能可以执行以下语句:

mysql> SET optimizer_switch = 'use_index_extensions=off';
Query OK, 0 rows affected (0.01 sec)

使用Disql执行表还原的复杂用法

下面介绍一些表还原操作中复杂的还原场景。主要内容包括:
1. 指定还原时不重建索引
2. 指定还原时不重建约束

1.指定还原时不重建索引
表备份时会默认备份表中的索引,还原时使用RESTORE TABLE…WITHOUT INDEX…语句可选择不还原索引。完整示例如下:
1) 保证数据库为OPEN状态。
2) 准备数据。创建待备份的表及索引。

SQL> create table tab_for_idx_01(c1 int);
操作已执行
已用时间: 6.323(毫秒). 执行号:108.
SQL> begin
2   for i in 1 .. 10 loop
3   insert into tab_for_idx_01 values(i);
4   end loop;
5   end;
6   /
DMSQL 过程已成功完成
已用时间: 1.236(毫秒). 执行号:109.

SQL> create index i_tab_for_idx_01 on tab_for_idx_01(c1);
操作已执行
已用时间: 11.300(毫秒). 执行号:110.

3) 备份表数据。

SQL> backup table tab_for_idx_01 backupset 'E:\dmdbms\backup\tab_for_idx_01_bak';
操作已执行
已用时间: 00:00:01.099. 执行号:111.

4) 校验备份。此步骤为可选。

SQL> select sf_bakset_check('disk','E:\dmdbms\backup\tab_for_idx_01_bak');

行号       SF_BAKSET_CHECK('disk','E:\dmdbms\backup\tab_for_idx_01_bak')
---------- -------------------------------------------------------------
1          1

已用时间: 20.171(毫秒). 执行号:112.

5) 还原表数据,但不重建索引。

SQL> restore table tab_for_idx_01 without index from backupset 'E:\dmdbms\backup\tab_for_idx_01_bak';
restore table tab_for_idx_01 without index from backupset 'E:\dmdbms\backup\tab_for_idx_01_bak';
[-8327]:还原表中存在二级索引或冗余约束.
已用时间: 31.373(毫秒). 执行号:0.
SQL> restore table tab_for_idx_01 struct from backupset 'E:\dmdbms\backup\tab_for_idx_01_bak';
操作已执行
已用时间: 44.737(毫秒). 执行号:125.
SQL> restore table tab_for_idx_01 without index from backupset 'E:\dmdbms\backup\tab_for_idx_01_bak';
操作已执行
已用时间: 78.096(毫秒). 执行号:126.
SQL> select * from tab_for_idx_01;

行号       C1
---------- -----------
1          1
2          2
3          3
4          4
5          5
6          6
7          7
8          8
9          9
10         10

SQL> select owner,table_name,index_name from dba_indexes where owner='SYSDBA' and table_name='TAB_FOR_IDX_01';

行号       OWNER  TABLE_NAME     INDEX_NAME
---------- ------ -------------- -------------
1          SYSDBA TAB_FOR_IDX_01 INDEX33555549

已用时间: 35.494(毫秒). 执行号:132.

2.指定还原时不重建约束
表备份时会默认备份表中的索引定义,还原时使用RESTORE TABLE…WITHOUT CONSTRAINT…语句可选择还原时不重建约束。完整示例如下:
1) 保证数据库为OPEN状态。
2) 准备数据。创建待备份的表及索引。

SQL> create table tab_for_cons_01(c1 int);
操作已执行
已用时间: 4.824(毫秒). 执行号:134.
SQL> alter table tab_for_cons_01 add constraint unique_cons1 unique(c1);
操作已执行
已用时间: 7.979(毫秒). 执行号:135.
SQL> select owner,table_name,index_name from dba_indexes where owner='SYSDBA' and table_name='TAB_FOR_CONS_01';

行号       OWNER  TABLE_NAME      INDEX_NAME
---------- ------ --------------- -------------
1          SYSDBA TAB_FOR_CONS_01 INDEX33555551
2          SYSDBA TAB_FOR_CONS_01 INDEX33555552

已用时间: 32.121(毫秒). 执行号:136.

SQL> select owner,constraint_name,constraint_type,table_name from dba_constraints where owner='SYSDBA' and table_name='TAB_FOR_CONS_01';

行号       OWNER  CONSTRAINT_NAME CONSTRAINT_TYPE TABLE_NAME
---------- ------ --------------- --------------- ---------------
1          SYSDBA UNIQUE_CONS1    U               TAB_FOR_CONS_01

已用时间: 17.818(毫秒). 执行号:138.
SQL> begin
2   for i in 1 .. 10 loop
3   insert into tab_for_cons_01 values(i);
4   end loop;
5   commit;
6   end;
7   /
DMSQL 过程已成功完成
已用时间: 3.485(毫秒). 执行号:143.

3) 备份表数据。

SQL> backup table tab_for_cons_01 backupset 'E:\dmdbms\backup\tab_for_cons_01_bak';
操作已执行
已用时间: 00:00:01.128. 执行号:144.

4) 校验备份。此步骤为可选。

SQL> select sf_bakset_check('disk','E:\dmdbms\backup\tab_for_cons_01_bak');

行号       SF_BAKSET_CHECK('disk','E:\dmdbms\backup\tab_for_cons_01_bak')
---------- --------------------------------------------------------------
1          1

已用时间: 33.044(毫秒). 执行号:145.

5) 还原表数据,但不还原约束。

SQL> truncate table tab_for_cons_01;
操作已执行
已用时间: 5.036(毫秒). 执行号:146.
SQL> select * from tab_for_cons_01;
未选定行

已用时间: 1.542(毫秒). 执行号:147.
SQL> restore table tab_for_cons_01 without constraint from backupset 'E:\dmdbms\backup\tab_for_cons_01_bak';
restore table tab_for_cons_01 without constraint from backupset 'E:\dmdbms\backup\tab_for_cons_01_bak';
[-8327]:还原表中存在二级索引或冗余约束.
已用时间: 33.927(毫秒). 执行号:0.
SQL> restore table tab_for_cons_01 struct from backupset 'E:\dmdbms\backup\tab_for_cons_01_bak';
操作已执行
已用时间: 38.765(毫秒). 执行号:149.
SQL> restore table tab_for_cons_01 without constraint from backupset 'E:\dmdbms\backup\tab_for_cons_01_bak';
操作已执行
已用时间: 75.178(毫秒). 执行号:150.
SQL> select * from tab_for_cons_01;

行号       C1
---------- -----------
1          1
2          2
3          3
4          4
5          5
6          6
7          7
8          8
9          9
10         10

10 rows got

已用时间: 2.870(毫秒). 执行号:151.
SQL>  select owner,table_name,index_name from dba_indexes where owner='SYSDBA' and table_name='TAB_FOR_CONS_01';

行号       OWNER  TABLE_NAME      INDEX_NAME
---------- ------ --------------- -------------
1          SYSDBA TAB_FOR_CONS_01 INDEX33555551

已用时间: 21.005(毫秒). 执行号:152.

查询约束发现确实没有被还原

SQL> select owner,constraint_name,constraint_type,table_name from dba_constraints where owner='SYSDBA' and table_name='TAB_FOR_CONS_01';
未选定行

已用时间: 9.087(毫秒). 执行号:153.

使用Disql执行表空间还原的复杂用法

下面将介绍一些不常用且较复杂的还原场景。主要内容包括:
1. 指定归档目录还原
2. 还原表空间中指定的数据文件
3. 指定映射文件还原

1.指定归档目录还原
由于磁盘空间的影响,服务器归档可能出现分布在多个目录的情况。出现这种情况时就需要指定归档目录还原。还原时指定多个归档目录的操作步骤如下:
1) 备份用户表空间MAIN。

SQL> backup tablespace main to ts_main_bak_for_arch backupset 'E:\dmdbms\backup\ts_main_bak_for_arch';
操作已执行
已用时间: 00:00:01.116. 执行号:80.

2) 校验备份。此步骤可选。

SQL> select sf_bakset_check('disk','E:\dmdbms\backup\ts_main_bak_for_arch');

行号       SF_BAKSET_CHECK('disk','E:\dmdbms\backup\ts_main_bak_for_arch')
---------- ---------------------------------------------------------------
1          1

已用时间: 18.229(毫秒). 执行号:81.

3) 还原用户表空间MAIN。假设归档日志分布在目录为E:\dmdbms\data\arch和E:\dmdbms\data\arch1两个目录下。

SQL> alter tablespace main offline;
操作已执行
已用时间: 111.415(毫秒). 执行号:82.
SQL> restore tablespace main from backupset 'E:\dmdbms\backup\ts_main_bak_for_arch' with backupdir 'E:\dmdbms\data\arch','E:\dmdbms\data\arch1';
操作已执行
已用时间: 414.930(毫秒). 执行号:83.
SQL> alter tablespace main online;
操作已执行
已用时间: 27.742(毫秒). 执行号:84.

2.还原表空间中指定的数据文件
DM7不仅支持从数据库备份和表空间备份中还原表空间,还支持还原表空间中特定的数据文件。若表空间已经被破坏,则不允许执行特定数据文件的还原。使用数据库备份还原表空间或表空间中的数据文件与使用表空间备份操作类似,区别在于RESTORE语句中指定的备份集为数据库备份集。因此,本节仅以使用表空间备份为例说明还原数据文件的操作步骤。
1) 创建待备份的表空间TS_FOR_RES_01, 并在库目录下创建3个数据文件。

SQL> create tablespace ts_for_res_01 datafile 'ts_for_res_01_01.dbf' size 128;
操作已执行
已用时间: 83.275(毫秒). 执行号:87.
SQL> alter tablespace ts_for_res_01 add datafile 'ts_for_res_01_02.dbf' size 128;
操作已执行
已用时间: 38.806(毫秒). 执行号:88.
SQL> alter tablespace ts_for_res_01 add datafile 'ts_for_res_01_03.dbf' size 128;
操作已执行
已用时间: 42.169(毫秒). 执行号:89.

2) 备份表空间。

SQL> backup tablespace ts_for_res_01 backupset 'E:\dmdbms\backup\ts_for_res_01_bak';
操作已执行
已用时间: 00:00:01.161. 执行号:93.

3) 查询数据文件的文件编号或路径。还原指定的数据文件需知道数据文件对应的文件编号或路径,相关信息可通过查询动态视图V$DATAFILE获取。

SQL> select group_id,id,path from v$datafile;

行号       GROUP_ID    ID          PATH
---------- ----------- ----------- ----------------------------------------
1          0           0           E:\dmdbms\data\jydm\SYSTEM.DBF
2          1           0           E:\dmdbms\data\jydm\ROLL.DBF
3          3           0           E:\dmdbms\data\jydm\TEMP.DBF
4          4           0           E:\dmdbms\data\jydm\MAIN.DBF
5          5           0           E:\dmdbms\data\jydm\BOOKSHOP.DBF
6          6           0           E:\dmdbms\data\jydm\DMHR.DBF
7          7           0           E:\dmdbms\data\jydm\ts_for_res_01_01.dbf
8          7           1           E:\dmdbms\data\jydm\ts_for_res_01_02.dbf
9          7           2           E:\dmdbms\data\jydm\ts_for_res_01_03.dbf

9 rows got

已用时间: 1.655(毫秒). 执行号:94.

如果想还原ts_for_res_01_02.dbf和ts_for_res_01_03.dbf两个数据文件,通过查询结果可知它们的文件编号(1和2)以及相应的路径。

4) 校验备份。此步骤为可选。

SQL> select sf_bakset_check('disk','E:\dmdbms\backup\ts_for_res_01_bak');

行号       SF_BAKSET_CHECK('disk','E:\dmdbms\backup\ts_for_res_01_bak')
---------- ------------------------------------------------------------
1          1

已用时间: 32.108(毫秒). 执行号:95.

5) 通过文件编号还原表空间TS_FOR_RES_01中的数据文件ts_for_res_01_02.dbf和ts_for_res_01_03.dbf。

SQL> alter tablespace ts_for_res_01 offline;
操作已执行
已用时间: 105.157(毫秒). 执行号:96.
SQL> restore tablespace ts_for_res_01 datafile 1,2 from backupset 'E:\dmdbms\backup\ts_for_res_01_bak';
操作已执行
已用时间: 358.862(毫秒). 执行号:97.

如果不想使用文件编号还原,使用指定数据文件路径还原数据文件的语句如下:

SQL> restore tablespace ts_for_res_01 datafile 'E:\dmdbms\data\jydm\ts_for_res_01_02.dbf','E:\dmdbms\data\jydm\ts_for_res_01_03.dbf' from backupset 'E:\dmdbms\backup\ts_for_res_01_bak';
操作已执行
已用时间: 344.008(毫秒). 执行号:98.
SQL> alter tablespace ts_for_res_01 online;
操作已执行
已用时间: 24.644(毫秒). 执行号:99.

3.指定映射文件还原
映射文件用于指定存放还原目标路径,即备份集里面的数据文件路径。指定映射文件还原可以重新指定备份集中数据文件的路径。下面以MAIN表空间为例说明如何使用映射文件还原。
1) 备份MAIN表空间。

SQL>BACKUP TABLESPACE MAIN BACKUPSET '/home/dm_bak/ts_bak_for_map';

2) 使用DMRMAN的DUMP命令生成映射文件ts_bak_mapped.txt,存至’E:\dmdbms\backup\目录。文件中指定数据文件MAIN.DBF还原后的路径为E:\dmdbms\data\jydm\MAIN.DBF。

RMAN> dump backupset  'E:\dmdbms\backup\ts_main_bak_for_map'  device type disk mapped file  'E:\dmdbms\backup\ts_bak_mapped.txt';
dump backupset 'E:\dmdbms\backup\ts_main_bak_for_map' device type disk mapped file 'E:\dmdbms\backup\ts_bak_mapped.txt';
dump mapped file successfully.
time used: 28.360(ms)



/**************************************************************/
/***  Delete the unnecessary modified groups                 **/
/***  Modify the data_path or mirror_path only in one group  **/
/**************************************************************/

/**=============================================================**/
/*[jydm_MAIN_FIL_0]*/
fil_id         = 0
ts_id          = 4
ts_name        = MAIN
data_path      = E:\dmdbms\data\jydm\MAIN.DBF
mirror_path    =

/***************************** END ****************************/

3) 还原MAIN表空间。

SQL> alter tablespace main offline;
操作已执行
已用时间: 119.506(毫秒). 执行号:102.
SQL> select * from tab_for_res_2;
select * from tab_for_res_2;
[-3408]:表空间[MAIN]处于脱机状态.
已用时间: 1.372(毫秒). 执行号:0.
SQL> restore tablespace main from backupset 'E:\dmdbms\backup\ts_main_bak_for_map' mapped file 'E:\dmdbms\backup\ts_bak_mapped.txt';
操作已执行
已用时间: 377.253(毫秒). 执行号:104.
SQL> alter tablespace main online;
操作已执行
已用时间: 17.211(毫秒). 执行号:105.
SQL> select * from tab_for_res_2;

行号       C1
---------- -----------
1          1
2          2
3          3
4          4
5          5
6          6
7          7
8          8
9          9
10         10

10 rows got

已用时间: 2.604(毫秒). 执行号:106.

DM7使用Disql执行表还原

DM7仅支持表空间和表的联机还原,数据库和归档日志的还原必须通过脱机工具DMRMAN执行。下面主要介绍如何使用DIsql工具还原表空间和表。
下面将介绍使用DIsql工具完成基本的表还原操作及实施一些还原策略。主要内容包括:
1. 概述
2. 表还原

1. 概述
表还原与表空间还原不同,不需要配置归档,DIsql中输入以下简单的RESTORE语句就可还原表:

SQL>RESTORE TABLE TAB_01 FROM BACKUPSET 'tab_bak_01';
语法如下:
RESTORE TABLE [<表名>][STRUCT]
[WITH INDEX | WITHOUT INDEX] [WITH CONSTRAINT|WITHOUT CONSTRAINT]
FROM BACKUPSET'<备份集路径>' [DEVICE TYPE <介质类型> [PARMS '<介质参数>']]
[IDENTIFIED BY <密码>] [ENCRYPT WITH <加密算法>]
[TRACE FILE '<TRACE文件名>'] [TRACE LEVEL <TRACE日志级别>];

TABLE:需要还原的表名称。

STRUCT:执行表结构还原,若未指定,则认为是表中数据还原;表数据还原要求还原目标表结构与备份集中完全一致,否则报错,所以表结构还原可以在表数据还原之前执行,减少报错。

WITH INDEX/WITHOUT INDEX:指定还原数据后是否重建二级索引,默认重建。

WITH CONSTRAINT/WITHOUT CONSTRAINT:指定还原数据后是否重建约束,默认重建。

BACKUPSET:表空间备份时指定的备份集路径。若指定为相对路径,会在默认备份目录下搜索备份集。

DEVICE TYPE:指存储备份集的介质类型,目前表还原暂时仅支持DISK,表示备份集存储介质为磁盘。

PARMS:介质参数,只对介质类型为TAPE时有效。

IDENTIFIED BY:加密备份表时,用户设置的密码。

ENCRYPT WITH:加密算法。缺省情况下,算法为AES256_CFB。

TRACE FILE:指定生成的TRACE文件名。

TRACE LEVEL:有效值1、2,默认为1表示不启用TRACE,为2表示启用TRACE。

使用说明:
1. 仅支持对普通用户表进行还原,包括堆表。其中,系统表、临时表、物化视图表、物化视图附属表和日志表、特定模式(DBG_PKG/INFORMATION_SCHEMA/INFO_SCHEM/SYSREP/SYSGEO/SYSJOB/SYSCPT/SYS)下的表不支持还原。表列类型为对象类型的表也不支持表还原。若还原表中存在位图连接索引和位图连接虚索引也不支持还原。

2. 备份集路径指备份集所在目录,其中应包含完整备份数据,包括元数据文件(.meta)和备份片文件(.bak)。仅支持从表备份集中还原表。

3. 表名设置为可选参数。若指定,则表必须存在且表定义必须与备份表严格一致;若不指定,则使用备份集中记录的备份表作为还原目标表。

4. 若指定WITHOUT INDEX,则还原后目标表中无索引信息,即使目标表本来存在,也会被删除;若未指定,则在数据还原后重新创建备份集中索引,目标表原来的索引信息会被删除。

5. 若指定WITHOUT CONSTRAINT,则还原后目标表中无约束信息,聚集主键除外,即使目标表本来存在,也会被删除;若未指定,则在数据还原后重新创建备份集中约束,目标表原来的约束信息会被删除。

6. 目标表所在的表空间必须处于联机状态。

7. 数据守护环境下,主库允许表备份还原,备库不允许。

8. MOUNT和SUSPEND状态下不允许进行表还原。

9. MPP环境不允许进行表还原。

10. 若在语句中指定STRUCT关键字,则执行表结构还原。表结构还原会根据备份集中备份表还原要求,对目标表定义进行校验,并删除目标表中已存在的二级索引和约束;若未指定WITHOUT CONSTRAINT,则会将备份集中的CHECK约束在目标表上重建。

11. 不指定STRUCT关键字,则执行表数据还原,表数据还原默认仅会将备份表中聚集索引上数据进行还原。表数据还原默认仅会在目标表定义与备份表一致且不存在二级索引和约束的情况下执行;若还原时未指定WITHOUT CONSTRAINT,也允许目标表中存在与备份表中相同的CHECK约束。

12. 若在未指定STRUCT的情况下,执行还原出现存在二级索引或冗余约束的错误;或者不指定目标表时,报目标不存在的情况,可先执行STRUCT还原后,再继续执行实际数据的还原。

13. WITH /WITHOUT INDEX用于指定还原数据后是否重建二级索引,默认重建;WITH/WITHOUT CONSTRAINT指定还原数据后是否在目标表上重建约束,默认重建。对于备份表中存在的无效索引和约束,若索引为无效或者不可见,则重建后,也保持无效或者不可见;若约束无效,则重建后,约束也保持无效状态。

14. TRACE FILE若用户指定,则指定的文件不能为已经存在的文件,否则报错;也不可以为ASM文件。

15. 若表中存在大字段列,表备份时INI参数BLOB_OUTROW_REC_STOR大于0,而建立还原目标表时INI参数BLOB_OUTROW_REC_STOR等于0,那么若大字段列存在行外数据,在执行表还原时会报错,且表数据会丢失。

16. 表还原不检查目标表的缺省表达式(default值)。

2. 表还原
执行表还原,数据库必须处于OPEN状态,MOUNT和SUSPEND状态下不允许执行表还原。与表空间还原不同,表还原不需要配置归档。表还原是联机完全备份还原,不需要借助本地归档日志,所以还原后不需要恢复。完整的表备份还原步骤如下:
1) 保证数据库为OPEN状态。
2) 创建待备份的表。

SQL> create table tab_for_res_1(c1 int);
操作已执行
已用时间: 3.498(毫秒). 执行号:57.
SQL> begin
2   for i in 1 .. 100 loop
3   insert into tab_for_res_1 values(i);
4   end loop;
5   commit;
6   end;
7   /
DMSQL 过程已成功完成
已用时间: 2.710(毫秒). 执行号:58.

3) 备份表数据。

SQL> backup table tab_for_res_1 to tab_for_res_1_bak backupset 'E:\dmdbms\backup\tab_for_res_1_bak';
操作已执行
已用时间: 00:00:01.138. 执行号:59.

4) 校验备份。此步骤为可选。

SQL> select sf_bakset_check('disk','E:\dmdbms\backup\tab_for_res_1_bak');

行号       SF_BAKSET_CHECK('disk','E:\dmdbms\backup\tab_for_res_1_bak')
---------- ------------------------------------------------------------
1          1

已用时间: 21.435(毫秒). 执行号:60.

5) 还原表数据。

SQL> truncate table tab_for_res_1;
操作已执行
已用时间: 5.238(毫秒). 执行号:62.
SQL> select count(*) from tab_for_res_1;

行号       COUNT(*)
---------- --------------------
1          0

已用时间: 1.165(毫秒). 执行号:63.
SQL> restore table tab_for_res_1 from backupset 'E:\dmdbms\backup\tab_for_res_1_bak';
操作已执行
已用时间: 68.217(毫秒). 执行号:64.
SQL> select count(*) from tab_for_res_1;

行号       COUNT(*)
---------- --------------------
1          100

已用时间: 1.329(毫秒). 执行号:65.

表还原实质是表内数据的还原,以及索引和约束等的重建。如果备份文件与目标表中都包含索引或约束该如何还原呢?下面以表中包含索引为例说明如何还原表,具体步骤如下:
1) 保证数据库为OPEN状态。
2) 创建待备份的表。

SQL> create table tab_for_res_2(c1 int);
操作已执行
已用时间: 3.088(毫秒). 执行号:67.
SQL> begin
2   for i in 1 .. 10 loop
3   insert into tab_for_res_2 values(i);
4   end loop;
5   commit;
6   end;
7   /
DMSQL 过程已成功完成
已用时间: 5.434(毫秒). 执行号:68.

3) 创建索引。

SQL> create index i_tab_for_res_2 on tab_for_res_2(c1);
操作已执行
已用时间: 6.720(毫秒). 执行号:69.

4) 备份表。

SQL> backup table tab_for_res_2 backupset 'E:\dmdbms\backup\tab_for_res_2_bak';
操作已执行
已用时间: 00:00:01.102. 执行号:70.

5) 校验备份。此步骤为可选。

SQL> select sf_bakset_check('disk','E:\dmdbms\backup\tab_for_res_2_bak');

行号       SF_BAKSET_CHECK('disk','E:\dmdbms\backup\tab_for_res_2_bak')
---------- ------------------------------------------------------------
1          1

已用时间: 38.046(毫秒). 执行号:71.

6) 执行表结构还原。表备份和表中都包含索引,如果直接执行表数据还原会报错:还原表中存在二级索引或冗余约束。

SQL> truncate table tab_for_res_2;
操作已执行
已用时间: 4.115(毫秒). 执行号:73.
SQL> select * from tab_for_res_2;
未选定行

已用时间: 1.113(毫秒). 执行号:74.
SQL> restore table tab_for_res_2 from backupset 'E:\dmdbms\backup\tab_for_res_2_bak';
restore table tab_for_res_2 from backupset 'E:\dmdbms\backup\tab_for_res_2_bak';
[-8327]:还原表中存在二级索引或冗余约束.
已用时间: 22.306(毫秒). 执行号:0.
SQL> restore table tab_for_res_2 struct from backupset 'E:\dmdbms\backup\tab_for_res_2_bak';
操作已执行
已用时间: 27.047(毫秒). 执行号:76.

7) 执行表数据还原。

SQL> restore table tab_for_res_2 from backupset 'E:\dmdbms\backup\tab_for_res_2_bak';
操作已执行
已用时间: 66.335(毫秒). 执行号:77.
SQL> select * from tab_for_res_2;

行号       C1
---------- -----------
1          1
2          2
3          3
4          4
5          5
6          6
7          7
8          8
9          9
10         10

10 rows got

已用时间: 1.491(毫秒). 执行号:78.

DM7使用Disql执行表空间还原

DM7仅支持表空间和表的联机还原,数据库和归档日志的还原必须通过脱机工具DMRMAN执行。本章节主要介绍如何使用DIsql工具还原表空间和表。
下面将介绍使用DIsql工具完成基本的表空间还原操作及实施一些还原策略。主要内容包括:
1. 概述
2. 表空间还原

1. 概述
在DIsql中使用RESTORE语句可以还原表空间,还原表空间需要服务器运行在归档模式下且还原之前需要将表空间脱机。启动DIsql输入以下语句即可还原表空间:

SQL> backup tablespace main to ts_main_bak backupset 'E:\dmdbms\backup\ts_main_bak';
操作已执行
已用时间: 00:00:01.066. 执行号:4.
SQL> alter tablespace main offline;
操作已执行
已用时间: 101.032(毫秒). 执行号:5.
SQL> restore tablespace main from backupset 'E:\dmdbms\backup\ts_main_bak';
操作已执行
已用时间: 316.624(毫秒). 执行号:6.
SQL> alter tablespace main online;
操作已执行
已用时间: 9.330(毫秒). 执行号:7.

指定备份集“E:\dmdbms\backup\ts_main_bak”为绝对路径,如果指定相对路径,服务器自动会在默认备份路径下搜索备份集。

语法如下:

RESTORE TABLESPACE < 表空间名>
[DATAFILE< <文件编号> {,< 文件编号>} | '< 文件路径>' {,'< 文件路径>'}>]
FROM BACKUPSET '< 备份集路径>' [DEVICE TYPE < 介质类型> [PARMS '< 介质参数>']]
[IDENTIFIED BY < 加密密码>] [ENCRYPT WITH < 加密算法>]
[WITH BACKUPDIR '< 备份目录>' {,'< 备份目录>'}]
[WITH ARCHIVEDIR '归档目录'{,'归档目录'}]
[MAPPED FILE '< 映射文件>']
[TRACE FILE ''] [TRACE LEVEL ][TASK THREAD < 线程数>][NOT PARALLEL]
[UNTIL TIME '< 时间串>'] [UNTIL LSN ];

TABLESPACE:指定还原的表空间,除了temp表空间。

DATAFILE:还原指定的数据文件。可以指定数据文件编号或数据文件路径。文件编号,对应动态视图V$DATAFILE中ID列的值;文件路径,对应动态视图V$DATAFILE中PATH或者MIRROR_PATH列的值,也可以仅指定数据文件名称(相对路径),与表空间中数据文件匹配时,会使用SYSTEM目录补齐。

BACKUPSET:指定还原备份集的路径。若指定为相对路径,会在默认备份目录下搜索备份集。

DEVICE TYPE:指存储备份集的介质类型,支持DISK和TAPE,默认DISK。DISK表示备份集存储介质为磁盘,TAPE表示备份集存储介质为磁带。

PARMS:介质参数,只对介质类型为TAPE时有效。

IDENTIFIED BY:加密备份表空间时,用户设置的密码。

ENCRYPT WITH:加密算法。缺省情况下,算法为AES256_CFB。具体包含哪些加密算法请参考表空间备份的参数说明。

WITH BACKUPDIR:指定备份搜索目录,最大长度为256个字节。使用完全备份还原中,若指定的备份集路径为相对路径可通过设置此参数搜索备份集;增量备份还原中设置该参数除上述功能外还用于搜索基备份集。

WITH ARCHIVEDIR:归档日志搜索目录。如果归档日志不在配置文件中指定的目录下,或者归档日志分散在多个目录,此时就需要指定该参数用于搜索归档日志。

MAPPED FILE :指定存放还原目标路径的文件,参考3.3.5.2.1小节。

TRACE FILE: 指定生成的TRACE文件。启用TRACE,但不指定TRACE FILE时,默认在DM数据库系统的log目录下生成DM_SBTTRACE_年月.LOG文件;若使用相对路径,则生成在执行码同级目录下。若用户指定,则指定的文件不能为已经存在的文件,否则报错;也不可以为ASM文件。

TRACE LEVEL:有效值1、2,默认为1表示不启用TRACE,此时若指定了TRACE FILE,会生成TRACE文件,但不写入TRACE信息;为2启用TRACE并写入TRACE相关内容。

TASK THREAD:还原过程中数据处理过程线程的个数,取值范围0~64,默认为4,与备份过程中数据处理过程相对应。若指定为0,则调整为1;若指定超过当前系统主机核数,则调整为当前系统主机核数。

NOT PARALLEL:指定并行备份集使用非并行方式还原。对于非并行备份集,不论是否指定该关键字,均采用非并行还原。

UNTIL TIME:恢复表空间到指定的时间点。主备环境不支持。

UNTIL LSN:恢复表空间到指定的LSN。主备环境不支持。

表空间还原不建议使用UNTIL LSN或者UNTIL TIME,若要使用,则确保备份集生成之后未执行过DDL操作,否则将可能出现不可预知的后果。

使用说明:
1. 支持从非DDL_CLONE的库级备份集和表空间级备份集中还原出指定表空间,若还原目标表空间状态不是RES_OFFLINE或CORRUPT,还原指定表空间中指定数据文件。
2. 备份集路径是指备份集所在目录,其中应包含完整备份数据,包括元数据文件(.meta)和备份片文件(.bak)。
3. 还原前应该先将还原的表空间脱机,只能还原用户表空间。
4. 该功能在配置本地归档后才起作用,若为RAC库中表空间还原,则需要配置REMOTE归档。
5. MPP环境不允许进行表空间还原。
6. 若指定NOT PARALLEL,则认为并行备份不使用并行还原,默认并行备份执行并行还原。对于非并行备份集还原,则忽略。
7. 若未指定UNTIL TIME或者UNTIL LSN,则均还原到最新状态。使用UNTIL TIME(或者UNTIL LSN)的同时不能指定DATAFILE还原,否则报语法错误。
8. OPEN和MOUNT状态下支持表空间还原,SUSPEND状态下则不支持。

2. 表空间还原
本节介绍使用DIsql工具如何还原表空间。本节主要内容包括:
1. 使用表空间完全备份还原表空间
2. 使用表空间增量备份还原表空间
3. 使用数据库备份还原表空间

1.使用表空间完全备份还原表空间
表空间的还原、恢复操作是一次性完成,因此还原后不需要执行恢复操作。使用表空间完全备份还原表空间的完整步骤如下:
1) 配置归档。
2) 保证数据库处于OPEN或MOUNT状态。
3) 备份表空间。

SQL> backup tablespace main to ts_main_bak backupset 'E:\dmdbms\backup\ts_main_bak';
操作已执行
已用时间: 00:00:01.069. 执行号:9.

4) 校验表空间备份。此步骤为可选,如果确定备份文件合法可不进行备份校验。

SQL> select sf_bakset_check('disk','E:\dmdbms\backup\ts_main_bak');

行号       SF_BAKSET_CHECK('disk','E:\dmdbms\backup\ts_main_bak')
---------- ------------------------------------------------------
1          1

已用时间: 17.741(毫秒). 执行号:10.

5) 修改表空间为脱机。

SQL> alter tablespace main offline;
操作已执行
已用时间: 137.581(毫秒). 执行号:11.

6) 还原表空间。

SQL> restore tablespace main from backupset 'E:\dmdbms\backup\ts_main_bak';
操作已执行
已用时间: 276.897(毫秒). 执行号:12.

7) 修改表空间为联机。

SQL> alter tablespace main online;
操作已执行
已用时间: 17.971(毫秒). 执行号:13.

2.使用表空间增量备份还原表空间
在增量备份与基备份同目录情况下,使用增量备份还原表空间步骤与完全备份一致。当增量备份与基备份不在同一个目录下时需要使用RESTORE TABLESPACE…WITH BACKUPDIR语句还原。这里以后面一种情况为例说明使用增量备份还原表空间。步骤如下:
1) 配置归档。
2) 保证数据库处于OPEN或MOUNT状态。
3) 完全备份表空间。

SQL> backup tablespace main to ts_main_full_bak backupset 'E:\dmdbms\backup\ts_main_full_bak';
操作已执行
已用时间: 00:00:01.095. 执行号:35.

4) 多次增量备份表空间。

SQL> begin
2   for i in 1 .. 100 loop
3    insert into t1 values(i);
4   end loop;
5   commit;
6   end;
7   /
DMSQL 过程已成功完成
已用时间: 3.383(毫秒). 执行号:36.
SQL> backup tablespace main increment with backupdir 'E:\dmdbms\backup\ts_main_full_bak' backupset 'E:\dmdbms\backup1\ts_main_incr_bak_01';
操作已执行
已用时间: 00:00:01.079. 执行号:37.


SQL> begin
2   for i in 101 .. 200 loop
3   insert into t1 values(i);
4   end loop;
5   end;
6   /
DMSQL 过程已成功完成
已用时间: 1.274(毫秒). 执行号:38.
SQL> alter system switch logfile;
操作已执行
已用时间: 14.166(毫秒). 执行号:0.
SQL> backup tablespace main increment with backupdir 'E:\dmdbms\backup\ts_main_full_bak','E:\dmdbms\backup1\ts_main_incr_bak_01' backupset 'E:\dmdbms\backup2\ts_main_incr_bak_02';
操作已执行
已用时间: 00:00:01.081. 执行号:39.

5) 校验表空间备份。此步骤为可选,如果确定备份文件合法可不进行备份校验。

SQL> select sf_bakset_check('disk','E:\dmdbms\backup\ts_main_full_bak');

行号       SF_BAKSET_CHECK('disk','E:\dmdbms\backup\ts_main_full_bak')
---------- -----------------------------------------------------------
1          1

已用时间: 20.931(毫秒). 执行号:40.
SQL> select sf_bakset_check('disk','E:\dmdbms\backup1\ts_main_incr_bak_01');

行号       SF_BAKSET_CHECK('disk','E:\dmdbms\backup1\ts_main_incr_bak_01')
---------- ---------------------------------------------------------------
1          1

已用时间: 31.184(毫秒). 执行号:41.
SQL> select sf_bakset_check('disk','E:\dmdbms\backup2\ts_main_incr_bak_02');

行号       SF_BAKSET_CHECK('disk','E:\dmdbms\backup2\ts_main_incr_bak_02')
---------- ---------------------------------------------------------------
1          1

已用时间: 25.171(毫秒). 执行号:42.

6) 修改表空间为脱机

SQL> alter tablespace main offline;
操作已执行
已用时间: 98.420(毫秒). 执行号:43.

7) 使用增量备份E:\dmdbms\backup2\ts_main_incr_bak_02还原表空间。

SQL> restore tablespace main from backupset 'E:\dmdbms\backup2\ts_main_incr_bak_02' with backupdir 'E:\dmdbms\backup\ts_main_full_bak','E:\dmdbms\backup1\ts_main_incr_bak_01';
操作已执行
已用时间: 370.046(毫秒). 执行号:44.

8) 修改表空间为联机。

SQL> alter tablespace main online;
操作已执行
已用时间: 15.717(毫秒). 执行号:45.
SQL> select count(*) from t1;

行号       COUNT(*)
---------- --------------------
1          200

已用时间: 1.345(毫秒). 执行号:46.

3.使用数据库备份还原表空间
使用数据库备份还原表空间可以快速还原一个或多个表空间,而不影响数据库中其他的表空间和对象。在数据库中仅有特定的表空间损坏且没有表空间备份的情况下,可以选择使用此种方式还原。
具体步骤如下:
1) 配置归档。
2) 保证数据库处于OPEN或MOUNT状态。
3) 创建数据库完全备份。

SQL> backup database full to db_jydm_full_bak backupset 'E:\dmdbms\backup\ts_jydm_full_bak';
操作已执行
已用时间: 00:00:01.198. 执行号:50.

4) 校验表空间备份。此步骤为可选,如果确定备份文件合法可不进行备份校验。

SQL> select sf_bakset_check('disk','E:\dmdbms\backup\ts_jydm_full_bak');

行号       SF_BAKSET_CHECK('disk','E:\dmdbms\backup\ts_jydm_full_bak')
---------- -----------------------------------------------------------
1          1

已用时间: 46.115(毫秒). 执行号:51.

5) 修改表空间为脱机。

SQL> alter tablespace main offline;
操作已执行
已用时间: 96.596(毫秒). 执行号:52.

6) 还原表空间。

SQL> restore tablespace main from backupset 'E:\dmdbms\backup\ts_jydm_full_bak';
操作已执行
已用时间: 326.842(毫秒). 执行号:53.

7) 修改表空间为联机。

SQL> alter tablespace main online;
操作已执行
已用时间: 17.338(毫秒). 执行号:54.
SQL> select count(*) from t1;

行号       COUNT(*)
---------- --------------------
1          200

已用时间: 1.969(毫秒). 执行号:55.

DM7使用disql管理备份

下面介绍如何使用DIsql工具管理数据库备份、表空间备份、表备份,以及归档备份。本节内容主要包括:
1. 概述
2. 备份目录管理
3. 备份集管理
4. 备份信息查看

1. 概述
管理备份一个重要的目的是删除不再需要的备份,DM7没有提供自动删除过期备份的功能,删除备份需要手动执行。备份管理相关系统过程与函数总结如下:
SF_BAKSET_BACKUP_DIR_ADD:添加备份目录。
SF_BAKSET_BACKUP_DIR_REMOVE:指定删除内存中的备份目录。
SF_BAKSET_BACKUP_DIR_REMOVE_ALL:删除内存中全部的备份目录。
SF_BAKSET_CHECK:对备份集进行校验。
SF_BAKSET_REMOVE:删除指定设备类型和指定备份集目录的备份集。
SF_BAKSET_REMOVE_BATCH:批量删除满足指定条件的所有备份集。
SP_DB_BAKSET_REMOVE_BATCH:批量删除指定时间之前的数据库备份集。
SP_TS_BAKSET_REMOVE_BATCH:批量删除指定表空间对象及指定时间之前的表空间备份集。
SP_TAB_BAKSET_REMOVE_BATCH:批量删除指定表对象及指定时间之前的表备份集。
SP_ARCH_BAKSET_REMOVE_BATCH:批量删除指定条件的归档备份集。

备份管理相关动态视图总结如下:
V$BACKUPSET:显示备份集基本信息。
V$BACKUPSET_DBINFO:显示备份集的数据库相关信息。
V$BACKUPSET_DBF:显示备份集中数据文件的相关信息。
V$BACKUPSET_ARCH:显示备份集的归档信息。
V$BACKUPSET_BKP:显示备份集的备份片信息。
V$BACKUPSET_SEARCH_DIRS:显示备份集搜索目录。
V$BACKUPSET_TABLE:显示表备份集中备份表信息。
V$BACKUPSET_SUBS:显示并行备份中生成的子备份集信息。

SF_BAKSET_BACKUP_DIR_ADD添加备份目录仅对当前会话有效。调用删除备份等函数或查看动态视图时要先调用SF_BAKSET_BACKUP_DIR_ADD添加备份目录,否则仅搜索默认备份路径下的备份集。

2. 备份目录管理
这里的备份目录是指备份集搜索目录,这些目录被记录在内存中,当执行动态视图(参见3.2.4.4 备份信息查看)或批量删除备份集时,均会从这些指定目录中先搜索所有备份集信息。

本节主要内容包括:

 SF_BAKSET_BACKUP_DIR_ADD
 SF_BAKSET_BACKUP_DIR_REMOVE
 SF_BAKSET_BACKUP_DIR_REMOVE_ALL

SF_BAKSET_BACKUP_DIR_ADD函数
添加备份目录。若添加目录已经存在或者为库默认备份路径,则认为已经存在,不添加,但也不报错。
定义:

INT SF_BAKSET_BACKUP_DIR_ADD(
device_type varchar,
backup_dir varchar(256)
)

参数说明:
device_type:待添加的备份目录对应存储介质类型,DISK或者TAPE。
backup_dir:待添加的备份目录。
返回值:
1:目录添加成功;其它情况下报错。
举例说明:

SQL> select sf_bakset_backup_dir_add('disk','arch_backup_lsn_15092082_15092086');

LINEID     SF_BAKSET_BACKUP_DIR_ADD('disk','arch_backup_lsn_15092082_15092086')
---------- --------------------------------------------------------------------
1          1

used time: 26.411(ms). Execute id is 1569.

SF_BAKSET_BACKUP_DIR_REMOVE函数
删除备份目录。若删除目录为库默认备份路径,不进行删除,认为删除失败。若指定目录存在于记录的合法目录中,则删除;不存在或者为空则跳过,正常返回。
定义:

INT SF_BAKSET_BACKUP_DIR_REMOVE (
device_type varchar,
backup_dir varchar(256)
)

参数说明:
device_type:待删除的备份目录对应存储介质类型。待删除的备份目录对应存储介质类型,DISK或者TAPE。
backup_dir:待删除的备份目录。
返回值:
1:目录删除成功;其他情况报错。
举例说明:

SQL> select * from v$backupset_search_dirs;

LINEID     DIR
---------- -----------------------------------
1          arch_backup_lsn_15092082_15092086
2          /dm_home/dmdba/dmdbms/data/jydm/bak

used time: 36.620(ms). Execute id is 1573.
SQL> select sf_bakset_backup_dir_remove('disk','arch_backup_lsn_15092082_15092086');

LINEID     SF_BAKSET_BACKUP_DIR_REMOVE('disk','arch_backup_lsn_15092082_15092086')
---------- -----------------------------------------------------------------------
1          1

used time: 1.057(ms). Execute id is 1575.
SQL> select * from v$backupset_search_dirs;

LINEID     DIR
---------- -----------------------------------
1          /dm_home/dmdba/dmdbms/data/jydm/bak

used time: 0.987(ms). Execute id is 1577.

SF_BAKSET_BACKUP_DIR_REMOVE_ALL函数清理全部备份目录,默认备份目录除外。
定义:

INT SF_BAKSET_BACKUP_DIR_REMOVE_ALL ()

返回值:
1:目录全部清理成功;其它情况下报错。
举例说明:

SQL> select sf_bakset_backup_dir_remove_all();

LINEID     SF_BAKSET_BACKUP_DIR_REMOVE_ALL()
---------- ---------------------------------
1          1

used time: 1.019(ms). Execute id is 1580.

3. 备份集管理(备份集校验与删除)
本节介绍备份管理中最重要的功能,备份集校验和备份集删除。单个备份集删除时并行备份中地子备份集不允许单独删除;在给定备份集搜
集目录中发现存在引用删除备份集作为基备份的需要执行级联删除,默认报错。批量删除备份集时,跳过收集到的单独的子备份集。主要内
容如下:

 SF_BAKSET_CHECK
 SF_BAKSET_REMOVE
 SF_BAKSET_REMOVE_BATCH
 SP_DB_BAKSET_REMOVE_BATCH
 SP_TS_BAKSET_REMOVE_BATCH
 SP_TAB_BAKSET_REMOVE_BATCH
 SP_ARCH_BAKSET_REMOVE_BATCH

SF_BAKSET_CHECK函数对备份集进行校验。
定义:

INT SF_BAKSET_CHECK(
device_type varchar,

bakset_pathvarchar(256)
)

参数说明:
device_type:设备类型,disk或tape。
bakset_path:待校验的备份集目录。
返回值:
1:备份集目录存在且合法;否则报错。
举例说明:

SQL> backup database full to db_rac_bak_for_check backupset '/dm7/backup/db_rac_bak_for_check';
executed successfully
used time: 00:00:01.410. Execute id is 158.
SQL> select sf_bakset_check('disk','/dm7/backup/db_rac_bak_for_check');

LINEID     SF_BAKSET_CHECK('disk','/dm7/backup/db_rac_bak_for_check')
---------- ----------------------------------------------------------
1          1

used time: 12.669(ms). Execute id is 159.

SQL> select sf_bakset_backup_dir_add('disk','/dm7/backup/db_rac_bak_for_check');

LINEID     SF_BAKSET_BACKUP_DIR_ADD('disk','/dm7/backup/db_rac_bak_for_check')
---------- -------------------------------------------------------------------
1          1

used time: 1.610(ms). Execute id is 162.
SQL> select * from v$backupset_search_dirs;

LINEID     DIR
---------- --------------------------------
1          /dm7/backup/db_rac_bak_for_check
2          +DMDATA/data/rac/bak

used time: 0.770(ms). Execute id is 163.
SQL> select * from v$backupset;

LINEID     DEVICE_TYPE BACKUP_ID   PARENT_ID   BACKUP_NAME          BACKUP_PATH                      TYPE        LEVEL       RANGE#      OBJECT_NAME OBJECT_ID   BASE_NAME BACKUP_TIME                 DESC# ENCRYPT_TYPE COMPRESS_LEVEL WITHOUT_LOG USE_PWR     PKG_SIZE    BEGIN_LSN            END_LSN              BKP_NUM     DBF_NUM     PARALLEL_NUM DDL_CLONE   MPP_FLAG    MIN_TRX_START_LSN    MIN_EXEC_VER CUMULATIVE
---------- ----------- ----------- ----------- -------------------- -------------------------------- ----------- ----------- ----------- ----------- ----------- --------- --------------------------- ----- ------------ -------------- ----------- ----------- ----------- -------------------- -------------------- ----------- ----------- ------------ ----------- ----------- -------------------- ------------ -----------
1          DISK        53418202    -1          DB_RAC_BAK_FOR_CHECK /dm7/backup/db_rac_bak_for_check 0           0           1           rac         -1                    2020-05-29 21:14:50.000773        0            0              0           0           33554432    50908                51113                2           4           1            0           0           49398                117507596    0

used time: 00:00:01.023. Execute id is 164.

SF_BAKSET_REMOVE函数
删除指定设备类型和指定备份集目录的备份集。一次只检查一个合法.meta文件,然后删除对应备份集;若存在非法或非正常备份的.meta文件,则报错或直接返回,不会接着检查下一个.meta文件;若同一个备份集下还存在其它备份文件或备份集,则只删除备份文件,不会删除整个备份集。
定义:

INT SF_BAKSET_REMOVE (
device_type varchar,
backsetpath varchar(256),
option integer
)

参数说明:
device_type:设备类型,disk或tape。
backsetpath:待删除的备份集目录。
Option:删除备份集选项,0默认删除,1级联删除。可选参数。并行备份集中子备份集不允许单独删除。目标备份集被其他备份集引用为基备份的,默认删除,报错;级联删除情况下,会递归将相关的增量备份也删除。

返回值:
1:备份集目录删除成功,其它情况下报错。
举例说明:

SQL> backup database full to db_rac_bak_for_remove backupset '/dm7/backup/db_rac_bak_for_remove';
executed successfully
used time: 00:00:01.320. Execute id is 165.

SQL> backup database increment base on backupset '/dm7/backup/db_rac_bak_for_remove' backupset '/dm7/backup/db_rac_bak_for_remove_incr';
executed successfully
used time: 00:00:01.255. Execute id is 170.

SQL> select sf_bakset_backup_dir_add('disk','/dm7/backup/db_rac_bak_for_remove');

LINEID     SF_BAKSET_BACKUP_DIR_ADD('disk','/dm7/backup/db_rac_bak_for_remove')
---------- --------------------------------------------------------------------
1          1

used time: 1.836(ms). Execute id is 171.
SQL> select sf_bakset_backup_dir_add('disk','/dm7/backup/db_rac_bak_for_remove_incr');

LINEID     SF_BAKSET_BACKUP_DIR_ADD('disk','/dm7/backup/db_rac_bak_for_remove_incr')
---------- -------------------------------------------------------------------------
1          1

used time: 1.444(ms). Execute id is 172.
SQL> select * from v$backupset;

LINEID     DEVICE_TYPE BACKUP_ID   PARENT_ID   BACKUP_NAME                        BACKUP_PATH                            TYPE        LEVEL       RANGE#      OBJECT_NAME OBJECT_ID   BASE_NAME             BACKUP_TIME                 DESC# ENCRYPT_TYPE COMPRESS_LEVEL WITHOUT_LOG USE_PWR     PKG_SIZE    BEGIN_LSN            END_LSN              BKP_NUM     DBF_NUM     PARALLEL_NUM DDL_CLONE   MPP_FLAG    MIN_TRX_START_LSN    MIN_EXEC_VER CUMULATIVE
---------- ----------- ----------- ----------- ---------------------------------- -------------------------------------- ----------- ----------- ----------- ----------- ----------- --------------------- --------------------------- ----- ------------ -------------- ----------- ----------- ----------- -------------------- -------------------- ----------- ----------- ------------ ----------- ----------- -------------------- ------------ -----------
1          DISK        53418202    -1          DB_RAC_BAK_FOR_CHECK               /dm7/backup/db_rac_bak_for_check       0           0           1           rac         -1                                2020-05-29 21:14:50.000773        0            0              0           0           33554432    50908                51113                2           4           1            0           0           49398                117507596    0
2          DISK        1763138770  -1          DB_RAC_BAK_FOR_REMOVE              /dm7/backup/db_rac_bak_for_remove      0           0           1           rac         -1                                2020-05-29 22:00:34.000524        0            0              0           0           33554432    50908                51119                2           4           1            0           0           49398                117507596    0
3          DISK        -1036285990 -1          DB_INCR_rac_20200529_220232_000624 /dm7/backup/db_rac_bak_for_remove_incr 1           0           1           rac         -1          DB_RAC_BAK_FOR_REMOVE 2020-05-29 22:02:33.000834        0            0              0           0           33554432    50908                51135                2           4           1            0           0           49398                117507596    0

used time: 00:00:01.038. Execute id is 173.
SQL> select * from v$backupset_search_dirs;

LINEID     DIR
---------- --------------------------------------
1          /dm7/backup/db_rac_bak_for_check
2          /dm7/backup/db_rac_bak_for_remove
3          /dm7/backup/db_rac_bak_for_remove_incr
4          +DMDATA/data/rac/bak

used time: 0.781(ms). Execute id is 174.

SQL> select sf_bakset_remove('disk','/dm7/backup/db_rac_bak_for_remove');
select sf_bakset_remove('disk','/dm7/backup/db_rac_bak_for_remove');
[-8202]:Be the base backupset of /dm7/backup/db_rac_bak_for_remove_incr,cannot be removed.
used time: 00:00:01.023. Execute id is 0.

报错了,提示说它是另一个备份集的基备份不能被删除

SQL> select sf_bakset_remove('disk','/dm7/backup/db_rac_bak_for_remove',1);

LINEID     SF_BAKSET_REMOVE('disk','/dm7/backup/db_rac_bak_for_remove',1)
---------- --------------------------------------------------------------
1          1

used time: 50.201(ms). Execute id is 176.

检查备份集可以确认在删除基备份时确实级联删除了增量备份

SQL> select * from v$backupset;

LINEID     DEVICE_TYPE BACKUP_ID   PARENT_ID   BACKUP_NAME          BACKUP_PATH                      TYPE        LEVEL       RANGE#      OBJECT_NAME OBJECT_ID   BASE_NAME BACKUP_TIME                 DESC# ENCRYPT_TYPE COMPRESS_LEVEL WITHOUT_LOG USE_PWR     PKG_SIZE    BEGIN_LSN            END_LSN              BKP_NUM     DBF_NUM     PARALLEL_NUM DDL_CLONE   MPP_FLAG    MIN_TRX_START_LSN    MIN_EXEC_VER CUMULATIVE
---------- ----------- ----------- ----------- -------------------- -------------------------------- ----------- ----------- ----------- ----------- ----------- --------- --------------------------- ----- ------------ -------------- ----------- ----------- ----------- -------------------- -------------------- ----------- ----------- ------------ ----------- ----------- -------------------- ------------ -----------
1          DISK        53418202    -1          DB_RAC_BAK_FOR_CHECK /dm7/backup/db_rac_bak_for_check 0           0           1           rac         -1                    2020-05-29 21:14:50.000773        0            0              0           0           33554432    50908                51113                2           4           1            0           0           49398                117507596    0

used time: 00:00:01.050. Execute id is 177.

SF_BAKSET_REMOVE_BATCH函数
批量删除满足指定条件的所有备份集。
定义:

INT SF_BAKSET_REMOVE_BATCH (
device_type varchar,
end_time datetime,
range int,
obj_name varchar(257)
)

参数说明:
device_type:设备类型,disk或tape。指定NULL,则忽略存储设备的区分。
end_time:删除备份集生成的结束时间,仅删除end_time之前的备份集,必须指定。
range:指定删除备份的级别。1代表库级,2代表表空间级,3代表表级,4代表归档备份。若指定NULL,则忽略备份集备份级别的区分。
obj_name:待删除备份集中备份对象的名称,仅表空间级和表级有效。若为表级备份删除,则需指定完整的表名(模式.表名),否则,将认为删除会话当前模式下的表备份。若指定为NULL,则忽略备份集中备份对象名称区分

返回值:
1:备份集目录删除成功,其它情况下报错。
举例说明:

SQL> backup database full to db_rac_full_bak_for_remove backupset '/dm7/backup/db_rac_full_bak_for_remove';
executed successfully
used time: 00:00:01.498. Execute id is 184.
SQL> backup tablespace main full to tab_main_full_bak_for_remove backupset '/dm7/backup/tab_main_full_bak_for_remove';
executed successfully
used time: 00:00:01.121. Execute id is 185.
SQL> select sf_bakset_backup_dir_add('disk','/dm7/backup/db_rac_full_bak_for_remove');

LINEID     SF_BAKSET_BACKUP_DIR_ADD('disk','/dm7/backup/db_rac_full_bak_for_remove')
---------- -------------------------------------------------------------------------
1          1

used time: 1.574(ms). Execute id is 186.
SQL> select sf_bakset_backup_dir_add('disk','/dm7/backup/tab_main_full_bak_for_remove');

LINEID     SF_BAKSET_BACKUP_DIR_ADD('disk','/dm7/backup/tab_main_full_bak_for_remove')
---------- ---------------------------------------------------------------------------
1          1

used time: 1.881(ms). Execute id is 187.
SQL> select * from v$backupset_search_dirs;

LINEID     DIR
---------- ----------------------------------------
1          /dm7/backup/db_rac_full_bak_for_remove
2          /dm7/backup/tab_main_full_bak_for_remove
3          +DMDATA/data/rac/bak

used time: 0.784(ms). Execute id is 188.
SQL>  select * from v$backupset;

LINEID     DEVICE_TYPE BACKUP_ID   PARENT_ID   BACKUP_NAME                  BACKUP_PATH                              TYPE        LEVEL       RANGE#      OBJECT_NAME OBJECT_ID   BASE_NAME BACKUP_TIME                 DESC# ENCRYPT_TYPE COMPRESS_LEVEL WITHOUT_LOG USE_PWR     PKG_SIZE    BEGIN_LSN            END_LSN              BKP_NUM     DBF_NUM     PARALLEL_NUM DDL_CLONE   MPP_FLAG    MIN_TRX_START_LSN    MIN_EXEC_VER CUMULATIVE
---------- ----------- ----------- ----------- ---------------------------- ---------------------------------------- ----------- ----------- ----------- ----------- ----------- --------- --------------------------- ----- ------------ -------------- ----------- ----------- ----------- -------------------- -------------------- ----------- ----------- ------------ ----------- ----------- -------------------- ------------ -----------
1          DISK        760083173   -1          DB_RAC_FULL_BAK_FOR_REMOVE   /dm7/backup/db_rac_full_bak_for_remove   0           0           1           rac         -1                    2020-05-30 10:21:23.000661        0            0              0           0           33554432    50908                51141                2           4           1            0           0           49398                117507596    0
2          DISK        -1117064059 -1          TAB_MAIN_FULL_BAK_FOR_REMOVE /dm7/backup/tab_main_full_bak_for_remove 0           0           2           MAIN        4                     2020-05-30 10:22:41.000744        0            0              0           0           33554432    50908                51147                1           1           1            0           0           49398                117507596    0

used time: 00:00:01.025. Execute id is 189.


SQL> select sf_bakset_remove_batch('disk',now(),null,null);

LINEID     SF_BAKSET_REMOVE_BATCH('disk',NOW(),NULL,NULL)
---------- ----------------------------------------------
1          1

used time: 21.228(ms). Execute id is 190.
SQL> select * from v$backupset;
no rows

used time: 00:00:01.023. Execute id is 191.

SP_DB_BAKSET_REMOVE_BATCH过程
批量删除指定时间之前的数据库备份集。使用该方法前,需要先使用SF_BAKSET_BACKUP_DIR_ADD添加将要删除的备份集目录,否则只删除默
认备份路径下的备份集。
定义:

SP_DB_BAKSET_REMOVE_BATCH (
device_type varchar,
end_time datetime
)

参数说明:
device_type:设备类型,disk或tape。指定NULL,则忽略存储设备的区分。
end_time:删除备份集生成的结束时间,仅删除end_time之前的备份集,必须指定。
举例说明:

SQL> backup database full to db_rac_full_bak_for_del backupset '/dm7/backup/db_rac_full_bak_for_del';
executed successfully
used time: 00:00:01.580. Execute id is 194.
SQL> select sf_bakset_backup_dir_add('disk','/dm7/backup/db_rac_full_bak_for_del');

LINEID     SF_BAKSET_BACKUP_DIR_ADD('disk','/dm7/backup/db_rac_full_bak_for_del')
---------- ----------------------------------------------------------------------
1          1

used time: 1.725(ms). Execute id is 195.
SQL> select * from v$backupset_search_dirs;

LINEID     DIR
---------- -----------------------------------
1          /dm7/backup/db_rac_full_bak_for_del
2          +DMDATA/data/rac/bak

used time: 0.483(ms). Execute id is 196.
SQL> select * from v$backupset;

LINEID     DEVICE_TYPE BACKUP_ID   PARENT_ID   BACKUP_NAME             BACKUP_PATH                         TYPE        LEVEL       RANGE#      OBJECT_NAME OBJECT_ID   BASE_NAME BACKUP_TIME                 DESC# ENCRYPT_TYPE COMPRESS_LEVEL WITHOUT_LOG USE_PWR     PKG_SIZE    BEGIN_LSN            END_LSN              BKP_NUM     DBF_NUM     PARALLEL_NUM DDL_CLONE   MPP_FLAG    MIN_TRX_START_LSN    MIN_EXEC_VER CUMULATIVE
---------- ----------- ----------- ----------- ----------------------- ----------------------------------- ----------- ----------- ----------- ----------- ----------- --------- --------------------------- ----- ------------ -------------- ----------- ----------- ----------- -------------------- -------------------- ----------- ----------- ------------ ----------- ----------- -------------------- ------------ -----------
1          DISK        361744824   -1          DB_RAC_FULL_BAK_FOR_DEL /dm7/backup/db_rac_full_bak_for_del 0           0           1           rac         -1                    2020-05-30 10:27:00.000621        0            0              0           0           33554432    50908                51153                2           4           1            0           0           49398                117507596    0

used time: 00:00:01.024. Execute id is 197.
SQL> call sp_db_bakset_remove_batch('disk',now());
DMSQL executed successfully
used time: 36.535(ms). Execute id is 198.
SQL> select * from v$backupset;
no rows

used time: 00:00:01.021. Execute id is 199.

SP_TS_BAKSET_REMOVE_BATCH过程
批量删除指定表空间对象及指定时间之前的表空间备份集。使用该方法前,需要先使用SF_BAKSET_BACKUP_DIR_ADD添加将要删除的备份集目录,否则只删除默认备份路径下的备份集。
定义:

SP_TS_BAKSET_REMOVE_BATCH (
device_type varchar,
end_time datetime,
ts_name varchar(128)
)

参数说明:
device_type:设备类型,disk或tape。指定NULL,则忽略存储设备的区分。
end_time:删除备份集生成的结束时间,仅删除end_time之前的备份集,必须指定。
ts_name:表空间名,若未指定,则认为删除所有满足条件的表空间备份集。
举例说明:

SQL> backup tablespace main full to tab_main_bak_full_for_del backupset '/dm7/backup/tab_main_bak_full_for_del';
executed successfully
used time: 00:00:01.123. Execute id is 202.
SQL> sf_bakset_backup_dir_add('disk','/dm7/backup/tab_main_bak_full_for_del');
DMSQL executed successfully
used time: 1.256(ms). Execute id is 203.
SQL> select * from v$backupset_search_dirs;

LINEID     DIR
---------- -------------------------------------
1          /dm7/backup/tab_main_bak_full_for_del
2          +DMDATA/data/rac/bak

used time: 0.773(ms). Execute id is 204.
SQL> select * from v$backupset;

LINEID     DEVICE_TYPE BACKUP_ID   PARENT_ID   BACKUP_NAME               BACKUP_PATH                           TYPE        LEVEL       RANGE#      OBJECT_NAME OBJECT_ID   BASE_NAME BACKUP_TIME                 DESC# ENCRYPT_TYPE COMPRESS_LEVEL WITHOUT_LOG USE_PWR     PKG_SIZE    BEGIN_LSN            END_LSN              BKP_NUM     DBF_NUM     PARALLEL_NUM DDL_CLONE   MPP_FLAG    MIN_TRX_START_LSN    MIN_EXEC_VER CUMULATIVE
---------- ----------- ----------- ----------- ------------------------- ------------------------------------- ----------- ----------- ----------- ----------- ----------- --------- --------------------------- ----- ------------ -------------- ----------- ----------- ----------- -------------------- -------------------- ----------- ----------- ------------ ----------- ----------- -------------------- ------------ -----------
1          DISK        798489856   -1          TAB_MAIN_BAK_FULL_FOR_DEL /dm7/backup/tab_main_bak_full_for_del 0           0           2           MAIN        4                     2020-05-30 10:38:29.000350        0            0              0           0           33554432    50908                51159                1           1           1            0           0           49398                117507596    0

used time: 00:00:01.027. Execute id is 205.
SQL> call sp_ts_bakset_remove_batch('disk',now(),'main');
DMSQL executed successfully
used time: 16.765(ms). Execute id is 206.
SQL> select * from v$backupset;

LINEID     DEVICE_TYPE BACKUP_ID   PARENT_ID   BACKUP_NAME               BACKUP_PATH                           TYPE        LEVEL       RANGE#      OBJECT_NAME OBJECT_ID   BASE_NAME BACKUP_TIME                 DESC# ENCRYPT_TYPE COMPRESS_LEVEL WITHOUT_LOG USE_PWR     PKG_SIZE    BEGIN_LSN            END_LSN              BKP_NUM     DBF_NUM     PARALLEL_NUM DDL_CLONE   MPP_FLAG    MIN_TRX_START_LSN    MIN_EXEC_VER CUMULATIVE
---------- ----------- ----------- ----------- ------------------------- ------------------------------------- ----------- ----------- ----------- ----------- ----------- --------- --------------------------- ----- ------------ -------------- ----------- ----------- ----------- -------------------- -------------------- ----------- ----------- ------------ ----------- ----------- -------------------- ------------ -----------
1          DISK        798489856   -1          TAB_MAIN_BAK_FULL_FOR_DEL /dm7/backup/tab_main_bak_full_for_del 0           0           2           MAIN        4                     2020-05-30 10:38:29.000350        0            0              0           0           33554432    50908                51159                1           1           1            0           0           49398                117507596    0

used time: 00:00:01.022. Execute id is 207.

说明指定表空间名时表空间名要大写

SQL> call sp_ts_bakset_remove_batch('disk',now(),'MAIN');
DMSQL executed successfully
used time: 13.667(ms). Execute id is 208.
SQL> select * from v$backupset;
no rows

used time: 00:00:01.023. Execute id is 209.

删除备份目录

SQL> sf_bakset_backup_dir_remove_all();
DMSQL executed successfully
used time: 0.787(ms). Execute id is 210.
SQL> select * from v$backupset_search_dirs;

LINEID     DIR
---------- --------------------
1          +DMDATA/data/rac/bak

used time: 0.836(ms). Execute id is 211.

SP_TAB_BAKSET_REMOVE_BATCH过程
批量删除指定表对象及指定时间之前的表备份集。使用该方法前,需要先使用SF_BAKSET_BACKUP_DIR_ADD添加将要删除的备份集目录,否则只删除默认备份路径下的备份集。
定义:

SP_TAB_BAKSET_REMOVE_BATCH (
device_type varchar,
end_time datetime,
sch_name varchar(128),
tab_name varchar(128)
)

参数说明:
device_type:设备类型,disk或tape。指定NULL,则忽略存储设备的区分。
end_time:删除备份集生成的结束时间,仅删除end_time之前的备份集,必须指定。
sch_name:表所属的模式名。
tab_name:表名,只要模式名和表名有一个指定,就认为需要匹配目标;若均指定为NULL,则认为删除满足条件的所有表备份。
举例说明:
SQL> create table tab_for_del_batch(c1 int);
executed successfully
used time: 18.840(ms). Execute id is 212.
SQL> insert into tab_for_del_batch values(1);
affect rows 1

used time: 1.840(ms). Execute id is 213.
SQL> commit;
executed successfully
used time: 1.557(ms). Execute id is 214.
SQL> backup table tab_for_del_batch to tab_bak_for_del_batch backupset '/dm7/backup/tab_bak_for_del_batch';
executed successfully
used time: 00:00:01.142. Execute id is 215.
SQL> call sf_bakset_backup_dir_add('disk','/dm7/backup/tab_bak_for_del_batch');
DMSQL executed successfully
used time: 1.436(ms). Execute id is 216.
SQL> select * from v$backupset_search_dirs;

LINEID     DIR
---------- ---------------------------------
1          /dm7/backup/tab_bak_for_del_batch
2          +DMDATA/data/rac/bak

used time: 0.742(ms). Execute id is 217.
SQL> select * from v$backupset;

LINEID     DEVICE_TYPE BACKUP_ID   PARENT_ID   BACKUP_NAME           BACKUP_PATH                       TYPE        LEVEL       RANGE#      OBJECT_NAME              OBJECT_ID   BASE_NAME BACKUP_TIME                 DESC# ENCRYPT_TYPE COMPRESS_LEVEL WITHOUT_LOG USE_PWR     PKG_SIZE    BEGIN_LSN            END_LSN              BKP_NUM     DBF_NUM     PARALLEL_NUM DDL_CLONE   MPP_FLAG    MIN_TRX_START_LSN    MIN_EXEC_VER CUMULATIVE
---------- ----------- ----------- ----------- --------------------- --------------------------------- ----------- ----------- ----------- ------------------------ ----------- --------- --------------------------- ----- ------------ -------------- ----------- ----------- ----------- -------------------- -------------------- ----------- ----------- ------------ ----------- ----------- -------------------- ------------ -----------
1          DISK        -424456112  -1          TAB_BAK_FOR_DEL_BATCH /dm7/backup/tab_bak_for_del_batch 2           0           3           SYSDBA.TAB_FOR_DEL_BATCH -1                    2020-05-30 11:07:05.000089        0            0              0           0           33554432    50908                51200                1           0           1            0           0           49398                117507596    0

used time: 00:00:01.023. Execute id is 218.

SQL> sp_tab_bakset_remove_batch('disk',now(),'SYSDBA','TAB_FOR_DEL_BATCH');
DMSQL executed successfully
used time: 14.860(ms). Execute id is 219.
SQL> select * from v$backupset;
no rows

used time: 00:00:01.022. Execute id is 220.
SQL> sf_bakset_backup_dir_remove_all();
DMSQL executed successfully
used time: 0.955(ms). Execute id is 221.
SQL> select * from v$backupset_search_dirs;

LINEID     DIR
---------- --------------------
1          +DMDATA/data/rac/bak

used time: 1.138(ms). Execute id is 222.

SP_ARCH_BAKSET_REMOVE_BATCH过程
批量删除指定时间之前的归档备份集。使用该方法前,需要先使用SF_BAKSET_BACKUP_DIR_ADD添加将要删除的备份集目录,否则只删除默认备份路径下的备份集。
定义:

SP_ARCH_BAKSET_REMOVE_BATCH (
device_type varchar,
end_time datetime
)

参数说明:
device_type:设备类型,disk或tape。指定NULL,则忽略存储设备的区分。
end_time:删除备份集生成的结束时间,仅删除end_time之前的备份集,必须指定。
举例说明:

SQL> backup archivelog  to arch_bak_for_del_batch backupset '/dm_home/dmdba/dmdbms/data/jydm/bak/arch_bak_for_del_batch';
executed successfully
used time: 00:00:36.170. Execute id is 2476.
SQL> sf_bakset_backup_dir_add('disk','/dm_home/dmdba/dmdbms/data/jydm/bak/arch_bak_for_del_batch');
DMSQL executed successfully
used time: 0.768(ms). Execute id is 2478.
SQL> select * from v$backupset_search_dirs;

LINEID     DIR
---------- ----------------------------------------------------------
1          /dm_home/dmdba/dmdbms/data/jydm/bak/arch_bak_for_del_batch
2          /dm_home/dmdba/dmdbms/data/jydm/bak

used time: 0.568(ms). Execute id is 2479.
SQL> select * from v$backupset;

LINEID     DEVICE_TYPE BACKUP_ID   PARENT_ID   BACKUP_NAME            BACKUP_PATH                                                TYPE        LEVEL       RANGE#      OBJECT_NAME OBJECT_ID   BASE_NAME BACKUP_TIME                 DESC# ENCRYPT_TYPE COMPRESS_LEVEL WITHOUT_LOG USE_PWR     PKG_SIZE    BEGIN_LSN            END_LSN              BKP_NUM     DBF_NUM     PARALLEL_NUM DDL_CLONE   MPP_FLAG    MIN_TRX_START_LSN    MIN_EXEC_VER CUMULATIVE
---------- ----------- ----------- ----------- ---------------------- ---------------------------------------------------------- ----------- ----------- ----------- ----------- ----------- --------- --------------------------- ----- ------------ -------------- ----------- ----------- ----------- -------------------- -------------------- ----------- ----------- ------------ ----------- ----------- -------------------- ------------ -----------
1          DISK        1259288472  -1          ARCH_BAK_FOR_DEL_BATCH /dm_home/dmdba/dmdbms/data/jydm/bak/arch_bak_for_del_batch 3           0           4           ARCHIVE     -1                    2020-05-30 14:29:32.000827        0            0              1           0           33554432    8236220              15220690             1           12          1            0           0           15220690             117507596    0
2          DISK        1259288472  -1          ARCH_BAK_FOR_DEL_BATCH /dm_home/dmdba/dmdbms/data/jydm/bak/arch_bak_for_del_batch 3           0           4           ARCHIVE     -1                    2020-05-30 14:29:32.000827        0            0              1           0           33554432    8236220              15220690             1           12          1            0           0           15220690             117507596    0

used time: 00:00:01.023. Execute id is 2480.


SQL> sp_arch_bakset_remove_batch('disk',now());
DMSQL executed successfully
used time: 178.477(ms). Execute id is 2485.
SQL> select * from v$backupset;
no rows

used time: 00:00:01.009. Execute id is 2486.
SQL> sf_bakset_backup_dir_remove_all();
DMSQL executed successfully
used time: 0.826(ms). Execute id is 2492.
SQL> select * from v$backupset_search_dirs;

LINEID     DIR
---------- -----------------------------------
1          /dm_home/dmdba/dmdbms/data/jydm/bak

used time: 0.763(ms). Execute id is 2493.

4. 备份信息查看
DM7提供了一系列动态视图供用户查看备份集相关信息,在查看之前应先使用SF_BAKSET_BACKUP_DIR_ADD添加备份集目录,否则只显示默认备份路径下的备份集信息,使用方法如下例所示:

SQL>SELECT SF_BAKSET_BACKUP_DIR_ADD('DISK', '/home/dm_bak');

下面逐个介绍DM7提供的备份相关动态视图。
V$BACKUPSET显示备份集基本信息。

SQL> desc v$backupset

LINEID     NAME              TYPE$         NULLABLE
---------- ----------------- ------------- --------
1          DEVICE_TYPE       VARCHAR(10)   Y           备份集存储介质类型
2          BACKUP_ID         INTEGER       Y           备份ID
3          PARENT_ID         INTEGER       Y           并行备份的子备份集所属备份的ID
4          BACKUP_NAME       VARCHAR(512)  Y           备份名
5          BACKUP_PATH       VARCHAR(1024) Y           备份路径
6          TYPE              INTEGER       Y           0:基备份,1:增量备份,2:表备份,3:归档备份
7          LEVEL             INTEGER       Y           是否脱机备份。0:联机备份,1:脱机备份
8          RANGE#            INTEGER       Y           1:库备份,2:表空间备份,3:表级备份,4:归档备份
9          OBJECT_NAME       VARCHAR(1025) Y           对象名:数据库名、表空间名或者表名
10         OBJECT_ID         INTEGER       Y           对象ID,表备份时无效
11         BASE_NAME         VARCHAR(512)  Y           基备份名,表备份时无效
12         BACKUP_TIME       DATETIME(6)   Y           备份时间
13         DESC#             VARCHAR(1024) Y           备份描述信息
14         ENCRYPT_TYPE      INTEGER       Y           加密类型
15         COMPRESS_LEVEL    INTEGER       Y           压缩级别
16         WITHOUT_LOG       INTEGER       Y           联机数据库备份是否备份日志,表备份时无效
17         USE_PWR           INTEGER       Y           增量备份过程中是否使用PWR优化,均不使用,保留仅为了兼容
18         PKG_SIZE          INTEGER       Y           数据包大写标志,内部实现
19         BEGIN_LSN         BIGINT        Y           备份的起始LSN值,表备份时无效
20         END_LSN           BIGINT        Y           结束备份的LSN值,表备份时无效
21         BKP_NUM           INTEGER       Y           备份片个数,即备份集中.bak文件个数
22         DBF_NUM           INTEGER       Y           备份集中包含的数据库\表空间数据文件个数,表备份时无效
23         PARALLEL_NUM      INTEGER       Y           并行备份的并行数,0或者1为非并行备份集
24         DDL_CLONE         INTEGER       Y           DDL_CLONE库备份标识,0不是,1是
25         MPP_FLAG          INTEGER       Y           MPP库备份标识,0不是,1是
26         MIN_TRX_START_LSN BIGINT        Y           备份时活动事务最小的LSN
27         MIN_EXEC_VER      INTEGER       Y           备份集适用的最小执行码的版本号,转换为16进制匹配版本号
28         CUMULATIVE        INTEGER       Y           增量备份时,是否为累积增量备份。1是,0否

下面以创建数据库备份为例,查看备份集的介质类型、备份路径、备份类型等基本信息:

SQL> backup database full to db_rac_bak_for_info backupset '/dm7/backup/db_rac_bak_for_info';
executed successfully
used time: 00:00:01.298. Execute id is 224.
SQL> sf_bakset_backup_dir_add('disk','/dm7/backup/db_rac_bak_for_info');
DMSQL executed successfully
used time: 0.939(ms). Execute id is 225.
SQL> select * from v$backupset_search_dirs;

LINEID     DIR
---------- -------------------------------
1          /dm7/backup/db_rac_bak_for_info
2          +DMDATA/data/rac/bak

used time: 1.726(ms). Execute id is 226.
SQL> select device_type,backup_path,type,range# from v$backupset;

LINEID     DEVICE_TYPE BACKUP_PATH                     TYPE        RANGE#
---------- ----------- ------------------------------- ----------- -----------
1          DISK        /dm7/backup/db_rac_bak_for_info 0           1

used time: 00:00:01.023. Execute id is 227.

V$BACKUPSET_DBINFO显示备份集的数据库相关信息。

SQL> desc v$backupset_dbinfo;

LINEID     NAME           TYPE$         NULLABLE
---------- -------------- ------------- --------
1          DEVICE_TYPE    VARCHAR(10)   Y          备份集存储介质类型
2          BACKUP_ID      INTEGER       Y          备份ID
3          BACKUP_NAME    VARCHAR(512)  Y          备份名
4          BACKUP_PATH    VARCHAR(1024) Y          备份路径
5          EXTENT_SIZE    INTEGER       Y          数据文件使用的簇大小
6          PAGE_SIZE      INTEGER       Y          页大小
7          LOG_PAGE_SIZE  INTEGER       Y          日志文件页大小
8          CASE_SENSITVE  INTEGER       Y          大小写敏感标志
9          DB_MAGIC       INTEGER       Y          数据库的magic
10         PM_DB_MAGIC    INTEGER       Y          永久魔数(permenant_magic)
11         UNICODE_FLAG   INTEGER       Y          unicode标志
12         DB_VERSION     INTEGER       Y          数据库版本
13         GLOBAL_VERSION VARCHAR(512)  Y          数据库全局版本信息
14         ENABLE_POLICY  INTEGER       Y          安全策略
15         ARCH_FLAG      INTEGER       Y          归档是否打开的标志
16         RAC_NODE       INTEGER       Y          高性能集群的节点数目
17         PAGE_CHECK     INTEGER       Y          数据页校验配置
18         RLOG_ENCRYPT   INTEGER       Y          归档日志是否加密
19         EX_CIPHER_NAME VARCHAR(512)  Y          外部加密算法名称
20         EX_CIPHER_ID   INTEGER       Y          外部加密算法名称对应的ID
21         EX_HASH_NAME   VARCHAR(512)  Y          外部HASH算法名称
22         EX_HASH_ID     INTEGER       Y          外部HASH算法名称对应的ID
23         LENGTH_IN_CHAR INTEGER       Y          VARCHAR类型长度是否以字符为单位
24         USE_NEW_HASH   INTEGER       Y          是否使用改进的字符类型HASH算法
25         BLANK_PAD_MODE INTEGER       Y          数据库空格填充模式

表还原时要求目标库的特定建库参数要与源库一致,如页大小、簇大小,通过查看备份文件的数据库信息可确定目标库需要设置哪些建库参数。下面以创建表备份为例,查看备份集的页大小、簇大小、大小写是否敏感、UNICODE_FLAG等数据库信息:

SQL> backup table tab_01 to tab_01_bak backupset '/dm7/backup/tab_01_bak';
executed successfully
used time: 00:00:01.119. Execute id is 236.
SQL> select sf_bakset_backup_dir_add('disk','/dm7/backup/tab_01_bak');

LINEID     SF_BAKSET_BACKUP_DIR_ADD('disk','/dm7/backup/tab_01_bak')
---------- ---------------------------------------------------------
1          1

used time: 2.096(ms). Execute id is 237.
SQL> select * from v$backupset_search_dirs;

LINEID     DIR
---------- ----------------------
1          /dm7/backup/tab_01_bak
2          +DMDATA/data/rac/bak

used time: 0.726(ms). Execute id is 238.
SQL> select * from v$backupset;

LINEID     DEVICE_TYPE BACKUP_ID   PARENT_ID   BACKUP_NAME BACKUP_PATH            TYPE        LEVEL       RANGE#      OBJECT_NAME   OBJECT_ID   BASE_NAME BACKUP_TIME                 DESC# ENCRYPT_TYPE COMPRESS_LEVEL WITHOUT_LOG USE_PWR     PKG_SIZE    BEGIN_LSN            END_LSN              BKP_NUM     DBF_NUM     PARALLEL_NUM DDL_CLONE   MPP_FLAG    MIN_TRX_START_LSN    MIN_EXEC_VER CUMULATIVE
---------- ----------- ----------- ----------- ----------- ---------------------- ----------- ----------- ----------- ------------- ----------- --------- --------------------------- ----- ------------ -------------- ----------- ----------- ----------- -------------------- -------------------- ----------- ----------- ------------ ----------- ----------- -------------------- ------------ -----------
1          DISK        1132430805  -1          TAB_01_BAK  /dm7/backup/tab_01_bak 2           0           3           SYSDBA.TAB_01 -1                    2020-05-30 14:56:59.000255        0            0              0           0           33554432    50908                51208                1           0           1            0           0           49398                117507596    0

used time: 00:00:01.023. Execute id is 239.
SQL> select backup_path,page_size,extent_size,case_sensitive from v$backupset_dbinfo where backup_path='/dm7/backup/tab_01_bak';

LINEID     BACKUP_PATH            PAGE_SIZE   EXTENT_SIZE CASE_SENSITIVE
---------- ---------------------- ----------- ----------- --------------
1          /dm7/backup/tab_01_bak 8192        16          1

used time: 00:00:01.028. Execute id is 240.

V$BACKUPSET_DBF显示备份集中数据文件的相关信息,表备份时无效。

SQL> desc v$backupset_dbf

LINEID     NAME           TYPE$         NULLABLE
---------- -------------- ------------- --------
1          DEVICE_TYPE    VARCHAR(10)   Y         备份集存储介质类型
2          BACKUP_ID      INTEGER       Y         备份ID
3          BACKUPNAME     VARCHAR(512)  Y         备份名
4          BACKUPPATH     VARCHAR(1024) Y         备份路径
5          FILE_SEQ       INTEGER       Y         备份的数据文件序号
6          TS_ID          INTEGER       Y         表空间ID
7          FILE_ID        INTEGER       Y         数据文件ID
8          TS_STATE       INTEGER       Y         表空间状态
9          TS_NAME        VARCHAR(512)  Y         表空间名
10         FILE_NAME      VARCHAR(1024) Y         包含完整路径的数据文件名
11         MIRROR_PATH    VARCHAR(1024) Y         镜像文件路径
12         FILE_LEN       BIGINT        Y         数据文件占用的字节大小
13         MAX_LIMIT_SIZE INTEGER       Y         文件最大大小,以M为单位
14         AUTO_EXTEND    INTEGER       Y         是否支持自动扩展:1支持,0不支持
15         NEXT_SIZE      INTEGER       Y         文件每次扩展大小,以M为单位
16         START_BKP_SEQ  INTEGER       Y         起始备份片编号
17         START_BKP_OFF  BIGINT        Y         起始备份片偏移
18         END_BKP_SEQ    INTEGER       Y         结束备份片编号
19         END_BKP_OFF    BIGINT        Y         结束备份片偏移

数据库和表空间备份集中记录了备份的数据文件具体信息,如果想了解备份集中包含了哪些数据文件且这些数据文件有什么属性,可通过查询V$BACKUPSET_DBF实现。下面以表空间备份为例,查看备份集中的数据文件信息。

SQL> create tablespace ts_for_dbf datafile 'ts_for_dbf_01.dbf' size 128;
executed successfully
used time: 00:00:01.594. Execute id is 247.
SQL> alter tablespace ts_for_dbf add datafile 'ts_for_dbf_02.dbf' size 128;
executed successfully
used time: 236.359(ms). Execute id is 248.
SQL> select * from v$datafile;

LINEID     GROUP_ID    ID          PATH                               CLIENT_PATH       CREATE_TIME                 STATUS$     RW_STATUS   LAST_CKPT_TIME              MODIFY_TIME                 MODIFY_TRX           TOTAL_SIZE           FREE_SIZE            FREE_PAGE_NO         PAGES_READ           PAGES_WRITE          PAGE_SIZE   READ_REQUEST WRITE_REQUEST AUTO_EXTEND MAX_SIZE    NEXT_SIZE   MIRROR_PATH
---------- ----------- ----------- ---------------------------------- ----------------- --------------------------- ----------- ----------- --------------------------- --------------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- ----------- ------------ ------------- ----------- ----------- ----------- -----------
1          0           0           +DMDATA/data/rac/system.dbf        system.dbf        2020-04-26 15:44:40         1           2           2020-05-30 15:06:01         2020-04-26 15:44:40         8326                 16384                15760                1520                 248                  50                   8192        248          50            1           16777215    0           NULL
2          1           0           +DMDATA/data/rac/roll.dbf          roll.dbf          2020-04-26 15:44:40         1           2           2020-05-30 15:06:01         2020-04-26 15:44:40         8326                 16384                13780                2624                 1303                 5209                 8192        1303         5209          1           16777215    0           NULL
3          3           0           +DMDATA/data/rac/TEMP0.DBF         TEMP0.DBF         2020-05-28 16:52:15         1           2           2020-05-30 15:06:01         2020-05-28 16:52:15         8326                 1280                 1270                 32                   0                    0                    8192        0            0             1           16777215    0           NULL
4          4           0           +DMDATA/data/rac/main.dbf          main.dbf          2020-04-26 15:44:43         1           2           2020-05-30 15:06:01         2020-04-26 15:44:43         8326                 16384                16369                64                   4                    10                   8192        4            10            1           16777215    0           NULL
5          5           0           +DMDATA/data/rac/ts_for_dbf_01.dbf ts_for_dbf_01.dbf 2020-05-30 15:06:00         1           2           2020-05-30 15:06:01         2020-05-30 15:06:00         8326                 16384                16376                32                   0                    1                    8192        0            1             1           16777215    0           NULL
6          5           1           +DMDATA/data/rac/ts_for_dbf_02.dbf ts_for_dbf_02.dbf 2020-05-30 15:06:29         1           2           2020-05-30 15:06:01         2020-05-30 15:06:29         8326                 16384                16383                32                   0                    0                    8192        0            0             1           16777215    0           NULL

6 rows got

used time: 5.737(ms). Execute id is 249.

SQL> backup tablespace ts_for_dbf to ts_for_dbf_bak backupset '/dm7/backup/ts_for_dbf_bak';
executed successfully
used time: 00:00:01.114. Execute id is 250.
SQL> select sf_bakset_backup_dir_add('disk','/dm7/backup/ts_for_dbf_bak');

LINEID     SF_BAKSET_BACKUP_DIR_ADD('disk','/dm7/backup/ts_for_dbf_bak')
---------- -------------------------------------------------------------
1          1

used time: 1.928(ms). Execute id is 251.
SQL> select * from v$backupset_search_dirs;

LINEID     DIR
---------- --------------------------
1          /dm7/backup/ts_for_dbf_bak
2          +DMDATA/data/rac/bak

used time: 0.848(ms). Execute id is 252.
SQL> select * from v$backupset;

LINEID     DEVICE_TYPE BACKUP_ID   PARENT_ID   BACKUP_NAME    BACKUP_PATH                TYPE        LEVEL       RANGE#      OBJECT_NAME OBJECT_ID   BASE_NAME BACKUP_TIME                 DESC# ENCRYPT_TYPE COMPRESS_LEVEL WITHOUT_LOG USE_PWR     PKG_SIZE    BEGIN_LSN            END_LSN              BKP_NUM     DBF_NUM     PARALLEL_NUM DDL_CLONE   MPP_FLAG    MIN_TRX_START_LSN    MIN_EXEC_VER CUMULATIVE
---------- ----------- ----------- ----------- -------------- -------------------------- ----------- ----------- ----------- ----------- ----------- --------- --------------------------- ----- ------------ -------------- ----------- ----------- ----------- -------------------- -------------------- ----------- ----------- ------------ ----------- ----------- -------------------- ------------ -----------
1          DISK        1346953844  -1          TS_FOR_DBF_BAK /dm7/backup/ts_for_dbf_bak 0           0           2           TS_FOR_DBF  5                     2020-05-30 15:08:17.000425        0            0              0           0           33554432    51236                51238                1           2           1            0           0           49398                117507596    0

used time: 00:00:01.023. Execute id is 253.
SQL> select file_seq,ts_id,file_id,ts_name,file_name from v$backupset_dbf;

LINEID     FILE_SEQ    TS_ID       FILE_ID     TS_NAME    FILE_NAME
---------- ----------- ----------- ----------- ---------- ----------------------------------
1          1           5           0           TS_FOR_DBF +DMDATA/data/rac/ts_for_dbf_01.dbf
2          2           5           1           TS_FOR_DBF +DMDATA/data/rac/ts_for_dbf_02.dbf

used time: 00:00:01.023. Execute id is 254.

V$BACKUPSET_ARCH显示备份集中归档文件的信息,且仅归档备份才会有数据。

SQL> desc v$backupset_arch

LINEID     NAME           TYPE$         NULLABLE
---------- -------------- ------------- --------
1          DEVICE_TYPE    VARCHAR(10)   Y         备份集存储介质类型
2          BACKUP_ID      INTEGER       Y         备份ID
3          BACKUPNAME     VARCHAR(512)  Y         备份名
4          BACKUPPATH     VARCHAR(1024) Y         备份路径
5          FILE_SEQ       INTEGER       Y         备份的数据文件序号
6          FILE_NAME      VARCHAR(1024) Y         归档文件路径
7          FILE_LEN       BIGINT        Y         归档文件大小
8          BEGIN_LSN      BIGINT        Y         备份归档的起始LSN值
9          BEGIN_SEQNO    BIGINT        Y         起始备份归档序号
10         BEGIN_RPAG_OFF INTEGER       Y         备份归档起始LSN对应归档页内偏移
11         END_LSN        BIGINT        Y         结束备份归档的LSN值
12         CREATE_TIME    DATETIME(6)   Y         归档文件的创建时间
13         CLOSE_TIME     DATETIME(6)   Y         归档文件的关闭时间
14         START_BKP_SEQ  INTEGER       Y         起始备份片编号
15         START_BKP_OFF  BIGINT        Y         起始备份片偏移
16         END_BKP_SEQ    INTEGER       Y         结束备份片编号
17         END_BKP_OFF    BIGINT        Y         结束备份片偏移

备份集日志信息可以是联机库备份备份开始到备份结束这段时间服务器产生的日志,也可以是归档备份中备份的归档信息。接下来以数据库备份为例查询备份集日志信息。

SQL> backup database to db_rac_bak backupset '/dm7/backup/db_rac_bak';
executed successfully
used time: 00:00:01.451. Execute id is 259.
SQL> select sf_bakset_backup_dir_add('disk','/dm7/backup/db_rac_bak');

LINEID     SF_BAKSET_BACKUP_DIR_ADD('disk','/dm7/backup/db_rac_bak')
---------- ---------------------------------------------------------
1          1

used time: 1.664(ms). Execute id is 260.
SQL> select * from v$backupset_search_dirs;

LINEID     DIR
---------- ----------------------
1          /dm7/backup/db_rac_bak
2          +DMDATA/data/rac/bak

used time: 0.775(ms). Execute id is 261.
SQL> select * from v$backupset;

LINEID     DEVICE_TYPE BACKUP_ID   PARENT_ID   BACKUP_NAME BACKUP_PATH            TYPE        LEVEL       RANGE#      OBJECT_NAME OBJECT_ID   BASE_NAME BACKUP_TIME                 DESC# ENCRYPT_TYPE COMPRESS_LEVEL WITHOUT_LOG USE_PWR     PKG_SIZE    BEGIN_LSN            END_LSN              BKP_NUM     DBF_NUM     PARALLEL_NUM DDL_CLONE   MPP_FLAG    MIN_TRX_START_LSN    MIN_EXEC_VER CUMULATIVE
---------- ----------- ----------- ----------- ----------- ---------------------- ----------- ----------- ----------- ----------- ----------- --------- --------------------------- ----- ------------ -------------- ----------- ----------- ----------- -------------------- -------------------- ----------- ----------- ------------ ----------- ----------- -------------------- ------------ -----------
1          DISK        -274484992  -1          DB_RAC_BAK  /dm7/backup/db_rac_bak 0           0           1           rac         -1                    2020-05-30 15:16:49.000122        0            0              0           0           33554432    51236                51244                2           6           1            0           0           49398                117507596    0

used time: 00:00:01.020. Execute id is 262.
SQL> select backuppath,file_seq,file_name,begin_lsn,end_lsn from v$backupset_arch where backuppath='/dm7/backup/db_rac_bak';

LINEID     BACKUPPATH             FILE_SEQ    FILE_NAME BEGIN_LSN            END_LSN
---------- ---------------------- ----------- --------- -------------------- --------------------
1          /dm7/backup/db_rac_bak 6                     51241                51244

used time: 00:00:01.025. Execute id is 263.

V$BACKUPSET_BKP显示备份集的备份片信息。

SQL> desc v$backupset_bkp

LINEID     NAME        TYPE$         NULLABLE
---------- ----------- ------------- --------
1          DEVICE_TYPE VARCHAR(10)   Y          备份集存储介质类型
2          BACKUP_ID   INTEGER       Y          备份ID
3          BACKUPNAME  VARCHAR(512)  Y          备份名
4          BACKUPPATH  VARCHAR(1024) Y          备份路径
5          BKP_NTH     INTEGER       Y          备份片文件编号
6          FILE_NAME   VARCHAR(1024) Y          备份文件名
7          BKP_LEN     BIGINT        Y          备份片长度

以数据库备份为例,查看备份集中的备份片信息。

SQL> backup database to db_rac_bak backupset '/dm7/backup/db_rac_bak';
executed successfully
used time: 00:00:01.451. Execute id is 259.
SQL> select sf_bakset_backup_dir_add('disk','/dm7/backup/db_rac_bak');

LINEID     SF_BAKSET_BACKUP_DIR_ADD('disk','/dm7/backup/db_rac_bak')
---------- ---------------------------------------------------------
1          1

used time: 1.664(ms). Execute id is 260.
SQL> select * from v$backupset_search_dirs;

LINEID     DIR
---------- ----------------------
1          /dm7/backup/db_rac_bak
2          +DMDATA/data/rac/bak

used time: 0.775(ms). Execute id is 261.
SQL> select * from v$backupset;

LINEID     DEVICE_TYPE BACKUP_ID   PARENT_ID   BACKUP_NAME BACKUP_PATH            TYPE        LEVEL       RANGE#      OBJECT_NAME OBJECT_ID   BASE_NAME BACKUP_TIME                 DESC# ENCRYPT_TYPE COMPRESS_LEVEL WITHOUT_LOG USE_PWR     PKG_SIZE    BEGIN_LSN            END_LSN              BKP_NUM     DBF_NUM     PARALLEL_NUM DDL_CLONE   MPP_FLAG    MIN_TRX_START_LSN    MIN_EXEC_VER CUMULATIVE
---------- ----------- ----------- ----------- ----------- ---------------------- ----------- ----------- ----------- ----------- ----------- --------- --------------------------- ----- ------------ -------------- ----------- ----------- ----------- -------------------- -------------------- ----------- ----------- ------------ ----------- ----------- -------------------- ------------ -----------
1          DISK        -274484992  -1          DB_RAC_BAK  /dm7/backup/db_rac_bak 0           0           1           rac         -1                    2020-05-30 15:16:49.000122        0            0              0           0           33554432    51236                51244                2           6           1            0           0           49398                117507596    0

used time: 00:00:01.020. Execute id is 262.

SQL> select backuppath,bkp_nth,file_name,bkp_len from v$backupset_bkp where backuppath='/dm7/backup/db_rac_bak';

LINEID     BACKUPPATH             BKP_NTH     FILE_NAME        BKP_LEN
---------- ---------------------- ----------- ---------------- --------------------
1          /dm7/backup/db_rac_bak 0           db_rac_bak.bak   26688000
2          /dm7/backup/db_rac_bak 1           db_rac_bak_1.bak 6144

used time: 00:00:01.025. Execute id is 265.

V$BACKUPSET_SEARCH_DIRS显示备份集搜索目录。

SQL> desc v$backupset_search_dirs

LINEID     NAME TYPE$         NULLABLE
---------- ---- ------------- --------
1          DIR  VARCHAR(1024) Y           备份集搜索目录

查询V$BACKUPSET_SEARCH_DIRS显示当前会话已添加的备份目录,即备份集搜索目录。若用户没有添加备份目录,那么仅显示默认的备份目录。

SQL> select sf_bakset_backup_dir_remove_all();

LINEID     SF_BAKSET_BACKUP_DIR_REMOVE_ALL()
---------- ---------------------------------
1          1

used time: 0.882(ms). Execute id is 267.
SQL> select * from v$backupset_search_dirs;

LINEID     DIR
---------- --------------------
1          +DMDATA/data/rac/bak

used time: 0.965(ms). Execute id is 268.

如果添加备份目录,查询结果包括默认备份目录和用户添加的备份目录。

SQL> select sf_bakset_backup_dir_add('disk','/dm7/backup/db_rac_bak');

LINEID     SF_BAKSET_BACKUP_DIR_ADD('disk','/dm7/backup/db_rac_bak')
---------- ---------------------------------------------------------
1          1

used time: 0.894(ms). Execute id is 269.
SQL> select * from v$backupset_search_dirs;

LINEID     DIR
---------- ----------------------
1          /dm7/backup/db_rac_bak
2          +DMDATA/data/rac/bak

used time: 0.714(ms). Execute id is 270.

V$BACKUPSET_TABLE显示表备份集中备份表信息,仅表备份有效。

SQL> desc v$backupset_table

LINEID     NAME         TYPE$         NULLABLE
---------- ------------ ------------- --------
1          DEVICE_TYPE  VARCHAR(10)   Y         备份集存储介质类型
2          BACKUP_ID    INTEGER       Y         备份ID
3          BACKUPNAME   VARCHAR(512)  Y         备份名
4          BACKUPPATH   VARCHAR(1024) Y         备份路径
5          SCHEMANAME   VARCHAR(512)  Y         备份表所属的模式名
6          USERNAME     VARCHAR(512)  Y         执行表备份的用户名
7          TSNAME       VARCHAR(512)  Y         备份表存储的表空间名
8          TABLENAME    VARCHAR(512)  Y         备份表名
9          TABLETYPE    INTEGER       Y         表类型
10         INIT_SQL     VARCHAR(4096) Y         完整建表语句,忽略引用约束(语句可能会被截断)
11         DCONS_SQL    VARCHAR(4096) Y         备份表中被禁用约束的创建语句(语句可能会被截断,DMRMAN可查看完整语句)
12         DIDX_SQL     VARCHAR(4096) Y         备份表中无效二级索引的创建语句(语句可能会被截断,DMRMAN可查看完整语句)
13         BIDX_NUM     INTEGER       Y         备份集中备份的二级索引个数
14         META_VERSION INTEGER       Y         当前表备份的元信息的版本号

下面创建表备份并查看备份中备份名、备份路径、表名等信息。

SQL> create table tab_for_info(c1 int);
executed successfully
used time: 12.459(ms). Execute id is 277.
SQL> insert into tab_for_info values(1);
affect rows 1

used time: 1.779(ms). Execute id is 278.
SQL> commit;
executed successfully
used time: 1.775(ms). Execute id is 279.
SQL> backup table tab_for_info to tab_for_info_bak backupset '/dm7/backup/tab_for_info_bak';
executed successfully
used time: 00:00:01.133. Execute id is 280.
SQL> select sf_bakset_backup_dir_add('disk','/dm7/backup/tab_for_info_bak');

LINEID     SF_BAKSET_BACKUP_DIR_ADD('disk','/dm7/backup/tab_for_info_bak')
---------- ---------------------------------------------------------------
1          1

used time: 1.250(ms). Execute id is 281.
SQL> select * from v$backupset;

LINEID     DEVICE_TYPE BACKUP_ID   PARENT_ID   BACKUP_NAME      BACKUP_PATH                  TYPE        LEVEL       RANGE#      OBJECT_NAME         OBJECT_ID   BASE_NAME BACKUP_TIME                 DESC# ENCRYPT_TYPE COMPRESS_LEVEL WITHOUT_LOG USE_PWR     PKG_SIZE    BEGIN_LSN            END_LSN              BKP_NUM     DBF_NUM     PARALLEL_NUM DDL_CLONE   MPP_FLAG    MIN_TRX_START_LSN    MIN_EXEC_VER CUMULATIVE
---------- ----------- ----------- ----------- ---------------- ---------------------------- ----------- ----------- ----------- ------------------- ----------- --------- --------------------------- ----- ------------ -------------- ----------- ----------- ----------- -------------------- -------------------- ----------- ----------- ------------ ----------- ----------- -------------------- ------------ -----------
1          DISK        378752781   -1          TAB_FOR_INFO_BAK /dm7/backup/tab_for_info_bak 2           0           3           SYSDBA.TAB_FOR_INFO -1                    2020-05-30 15:31:29.000827        0            0              0           0           33554432    51236                51284                1           0           1            0           0           49398                117507596    0

used time: 00:00:01.019. Execute id is 282.
SQL> select backupname,tablename from v$backupset_table;

LINEID     BACKUPNAME       TABLENAME
---------- ---------------- ------------
1          TAB_FOR_INFO_BAK TAB_FOR_INFO

used time: 00:00:01.018. Execute id is 283.

V$BACKUPSET_SUBS显示并行备份中生成的子备份集信息

SQL> desc v$backupset_subs

LINEID     NAME        TYPE$         NULLABLE
---------- ----------- ------------- --------
1          DEVICE_TYPE VARCHAR(10)   Y         备份集存储介质类型
2          BACKUPNAME  VARCHAR(512)  Y         备份名
3          BACKUP_ID   INTEGER       Y         备份ID
4          PARENT_ID   INTEGER       Y         子备份集所属主备份集ID
5          BACKUPPATH  VARCHAR(1024) Y         各备份集绝对路径
6          BKP_NUM     INTEGER       Y         各备份集中备份片文件个数,可能为0
7          DBF_NUM     INTEGER       Y         各备份集中备份数据文件个数,可能为0

数据库和表空间支持并行备份,备份后会在主备份集中生成多个子备份集,查询视图V$BACKUPSET_SUBS可获取子备份集中包含的备份片文件个数及备份数据文件个数等信息。以创建数据库并行备份为例,查看子备份集的相关信息。

SQL> backup database full to db_rac_bak backupset '/dm7/backup/db_rac_bak' parallel 4;
executed successfully
used time: 00:00:05.766. Execute id is 304.
SQL> select sf_bakset_backup_dir_add('disk','/dm7/backup/db_rac_bak');

LINEID     SF_BAKSET_BACKUP_DIR_ADD('disk','/dm7/backup/db_rac_bak')
---------- ---------------------------------------------------------
1          1

used time: 0.918(ms). Execute id is 305.
SQL> select backuppath,bkp_num,dbf_num from v$backupset_subs;

LINEID     BACKUPPATH                          BKP_NUM     DBF_NUM
---------- ----------------------------------- ----------- -----------
1          /dm7/backup/db_rac_bak/db_rac_bak_2 1           1
2          /dm7/backup/db_rac_bak/db_rac_bak_3 1           1
3          /dm7/backup/db_rac_bak/db_rac_bak_0 1           2
4          /dm7/backup/db_rac_bak/db_rac_bak_1 1           1

used time: 13.850(ms). Execute id is 306.

DM7联机执行SQL语句进行加密备份与设置跟踪日志

联机执行SQL语句进行加密备份与设置跟踪日志
下面将介绍联机执行SQL语句进行数据备份的高级特性,主要内容包括:
1. 加密备份
2. 设置跟踪日志文件
DM7的数据库、表空间、表备份和归档备份均支持创建加密备份和备份时设置跟踪日志文件,本节仅以数据库为例说明这两种类型备份的创建。

1.加密备份
DM7提供加密备份的方式保护用户的备份集,没有权限的用户无法访问加密的备份集。备份语句中通过指定IDENTIFIED BY…WITH ENCRYPTION…ENCRYPT WITH…执行加密备份。其中,参数IDENTIFIED BY指定加密密码,长度不超过128字节,若长度超长服务器会报语法分析出错;参数WITH ENCRYPTION指定加密类型,加密类型分为简单加密和复杂加密,简单加密是对备份文件设置口令,但文件内容仍以明文存储,复杂加密则对备份文件进行完全的加密,备份文件以密文方式存储,用户可根据备份数据的重要程度选择加密类型;参数ENCRYPT WITH指定加密算法,不同加密算法具体见参数说明,也可通过“SELECT * FROM V$CIPHERS”语句查询DM7支持的加密算法,其中算法MD5和SHA1不能在此处使用。默认使用的加密算法为AES256_CFB。

加密备份过程中参数IDENTIFIED BY必须指定,参数WITH ENCRYPTION和参数ENCRYPT WITH可不指定,此时WITH ENCRYPTION默认值为1,ENCRYPT WITH默认值为AES256_CFB。例如,以下两种加密备份语句都是合法的:

SQL> backup database to db_rac_backup_encrypt_01 backupset '/dm7/backup/db_rac_backup_encrypt_2020052901' identified by "abcd123456";
executed successfully
used time: 00:00:01.379. Execute id is 85.
SQL> backup database to db_rac_backup_encrypt_02 backupset '/dm7/backup/db_rac_backup_encrypt_2020052902' identified by "abcd123456" encrypt with rc4;
executed successfully
used time: 00:00:01.313. Execute id is 86.
SQL> select sf_bakset_backup_dir_add('disk','/dm7/backup/db_rac_backup_encrypt_2020052901');

LINEID     SF_BAKSET_BACKUP_DIR_ADD('disk','/dm7/backup/db_rac_backup_encrypt_2020052901')
---------- -------------------------------------------------------------------------------
1          1

used time: 2.066(ms). Execute id is 87.
SQL> select sf_bakset_backup_dir_add('disk','/dm7/backup/db_rac_backup_encrypt_2020052902');

LINEID     SF_BAKSET_BACKUP_DIR_ADD('disk','/dm7/backup/db_rac_backup_encrypt_2020052902')
---------- -------------------------------------------------------------------------------
1          1

used time: 1.532(ms). Execute id is 88.
SQL> select * from v$backupset where backup_path like '/dm7/backup/db_rac_backup_encrypt_202005290%';

LINEID     DEVICE_TYPE BACKUP_ID   PARENT_ID   BACKUP_NAME              BACKUP_PATH                                  TYPE        LEVEL       RANGE#      OBJECT_NAME OBJECT_ID   BASE_NAME BACKUP_TIME                 DESC# ENCRYPT_TYPE COMPRESS_LEVEL WITHOUT_LOG USE_PWR     PKG_SIZE    BEGIN_LSN            END_LSN              BKP_NUM     DBF_NUM     PARALLEL_NUM DDL_CLONE   MPP_FLAG    MIN_TRX_START_LSN    MIN_EXEC_VER CUMULATIVE
---------- ----------- ----------- ----------- ------------------------ -------------------------------------------- ----------- ----------- ----------- ----------- ----------- --------- --------------------------- ----- ------------ -------------- ----------- ----------- ----------- -------------------- -------------------- ----------- ----------- ------------ ----------- ----------- -------------------- ------------ -----------
1          DISK        1180634048  -1          DB_RAC_BACKUP_ENCRYPT_01 /dm7/backup/db_rac_backup_encrypt_2020052901 0           0           1           rac         -1                    2020-05-29 16:41:40.000665        1            0              0           0           33554432    50908                51058                2           4           1            0           0           49398                117507596    0
2          DISK        244985784   -1          DB_RAC_BACKUP_ENCRYPT_02 /dm7/backup/db_rac_backup_encrypt_2020052902 0           0           1           rac         -1                    2020-05-29 16:43:00.000380        1            0              0           0           33554432    50908                51064                2           4           1            0           0           49398                117507596    0

used time: 00:00:01.053. Execute id is 89.

若指定了加密密码,但加密类型WITH ENCRYPTION参数指定为0,则为非加密备份,如下所示:

SQL> backup database to db_rac_backup_encrypt_03 backupset '/dm7/backup/db_rac_backup_encrypt_2020052903' identified by "abcd123456" with encryption 0;
executed successfully
used time: 00:00:01.313. Execute id is 90.
SQL> select sf_bakset_backup_dir_add('disk','/dm7/backup/db_rac_backup_encrypt_2020052903');

LINEID     SF_BAKSET_BACKUP_DIR_ADD('disk','/dm7/backup/db_rac_backup_encrypt_2020052903')
---------- -------------------------------------------------------------------------------
1          1

used time: 1.899(ms). Execute id is 91.
SQL> select * from v$backupset where backup_path like '/dm7/backup/db_rac_backup_encrypt_202005290%';

LINEID     DEVICE_TYPE BACKUP_ID   PARENT_ID   BACKUP_NAME              BACKUP_PATH                                  TYPE        LEVEL       RANGE#      OBJECT_NAME OBJECT_ID   BASE_NAME BACKUP_TIME                 DESC# ENCRYPT_TYPE COMPRESS_LEVEL WITHOUT_LOG USE_PWR     PKG_SIZE    BEGIN_LSN            END_LSN              BKP_NUM     DBF_NUM     PARALLEL_NUM DDL_CLONE   MPP_FLAG    MIN_TRX_START_LSN    MIN_EXEC_VER CUMULATIVE
---------- ----------- ----------- ----------- ------------------------ -------------------------------------------- ----------- ----------- ----------- ----------- ----------- --------- --------------------------- ----- ------------ -------------- ----------- ----------- ----------- -------------------- -------------------- ----------- ----------- ------------ ----------- ----------- -------------------- ------------ -----------
1          DISK        1180634048  -1          DB_RAC_BACKUP_ENCRYPT_01 /dm7/backup/db_rac_backup_encrypt_2020052901 0           0           1           rac         -1                    2020-05-29 16:41:40.000665        1            0              0           0           33554432    50908                51058                2           4           1            0           0           49398                117507596    0
2          DISK        244985784   -1          DB_RAC_BACKUP_ENCRYPT_02 /dm7/backup/db_rac_backup_encrypt_2020052902 0           0           1           rac         -1                    2020-05-29 16:43:00.000380        1            0              0           0           33554432    50908                51064                2           4           1            0           0           49398                117507596    0
3          DISK        1995527143  -1          DB_RAC_BACKUP_ENCRYPT_03 /dm7/backup/db_rac_backup_encrypt_2020052903 0           0           1           rac         -1                    2020-05-29 16:46:17.000633        0            0              0           0           33554432    50908                51070                2           4           1            0           0           49398                117507596    0

used time: 00:00:01.069. Execute id is 92.

从encrypt_type列可以看到备份集/dm7/backup/db_rac_backup_encrypt_2020052903为0,也就证明了备份是没有加密的。

下面以数据库完全备份为例,创建加密密码为“abcd123456”,加密算法为“rc4”的复杂类型数据库加密备份,完整步骤如下:
1) 配置归档 。
2) 保证数据库处于OPEN状态。
3) 备份数据库,输入以下语句:

SQL> backup database to db_rac_backup_encrypt_04 backupset '/dm7/backup/db_rac_backup_encrypt_2020052904' identified by "abcd123456" with encryption 2 encrypt with rc4;
executed successfully
used time: 00:00:01.356. Execute id is 93.
SQL> select sf_bakset_backup_dir_add('disk','/dm7/backup/db_rac_backup_encrypt_2020052904');

LINEID     SF_BAKSET_BACKUP_DIR_ADD('disk','/dm7/backup/db_rac_backup_encrypt_2020052904')
---------- -------------------------------------------------------------------------------
1          1

used time: 1.868(ms). Execute id is 94.
SQL> select * from v$backupset where backup_path='/dm7/backup/db_rac_backup_encrypt_2020052904';

LINEID     DEVICE_TYPE BACKUP_ID   PARENT_ID   BACKUP_NAME              BACKUP_PATH                                  TYPE        LEVEL       RANGE#      OBJECT_NAME OBJECT_ID   BASE_NAME BACKUP_TIME                 DESC# ENCRYPT_TYPE COMPRESS_LEVEL WITHOUT_LOG USE_PWR     PKG_SIZE    BEGIN_LSN            END_LSN              BKP_NUM     DBF_NUM     PARALLEL_NUM DDL_CLONE   MPP_FLAG    MIN_TRX_START_LSN    MIN_EXEC_VER CUMULATIVE
---------- ----------- ----------- ----------- ------------------------ -------------------------------------------- ----------- ----------- ----------- ----------- ----------- --------- --------------------------- ----- ------------ -------------- ----------- ----------- ----------- -------------------- -------------------- ----------- ----------- ------------ ----------- ----------- -------------------- ------------ -----------
1          DISK        141217020   -1          DB_RAC_BACKUP_ENCRYPT_04 /dm7/backup/db_rac_backup_encrypt_2020052904 0           0           1           rac         -1                    2020-05-29 16:49:56.000930        2            0              0           0           33554432    50908                51076                2           4           1            0           0           49398                117507596    0

used time: 00:00:01.067. Execute id is 95.

对于增量备份加密,如果基备份存在加密,则使用的加密算法和加密密码必须与基备份中一致;如果基备份未进行加密处理,则对增量备份使用的加密密码和算法没有特殊要求。

SQL> backup database increment base on backupset '/dm7/backup/db_rac_backup_encrypt_2020052904' backupset '/dm7/backup/db_rac_increment_backup_encrypt_2020052901' identified by "abcd123456" with encryption 2 encrypt with rc4;
executed successfully
used time: 00:00:01.262. Execute id is 96.
SQL> select sf_bakset_backup_dir_add('disk','/dm7/backup/db_rac_increment_backup_encrypt_2020052901');

LINEID     SF_BAKSET_BACKUP_DIR_ADD('disk','/dm7/backup/db_rac_increment_backup_encrypt_2020052901')
---------- -----------------------------------------------------------------------------------------
1          1

used time: 2.210(ms). Execute id is 97.
SQL> select * from v$backupset where backup_path='/dm7/backup/db_rac_increment_backup_encrypt_2020052901';

LINEID     DEVICE_TYPE BACKUP_ID   PARENT_ID   BACKUP_NAME                        BACKUP_PATH                                            TYPE        LEVEL       RANGE#      OBJECT_NAME OBJECT_ID   BASE_NAME                BACKUP_TIME                 DESC# ENCRYPT_TYPE COMPRESS_LEVEL WITHOUT_LOG USE_PWR     PKG_SIZE    BEGIN_LSN            END_LSN              BKP_NUM     DBF_NUM     PARALLEL_NUM DDL_CLONE   MPP_FLAG    MIN_TRX_START_LSN    MIN_EXEC_VER CUMULATIVE
---------- ----------- ----------- ----------- ---------------------------------- ------------------------------------------------------ ----------- ----------- ----------- ----------- ----------- ------------------------ --------------------------- ----- ------------ -------------- ----------- ----------- ----------- -------------------- -------------------- ----------- ----------- ------------ ----------- ----------- -------------------- ------------ -----------
1          DISK        195701720   -1          DB_INCR_rac_20200529_165327_000906 /dm7/backup/db_rac_increment_backup_encrypt_2020052901 1           0           1           rac         -1          DB_RAC_BACKUP_ENCRYPT_04 2020-05-29 16:53:29.000129        2            0              0           0           33554432    50908                51082                2           4           1            0           0           49398                117507596    0

used time: 00:00:01.075. Execute id is 98.

2.设置跟踪日志文件
DM7备份时支持设置跟踪日志文件,日志记录了SBT接口的调用过程,用户通过查看日志可跟踪备份还原过程。

与生成跟踪日志文件相关的参数有两个:TRACE FILE和TRACE LEVEL。TRACE FILE用于指定生成的跟踪日志文件路径,TRACE LEVEL表示是否启用TRACE。TRACE LEVEL有效值包括1和2。1表示不启用TRACE功能,2表示启用,系统默认值为1。

指定参数TRACE FILE但TRACE LEVEL值设置为1即不启用TRACE功能,会生成TRACE文件,但不会写入TRACE信息。如下所示:

SQL> backup database backupset '/dm7/backup/db_rac_backup_2020052905' trace file '/dm7/backup/db_rac_trace.log' trace level 1;
executed successfully
used time: 00:00:01.719. Execute id is 99.

[dmdba@dmrac1 backup]$ cat db_rac_trace.log

TRACE LEVEL值设置为2即启用TRACE功能,但若TRACE FILE没有指定,系统默认在执行码路径的log目录下生成DM_SBTTRACE_年月.log文件。如下所示:

SQL> backup database to db_rac_backup_trace_2020052901 backupset '/dm7/backup/db_rac_backup_trace_2020052901' trace level 2;
executed successfully
used time: 00:00:01.354. Execute id is 101.

[dmdba@dmrac1 log]$ pwd
/dm7/log

[dmdba@dmrac1 log]$ cat dm_SBTTRACE_202005.log
2020-05-29 17:01:27 sbtbackup(type=1, name=db_rac_backup_trace_2020052901.bak)
2020-05-29 17:01:27 sbtwrite(buf != NULL, buf_len = 4096)
2020-05-29 17:01:27 sbtwrite(buf != NULL, buf_len = 5095936)
2020-05-29 17:01:27 sbtwrite(buf != NULL, buf_len = 21496320)
2020-05-29 17:01:27 sbtwrite(buf != NULL, buf_len = 49664)
2020-05-29 17:01:27 sbtclose()
2020-05-29 17:01:27 sbtinfo(!NULL)
file [db_rac_backup_trace_2020052901.bak] finished, name:[db_rac_backup_trace_2020052901.bak],created time:[2020-05-29 17:01:27],expirated time:[2105-12-31 23:59:59],label:[],comment:[]

2020-05-29 17:01:27 sbtbackup(type=1, name=db_rac_backup_trace_2020052901_1.bak)
2020-05-29 17:01:27 sbtwrite(buf != NULL, buf_len = 4096)
2020-05-29 17:01:27 sbtwrite(buf != NULL, buf_len = 4096)
2020-05-29 17:01:27 sbtclose()
2020-05-29 17:01:27 sbtinfo(!NULL)
file [db_rac_backup_trace_2020052901_1.bak] finished, name:[db_rac_backup_trace_2020052901_1.bak],created time:[2020-05-29 17:01:27],expirated time:[2105-12-31 23:59:59],label:[],comment:[]

2020-05-29 17:01:27 sbtbackup(type=3, name=db_rac_backup_trace_2020052901.meta)
2020-05-29 17:01:27 sbtwrite(buf != NULL, buf_len = 49152)
2020-05-29 17:01:27 sbtwrite(buf != NULL, buf_len = 4096)
2020-05-29 17:01:27 sbtwrite(buf != NULL, buf_len = 4096)
2020-05-29 17:01:27 sbtwrite(buf != NULL, buf_len = 4096)
2020-05-29 17:01:27 sbtwrite(buf != NULL, buf_len = 4096)
2020-05-29 17:01:27 sbtwrite(buf != NULL, buf_len = 4096)
2020-05-29 17:01:27 sbtwrite(buf != NULL, buf_len = 4096)
2020-05-29 17:01:27 sbtwrite(buf != NULL, buf_len = 512)
2020-05-29 17:01:27 sbtclose()
2020-05-29 17:01:27 sbtinfo(!NULL)
file [db_rac_backup_trace_2020052901.meta] finished, name:[db_rac_backup_trace_2020052901.meta],created time:[2020-05-29 17:01:27],expirated time:[2105-12-31 23:59:59],label:[],comment:[]

若TRACE FILE使用相对路径,日志文件生成在执行码同级目录下。
以数据库完全备份为例,为备份设置跟踪日志文件的操作步骤如下:
1) 配置归档,参考3.1节。
2) 保证数据库处于OPEN状态。
3) 备份数据库,输入以下语句:

SQL> backup database to db_rac_backup_trace_2020052903 backupset '/dm7/backup/db_rac_backup_trace_2020052903' trace file '/dm7/backup/db_rac_trace.log' trace level 2;
executed successfully
used time: 00:00:01.321. Execute id is 104.

[dmdba@dmrac1 backup]$ cat db_rac_trace.log
2020-05-29 17:15:13 sbtrestore(filepath=/dm7/backup/db_rac_backup_trace_2020052902/db_rac_backup_trace_2020052902.meta)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 4096)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 45056)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 25088)
2020-05-29 17:15:13 sbtclose()
2020-05-29 17:15:13 sbtrestore(filepath=/dm7/backup/ts_main_increment_bak_20200529_01/ts_main_increment_bak_20200529_01.meta)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 4096)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 45056)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 8704)
2020-05-29 17:15:13 sbtclose()
2020-05-29 17:15:13 sbtrestore(filepath=/dm7/backup/db_rac_backup_encrypt_2020052904/db_rac_backup_encrypt_2020052904.meta)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 4096)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 45056)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 25088)
2020-05-29 17:15:13 sbtclose()
2020-05-29 17:15:13 sbtrestore(filepath=/dm7/backup/db_backup_20200528_01/db_backup_20200528_01.meta)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 4096)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 45056)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 25088)
2020-05-29 17:15:13 sbtclose()
2020-05-29 17:15:13 sbtrestore(filepath=/dm7/backup/db_rac_backup_encrypt_2020052903/db_rac_backup_encrypt_2020052903.meta)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 4096)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 45056)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 25088)
2020-05-29 17:15:13 sbtclose()
2020-05-29 17:15:13 sbtrestore(filepath=/dm7/backup/db_backup_20200529_01/db_backup_20200529_01.meta)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 4096)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 45056)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 25088)
2020-05-29 17:15:13 sbtclose()
2020-05-29 17:15:13 sbtrestore(filepath=/dm7/backup/db_rac_backup_encrypt_2020052902/db_rac_backup_encrypt_2020052902.meta)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 4096)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 45056)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 25088)
2020-05-29 17:15:13 sbtclose()
2020-05-29 17:15:13 sbtrestore(filepath=/dm7/backup/db_backup_20200528_04/db_backup_20200528_04.meta)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 4096)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 45056)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 25088)
2020-05-29 17:15:13 sbtclose()
2020-05-29 17:15:13 sbtrestore(filepath=/dm7/backup/db_backup_20200528_02/db_backup_20200528_02.meta)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 4096)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 45056)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 25088)
2020-05-29 17:15:13 sbtclose()
2020-05-29 17:15:13 sbtrestore(filepath=/dm7/backup/db_rac_backup_2020052905/db_rac_backup_2020052905.meta)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 4096)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 45056)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 25088)
2020-05-29 17:15:13 sbtclose()
2020-05-29 17:15:13 sbtrestore(filepath=/dm7/backup/db_backup_20200528_06/db_backup_20200528_06.meta)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 4096)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 45056)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 182272)
2020-05-29 17:15:13 sbtclose()
2020-05-29 17:15:13 sbtrestore(filepath=/dm7/backup/ts_main_full_bak_20200529_02/ts_main_full_bak_20200529_02.meta)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 4096)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 45056)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 8704)
2020-05-29 17:15:13 sbtclose()
2020-05-29 17:15:13 sbtrestore(filepath=/dm7/backup/db_rac_increment_backup_encrypt_2020052901/db_rac_increment_backup_encrypt_2020052901.meta)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 4096)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 45056)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 25088)
2020-05-29 17:15:13 sbtclose()
2020-05-29 17:15:13 sbtrestore(filepath=/dm7/backup/ts_main_increment_bak_20200529_02/ts_main_increment_bak_20200529_02.meta)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 4096)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 45056)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 8704)
2020-05-29 17:15:13 sbtclose()
2020-05-29 17:15:13 sbtrestore(filepath=/dm7/backup/ts_main_full_bak_20200529_01/ts_main_full_bak_20200529_01.meta)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 4096)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 45056)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 8704)
2020-05-29 17:15:13 sbtclose()
2020-05-29 17:15:13 sbtrestore(filepath=/dm7/backup/db_backup_20200528_05/db_backup_20200528_05.meta)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 4096)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 45056)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 25088)
2020-05-29 17:15:13 sbtclose()
2020-05-29 17:15:13 sbtrestore(filepath=/dm7/backup/db_increment_backup_20200529_01/db_increment_backup_20200529_01.meta)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 4096)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 45056)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 25088)
2020-05-29 17:15:13 sbtclose()
2020-05-29 17:15:13 sbtrestore(filepath=/dm7/backup/ts_main_increment_bak_2020052903/ts_main_increment_bak_2020052903.meta)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 4096)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 45056)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 8704)
2020-05-29 17:15:13 sbtclose()
2020-05-29 17:15:13 sbtrestore(filepath=/dm7/backup/db_rac_backup_encrypt_2020052901/db_rac_backup_encrypt_2020052901.meta)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 4096)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 45056)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 25088)
2020-05-29 17:15:13 sbtclose()
2020-05-29 17:15:13 sbtrestore(filepath=/dm7/backup/db_backup_20200528_03/db_backup_20200528_03.meta)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 4096)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 45056)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 25088)
2020-05-29 17:15:13 sbtclose()
2020-05-29 17:15:13 sbtrestore(filepath=/dm7/backup/db_increment_backup_20200529_02/db_increment_backup_20200529_02.meta)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 4096)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 45056)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 25088)
2020-05-29 17:15:13 sbtclose()
2020-05-29 17:15:13 sbtrestore(filepath=/dm7/backup/db_rac_backup_trace_2020052901/db_rac_backup_trace_2020052901.meta)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 4096)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 45056)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 25088)
2020-05-29 17:15:13 sbtclose()
2020-05-29 17:15:13 sbtrestore(filepath=+DMDATA/data/rac/bak/ts_backup_main_01/ts_backup_main_01.meta)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 4096)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 45056)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 8704)
2020-05-29 17:15:13 sbtclose()
2020-05-29 17:15:13 sbtrestore(filepath=+DMDATA/data/rac/bak/tab_t1_bak_01/tab_t1_bak_01.meta)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 4096)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 45056)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 5632)
2020-05-29 17:15:13 sbtclose()
2020-05-29 17:15:13 sbtrestore(filepath=+DMDATA/data/rac/bak/table_tab_01_backup_20200529/table_tab_01_backup_20200529.meta)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 4096)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 45056)
2020-05-29 17:15:13 sbtread(buf != NULL, buf_len = 5632)
2020-05-29 17:15:13 sbtclose()
2020-05-29 17:15:13 sbtend(del_flag=FALSE)
2020-05-29 17:15:13 sbtbackup(type=1, name=db_rac_backup_trace_2020052903.bak)
2020-05-29 17:15:13 sbtwrite(buf != NULL, buf_len = 4096)
2020-05-29 17:15:13 sbtwrite(buf != NULL, buf_len = 5095936)
2020-05-29 17:15:13 sbtwrite(buf != NULL, buf_len = 21496320)
2020-05-29 17:15:13 sbtwrite(buf != NULL, buf_len = 49664)
2020-05-29 17:15:13 sbtclose()
2020-05-29 17:15:13 sbtinfo(!NULL)
file [db_rac_backup_trace_2020052903.bak] finished, name:[db_rac_backup_trace_2020052903.bak],created time:[2020-05-29 17:15:13],expirated time:[2105-12-31 23:59:59],label:[],comment:[]

2020-05-29 17:15:13 sbtbackup(type=1, name=db_rac_backup_trace_2020052903_1.bak)
2020-05-29 17:15:13 sbtwrite(buf != NULL, buf_len = 4096)
2020-05-29 17:15:13 sbtwrite(buf != NULL, buf_len = 2560)
2020-05-29 17:15:13 sbtclose()
2020-05-29 17:15:13 sbtinfo(!NULL)
file [db_rac_backup_trace_2020052903_1.bak] finished, name:[db_rac_backup_trace_2020052903_1.bak],created time:[2020-05-29 17:15:13],expirated time:[2105-12-31 23:59:59],label:[],comment:[]

2020-05-29 17:15:13 sbtbackup(type=3, name=db_rac_backup_trace_2020052903.meta)
2020-05-29 17:15:13 sbtwrite(buf != NULL, buf_len = 49152)
2020-05-29 17:15:13 sbtwrite(buf != NULL, buf_len = 4096)
2020-05-29 17:15:13 sbtwrite(buf != NULL, buf_len = 4096)
2020-05-29 17:15:13 sbtwrite(buf != NULL, buf_len = 4096)
2020-05-29 17:15:13 sbtwrite(buf != NULL, buf_len = 4096)
2020-05-29 17:15:13 sbtwrite(buf != NULL, buf_len = 4096)
2020-05-29 17:15:13 sbtwrite(buf != NULL, buf_len = 4096)
2020-05-29 17:15:13 sbtwrite(buf != NULL, buf_len = 512)
2020-05-29 17:15:13 sbtclose()
2020-05-29 17:15:13 sbtinfo(!NULL)
file [db_rac_backup_trace_2020052903.meta] finished, name:[db_rac_backup_trace_2020052903.meta],created time:[2020-05-29 17:15:13],expirated time:[2105-12-31 23:59:59],label:[],comment:[]

2020-05-29 17:15:13 sbtend(del_flag=FALSE)

如果指定的TRACE文件已存在,服务器不会覆盖已存在的文件而是在已有文件基础上继续记录日志。