Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2573867
  • 博文数量: 323
  • 博客积分: 10211
  • 博客等级: 上将
  • 技术积分: 4934
  • 用 户 组: 普通用户
  • 注册时间: 2006-08-27 14:56
文章分类

全部博文(323)

文章存档

2012年(5)

2011年(3)

2010年(6)

2009年(140)

2008年(169)

分类: Oracle

2009-03-10 09:38:34

原机:  OS:XP   oracle:10.2.0.1.0
异机:  OS:XP   oracle:10.2.0.3.0
目的:利用原机的rman备份集将原库恢复到异机。
 
1.全备份数据库(rman)
备份脚本如下:
# start backup database
run {
allocate channel c1 type disk;
backup format 'E:\oracle\rman_backup\full%u_%s_%p' database
plus archivelog format 'E:\oracle\rman_backup\archive_%d_%T_%s' delete all input;
release channel c1;
}
# end

2.在异机的操作。

异机的oracle软件安装目录跟原机一样。
ORACLE_BASE=C:\oracle\product\10.2.0
ORACLE_HOME=C:\oracle\product\10.2.0\db_1

设置环境变量ORACLE_SID=orasjh
set ORACLE_SID=orasjh
验证:set ORACLE_SID

创建和原数据库相同的目录结构:
E:\oracle\orasjh  --存放数据库的数据文件,日志文件,控制文件。
E:\oracle\orasjh\archive  --存放归档日志。
C:\oracle\product\10.2.0\admin\orasjh   --audmp,bdump等目录的路径。
C:\oracle\product\10.2.0\db_1\database  --密码文件,初始化参数的位置。
E:\oracle\rman_backup  --rman备份存放的地方。
配置监听器,本地服务名(主要编辑listener.ora,tnsnames.ora文件)
创建密码文件,工具orapwd:
C:\oracle\product\10.2.0\db_1\database>orapwd file=PWDorasjh.ora password=sys entries=5
 
3.在原机的操作
 
复制原数据库的spfile到异机。
从RMAN中恢复控制文件:
C:\>rman catalog target
恢复管理器: Release 10.2.0.1.0 - Production on 星期二 3月 3 14:55:24 2009
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
连接到目标数据库: ORASJH (DBID=2615173674)
连接到恢复目录数据库
RMAN> list backup of controlfile;

备份集列表
===================
BS 关键字  类型 LV 大小       设备类型 经过时间 完成时间
------- ---- -- ---------- ----------- ------------ ----------
297     Full    6.80M      DISK        00:00:03     02-3月 -09
        BP 关键字: 300   状态: AVAILABLE  已压缩: NO  标记: TAG20090302T170100
段名:E:\ORACLE\RMAN_BACKUP\FULL06K8U104_6_1
  包括的控制文件: Ckp SCN: 344003       Ckp 时间: 02-3月 -09
RMAN> restore controlfile to 'e:\oracle\control.ctl' from 'E:\ORACLE\RMAN_BACKUP
\FULL06K8U104_6_1';
启动 restore 于 03-3月 -09
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=158 devtype=DISK
通道 ORA_DISK_1: 正在复原控制文件
通道 ORA_DISK_1: 恢复完成, 用时: 00:00:02
完成 restore 于 03-3月 -09
RMAN> restore spfile to 'e:\oracle\rman_backup\spfile.bak' from autobackup;
启动 restore 于 09-3月 -09
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 寻找以下日期的自动备份: 20090309
通道 ORA_DISK_1: 已找到的自动备份: c-2615173674-20090309-00
通道 ORA_DISK_1: 从自动备份复原 SPFILE 已完成
完成 restore 于 09-3月 -09
RMAN> restore archivelog sequence 235;
启动 restore 于 09-3月 -09
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 正在启动到默认目标的存档日志恢复
通道 ORA_DISK_1: 正在恢复存档日志
存档日志线程 =1 序列=235
通道 ORA_DISK_1: 正在读取备份段 E:\ORACLE\RMAN_BACKUP\ARCHIVE_ORASJH_20090309_10
通道 ORA_DISK_1: 已恢复备份段 1
段句柄 = E:\ORACLE\RMAN_BACKUP\ARCHIVE_ORASJH_20090309_10 标记 = TAG20090309T145
408
通道 ORA_DISK_1: 恢复完成, 用时: 00:00:02
完成 restore 于 09-3月 -09
 
--将原机的e:\oracle\control.ctl复制到异机的相同目录,复制成三个镜像的控制文件:CONTROL01.CTL CONTROL02.CTL CONTROL03.CTL。同时将spfile.bak,备份期间的归档日志也copy到异机,并正确的改名。将全备后的备份文件(备份集)复制到异机,这里是E:\oracle\rman_backup。
 
--修改原机的tnsname.ora使orasjh的host指向异机的IP地址(192.168.10.150):
ORASJH =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.150)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = orasjh)
    )
  )
 
4.在异机打开数据库
 
在异机打开数据库,只能到mount状态,open时报错。很正常,数据文件都还没有了。
 
5.在原机用RMAN进行恢复

--在原机启动RMAN开始恢复:
E:\oracle\rman_scripts>rman catalog target
恢复管理器: Release 10.2.0.1.0 - Production on 星期一 3月 9 17:06:40 2009
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
已连接到目标数据库: ORASJH (DBID=2615173674, 未打开) --这时连接的目标库是异机上的。
连接到恢复目录数据库
RMAN> restore database;
启动 restore 于 09-3月 -09
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=155 devtype=DISK
通道 ORA_DISK_1: 正在开始恢复数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集恢复的数据文件
正将数据文件00001恢复到E:\ORACLE\ORASJH\SYSTEM01.DBF
正将数据文件00002恢复到E:\ORACLE\ORASJH\UNDOTBS01.DBF
正将数据文件00003恢复到E:\ORACLE\ORASJH\SYSAUX01.DBF
正将数据文件00004恢复到E:\ORACLE\ORASJH\USERS01.DBF
通道 ORA_DISK_1: 正在读取备份段 E:\ORACLE\RMAN_BACKUP\FULL09K9G827_9_1
通道 ORA_DISK_1: 已恢复备份段 1
段句柄 = E:\ORACLE\RMAN_BACKUP\FULL09K9G827_9_1 标记 = TAG20090309T145255
通道 ORA_DISK_1: 恢复完成, 用时: 00:01:05
完成 restore 于 09-3月 -09

RMAN> recover database;
启动 recover 于 09-3月 -09
使用通道 ORA_DISK_1
正在开始介质的恢复
存档日志线程 1 序列 235 已作为文件 E:\ORACLE\ORASJH\ARCHIVE\ARC00235_0679223338.
001 存在于磁盘上  
--备份期间的归档应用上了。
 
6.在异机上的最后处理

--在异机的SQL*PLUS中用resetlogs打开数据库:
SQL> alter database open resetlogs;
alter database open resetlogs
*
第 1 行出现错误:
ORA-01092: ORACLE 实例终止。强制断开连接

--查看告警日志如下:
ORA-00704: 引导程序进程失败
ORA-39700: 必须用 UPGRADE 选项打开数据库
Mon Mar 09 17:08:41 2009
Error 704 happened during db open, shutting down database
USER: terminating instance due to error 704
ARC1 started with pid=18, OS id=3252
Mon Mar 09 17:08:42 2009
Errors in file c:\oracle\product\10.2.0\admin\orasjh\bdump\orasjh_lgwr_4816.trc:
ORA-00704: ????????
Mon Mar 09 17:08:42 2009
Errors in file c:\oracle\product\10.2.0\admin\orasjh\bdump\orasjh_dbw0_3556.trc:
ORA-00704: ????????
Mon Mar 09 17:08:42 2009
Errors in file c:\oracle\product\10.2.0\admin\orasjh\bdump\orasjh_mman_232.trc:
ORA-00704: ????????
Mon Mar 09 17:08:42 2009
Errors in file c:\oracle\product\10.2.0\admin\orasjh\bdump\orasjh_psp0_2940.trc:
ORA-00704: ????????
Mon Mar 09 17:08:42 2009
Errors in file c:\oracle\product\10.2.0\admin\orasjh\bdump\orasjh_pmon_2800.trc:
ORA-00704: ????????
Mon Mar 09 17:08:42 2009
Errors in file c:\oracle\product\10.2.0\admin\orasjh\bdump\orasjh_ckpt_3096.trc:
ORA-00704: ????????
Mon Mar 09 17:08:43 2009
Errors in file c:\oracle\product\10.2.0\admin\orasjh\bdump\orasjh_reco_3016.trc:
ORA-00704: ????????
 
--因为相同平台的数据库软件版本不一样,所以需要upgrade选项打开。

--shutdown数据库用upgrade选项打开数据库:
SQL>startup upgrade
 
--数据库竟然打开了。
 
SQL>@C:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\catupgrd.sql  
--执行这个脚本。这个脚本调用catlog.sql和 catproc.sql来重建字典对象等,在执行完这个脚本之后,我们可以关闭数据库后,正常打开数据库:

SQL> select count(*) from dba_objects where status='INVALID';
  COUNT(*)
----------
       116
      
      
--有INVALID的对象。

SQL> @C:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\utlrp.sql    --重新进行编译

SQL>  select count(*) from dba_objects where status='INVALID';
  COUNT(*)
----------
         0
--INVALID的对象消失。

--将原机的tnsnames.ora的orasjh的host改回原来的IP。异机恢复完成。
阅读(4549) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~