本文永久地址:https://www.askmac.cn/archives/oracle-8i-备份恢复(recovery-manager).html
说明
Recovery Manager(RMAN)是从Oracle8 R8.0之后追加的管理oracle数据库备份/储存/恢复的工具。在此,我将解说oracle8i的RMAN中扩展的新功能。
- RMAN基本功能的扩展
- 媒介管理软件相关功能的扩展
- OPS相关功能的扩展
在此对于RMAN命令的详细语法方面的内容,请参考《Oracle8i备份、恢复指南》
RMAN基本功能的扩展
1-1.复制备份set
考虑到Oracle的备份时,类似于归档日志以及控制文件的案例,某个备份受损可能造成毁灭性的故障。Oracle8i的RMAN中,可以一次制成多个类似的的备份。因此,在存储时某个备份无法使用的话,用于其他备份就OK了。
为了制成多个备份,需要通过RMAN命令的SET DUPLEX命令来指定复制数,执行备份。SET DUPLEX命令如下所示。
SET DUPLEX = {ON|OFF|1|2|3|4};
关键词ON意味着指定为2 。DUPLEX最多可以制成4个拷贝。以下是使用SET DUPLEX命令的范例。
RUN {
SET DUPLEX =2;
ALLOCATE CHANNEL ch1 TYPE ‘sbt_tape’;
BACKUP
FORMAT ‘arc_%s_%p_%c’ FILESPERSET 1
ARCHIVELOG ALL DELETE INPUT;
RELEASE CHANNEL ch1;
}
SET DUPLEX命令需要比分配channel(ALLOCATE CHANNEL命令)更早执行。另外,执行SET DUPLEX命令后,在分配到的所有channel中执行备份复制。
在制成tape装置的备份是,需要指定初始化参数BACKUP_TAPE_IO_SLAVES = TRUE。
执行复制备份时,用指定备份名的FORMAT句,可以用替换字符串“%”来指定。在上述例子中,可以用替换字符串“%”来指定。在上述例子中,备份set编号为10,备份piece为1时制成 ‘arc_10_1_1’、‘arc_10_1_2’两个备份。
通过RMAN制成克隆数据库
Oracle8i的RMAN中,使用RMAN的备份,在远程主机或本地主机中,制成数据库的拷贝(克隆数据库)。因为克隆数据库与真正的数据库结构完全相同,所以并不会对正式环境的数据库产生影响。可以作为测试专用数据库。
左:正式数据库、克隆数据库、制成克隆数据库 本地主机
右:克隆数据库、远程主机
通过RMAN制成克隆数据库是,以下操作可以使用RMAN完成。
- 克隆数据库中所使用的数据库文件的还原。在远程主机中制成克隆数据库时,是经过Net8来传送文件,还原文件的。
- 直到执行命令时,需要执行应用了REDO的不完整恢复
- 启动指定不完整恢复之后的RESETLOGS选项的数据库
- 对新数据库重命名
- 制成控制文件
通过RMAN制成克隆数据库时,伴随着指定了RESETLOGS的数据库的启动,就无法在制成stand by数据库时使用。
以下命令是远程主机制成克隆数据库的例子。为了完成这个操作,需要实现在远程主机中进行以下操作。
- 收集远程主机中的ora参数文件拷贝
- 设定需要连接远程主机的net8
- 编辑ora、tnsnames.ora
- 启动listener
完成这些设定之后,请使用以下命令来制成克隆数据库。下例是通过Net8连接描述符来指定在本地设备中的克隆数据库,制成远程主机中的克隆数据库。
# 启动RMAN,这时请指定克隆数据库的连接描述符。 %rman connect target / auxiliary sys/passwd@clonedb catalog rman/rman/@rcat # 以下是制成克隆数据库的RMAN命令。 RMAN>STARTUP NOMOUNT; RMAN> RUN{ 2> ALLOCATE AUXILIARY CHANNEL ch1 TYPE DISK; 3> DUPLICATE TARGET DATABASE TO CLONEDB 4> LOGFILE ‘/Oracle/dbs/log1.f’ SIZE 200K, 5> ‘/Oracle/dbs/log2.f’ SIZE 200K 6> NOFILECHECK; 7> }
DUPLICATE命令中,需要原数据库与克隆数据库中所使用的数据库文件名不重复。因此,在同样的目录结构中,在远程主机中制成克隆数据库时,需要设置为指定NOFILECHECK选项而不执行这个检查。
具体的克隆数据库制作顺序请参考《执行例与结果》。
通过RMAN来制成克隆数据库的详细内容请参考「Oracle8i备份、恢复指南」。
启动/关闭数据库
Oracle8 R8.0中为了对数据库进行冷备份以及恢复,需要启动、关闭数据库时,需要使用Server Manager执行这些操作。因此通过RMAN来执行修复时,就会组合SVRMGR与RMAN来一起使用。一些脚本由此就会变得复杂。
在Oracle8i的RMAN中,作为RMAN的组合命令支撑数据库的STARTUP、SHUTDOWN、ALTER DATABASE命令。由此就可以仅凭RMAN启动、关闭数据库。
追加命令 | 功能 |
STARTUP … | 启动数据库。可以指定SQL*Plus的STARTUP命令以及同样的选项。 |
SHUTDOWN … | 关闭数据库。可以指定SQL*Plus的SHUTDOWN命令以及相关选项。 |
ALTER DATABASE … | 将数据库从MOUNT状态变更为OPEN状况。 |
在以下RMAN命令中,获得启动中终止的数据库的冷备份。重启数据库。
SHUTDOWN IMMEDIATE; STARTUP MOUNT; RUN{ ALLOCATE CHANNEL ch1 TYPE 'SBT_TAPE'; BACKUP FORMAT 'db_%s_%p' (DATABASE); } ALTER DATABASE OPEN;
扩展LIST命令
LIST命令是展示至今为止获得的备份的信息的命令。Oracle8i的RMAN中,LIST命令已经被扩展为执行时会展示各自的备份片的名称、所有的数据文件的名称,控制文件信息等。以下是展示表区域bo1的备份set的一览的例子。
RMAN> LIST BACKUPSET OF TABLESPACE bol; RMAN-03022: compiling command: list List of Backup Sets Key Recid Stamp LV Set Stamp Set Count Completion Time ------- ---------- ---------- -- ---------- ---------- ---------------------- 1 1 365975325 0 365975324 2 20-APR-99 List of Backup Pieces Key Pc# Cp# Status Completion Time Piece Name ------- --- --- ----------- ---------------------- ----------------------- 2 1 2 AVAILABLE 20-APR-99 /bkup/bol_02at0los_1_2 1 1 1 AVAILABLE 20-APR-99 /bkup/bol_02at0los_1_1 List of Datafiles Included File Name LV Type Ckp SCN Ckp Time ---- ------------------------------------- -- ---- ---------- ------------ 4 /oradata/je815/dbs/bolje815.dbf 0 Full 578102 20-APR-99
LIST命令中,仅会展示备份的统计数据的平均值。展示deleted、unavailable状态的备份信息时,请使用LIST ALL … 命令。
通过RMAN制成、更新恢复目录
Oracle8 R8.0中,需要使用SQL*Plus来制成、更新、删除、储存RMAN使用的信息的恢复目录的脚本。
Oracle8i中,变更为将这些操作作为RMAN的命令来执行了。这些命令是用RMAN启动时的选项RCVCAT来指定的,对于用户的架构来执行的。
追加命令 | 功能 |
CREATE CATALOG | 制成现在连接的架构中的恢复目录。可以用TABLESPACE语句来指定制成目录的表区域。 |
UPDATE CATALOG | 连接到旧版本的目录时,执行目录的更新。UPDATE CATALOG命令为了确认,连续执行两次,于是就会进行更新。 |
DROP CATALOG | 删除现在连接的架构中的目录。
DROP CATALOG命令连续执行两次时,就会删除目录。 |
执行对于目录的操作的用户,需要重新赋予RECOVERY_CATALOG_OWNER权限。
另外,Oracle8i中为了制成目录,而附属为SQL的脚本catrman.sql。必须要用到RMAN的CREATE CATALOG命令。
以下的命令是执行目录更新的例子。
RMAN> UPGRADE CATALOG RMAN-06435: recovery catalog owner is rman RMAN-06442: enter UPGRADE CATALOG command again to confirm catalog upgrade RMAN> UPGRADE CATALOG RMAN-06408: recovery catalog upgraded to version 08.01.05
媒介管理软件相关功能的扩展
2-1. 恢复目录以及媒介管理软件目录的项目检查
使用RMAN中的tape装置,执行备份时,oracle并不需要媒介管理软件。因为一般媒介管理软件中,是通过目录来管理tape的,作为系统来考虑时,就会存在RMAN以及媒介管理软件两个目录。
Oracle8 R8.0的RMAN需要用户管理两个目录的同步。比如重新使用(覆盖)媒介管理软件中的tape时,RMAN的目录中包含这些tape的备份信息就会被留下。因此,用户使用RMAN的目录管理命令,需要从恢复目录中删除这些备份信息。
Oracle8i的RMAN,就会执行恢复目录以及媒介管理软件中的目录同步命令。
追加命令 | 功能 |
ALLOCATE CHANNEL …
FOR MAINTENANCE ; |
为了执行目录维护,需要分配将要使用的channel。以下展示的命令在执行前,需要用这个命令来分配channel。 |
CROSSCHECK … ;
CHANGE… CROSSCHECK ; |
这些命令用于确认指定的备份是否存在(可以从RMAN进行访问)。执行命令时,RMAN无法访问备份的话,那个备份就会被标记以及EXPIRED ,被判断为无效。这个备份可以用LIST命令以及REPORT命令来确认。 |
以下是使用CROSSCHECK命令的脚本例。
ALLOCATE CHANNEL FOR MAINTENANCE TYPE ‘sbt_tape’;
CROSSCHECK BACKUPSET OF “/Oracle/dbs/tbs_8.f”;
没有连接恢复目录时,无法使用CROSSCHECK命令。这时,请使用CHANGE … CROSSCHECK命令。CHANGE … CROSSCHECK命令没有连接恢复目录时,也可以通过控制文件中的信息以及每集管理软件的信息来进行交互检测。
EXPIRED以及被标记的备份,可以在执行下次的CHANGE … CROSSCHECK命令时,访问备份时,会被标记为AVAILABLE。类似的功能就不会再用CROSSCHECK命令来执行。这是为了确认CROSSCHECK命令是否将状态变为AVAILABE。
CROSSCHECK命令,CHANGE … CROSSCHECK命令中,需要检测是否可以访问。因此,检测备份破损时,请使用VALIDATE命令。
2-2. 使用了媒介管理软件的固有的功能的数据库备份
(PROXY COPY)
使用Oracle8 R8.0的RMAN获得的备份,对数据文件的I/O,是由oracle的服务器进程来执行。因此媒介管理软件会执行oracle的服务器进程以及数据流的对策。
Oracle8i中媒介管理软件以及接口中,媒介管理软件自身对于数据库的文件追加了执行I/O的API。通过使用API,使用媒介管理软件的固有功能,就可以高速执行备份以及还原。Oracle中这个功能称为PROXY COPY。
通过这个API执行备份时,oracle将对象变更为备份模式之后,将包含在对象中的文件列表移交给媒介管理软件。媒介管理软件根据被移交的列表,使用各个公司自带的功能来启动数据库。
媒介管理软件对应PROXY COPY功能时,执行备份命令时,通过指定PRXY语句,可以执行使用了媒介管理软件固有功能的备份。
RUN{ ALLOCATE CHANNEL ch1 TYPE ‘SBT_TAPE’; BACKUP PROXY (TABLESPACE SYSTEM FORMAT ‘system_%s_%p’); }
为了使用PROXY COPY功能需要对应PROXY COPY的媒介管理软件。不对应PROXY COPY时,指定PROXY语句时也可以通过API来执行备份。但是PROXY COPY功能无法使用时就会报错。
指定备份池
在大部分的内存管理软件中,可以在tape装置以及那个装置中使用的tape组作为“池”的概念来管理。换言之,各个tape装置以及tape装置都属于某个池,对其备份时进行选择时,可以选择想使用的tape装置以及tape。
Oracle8 R8.0中,因为可以在备份时选择池,媒介管理软件所参考的环境变量中,采取重新指定池的方法以及指定RMAN的ALLOCATE CHANNEL命令PARMS语句中的环境变量的方法。
Oracle8i中通过RMAN的BACKUP命令,可以直接指定池。通过BACKUP命令的POOL语句可以指定对应数字进行设定。
RUN{ ALLOCATE CHANNEL ch1 TYPE ‘SBT_TAPE’; BACKUP POOL 2 (TABLESPACE SYSTEM FORMAT ‘system_%S_%P’); }
能否使用POOL语句来指定依赖于媒介管理软件。详细内容请参考媒介管理软件手册。
3. Oracle Prallel Server(OPS)相关的功能扩展
备份时的磁盘亲和性(Disk Affinity)以及分散负荷
MPP结构的OPS中,因为会连接到各个设备的各个磁盘中,访问速度并不是相等的。因此,为了使得各个设备中的磁盘I/O最优化,需要尽可能对连接到本地的设备执行I/O。
Oracle8 R8.0的OPS环境中,使用RMAN执行备份时,为了执行磁盘I/O的最优化,重要的是,在用户端中对各个文件分割合适的节点的channel(执行备份的服务器进程)。以下是RMAN的命令例,在由4个节点构成的OPS环境中,对各节点连接到本地设备上的数据文件进行备份。
RUN{ ALLOCATE CHANNEL ch1 TYPE ‘SBT_TAPE’ CONNECT ‘sys/passwd@NODE1’; ALLOCATE CHANNEL ch2 TYPE ‘SBT_TAPE’ CONNECT ‘sys/passwd@NODE2’; ALLOCATE CHANNEL ch3 TYPE ‘SBT_TAPE’ CONNECT ‘sys/passwd@NODE3’; ALLOCATE CHANNEL ch4 TYPE ‘SBT_TAPE’ CONNECT ‘sys/passwd@NODE4’; BACKUP FILESPERSET 1 FORMAT ‘DBFILE_%s_%p’ (DATAFILE ‘/dev/rdsk/lv1’ CHANNEL ch1) (DATAFILE ‘/dev/rdsk/lv2’ CHANNEL ch2) (DATAFILE ‘/dev/rdsk/lv3’ CHANNEL ch3) (DATAFILE ‘/dev/rdsk/lv4’ CHANNEL ch4); }
Oracle8i的RMAN中,在执行备份时,以设备亲和性为基础,对备份对象数据文件进行集群化(group化)这时,备份对象的数据文件所属的节点中如果分配到channel的话,通过channel就可以进行备份。节点中没有分配到channel时,节点用于的数据文件,特别是不需要考虑到亲和性。对于可以使用的channel依次分配,执行备份。
以下的例子是设备亲和性有效的环境中,对之前页面的列表执行相同的备份的命令的例子。(数据文件 /dev/rdsk/lv1 ~ lv4包含于表领域tbs1中的情况)
RUN{ ALLOCATE CHANNEL ch1 TYPE ‘SBT_TAPE’ CONNECT ‘sys/passwd@NODE1’; ALLOCATE CHANNEL ch2 TYPE ‘SBT_TAPE’ CONNECT ‘sys/passwd@NODE2’; ALLOCATE CHANNEL ch3 TYPE ‘SBT_TAPE’ CONNECT ‘sys/passwd@NODE3’; ALLOCATE CHANNEL ch4 TYPE ‘SBT_TAPE’ CONNECT ‘sys/passwd@NODE4’; BACKUP FORMAT ‘tbs1_%s_%p’ FILESPERSET 1 (TABLESPACE tbs1); }
另外在磁盘亲和性有效的环境中,指定包含在备份set中的磁盘数的最小值,可以对磁盘进行数据分散。这个设定可以通过指定RMAN的BACKUP命令中的DISKRATIO参数来设定。(在DISKRATIO参数中指定整数)
RUN{ ALLOCATE CHANNEL ch1 TYPE ‘SBT_TAPE’ CONNECT ‘sys/passwd@NODE1’; ALLOCATE CHANNEL ch2 TYPE ‘SBT_TAPE’ CONNECT ‘sys/passwd@NODE2’; ALLOCATE CHANNEL ch3 TYPE ‘SBT_TAPE’ CONNECT ‘sys/passwd@NODE3’; ALLOCATE CHANNEL ch4 TYPE ‘SBT_TAPE’ CONNECT ‘sys/passwd@NODE4’; BACKUP FORMAT ‘%d_%s_%p’ DISKRATIO 3 (DATABASE); }
在DISKRATIO中指定整数n时,各个备份set中所包含的数据文件的总计块数为了不超过n分之一,对各个数执行数据文件分割。
比如DISKRATIO指定为3时,就会如此调整备份set:对一个备份set,从一个备份set从一个磁盘读入的块数,就会小于整体块数的三分之一。(被分散到4个磁盘中)。
这是考虑到磁盘的亲和性的备份,支持MPP平台固有功能。您如果想查看自己使用的平台是否支持磁盘亲和性的话,请参考各个平台的管理者手册。
Oracle8i的OPS中不会考虑磁盘亲和性,日志归档以及复制数据文件的备份时,不会考虑到Load Balancing。
Comment