[20180423]flashback tablespace与snapshot standby.txt
--//缺省建立表空间是打开flashback on,如果某个表空间flashback off,在dg启动snapshot standby时注意,可能"回不来",--//通过测试说明问题.1.环境:SCOTT@book> @ ver1PORT_STRING VERSION BANNER------------------------------ -------------- --------------------------------------------------------------------------------x86_64/Linux 2.4.xx 11.2.0.4.0 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production2.设置备库tea表空间关闭flashback.SCOTT@book> alter tablespace tea flashback off;Tablespace altered.SCOTT@book> select * from v$tablespace; TS# NAME INC BIG FLA ENC------------ --------- --- --- --- --- 0 SYSTEM YES NO YES 1 SYSAUX YES NO YES 2 UNDOTBS1 YES NO YES 4 USERS YES NO YES 3 TEMP NO NO YES 6 EXAMPLE YES NO YES 7 TEA YES NO NO7 rows selected.--//tea表空间FLASHBACK_ON设置为NO.注意这些信息应该记录在控制文件,你可以发现备库还是On .--//备库:SYS@bookdg> select flashback_on from v$database;FLASHBACK_ON------------------NOSYS@bookdg> select * from v$tablespace; TS# NAME INC BIG FLA ENC---------- -------------------- --- --- --- --- 0 SYSTEM YES NO YES 1 SYSAUX YES NO YES 2 UNDOTBS1 YES NO YES 4 USERS YES NO YES 3 TEMP NO NO YES 6 EXAMPLE YES NO YES 7 TEA YES NO YES7 rows selected.--//备库还是yes,tea表空间.SYS@bookdg> alter tablespace tea flashback off;alter tablespace tea flashback off *ERROR at line 1:ORA-16000: database open for read-only access--//无法在open read only修改.SYS@bookdg> startup mountORACLE instance started.Total System Global Area 634732544 bytesFixed Size 2255792 bytesVariable Size 197133392 bytesDatabase Buffers 427819008 bytesRedo Buffers 7524352 bytesDatabase mounted.SYS@bookdg> alter tablespace tea flashback off;Tablespace altered.SYS@bookdg> select * from v$tablespace; TS# NAME INC BIG FLA ENC---------- -------------------- --- --- --- --- 0 SYSTEM YES NO YES 1 SYSAUX YES NO YES 2 UNDOTBS1 YES NO YES 4 USERS YES NO YES 3 TEMP NO NO YES 6 EXAMPLE YES NO YES 7 TEA YES NO NO7 rows selected.--//OK,现在成功.3.备库打开snapshot standby:--//参考http://blog.itpub.net/267265/viewspace-2134547/--//实际上就是保证存储点,只要闪回区足够,许多dml操作没有问题,在转换physical standby时,返回原来的存储点;--//备库:SYS@bookdg> alter database convert to snapshot standby;Database altered.SYS@bookdg> select database_role from v$database;DATABASE_ROLE----------------SNAPSHOT STANDBYSYS@bookdg> alter database open ;Database altered.SCOTT@bookdg> create table tt1 tablespace tea as select * from dba_objects;Table created.--//在主库也产生一些日志对于tea表空间:SCOTT@book> create table empx tablespace tea as select * from emp;Table created.--//现在转换为physical standby --//备库:SYS@bookdg> shutdown immediateDatabase closed.Database dismounted.ORACLE instance shut down.SYS@bookdg> startup mountORACLE instance started.Total System Global Area 634732544 bytesFixed Size 2255792 bytesVariable Size 197133392 bytesDatabase Buffers 427819008 bytesRedo Buffers 7524352 bytesDatabase mounted.SYS@bookdg> alter database convert to physical standby ;alter database convert to physical standby*ERROR at line 1:ORA-38753: Cannot flashback data file 6; no flashback log data.ORA-01110: data file 6: '/mnt/ramdisk/book/tea01.dbf'--//可以发现备库的数据文件6无法转换,这个应该引起足够重视,在备库转换为snapshot standby时,注意检查表空间是否flashvback是否都是on的状态.$ oerr ora 3875338753, 00000, "Cannot flashback data file %s; no flashback log data."// *Cause: An attempt to perform a FLASHBACK DATABASE failed because the file// does not have enough flashback log data to cover the time to// flash back. Either the file did not have flashback generation// enabled for it, or had flashback generation turned off for it// some time during the time span of the flashback.// *Action: The file cannot be flashed back. The file must be taken offline// or the tablespace dropped before continuing with the FLASHBACK// DATABASE command.4.恢复:--//简单一点,主库tea表空间设置为read only;--//主库:SCOTT@book> alter tablespace tea read only;Tablespace altered.$ scp /mnt/ramdisk/book/tea01.dbf oracle@192.168.100.40:/mnt/ramdisk/book/tea01.dbf 100% 40MB 40.0MB/s 00:01--//备库:SYS@bookdg> alter database convert to physical standby ;alter database convert to physical standby*ERROR at line 1:ORA-38753: Cannot flashback data file 6; no flashback log data.ORA-01110: data file 6: '/mnt/ramdisk/book/tea01.dbf'--//不行:SYS@bookdg> alter tablespace tea flashback on;Tablespace altered.SYS@bookdg> alter database convert to physical standby ;alter database convert to physical standby*ERROR at line 1:ORA-19926: Database cannot be converted at this time--//根本不能这样转换.SYS@bookdg> alter tablespace tea offline;alter tablespace tea offline*ERROR at line 1:ORA-01109: database not openSYS@bookdg> alter database datafile 6 offline;Database altered.--//关闭备库重来.SYS@bookdg> startup mountORACLE instance started.Total System Global Area 634732544 bytesFixed Size 2255792 bytesVariable Size 197133392 bytesDatabase Buffers 427819008 bytesRedo Buffers 7524352 bytesDatabase mounted.SYS@bookdg> alter database convert to physical standby ;Database altered.SYS@bookdg> shutdown immediateORA-01507: database not mountedORACLE instance shut down.SYS@bookdg> startup mountORACLE instance started.Total System Global Area 634732544 bytesFixed Size 2255792 bytesVariable Size 197133392 bytesDatabase Buffers 427819008 bytesRedo Buffers 7524352 bytesDatabase mounted.SYS@bookdg> alter database datafile 6 online;Database altered.SYS@bookdg> alter database recover managed standby database using current logfile disconnect ;Database altered.SYS@bookdg> @ &r/dg/dgPROCESS PID STATUS CLIENT_P GROUP# THREAD# SEQUENCE# BLOCK# BLOCKS DELAY_MINS--------- ------- ------------ -------- ------ ------- ---------- ---------- ---------- ----------ARCH 2394 CONNECTED ARCH N/A 0 0 0 0 0ARCH 2396 CONNECTED ARCH N/A 0 0 0 0 0ARCH 2398 CONNECTED ARCH N/A 0 0 0 0 0RFS 2403 IDLE UNKNOWN N/A 0 0 0 0 0RFS 2405 IDLE LGWR 2 1 789 50 1 0ARCH 2400 CLOSING ARCH 4 1 788 1 183 0MRP0 2407 APPLYING_LOG N/A N/A 1 789 50 102400 07 rows selected.--//日志开始传输并应用.SYS@bookdg> alter database recover managed standby database cancel ;Database altered.SYS@bookdg> alter database open read only;Database altered.SYS@bookdg> alter database recover managed standby database using current logfile disconnect ;Database altered.SYS@bookdg> select count(*) from scott.empx; COUNT(*)---------- 14SYS@bookdg> select count(*) from scott.tt1;select count(*) from scott.tt1 *ERROR at line 1:ORA-00942: table or view does not exist--//测试时建立的表不存在. --//主库执行:SCOTT@book> alter tablespace tea read write;Tablespace altered.SCOTT@book> delete from empx where rownum=1;1 row deleted.SCOTT@book> commit ;Commit complete.--//在备库检查,发现少一条记录.SYS@bookdg> select count(*) from scott.empx; COUNT(*)---------- 13总结:--//这个在以后工作中注意,在转换snapshot standby,注意表空间flaashback是否在on状态.