<!--[if !supportLists]-->1 <!--[endif]-->解决方案
―――――henrybai制作。
为克服RMAN兼容性的问题,利用现有备份机146(ORACLE9)备份所有需要备份的数据库(包括ORACLE9和ORACLE8)。根据上面的RMAN与目标库不兼容的结论及参考ORACLE官方文档,考虑在146的机器上同时安装两个版本的RMAN。根据ORACLE官方文档中描述的各个组件的兼容性得出:当RMAN的版本与目标库的版本相同的情况下,CATALOG无论建立在ORACLE9或是ORACLE8上都可以同时保存ORACLE8和ORACLE9的备份的元数据。这样做的实质只是将无论ORACLE8还是ORACLE9的备份元数据都可以保存在同一个ORACLE数据库。下面对上面的说法中包含的几种情况进行测试。
<!--[if !supportLists]-->1.1 <!--[endif]-->解决方案中包含的几种情况及具体的测试步骤:
在文档的前半部分我们针对RMAN与目标库版本和各种情况进行了测试。RMAN和目标库的版本经排列组合分为2X2有四种情况。在这部分中我们把CATALOG版本加进来,连同RMAN版本和目标库的版本,排列组合为2X2X2有八种情况。
<!--[if !supportLists]-->1.1.1 <!--[endif]-->RMAN8通过CATALOG8备份ORACLE8(一)
这种情况是各个组件的版本都是8的。我们不在这里详细讨论了。
<!--[if !supportLists]-->1.1.2 <!--[endif]-->RMAN8通过CATALOG9备份ORACLE8(二)
通过RMAN8连接到ORACLE9上
| 恢复管理器:版本<chsdate year="1899" month="12" day="30" islunardate="False" isrocdate="False" w:st="on"><span lang="EN-US">8.1.6</span></chsdate>.0.0 - Production RMAN>connect catalog rman/rman@ora146 RMAN-06008:连接到恢复目录数据库 |
连接目标库ORACLE8
| RMAN>connect target sys/sys@ora52 RMAN-06005:连接到目标数据库:ORA52 (DBID=507906251)
|
注册数据库到恢复目录中:
| RMAN>register database; RMAN-03022:正在编译命令:register RMAN-03023:正在执行命令:register RMAN-08006:注册在恢复目录中的数据库 RMAN-03023:正在执行命令:full resync RMAN-08002:正在启动全部恢复目录的 resync RMAN-08004:完成全部 resync |
建立脚本:
| RMAN>replace script weekly_full_backup 2> { 3> allocate channel t1 type disk; 4> backup incremental level=0 5> format 'e:/df52_lev0%s%p.%d' 6> database filesperset=10 7> include current controlfile; 8> release channel t1; 9> } RMAN-03022:正在编译命令:replace script RMAN-03023:正在执行命令:replace script RMAN-08086:已替换脚本 weekly_full_backup 执行脚本: |
运行备份脚本进行备份: | RMAN>run {execute script weekly_full_backup;} RMAN-03021:正在执行脚本:weekly_full_backup RMAN-03022:正在编译命令:allocate RMAN-03023:正在执行命令:allocate RMAN-08030:分配的通道:t1 RMAN-08500:通道 t1:sid=14 devtype=DISK RMAN-03022:正在编译命令:backup RMAN-03023:正在执行命令:backup RMAN-08008:通道 t1:正在启动 incremental level 0 数据文件备份集 RMAN-08502:set_count=4 set_stamp=595769560 creation_time=14-7月 -06 RMAN-08010:通道 t1:正在指定备份集中的数据文件 RMAN-08522:输入数据文件 fno=00001 name=D:/ORACLE/ORADATA/ORA52/SYSTEM01.DBF RMAN-08011:备份集中包括当前控制文件 RMAN-08522:输入数据文件 fno=00010 name=D:/RMAN.DBF RMAN-08522:输入数据文件 fno=00003 name=D:/ORACLE/ORADATA/ORA52/USERS01.DBF RMAN-08522:输入数据文件 fno=00006 name=D:/ORACLE/ORADATA/ORA52/INDX01.DBF RMAN-08522:输入数据文件 fno=00007 name=D:/ORACLE/ORADATA/ORA52/DR01.DBF RMAN-08013:通道 t1:已创建 1 段 RMAN-08503:段 handle=E:/DF52_LEV041.ORA52 comment=NONE RMAN-08525:备份集完成,经过时间:00:00:56 RMAN-08008:通道 t1:正在启动 incremental level 0 数据文件备份集 RMAN-08502:set_count=5 set_stamp=595769616 creation_time=14-7月 -06 RMAN-08010:通道 t1:正在指定备份集中的数据文件 RMAN-08522:输入数据文件 fno=00008 name=D:/ORACLE/ORADATA/ORA52/LI.DBF RMAN-08522:输入数据文件 fno=00009 name=D:/RMAN01.DBF RMAN-08522:输入数据文件 fno=00002 name=D:/ORACLE/ORADATA/ORA52/RBS01.DBF RMAN-08522:输入数据文件 fno=00004 name=D:/ORACLE/ORADATA/ORA52/TEMP01.DBF RMAN-08522:输入数据文件 fno=00005 name=D:/ORACLE/ORADATA/ORA52/TOOLS01.DBF RMAN-08013:通道 t1:已创建 1 段 RMAN-08503:段 handle=E:/DF52_LEV051.ORA52 comment=NONE RMAN-08525:备份集完成,经过时间:00:00:25 RMAN-03023:正在执行命令:partial resync RMAN-08003:启动部分恢复目录的 resync RMAN-08005:完成部分 resync
RMAN-03022:正在编译命令:release RMAN-03023:正在执行命令:release RMAN-08031:释放的通道:t1
|
测试结论: | 备份成功
|
<!--[if !supportLists]-->1.1.3 <!--[endif]-->RMAN9通过CATALOG8备份ORACLE9(三)
连接CATALOG8 | RMAN> connect catalog rman8/rman8@ORA52 连接到恢复目录数据库 PL/SQL 程序包RMAN8.DBMS_RCVCAT版本<chsdate year="1899" month="12" day="30" islunardate="False" isrocdate="False" w:st="on"><span lang="EN-US">08.01.06</span></chsdate> (RCVCAT数据库中) 太低
|
连接目标库ORACLE9 | RMAN> connect target sys/sys@ORA146 连接到目标数据库: ORA146 (DBID=260513952)
|
建立备份脚本:
| 建立脚本: RMAN> replace script weekly_full_backup 2> { 3> allocate channel t1 type disk; 4> backup incremental level=0 5> format 'e:/df52_lev0%s%p.%d' 6> database filesperset=10 7> include current controlfile; 8> release channel t1; 9> }
PL/SQL 程序包RMAN8.DBMS_RCVCAT版本<chsdate year="1899" month="12" day="30" islunardate="False" isrocdate="False" w:st="on"><span lang="EN-US">08.01.06</span></chsdate> (RCVCAT数据库中) 太低 PL/SQL 程序包RMAN8.DBMS_RCVCAT版本<chsdate year="1899" month="12" day="30" islunardate="False" isrocdate="False" w:st="on"><span lang="EN-US">08.01.06</span></chsdate> (RCVCAT数据库中) 太低 RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure of replace script command at 07/14/2006 10:14:11 RMAN-06429: RCVCAT database is not compatible with this version of RMAN |
升级CATALOG
| RMAN> UPGRADE CATALOG; 恢复目录所有者是RMAN8 再输入一次 UPGRADE CATALOG 命令来确认目录升级 RMAN> upgrade catalog; 恢复目录已升级到版本<chsdate year="1899" month="12" day="30" islunardate="False" isrocdate="False" w:st="on"><span lang="EN-US">09.02.00</span></chsdate> DBMS_RCVMAN 程序包升级为 <chsdate year="1899" month="12" day="30" islunardate="False" isrocdate="False" w:st="on">09.02.00</chsdate>版 DBMS_RCVCAT 程序包升级为 <chsdate year="1899" month="12" day="30" islunardate="False" isrocdate="False" w:st="on">09.02.00</chsdate>版 |
再创建备份脚本:
| RMAN> replace script weekly_full_backup 2> { 3> allocate channel t1 type disk; 4> backup incremental level=0 5> format 'e:/df52_lev0%s%p.%d' 6> database filesperset=10 7> include current controlfile; 8> release channel t1; 9> } 正在启动全部恢复目录的 resync 完成全部 resync 已替换脚本 weekly_full_backup |
运行脚本进行备份: | RMAN> run {execute script weekly_full_backup;} 正在执行脚本: weekly_full_backup 分配的通道: t1 通道 t1: sid=17 devtype=DISK 启动 backup 于 14-7月 -06 通道 t1: 正在启动 incremental level 0 数据文件备份集 通道 t1: 正在指定备份集中的数据文件 在备份集中包含当前的 SPFILE 备份集中包括当前控制文件 输入数据文件 fno=00001 name=F:/ORACLE/ORADATA/ORA146/SYSTEM01.DBF 输入数据文件 fno=00010 name=F:/ORACLE/ORADATA/ORA146/XDB01.DBF 输入数据文件 fno=00006 name=F:/ORACLE/ORADATA/ORA146/INDX01.DBF 输入数据文件 fno=00003 name=F:/ORACLE/ORADATA/ORA146/CWMLITE01.DBF 输入数据文件 fno=00008 name=F:/ORACLE/ORADATA/ORA146/TOOLS01.DBF 通道 t1: 正在启动段 1 于 14-7月 -06 通道 t1: 已完成段 1 于 14-7月 -06 段 handle=E:/DF52_LEV061.ORA146 comment=NONE 通道 t1: 备份集已完成, 经过时间:00:00:37 通道 t1: 正在启动 incremental level 0 数据文件备份集 通道 t1: 正在指定备份集中的数据文件 输入数据文件 fno=00002 name=F:/ORACLE/ORADATA/ORA146/UNDOTBS01.DBF 输入数据文件 fno=00005 name=F:/ORACLE/ORADATA/ORA146/EXAMPLE01.DBF 输入数据文件 fno=00011 name=F:/ORACLE/RMAN01.DBF 输入数据文件 fno=00009 name=F:/ORACLE/ORADATA/ORA146/USERS01.DBF 输入数据文件 fno=00004 name=F:/ORACLE/ORADATA/ORA146/DRSYS01.DBF 输入数据文件 fno=00007 name=F:/ORACLE/ORADATA/ORA146/ODM01.DBF 通道 t1: 正在启动段 1 于 14-7月 -06 通道 t1: 已完成段 1 于 14-7月 -06 段 handle=E:/DF52_LEV071.ORA146 comment=NONE 通道 t1: 备份集已完成, 经过时间:00:00:35 完成 backup 于 14-7月 -06 释放的通道: t1 |
测试结论: | 已经备份成功了。 |
<!--[if !supportLists]-->1.1.4 <!--[endif]-->RMAN9通过CATALOG9备份ORACLE9(四)
这种情况不在我们研究的范围之内。
<!--[if !supportLists]-->1.1.5 <!--[endif]-->RMAN8通过CATALOG9备份ORACLE9(五)
通过RMAN8连接到CATALOG9 | 恢复管理器:版本<chsdate year="1899" month="12" day="30" islunardate="False" isrocdate="False" w:st="on"><span lang="EN-US">8.1.6</span></chsdate>.0.0 - Production
RMAN>connect catalog rman/rman@ora146
RMAN-06008:连接到恢复目录数据库 |
连接目标库ORACLE9 | RMAN>connect target sys/sys@ora146
RMAN-06005:连接到目标数据库:ORA146 (DBID=260513952) |
建立备份脚本: | RMAN>replace script weekly_full_backup 2> { 3> allocate channel t1 type disk; 4> backup incremental level=0 5> format 'e:/df52_lev0%s%p.%d' 6> database filesperset=10 7> include current controlfile; 8> release channel t1; 9> }
RMAN-03022:正在编译命令:replace script RMAN-03023:正在执行命令:replace script RMAN-08086:已替换脚本 weekly_full_backup RMAN-10030:RPC 调用似乎无法在通道default上启动 RMAN-10036:在通道default上 RPC 调用成功 RMAN-03026:在释放通道资源时出现错误恢复 RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-07005: error during channel cleanup RMAN-07004: unhandled exception during command execution on channel default RMAN-10032: unhandled exception during execution of job step 1: ORA-04062: signa ture (属 package "SYS.DBMS_BACKUP_RESTORE") 已被更改 ORA-06512: at line 28 RMAN-10035: exception raised in RPC: ORA-04062: signature (属 package "SYS.DBMS_ BACKUP_RESTORE") 已被更改 RMAN-10031: ORA-4062 occurred during call to DBMS_BACKUP_RESTORE.DEVICESTATUS |
运行备份脚本: | RMAN>run {execute script weekly_full_backup;}
RMAN-03021:正在执行脚本:weekly_full_backup
RMAN-03022:正在编译命令:allocate RMAN-03023:正在执行命令:allocate RMAN-08030:分配的通道:t1 RMAN-08500:通道 t1:sid=14 devtype=DISK
RMAN-03022:正在编译命令:backup RMAN-03025:正在执行恢复目录的部分隐式重新同步 RMAN-03023:正在执行命令:partial resync RMAN-08003:启动部分恢复目录的 resync RMAN-08005:完成部分 resync RMAN-03023:正在执行命令:backup RMAN-08008:通道 t1:正在启动 incremental level 0 数据文件备份集 RMAN-08502:set_count=10 set_stamp=595778052 creation_time=14-7月 -06 RMAN-08010:通道 t1:正在指定备份集中的数据文件 RMAN-08522:输入数据文件 fno=00001 name=F:/ORACLE/ORADATA/ORA146/SYSTEM01.DBF RMAN-08011:备份集中包括当前控制文件 RMAN-08522:输入数据文件 fno=00010 name=F:/ORACLE/ORADATA/ORA146/XDB01.DBF RMAN-08522:输入数据文件 fno=00006 name=F:/ORACLE/ORADATA/ORA146/INDX01.DBF RMAN-08522:输入数据文件 fno=00003 name=F:/ORACLE/ORADATA/ORA146/CWMLITE01.DBF RMAN-08522:输入数据文件 fno=00008 name=F:/ORACLE/ORADATA/ORA146/TOOLS01.DBF RMAN-08013:通道 t1:已创建 1 段 RMAN-08503:段 handle=E:/DF52_LEV0101.ORA146 comment=NONE RMAN-08525:备份集完成,经过时间:00:00:36 RMAN-08008:通道 t1:正在启动 incremental level 0 数据文件备份集 RMAN-08502:set_count=11 set_stamp=595778088 creation_time=14-7月 -06 RMAN-08010:通道 t1:正在指定备份集中的数据文件 RMAN-08522:输入数据文件 fno=00002 name=F:/ORACLE/ORADATA/ORA146/UNDOTBS01.DBF RMAN-08522:输入数据文件 fno=00005 name=F:/ORACLE/ORADATA/ORA146/EXAMPLE01.DBF RMAN-08522:输入数据文件 fno=00011 name=F:/ORACLE/RMAN01.DBF RMAN-08522:输入数据文件 fno=00009 name=F:/ORACLE/ORADATA/ORA146/USERS01.DBF RMAN-08522:输入数据文件 fno=00004 name=F:/ORACLE/ORADATA/ORA146/DRSYS01.DBF RMAN-08522:输入数据文件 fno=00007 name=F:/ORACLE/ORADATA/ORA146/ODM01.DBF RMAN-08013:通道 t1:已创建 1 段 RMAN-08503:段 handle=E:/DF52_LEV0111.ORA146 comment=NONE RMAN-08525:备份集完成,经过时间:00:00:35 RMAN-03023:正在执行命令:partial resync RMAN-08003:启动部分恢复目录的 resync RMAN-08005:完成部分 resync
RMAN-03022:正在编译命令:release RMAN-03023:正在执行命令:release RMAN-08031:释放的通道:t1 RMAN-10030:RPC 调用似乎无法在通道default上启动 RMAN-10036:在通道default上 RPC 调用成功 RMAN-03026:在释放通道资源时出现错误恢复 RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-07005: error during channel cleanup RMAN-07004: unhandled exception during command execution on channel default RMAN-10032: unhandled exception during execution of job step 1: ORA-04062: signa ture (属 package "SYS.DBMS_BACKUP_RESTORE") 已被更改 ORA-06512: at line 28 RMAN-10035: exception raised in RPC: ORA-04062: signature (属 package "SYS.DBMS_ BACKUP_RESTORE") 已被更改 RMAN-10031: ORA-4062 occurred during call to DBMS_BACKUP_RESTORE.DEVICESTATUS |
测试结论: | 在建立脚本和运行脚本的过程中都产生了兼容性问题,都是在释放通道时报错。但备份的文件已经产生。能否好用还要对结果进行恢复测试。 |
<!--[if !supportLists]-->1.1.6 <!--[endif]-->RMAN8通过CATALOG8备份ORACLE9(六)
通过RMAN8连接到CATALOG8 | 恢复管理器:版本<chsdate year="1899" month="12" day="30" islunardate="False" isrocdate="False" w:st="on"><span style="" lang="FR">8.1.6</span></chsdate>.0.0 – Production RMAN>connect catalog rman8/rman8@ora52
RMAN-06008:连接到恢复目录数据库 |
连接到目标数据库ORACLE9 | RMAN>connect target sys/sys@ora146
RMAN-06005:连接到目标数据库:ORA146 (DBID=260513952) |
建立备份脚本: | RMAN>replace script weekly_full_backup 2> { 3> allocate channel t1 type disk; 4> backup incremental level=0 5> format 'e:/df52_lev0%s%p.%d' 6> database filesperset=10 7> include current controlfile; 8> release channel t1; 9> }
RMAN-03022:正在编译命令:replace script RMAN-03023:正在执行命令:replace script RMAN-08086:已替换脚本 weekly_full_backup RMAN-10030:RPC 调用似乎无法在通道default上启动 RMAN-10036:在通道default上 RPC 调用成功 RMAN-03026:在释放通道资源时出现错误恢复 RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-07005: error during channel cleanup RMAN-07004: unhandled exception during command execution on channel default RMAN-10032: unhandled exception during execution of job step 1: ORA-04062: signa ture (属 package "SYS.DBMS_BACKUP_RESTORE") 已被更改 ORA-06512: at line 28 RMAN-10035: exception raised in RPC: ORA-04062: signature (属 package "SYS.DBMS_ BACKUP_RESTORE") 已被更改 RMAN-10031: ORA-4062 occurred during call to DBMS_BACKUP_RESTORE.DEVICESTATUS |
运行备份脚本: | RMAN>run {execute script weekly_full_backup;}
RMAN-03021:正在执行脚本:weekly_full_backup
RMAN-03022:正在编译命令:allocate RMAN-03023:正在执行命令:allocate RMAN-08030:分配的通道:t1 RMAN-08500:通道 t1:sid=24 devtype=DISK
RMAN-03022:正在编译命令:backup RMAN-03025:正在执行恢复目录的部分隐式重新同步 RMAN-03023:正在执行命令:partial resync RMAN-08003:启动部分恢复目录的 resync RMAN-08005:完成部分 resync RMAN-03023:正在执行命令:backup RMAN-08008:通道 t1:正在启动 incremental level 0 数据文件备份集 RMAN-08502:set_count=12 set_stamp=595778761 creation_time=14-7月 -06 RMAN-08010:通道 t1:正在指定备份集中的数据文件 RMAN-08522:输入数据文件 fno=00001 name=F:/ORACLE/ORADATA/ORA146/SYSTEM01.DBF RMAN-08011:备份集中包括当前控制文件 RMAN-08522:输入数据文件 fno=00010 name=F:/ORACLE/ORADATA/ORA146/XDB01.DBF RMAN-08522:输入数据文件 fno=00006 name=F:/ORACLE/ORADATA/ORA146/INDX01.DBF RMAN-08522:输入数据文件 fno=00003 name=F:/ORACLE/ORADATA/ORA146/CWMLITE01.DBF RMAN-08522:输入数据文件 fno=00008 name=F:/ORACLE/ORADATA/ORA146/TOOLS01.DBF RMAN-08013:通道 t1:已创建 1 段 RMAN-08503:段 handle=E:/DF52_LEV0121.ORA146 comment=NONE RMAN-08525:备份集完成,经过时间:00:00:45 RMAN-08008:通道 t1:正在启动 incremental level 0 数据文件备份集 RMAN-08502:set_count=13 set_stamp=595778806 creation_time=14-7月 -06 RMAN-08010:通道 t1:正在指定备份集中的数据文件 RMAN-08522:输入数据文件 fno=00002 name=F:/ORACLE/ORADATA/ORA146/UNDOTBS01.DBF RMAN-08522:输入数据文件 fno=00005 name=F:/ORACLE/ORADATA/ORA146/EXAMPLE01.DBF RMAN-08522:输入数据文件 fno=00011 name=F:/ORACLE/RMAN01.DBF RMAN-08522:输入数据文件 fno=00009 name=F:/ORACLE/ORADATA/ORA146/USERS01.DBF RMAN-08522:输入数据文件 fno=00004 name=F:/ORACLE/ORADATA/ORA146/DRSYS01.DBF RMAN-08522:输入数据文件 fno=00007 name=F:/ORACLE/ORADATA/ORA146/ODM01.DBF RMAN-08013:通道 t1:已创建 1 段 RMAN-08503:段 handle=E:/DF52_LEV0131.ORA146 comment=NONE RMAN-08525:备份集完成,经过时间:00:00:35 RMAN-03023:正在执行命令:partial resync RMAN-08003:启动部分恢复目录的 resync RMAN-08005:完成部分 resync
RMAN-03022:正在编译命令:release RMAN-03023:正在执行命令:release RMAN-08031:释放的通道:t1 RMAN-10030:RPC 调用似乎无法在通道default上启动 RMAN-10036:在通道default上 RPC 调用成功 RMAN-03026:在释放通道资源时出现错误恢复 RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-07005: error during channel cleanup RMAN-07004: unhandled exception during command execution on channel default RMAN-10032: unhandled exception during execution of job step 1: ORA-04062: signa ture (属 package "SYS.DBMS_BACKUP_RESTORE") 已被更改 ORA-06512: at line 28 RMAN-10035: exception raised in RPC: ORA-04062: signature (属 package "SYS.DBMS_ BACKUP_RESTORE") 已被更改 RMAN-10031: ORA-4062 occurred during call to DBMS_BACKUP_RESTORE.DEVICESTATUS |
测试结论: | 在建立脚本和运行脚本的过程中都产生了兼容性问题,都是在释放通道时报错。但备份的文件已经产生。能否好用还要对结果进行恢复测试。 |
<!--[if !supportLists]-->1.1.7 <!--[endif]-->RMAN9通过CATALOG9备份ORACLE8(七)
通过RMAN9连接到CATALOG9 | 恢复管理器: 版本<chsdate year="1899" month="12" day="30" islunardate="False" isrocdate="False" w:st="on"><span lang="EN-US">9.2.0</span></chsdate>.1.0 - Production
Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved.
RMAN> connect catalog rman/rman@ora146
连接到恢复目录数据库
|
连接目标库oracle8 | RMAN> connect targer sys/sys@ora52 RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-00558: error encountered while parsing input commands RMAN-01005: syntax error: found "identifier": expecting one of: "auxiliary, cata log, clone, rcvcat, target" RMAN-01008: the bad identifier was: targer RMAN-01007: at line 1 column 9 file: standard input
RMAN> connect target sys/sys@ORA52
恢复管理器同TARGET数据库不兼容: 要求 RMAN <chsdate year="1899" month="12" day="30" islunardate="False" isrocdate="False" w:st="on">8.0.4</chsdate>到 8.1.6 RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-06429: TARGET database is not compatible with this version of RMAN
|
测试结论: | 产生兼容性问题。 |
<!--[if !supportLists]-->1.1.8 <!--[endif]-->RMAN9通过CATALOG8备份ORACLE8(八)
通过RMAN9连接到CATALOG8 | 恢复管理器: 版本<chsdate year="1899" month="12" day="30" islunardate="False" isrocdate="False" w:st="on"><span lang="EN-US">9.2.0</span></chsdate>.1.0 - Production
Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved.
RMAN> connect catalog rman8/rman8@ora52
连接到恢复目录数据库
|
连接到目标库ORACLE8 | RMAN> connect target sys/sys@ORA52 恢复管理器同TARGET数据库不兼容: 要求 RMAN <chsdate year="1899" month="12" day="30" islunardate="False" isrocdate="False" w:st="on">8.0.4</chsdate>到 8.1.6 RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-06429: TARGET database is not compatible with this version of RMAN
|
<!--[if !supportLists]-->1.2 <!--[endif]-->解决方案的分析
为了对版本兼容性进行全面考查,我们把CATALOG版本连同RMAN版本和目标库的版本,排列组合为2X2X2有八种情况。下面对这八种情况进行分析。
<!--[if !supportLists]-->一、 <!--[endif]-->第一种和第四种不在我们研究的范围之内,是相同版本之间的备份。
<!--[if !supportLists]-->二、 <!--[endif]-->第七种和第八种是版本不兼容根本无法连接的情况,我们无法继续。
<!--[if !supportLists]-->三、 <!--[endif]-->第二种和第三种情况都是RMAN的版本和目标库的版本相同的情况。与前半部分惟一的不同只是保存备份元数据的CATALOG版本换了一下。并不能说是8和9之间可以互相备份了。
<!--[if !supportLists]-->四、 <!--[endif]-->第五种和第六情况是有可能实现想要得到的结果的。虽然在完成备份时产生的兼容性错误但备份文件还是产生的。下面对数据库的恢复做进一步测试,如果能通过。则基本可以满足需求。
<!--[if !supportLists]-->1.3 <!--[endif]-->恢复测试
对上面的第五种和第六种情况进行恢复性测试:
登录到SQL PLUS
| <place w:st="on"><state w:st="on"><span lang="EN-US">Conn</span></state></place> sys/sys@ora146 as sysdba |
建立一条数据: | SQL> create table a(cola int);
表已创建。
SQL> insert into a values(1);
已创建 1 行。
SQL> select * from a;
COLA ---------- 1 |
执行备份: | run {execute script weekly_full_backup;}
|
在SQLPLUS中删除数据: | SQL> truncate table a;
表已截掉。
SQL> select * from a;
未选定行 |
使用数据库的维护命令: | RMAN>list backup ;
RMAN-03022:正在编译命令:list RMAN-03026:在释放通道资源时出现错误恢复 RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure during compilation of command RMAN-03013: command type: list RMAN-03014: implicit resync of recovery catalog failed RMAN-06003: ORACLE error from target database: ORA-03127: 在活动操作结束之前不允 许进行新的操作 RMAN-06097: text of failing SQL statement: select DECODE(status,'OPEN',1,0) into :b1 from V$INSTANCE RMAN-06099: error occurred in source file: krmk.pc, line: 19843 |
关闭数据库 | SQL> shutdown immediate; 数据库已经关闭。 已经卸载数据库。 ORACLE 例程已经关闭。 |
删除所有数据库文件。 | <place w:st="on"><state w:st="on"><span lang="EN-US">Del</span></state></place> *.dbf |
用RMAN8为目标数据库oracle9进行恢复(启动到MOUNT状态下出错。) | 恢复管理器:版本<chsdate year="1899" month="12" day="30" islunardate="False" isrocdate="False" w:st="on"><span lang="EN-US">8.1.6</span></chsdate>.0.0 - Production
RMAN>connect catalog rman8/rman8@ora52
RMAN-06008:连接到恢复目录数据库
RMAN>connect target sys/sys@ora146
RMAN-06193:已连接到目标数据库 (未启动)
RMAN>startup force mount
RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-04014: startup failed: ORA-01078: 处理系统参数失败 |
通过SQLPLUS启动到MOUNT状态 | SQL> startup mount; ORACLE 例程已经启动。
Total System Global Area 135338868 bytes Fixed Size 453492 bytes Variable Size 109051904 bytes Database Buffers 25165824 bytes Redo Buffers 667648 bytes 数据库装载完毕。 |
再用RMAN8为目标数据库oracle9进行恢复 | RMAN>allocate channel for maintenance type disk;
RMAN-03022:正在编译命令:allocate RMAN-03023:正在执行命令:allocate RMAN-08030:分配的通道:delete RMAN-08500:通道 delete:sid=12 devtype=DISK
RMAN>run{ 2> restore database; 3> recover database; 4> }
RMAN-03022:正在编译命令:restore
RMAN-03022:正在编译命令:IRESTORE RMAN-03026:在释放通道资源时出现错误恢复 RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure during compilation of command RMAN-03013: command type: restore RMAN-03002: failure during compilation of command RMAN-03013: command type: IRESTORE RMAN-06003: ORACLE error from target database: ORA-01843: 无效的月份 RMAN-06097: text of failing SQL statement: select decode(bitand(festa,(4096+128) ),128,fecps,4096,fecps,0) ,decode(bitand(festa,(4096+128)),128,281474976710655,4 096,controlfile_change#,0) ,decode(bitand(festa,(4096+128)),128,SYSDATE,4096,con trolfile_time,to_date('JAN 01 1988','MON DD YYYY')) ,feofs ,feonc_scn ,to_date(n vl(feonc_tim,'01/01/88 00:01:01'),'MM/DD/RR HH24:MI:SS') into :b1,:b2,:b3,:b4,:b 5,:b6 from x$kccfe ,v$database where (fenum=:b7 and fedup=1) RMAN-06099: error occurred in source file: krmk.pc, line: 21652 |
测试结论: | 在恢复过程中有一些命令不好用了。如备份文件的维护命令。还有一些命令出现莫名其妙的错误。导致利用备份文件不能恢复数据库。
|
<!--[if !supportLists]-->1.4 <!--[endif]-->解决方案的结论
到目前为止,可以得出结论:第二种和第三种情况都是RMAN的版本和目标库的版本相同的情况。与前半部分惟一的不同只是保存备份元数据的CATALOG版本换了一下。可能目前许多关于RMAN可以在ORACLE8和ORACLE9之间互相备份就是说的这一种吧。但这种的实质只是保存元数据的库的兼容,并不能说是8和9之间可以互相备份了。
<!--[if !supportLists]-->1.5 <!--[endif]-->复杂备份环境的建议
针对于即有ORACLE8又有ORACLE9的复杂备份环境,建议采用第二种和第三种情况。虽然这两种情况都是RMAN的版本和目标库的版本相同情况的备份但可以将需要备份的元数据放在一个CATALOG库中。这样维护起来也可以方便一些。为了保证RMAN可执行程序的版本与目标库的备份一致,要在备份机上同时安装RMAN8和RMAN9的可执行程序。利用RMAN8的可执行程序备份ORACLE8的目标库,利用RMAN9的可执行程序备份ORACLE9的数据库。