关于primary resetlogs 与 standby flashback
情况一:primary resetlogs时 standby还未应用(未开应用or实时应用)primary 要resetlogs后(从SCN 判断)的 archived log
,那么当primary resetlogs 并产生新的archived log时候 standby可以 正常接收新的archive log并应用~~但会忽略resetlogs 时,已经产生 在要resetlogs 后scn的archivelog,另外也可以用SCN方式判断
primary的 TO_CHAR(RESETLOGS_CHANGE# - 2)>standby 的current_scn (都从v$database中查 ) 表示 standby不用有任何操作 可以继续接受archivedlog并应用
SQL> alter system set log_archive_dest_2='service=standby1 valid_for=(online_log (primary)
files,primary_role) db_unique_name=standby1';
系统已更改。
SQL> shutdown immediate; (standby)
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount (standby)
ORACLE 例程已经启动。
Total System Global Area 289406976 bytes
Fixed Size 1248576 bytes
Variable Size 96469696 bytes
Database Buffers 184549376 bytes
Redo Buffers 7139328 bytes
数据库装载完毕。
SQL> alter database flashback on; (standby,为standby开启flashback database)
数据库已更改。
SQL> select applied from v$archived_log;(standby)
APP
---
YES
YES
YES
YES
YES
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 N/A IDLE 0
C:\>rman target / catalog rman/rman@orcl
恢复管理器: Release 10.2.0.1.0 - Production on 星期四 11月 12 15:31:01 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
连接到目标数据库: XH (DBID=3098165337)
连接到恢复目录数据库
RMAN> backup database ;
完成 backup 于 12-11月-09
SQL> select current_scn from v$database;(primary)
CURRENT_SCN
-----------
733042
SQL> drop table t1;(primary)
表已删除。
SQL> alter system switch logfile;(primary) 产生一个 归档
系统已更改。
SQL>
SQL> select applied from v$archived_log;(standby)
APP
---
YES
YES
YES
YES
YES
NO~~~~~~~~~~~~~~~~~~~~~~~~`standby未应用
已选择6行。
SQL> select current_scn from v$database;
CURRENT_SCN
-----------
727931
RMAN> run{startup force mount;
2> set until scn=733042;
3> restore database;
4> recover database;
5> sql'alter database open resetlogs';}
Oracle 实例已启动
数据库已装载
SQL> select * from t1;(primary)
A
----------
1
2
3 ~~~~~~~~~~~~~~~~~~~~不完全恢复resetlogs open
SQL> SELECT TO_CHAR(RESETLOGS_CHANGE# - 2) FROM V$DATABASE; (primary)
TO_CHAR(RESETLOGS_CHANGE#-2)
----------------------------------------
733044
SQL> select current_scn from v$database;(standby)
CURRENT_SCN
-----------
727931
primary的 TO_CHAR(RESETLOGS_CHANGE# - 2)>standby 的current_scn (都从v$database中查 ) 表示 standby不用有任何操作 可以继续接受archivedlog并应用
SQL> select applied from v$archived_log;(standby)
APP
---
YES
YES
YES
YES
YES
NO~~~~~~~~~~~~~~~~~~~~~~~还没应用
已选择6行。
SQL> insert into t1 values(4);(primary)
已创建 1 行。
SQL> commit;(primary)
提交完成。
SQL> alter system switch logfile;(primary)
系统已更改。
SQL> select process,client_process,status,sequence# from v$managed_standby;(standby)
PROCESS CLIENT_P STATUS SEQUENCE#
--------- -------- ------------ ----------
ARCH ARCH CLOSING 17
ARCH ARCH CLOSING 1
RFS ARCH IDLE 0
SQL> select applied from v$archived_log;(standby)
APP
---
YES
YES
YES
YES
YES
NO
NO~~~~~~~~~~~~接受新archive log
已选择7行。
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> select applied from v$archived_log;(standby)
APP
---
YES
YES
YES
YES
YES
NO~~~忽略了这个 在resetlogs scn后 产生的 archived log(不是resetlog open后新产生的 archived log)
YES**********************应用了
已选择7行。
SQL> select * from t1;
A
----------
1
2
3
4
情况2:standby开启实时应用,或一直开着恢复模式,此时应用了primary 要resetlogs 后产生的 SCN,当primary resetlogs open后 此时standby 可以接受新archive log 或redo 但不会应用,需要flashback standby,既 primary的 TO_CHAR(RESETLOGS_CHANGE# - 2)
RMAN> backup database;
启动 backup 于 12-11月-09
使用通道 ORA_DISK_1
SQL> alter database recover managed standby database disconnect from session;(standby)
数据库已更改。
SQL> select process,client_process,status,sequence# from v$managed_standby;(standby)
PROCESS CLIENT_P STATUS SEQUENCE#
--------- -------- ------------ ----------
ARCH ARCH CLOSING 2
ARCH ARCH CLOSING 1
RFS UNKNOWN IDLE 0
MRP0 N/A WAIT_FOR_LOG 3
SQL> select current_scn from v$database;(primary)
CURRENT_SCN
-----------
734858
SQL> drop table t1;(primary)
表已删除。
SQL> alter system switch logfile;(primary)
系统已更改。
SQL> select applied from v$archived_log;
APP
---
YES
YES
YES
YES
YES
NO
YES
YES~~~~~~~~~~~~~~~~~~应用了我们要 不完全恢复 scn 734858后 产生的resetlogs
已选择8行。
RMAN> run{startup force mount;
2> set until scn=734858;
3> restore database;
4> recover database;
5> sql'alter database open resetlogs';}
SQL> select * from t1;(primary)
A
----------
1
2
3
4
SQL> insert into t1 values(5);(primary)
已创建 1 行。
SQL> commit;primary)
提交完成。
SQL> alter system switch logfile;(primary)
系统已更改。
SQL> select process,client_process,status,sequence# from v$managed_standby;(standby)
PROCESS CLIENT_P STATUS SEQUENCE#
--------- -------- ------------ ----------
ARCH ARCH CLOSING 2
ARCH ARCH CLOSING 1
RFS N/A IDLE 0
MRP0 N/A WAIT_FOR_LOG 3
SQL> select applied from v$archived_log;(standby)
APP
---
YES
YES
YES
YES
YES
NO
YES
YES
NO~~~~~~~~~~~~~~~~resetlogs open后 新的archived log(insert t1 值=5)
已选择9行。
SQL> SELECT TO_CHAR(RESETLOGS_CHANGE# - 2) FROM V$DATABASE;(primary)
TO_CHAR(RESETLOGS_CHANGE#-2)
----------------------------------------
734863
SQL> select current_scn from v$database;(standby)
CURRENT_SCN
-----------
734935
standby alert.log 下面表明standby数据文件是孤立的 来自resetlogs open前
Thu Nov 12 16:28:59 2009
Errors in file e:\standby\bdump\standby1_mrp0_4444.trc:
ORA-19909: datafile 1 belongs to an orphan incarnation
ORA-01110: data file 1: 'E:\STANDBY\DATAFILE\SYSTEM01.DBF'
SQL> shutdown immediate (standby)
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount (standby)
ORACLE 例程已经启动。
Total System Global Area 289406976 bytes
Fixed Size 1248576 bytes
Variable Size 96469696 bytes
Database Buffers 184549376 bytes
Redo Buffers 7139328 bytes
数据库装载完毕。
SQL> flashback database to scn 734858;(standby)
闪回完成。
SQL>
SQL> alter database recover managed standby database disconnect from session;(standby)
数据库已更改。
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
MRP0 N/A WAIT_FOR_LOG 2
SQL> select applied from v$archived_log;(standby)
APP
---
YES
YES
YES
YES
YES
NO
YES
YES
YES~~~~~~~~~~~~~~~`应用了
已选择9行。
SQL> alter database recover managed standby database cancel;(standby)
数据库已更改。
SQL> alter database open;(standby)
数据库已更改。
SQL> select* from t1;(standby)
A
----------
1
2
3
4
5
另外 也可以 对standby 执行不完全恢复 (until scn),推荐用flashback database
关于alter database activate standby database
这是一个强行激活standby 到read write的操作,oracle不推荐 此操作,因为如果standby 没开flashback database,那么这是一个单向操作,standby转换成primary后 永远也转换不成standby了,因为 在open后 这个过程将自动 resetlogs(standby)。因此,在 startup 之前要做一次 cold backup,因为以往的 backup 最多只能 recover 到 standby database 被activated 这一点。 因此 这个是个单项过程
SQL> select db_unique_name ,database_role,open_mode,switchover_status from v$da
tabase;
DB_UNIQUE_NAME DATABASE_ROLE OPEN_MODE SWITCHOVER_STATUS
------------------------------ ---------------- ---------- --------------------
standby1 PHYSICAL STANDBY READ ONLY NOT ALLOWED
SQL> create restore point test_point guarantee flashback database;(standby)
还原点已创建。
SQL> alter database activate standby database;(standby)
数据库已更改。
Total System Global Area 289406976 bytes
Fixed Size 1248576 bytes
Variable Size 96469696 bytes
Database Buffers 184549376 bytes
Redo Buffers 7139328 bytes
数据库装载完毕。
数据库已经打开。
SQL> select db_unique_name ,database_role,open_mode,switchover_status from v$da
tabase;
DB_UNIQUE_NAME DATABASE_ROLE OPEN_MODE SWITCHOVER_STATUS
------------------------------ ---------------- ---------- --------------------
standby1 PRIMARY READ WRITE SESSIONS ACTIVE ~~~~~~~~已经到 读写状态
SQL>
SQL> alter database commit to switchover to physical standby; (standby)
alter database commit to switchover to physical standby
*
第 1 行出现错误:
ORA-16416: 切换目标与主目标不同步
正常的转换 无法进行
SQL> shutdown immediate; (standby)
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount (standby)
ORACLE 例程已经启动。
Total System Global Area 289406976 bytes
Fixed Size 1248576 bytes
Variable Size 100664000 bytes
Database Buffers 180355072 bytes
Redo Buffers 7139328 bytes
数据库装载完毕。
SQL> flashback database to restore point test_point; (standby)
闪回完成。
SQL> alter database convert to physical standby; (standby)
数据库已更改。
SQL> startup force (standby)
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 db_unique_name ,database_role,open_mode,switchover_status from v$da (standby)
tabase;
DB_UNIQUE_NAME DATABASE_ROLE OPEN_MODE SWITCHOVER_STATUS
------------------------------ ---------------- ---------- --------------------
standby1 PHYSICAL STANDBY READ ONLY TO PRIMARY
SQL> select count(*) from v$archived_log; (standby)
COUNT(*)
----------
9
SQL> alter system switch logfile;(primary)
系统已更改。
SQL> select count(*) from v$archived_log;(standby)
COUNT(*)
----------
10
SQL> alter database recover managed standby database disconnect from session; (standby)
数据库已更改。
SQL> select process,client_process,status,sequence# from v$managed_standby; (standby)
PROCESS CLIENT_P STATUS SEQUENCE#
--------- -------- ------------ ----------
ARCH ARCH CLOSING 2
ARCH ARCH CONNECTED 0
RFS UNKNOWN IDLE 0
MRP0 N/A WAIT_FOR_LOG 0
SQL> select applied from v$archived_log;(standby)
APP
---
YES
YES
YES
YES
YES
NO
YES
YES
YES
YES
已选择10行。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12020513/viewspace-619720/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/12020513/viewspace-619720/