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.
Proudly powered by WordPress | Indrajeet by Sus Hill.