天天看點

ORACLE 11G SNAPSHOT STANDBY執行個體

ORACLE 11g PHYSICAL STANDBY已經不僅僅隻提供災難恢複功能,其ACTI VE DATA GUARD 特性讓備庫處于

RED ONLY狀态,可以提供做報表查詢、讀寫分離使用;還新增了SNAPSHOT STANDBY 特性,此特性能讓備庫

暫時處于可讀可寫狀态,為各種性能、壓力測試提供了環境,重要的是測試完成後又可轉換回PHYSICAL STANDBY,

備庫的資料繼續與主庫保持一緻。

SNAPSHOT STANDBY 限制及條件

1. 隻有PHYSICAL STANDBY能轉換為SNAPSHOT STANDBY。

2. DB_RECOVERY_FILE_DEST必需設定,這裡FLASHBACK DATABASE不是必須的。

3.隻有PHYSICAL STANDBY 處于mount模式才能轉換為SNAPSHOT STANDBY。

設定閃回恢複區

SQL> alter system set DB_RECOVERY_FILE_DEST_SIZE=500m scope=both;

System altered.

SQL> alter system set db_recovery_file_dest='/u01/arch/flasharch' scope=both;

System altered.

SQL> select FLASHBACK_ON from v$database;

FLASHBACK_ON

------------------

NO

檢視備庫目前模式

SQL> select database_role,db_unique_name,open_mode from v$database;

DATABASE_ROLE     DB_UNIQUE_NAME         OPEN_MODE

---------------- ------------------------------ --------------------

PHYSICAL STANDBY ogg                READ ONLY WITH APPLY

此時備庫為PHYSICAL STANDBY,正處于READ ONLY REAL TIME APPLY 模式

取消備庫恢複管理模式

SQL> alter database recover managed standby database cancel;

Database altered.

建立SNAPSHOT STANDBY

建立SNAPSHOT STANDBY 指令非常簡單

SQL> alter database convert to snapshot standby;

Database altered.

檢視alter log 裡面的資訊,指令已經執行完成,ORACLE建立了guaranteed restore point

Managed Standby Recovery Canceled (ogg)

Completed: alter database recover managed standby database cancel

Wed Oct 30 11:08:18 2013

alter database convert to snapshot standby

Starting background process RVWR

Wed Oct 30 11:08:18 2013

RVWR started with pid=26, OS id=5156

Allocated 3981204 bytes in shared pool for flashback generation buffer

Created guaranteed restore point SNAPSHOT_STANDBY_REQUIRED_10/30/2013 11:08:18

檢視備庫模式已經變為SNAPSHOT STADNBY

SQL>  select database_role,db_unique_name,open_mode from v$database;

DATABASE_ROLE     DB_UNIQUE_NAME         OPEN_MODE

---------------- ------------------------------ --------------------

SNAPSHOT STANDBY ogg                MOUNTED

檢視閃回恢複區已經産生檔案

SQL> !ls -lt /u01/arch/flasharch/OGG/flashback

total 102528

-rw-r----- 1 oracle oinstall 52436992 Oct 30 11:37 o1_mf_970y12xh_.flb

-rw-r----- 1 oracle oinstall 52436992 Oct 30 11:08 o1_mf_970y15og_.flb

開啟備庫,進行寫測試

SQL> alter database open;

Database altered.

在備庫建立一個新使用者

SQL> create user xhl_snapstb identified by xhl;

User created.

SQL> grant dba to xhl_snapstb;

Grant succeeded.

在備庫建立一個新表

SQL> create table xhl_snapstb.xhl as select * from dba_users;

Table created.

SQL> select count(*) from xhl_snapstb.xhl;

  COUNT(*)

----------

     9

删除原有表

SQL> select table_name,TABLESPACE_NAME from dba_tables where tablespace_name = 'TBS_XHL';

TABLE_NAME               TABLESPACE_NAME

------------------------------ ------------------------------

XHL                   TBS_XHL

SQL> DROP TABLE XHL PURGE;

Table dropped.

DROP TABLESPACE測試

Wed Oct 30 11:23:47 2013

drop tablespace TBS_XHL  including contents and datafiles

ORA-38881 signalled during: drop tablespace TBS_XHL  including contents and datafiles...

這個是不允許的

檢視日志傳輸狀态

在SNAPSHOT STANDBY模式下,日志正常傳輸但不應用,下面語句進行确認

SQL> select to_char(SYSDATE,'yyyymmdd hh24:mi:ss') CTIME,NAME,VALUE,DATUM_TIME

  from V$DATAGUARD_STATS

 WHERE NAME LIKE '%lag';  2    3  

CTIME         NAME              VALUE           DATUM_TIME

---------------- -------------------- -------------------- ------------------------------

20131030 11:34:35 transport lag          +00 00:00:00       10/30/2013 11:34:34

20131030 11:34:35 apply lag          +00 00:26:34       10/30/2013 11:34:34

transport lag 時間為0

apply lag 時間為26分34秒

我們将現在時間20131030 11:34:35 與之前 guaranteed restore point SNAPSHOT_STANDBY_REQUIRED_10/30/2013 11:08:18

時間對比,剛好将近26分鐘

轉換回PHYSICAL STADNBY

現在我們轉換會PHYSICAL STANDBY ,确認在SANPSHOT STANDBY模式下所做的修改已經恢複,

必須在mount模式下進行操作

将資料庫切換到mount狀态

SQL> shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL>

SQL> startup mount;

ORACLE instance started.

Total System Global Area  523108352 bytes

Fixed Size            1365740 bytes

Variable Size          318769428 bytes

Database Buffers      197132288 bytes

Redo Buffers            5840896 bytes

Database mounted.

SQL> select database_role,db_unique_name,open_mode from v$database;

DATABASE_ROLE     DB_UNIQUE_NAME         OPEN_MODE

---------------- ------------------------------ --------------------

SNAPSHOT STANDBY ogg                MOUNTED

convert to physical standby

SQL> alter database convert to physical standby;

Database altered.

檢視alter log 可以看到資料庫進行falshback restore完成,并将閃回恢複區的檔案delete

Wed Oct 30 11:40:36 2013

alter database convert to physical standby

ALTER DATABASE CONVERT TO PHYSICAL STANDBY (ogg)

Flashback Restore Start

Flashback Restore Complete

Drop guaranteed restore point

Stopping background process RVWR

Deleted Oracle managed file /u01/arch/flasharch/OGG/flashback/o1_mf_970y12xh_.flb

Deleted Oracle managed file /u01/arch/flasharch/OGG/flashback/o1_mf_970y15og_.flb

Guaranteed restore point  dropped

Clearing standby activation ID 2931571730 (0xaebc3c12)

SQL> ! ls -lt /u01/arch/flasharch/OGG/flashback

total 0

重新開機資料庫到mount狀态

SQL> select database_role,db_unique_name,open_mode from v$database;

select database_role,db_unique_name,open_mode from v$database

*

ERROR at line 1:

ORA-01507: database not mounted

SQL> alter database mount;

alter database mount

*

ERROR at line 1:

ORA-00750: database has been previously mounted and dismounted

SQL> shutdown immediate;

ORA-01507: database not mounted

ORACLE instance shut down.

SQL> startup mount;

ORACLE instance started.

Total System Global Area  523108352 bytes

Fixed Size            1365740 bytes

Variable Size          318769428 bytes

Database Buffers      197132288 bytes

Redo Buffers            5840896 bytes

Database mounted.

确認PHYSICAL STANDBY狀态

SQL> select database_role,db_unique_name,open_mode from v$database;

DATABASE_ROLE     DB_UNIQUE_NAME         OPEN_MODE

---------------- ------------------------------ --------------------

PHYSICAL STANDBY ogg                MOUNTED

開啟為READ ONLY-- REAL TIME APPLY狀态

SQL> alter database open;

Database altered.

SQL>  alter database recover managed standby database using current logfile disconnect from session;

Database altered.

SQL> select database_role,db_unique_name,open_mode from v$database;

DATABASE_ROLE     DB_UNIQUE_NAME         OPEN_MODE

---------------- ------------------------------ --------------------

PHYSICAL STANDBY ogg                READ ONLY WITH APPLY

檢視LAG情況

此時日志傳輸 、日志應用LAG都為 0,備庫已經重新與主庫同步

SQL> select to_char(SYSDATE,'yyyymmdd hh24:mi:ss') CTIME,NAME,VALUE,DATUM_TIME

  from V$DATAGUARD_STATS

 WHERE NAME LIKE '%lag';  2    3  

CTIME          NAME           VALUE              DATUM_TIME

----------------- ---------------- ------------------------------ ------------------------------

20131030 12:13:23 transport lag    +00 00:00:00           10/30/2013 12:13:22

20131030 12:13:23 apply lag       +00 00:00:00           10/30/2013 12:13:22

确認在SNAPSHOT STANDBY下面的操作都已復原

SQL> select table_name,TABLESPACE_NAME from dba_tables where tablespace_name = 'TBS_XHL';

TABLE_NAME               TABLESPACE_NAME

------------------------------ ------------------------------

XHL                   TBS_XHL

被删除的表已經恢複

SQL> select count(*) from xhl_snapstb.xhl;

select count(*) from xhl_snapstb.xhl

                                 *

ERROR at line 1:

ORA-00942: table or view does not exist

新增表的操作已經撤銷

  1* SELECT USERNAME FROM DBA_USERS WHERE USERNAME= 'XHL_SNAPSTB'

SQL> /

no rows selected

新增使用者已經撤銷

總結:SNAPSHOT STANDBY 模式将備庫置于可讀寫狀态,可以在此備庫上來回折騰 ,這個

結合REAL APPLICATION TESTING 做更新前測試非常友善。要注意如果在SNAPSHOT STANDBY

上面的資料更改操作過大,恢複回PHYSICAL STANDBY的時間會非常長。