[20180423]flashback tablespace与snapshot standby.txt

[20180423]flashback tablespace与snapshot standby.txt

--//缺省建立表空间是打开flashback on,如果某个表空间flashback off,在dg启动snapshot standby时注意,可能"回不来",
--//通过测试说明问题.

1.环境:
SCOTT@book> @ ver1
PORT_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 Production

2.设置备库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  NO
7 rows selected.

--//tea表空间FLASHBACK_ON设置为NO.注意这些信息应该记录在控制文件,你可以发现备库还是On .
--//备库:
SYS@bookdg> select flashback_on from v$database;
FLASHBACK_ON
------------------
NO

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  YES
7 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 mount
ORACLE instance started.
Total System Global Area  634732544 bytes
Fixed Size                  2255792 bytes
Variable Size             197133392 bytes
Database Buffers          427819008 bytes
Redo Buffers                7524352 bytes
Database 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  NO
7 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 STANDBY

SYS@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 immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

SYS@bookdg> startup mount
ORACLE instance started.
Total System Global Area  634732544 bytes
Fixed Size                  2255792 bytes
Variable Size             197133392 bytes
Database Buffers          427819008 bytes
Redo Buffers                7524352 bytes
Database 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 38753
38753, 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 open

SYS@bookdg> alter database datafile 6 offline;
Database altered.

--//关闭备库重来.
SYS@bookdg> startup mount
ORACLE instance started.
Total System Global Area  634732544 bytes
Fixed Size                  2255792 bytes
Variable Size             197133392 bytes
Database Buffers          427819008 bytes
Redo Buffers                7524352 bytes
Database mounted.

SYS@bookdg> alter database convert to physical standby ;
Database altered.

SYS@bookdg> shutdown immediate
ORA-01507: database not mounted
ORACLE instance shut down.

SYS@bookdg> startup mount
ORACLE instance started.
Total System Global Area  634732544 bytes
Fixed Size                  2255792 bytes
Variable Size             197133392 bytes
Database Buffers          427819008 bytes
Redo Buffers                7524352 bytes
Database 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/dg
PROCESS       PID STATUS       CLIENT_P GROUP# THREAD#  SEQUENCE#     BLOCK#     BLOCKS DELAY_MINS
--------- ------- ------------ -------- ------ ------- ---------- ---------- ---------- ----------
ARCH         2394 CONNECTED    ARCH     N/A          0          0          0          0          0
ARCH         2396 CONNECTED    ARCH     N/A          0          0          0          0          0
ARCH         2398 CONNECTED    ARCH     N/A          0          0          0          0          0
RFS          2403 IDLE         UNKNOWN  N/A          0          0          0          0          0
RFS          2405 IDLE         LGWR     2            1        789         50          1          0
ARCH         2400 CLOSING      ARCH     4            1        788          1        183          0
MRP0         2407 APPLYING_LOG N/A      N/A          1        789         50     102400          0
7 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(*)
----------
        14

SYS@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状态.

posted @ 2018-04-23 10:20  lfree  阅读(206)  评论(0编辑  收藏  举报