rman 恢复与 standby
先将primary xh 注册一个catalog orcl
C:\>set oracle_sid=orcl
C:\>sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 11月 12 09:17:59 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
已连接到空闲例程。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 289406976 bytes
Fixed Size 1248576 bytes
Variable Size 100664000 bytes
Database Buffers 180355072 bytes
Redo Buffers 7139328 bytes
数据库装载完毕。
数据库已经打开。
SQL> select name from v$database;
NAME
---------
ORCL
SQL> create user rman identified by rman default tablespace users;
用户已创建。
SQL> grant connect,resource to rman;
授权成功。
SQL> grant recovery_catalog_owner to rman;
授权成功。
SQL>
C:\>set oracle_sid=XH
C:\>rman target '/ as sysdba' catalog rman/rman@orcl
恢复管理器: Release 10.2.0.1.0 - Production on 星期四 11月 12 09:24:18 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
连接到目标数据库: XH (DBID=3098165337)
连接到恢复目录数据库
RMAN> register database
2> ;
注册在恢复目录中的数据库
正在启动全部恢复目录的 resync
完成全部 resync
RMAN> list backup of database;
备份集列表
===================
BS 关键字 类型 LV 大小 设备类型 经过时间 完成时间
------- ---- -- ---------- ----------- ------------ ----------
63 Full 594.45M DISK 00:01:53 11-11月-09
BP 关键字: 67 状态: AVAILABLE 已压缩: NO 标记: TAG20091111T170844
段名:G:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\XH\BACKUPSET\2009_11_11\O1_MF_
NNNDF_TAG20091111T170844_5HNZRXQX_.BKP
备份集 63 中的数据文件列表
文件 LV 类型 Ckp SCN Ckp 时间 名称
---- -- ---- ---------- ---------- ----
1 Full 580059 11-11月-09 G:\ORACLE\PRODUCT\10.2.0\ORADATA\XH\SYSTEM0
1.DBF
2 Full 580059 11-11月-09 G:\ORACLE\PRODUCT\10.2.0\ORADATA\XH\UNDOTBS
01.DBF
3 Full 580059 11-11月-09 G:\ORACLE\PRODUCT\10.2.0\ORADATA\XH\SYSAUX0
1.DBF
4 Full 580059 11-11月-09 G:\ORACLE\PRODUCT\10.2.0\ORADATA\XH\USERS01
.DBF
5 Full 580059 11-11月-09 G:\ORACLE\PRODUCT\10.2.0\ORADATA\XH\EXAMPLE
01.DBF
primary 设置实时应用
SQL> alter system set log_archive_dest_2='service=standby1 lgwr valid_for=(onlin (primary)
e_logfiles,primary_role) db_unique_name=standby1';
系统已更改。
SQL> alter database add standby logfile group 4 'e:\standby\standby04.log' size (standby)
50m;
数据库已更改。
SQL> select process,client_process,status,sequence# from v$managed_standby; (standby)
PROCESS CLIENT_P STATUS SEQUENCE#
--------- -------- ------------ ----------
ARCH ARCH CONNECTED 0
ARCH ARCH CONNECTED 0
RFS LGWR IDLE 12
RFS ARCH IDLE 0
RFS N/A IDLE 0
SQL> select dbid,group#,bytes,status ,first_change#,last_change# from v$standby_ (standby)
log;
DBID GROUP# BYTES STATUS FIRST_CHANGE# LAST_CHANGE#
---------- ---------- ---------- ---------- ------------- ------------
3098165337 4 52428800 ACTIVE 698275 698436
SQL> create table t1 (a int) tablespace xhtr; (primary)
表已创建。
SQL> insert into t1 values(1); (primary)
已创建 1 行。
SQL> commit; (primary)
提交完成。
SQL>
SQL> col file_name format a50
SQL> select file_id ,file_name from dba_data_files; (primary)
FILE_ID FILE_NAME
---------- --------------------------------------------------
4 G:\ORACLE\PRODUCT\10.2.0\ORADATA\XH\USERS01.DBF
3 G:\ORACLE\PRODUCT\10.2.0\ORADATA\XH\SYSAUX01.DBF
2 G:\ORACLE\PRODUCT\10.2.0\ORADATA\XH\UNDOTBS01.DBF
1 G:\ORACLE\PRODUCT\10.2.0\ORADATA\XH\SYSTEM01.DBF
5 G:\ORACLE\PRODUCT\10.2.0\ORADATA\XH\EXAMPLE01.DBF
6 G:\ORACLE\PRODUCT\10.2.0\ORADATA\XH\XHTR.DBF
已选择6行。
SQL> alter database recover managed standby database using current logfile disco (standby)
nnect from session;
数据库已更改。
SQL> alter database recover managed standby database cancel; (standby)
数据库已更改。
SQL> alter database open (standby)
2 ;
数据库已更改。
SQL> select * from t1;(standby)
A
----------
1
RMAN> delete noprompt backup ~~~删除下备份
2> ;
实验利用standby备份 完全恢复primary
C:\>set oracle_sid=standby1
C:\>rman target '/ as sysdba' catalog rman/rman@orcl (连接catalog ,standby 使用standby的数据文件备份)
恢复管理器: Release 10.2.0.1.0 - Production on 星期四 11月 12 10:11:47 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
连接到目标数据库: XH (DBID=3098165337)
连接到恢复目录数据库
RMAN> backup datafile 6;
启动 backup 于 12-11月-09
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=147 devtype=DISK
通道 ORA_DISK_1: 启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
输入数据文件 fno=00006 name=E:\STANDBY\DATAFILE\XHTR.DBF *****************
通道 ORA_DISK_1: 正在启动段 1 于 12-11月-09
通道 ORA_DISK_1: 已完成段 1 于 12-11月-09
段句柄=E:\STANDBY\ARCHIVE\STANDBY1\BACKUPSET\2009_11_12\O1_MF_NNNDF_TAG20091112T
101239_5HPVRQMK_.BKP 标记=TAG20091112T101239 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:01
完成 backup 于 12-11月-09
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> host del G:\ORACLE\PRODUCT\10.2.0\ORADATA\XH\XHTR.DBF;
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 289406976 bytes
Fixed Size 1248576 bytes
Variable Size 113246912 bytes
Database Buffers 167772160 bytes
Redo Buffers 7139328 bytes
数据库装载完毕。
ORA-01157: 无法标识/锁定数据文件 6 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 6: 'G:\ORACLE\PRODUCT\10.2.0\ORADATA\XH\XHTR.DBF'
SQL> alter database datafile 6 offline;(primary)
数据库已更改。
C:\>set oracle_sid=XH
C:\>rman target '/ as sysdba' catalog rman/rman@orcl
恢复管理器: Release 10.2.0.1.0 - Production on 星期四 11月 12 10:25:03 20
Copyright (c) 1982, 2005, Oracle. All rights reserved.
已连接到目标数据库: XH (DBID=3098165337, 未打开)
连接到恢复目录数据库
RMAN> run{restore datafile 6;
2> recover datafile 6;
3> }
启动 restore 于 12-11月-09
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=139 devtype=DISK
通道 ORA_DISK_1: 正在开始恢复数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集恢复的数据文件
正将数据文件00006恢复到G:\ORACLE\PRODUCT\10.2.0\ORADATA\XH\XHTR.DBF
通道 ORA_DISK_1: 正在读取备份段 E:\STANDBY\ARCHIVE\STANDBY1\BACKUPSET\2009_11_12
\O1_MF_NNNDF_TAG20091112T101239_5HPVRQMK_.BKP
通道 ORA_DISK_1: 已恢复备份段 1
段句柄 = E:\STANDBY\ARCHIVE\STANDBY1\BACKUPSET\2009_11_12\O1_MF_NNNDF_TAG2009111
2T101239_5HPVRQMK_.BKP 标记 = TAG20091112T101239
通道 ORA_DISK_1: 恢复完成, 用时: 00:00:04
完成 restore 于 12-11月-09
启动 recover 于 12-11月-09
使用通道 ORA_DISK_1
正在开始介质的恢复
介质恢复完成, 用时: 00:00:00
完成 recover 于 12-11月-09
RMAN>
SQL> alter database datafile 6 online; (primary)
数据库已更改。
SQL> select * from t1; (primary)
A
----------
1
standby controlfile丢失 恢复
SQL> show parameter control (standby)
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
control_file_record_keep_time integer 7
control_files string E:\STANDBY\DATAFILE\CONTROL01.
CTL
SQL> shutdown immediate; (standby)
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> host del E:\STANDBY\DATAFILE\CONTROL01.CTL (standby)
SQL> startup (standby)
ORACLE 例程已经启动。
Total System Global Area 289406976 bytes
Fixed Size 1248576 bytes
Variable Size 96469696 bytes
Database Buffers 184549376 bytes
Redo Buffers 7139328 bytes
ORA-00205: ?????????, ??????, ???????
SQL> alter database create standby controlfile as 'e:\standby\datafile\control01 (primry)
.ctl';
数据库已更改。
SQL> alter system switch logfile;(primary)
系统已更改。
primary要 切换一起,否则 standby open时报 ORA-16004:
SQL> alter database recover managed standby database disconnect from session; (standby)
数据库已更改。
SQL> alter database recover managed standby database cancel;(standby)
数据库已更改。
SQL> alter database open;(standby)
数据库已更改。
standby datafile 丢失
SQL> shutdown immediate; (standby)
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> host del e:\standby\datafile\xhtr.dbf (standby)
SQL> startup (standby)
ORACLE 例程已经启动。
Total System Global Area 289406976 bytes
Fixed Size 1248576 bytes
Variable Size 96469696 bytes
Database Buffers 184549376 bytes
Redo Buffers 7139328 bytes
数据库装载完毕。
ORA-16004: 备份数据库需要恢复
ORA-01157: 无法标识/锁定数据文件 6 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 6: 'E:\STANDBY\DATAFILE\XHTR.DBF'
C:\>rman target system/a831115@standby1 catalog rman/rman@orcl
RMAN> run{set newname for datafile 6 to 'e:\standby\datafile\xhtr.dbf';
2> restore datafile 6;
3> }
SQL> alter database recover managed standby database disconnect from session; (standby)
数据库已更改。
SQL> alter database recover managed standby database cancel;(standby)
数据库已更改。
SQL> alter database open;(standby)
数据库已更改。
SQL> select * from t1;(standby)
A
----------
1
SQL> insert into t1 values(2);(primary)
已创建 1 行。
SQL> commit;(primary)
提交完成。
SQL> alter database recover managed standby database using current logfile disco (standby)
nnect from session;
数据库已更改。
SQL> alter database recover managed standby database cancel; (standby)
数据库已更改。
SQL> alter database open ; (standby)
数据库已更改。
SQL> select * from t1; (standby)
A
----------
1
2
SQL>
SQL> select count(*) from v$archived_log; (standby)
COUNT(*)
----------
4
SQL> select applied from v$archived_log;(standby)
APP
---
YES
YES
YES
YES
SQL> insert into t1 values(3);(primary)
已创建 1 行。
SQL> commit;(primary)
提交完成。
SQL> alter database recover managed standby database using current logfile disco (standby)
nnect from session;
数据库已更改。
SQL> alter database recover managed standby database cancel; (standby)
SQL> shutdown immediate; (standby)
ORA-01109: 数据库未打开
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> host del e:\standby\datafile\xhtr.dbf; (standby)
SQL> startup (standby)
ORACLE 例程已经启动。
Total System Global Area 289406976 bytes
Fixed Size 1248576 bytes
Variable Size 96469696 bytes
Database Buffers 184549376 bytes
Redo Buffers 7139328 bytes
数据库装载完毕。
ORA-16004: 备份数据库需要恢复
ORA-01157: 无法标识/锁定数据文件 6 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 6: 'E:\STANDBY\DATAFILE\XHTR.DBF'
SQL> alter database recover managed standby database using current logfile disco (standby)
nnect from session;
数据库已更改。
SQL> alter database recover managed standby database cancel; (standby)
数据库已更改。
SQL> alter database open; (standby)
alter database open
*
第 1 行出现错误:
ORA-16004: 备份数据库需要恢复
ORA-01152: 文件 6 没有从过旧的备份中恢复
ORA-01110: 数据文件 6: 'E:\STANDBY\DATAFILE\XHTR.DBF'
SQL> alter database recover managed standby database disconnect from session; (standby)
数据库已更改。
SQL> alter database recover managed standby database cancel; (standby)
数据库已更改。
SQL> alter database open; (standby)
alter database open
*
第 1 行出现错误:
ORA-16004: 备份数据库需要恢复
ORA-01152: 文件 6 没有从过旧的备份中恢复
ORA-01110: 数据文件 6: 'E:\STANDBY\DATAFILE\XHTR.DBF'
RMAN> run{set newname for datafile 6 to 'e:\standby\datafile\xhtr.dbf';
2> restore datafile 6;
3> recover datafile 6;
4> }
RMAN-03002: recover 命令 (在 11/12/2009 13:56:52 上) 失败
RMAN-06067: RECOVER DATABASE 要求一个备份控制文件或创建的控制文件
SQL> alter system switch logfile;
系统已更改。
SQL> select count(*) from v$archived_log;(primary)
COUNT(*)
----------
5
SQL> alter database recover managed standby database using current logfile disco (standby)
nnect from session;
数据库已更改。
SQL> alter database recover managed standby database cancel;(standby)
数据库已更改。
SQL> alter database open ;(standby)
数据库已更改。
SQL> select * from t1;(standby)
A
----------
1
2
3
总结:如果恢复standby丢失的datafile,需要使用归档到standby_file_dest的 archived log,如果向上面 一样 使用实时应用 并没有 归档到standby 的standby file dest,那么恢复restore 到standby的datafile没有可以应用的archived log,无法恢复完成,此时需要primary 执行一个归档~~让standby 产生一个归档,并应用既可.
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/12020513/viewspace-619719/ ,如需转载,请注明出处,否则将追究法律责任。