oracle 11g dataguard 使用快照實現臨時讀寫

racle 11g dataguard已經可以臨時打開可讀寫備庫,打開後可以進行更改,做壓力測試等工作,完成後不用進行重新恢復備庫直接可以將角色更改爲standby繼續應用管理日誌。

理備庫的初始狀態是正在應用日誌,我們執行下面的命令生成快照數據庫,

SQL> alter database convert to snapshot standby;

alter database convert to snapshot standby

*

ERROR at line 1:

ORA-38784: Cannot create restore point 'SNAPSHOT_STANDBY_REQUIRED_11/23/201210:49:53'.

ORA-01153: an incompatible media recovery is active

看到了報錯信息,不過從報錯信息中,我們也能看到,實際上所謂的快照數據庫,Oracle是利用了閃回數據庫的功能,首先他要生成一個restore point,

也就是將來閃回數據庫的起點。

正確的操作是停止日誌應用,然後把數據庫轉換成快照數據庫

SQL> recover managed standby database cancel;

Media recovery complete.

SQL> alter database convert to snapshot standby;

Database altered.

SQL> select status from v$instance;

STATUS

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

MOUNTED

SQL> alter database open;

Database altered.

查看數據庫狀態,是以讀寫的方式打開的,並且數據庫是快照數據庫的狀態

SQL> select name,open_mode,database_role,flashback_on from v$database;

NAME OPEN_MODE DATABASE_ROLE FLASHBACK_ON

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

DB01 READ WRITE SNAPSHOT STANDBY RESTORE POINT ONLY

接下來就可以做操作了,如果有壓力測試需求在這個狀態下可以進行

SQL> create table d(x int,y char(3));

Table created.

SQL> insert into d values(100,'t');

1 row created.

SQL> commit;

Commit complete.

SQL> select * from t;

no rows selected

SQL> select * from d;

X Y

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

100 t

如果要改回原來的物理備庫狀態,要關閉數據庫,在mount狀態下執行命令

SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup mount

ORACLE instance started.

Total System Global Area 634679296 bytes

Fixed Size 2231032 bytes

Variable Size 411043080 bytes

Database Buffers 218103808 bytes

Redo Buffers 3301376 bytes

Database mounted.

SQL> alter database convert to physical standby;

Database altered.

SQL> shutdown immediate

ORA-01507: database not mounted

ORACLE instance shut down.

SQL> startup

ORACLE instance started.

Total System Global Area 634679296 bytes

Fixed Size 2231032 bytes

Variable Size 411043080 bytes

Database Buffers 218103808 bytes

Redo Buffers 3301376 bytes

Database mounted.

Database opened.

數據庫狀態已經是物理備庫,當然剛纔做的操作也看不到了,比如說D表

SQL>select name,open_mode,database_role,flashback_on from v$database;

NAME OPEN_MODE DATABASE_ROLE FLASHBACK_ON

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

DB01 READ ONLY PHYSICAL STANDBY NO

SQL> select * from d;

select * from d

*

ERROR at line 1:

ORA-00942: table or view does not exist

開啓日誌應用模式

SQL> recover managed standby database disconnect;

Media recovery complete.

SQL> select name,open_mode,database_role,flashback_on from v$database;

NAME OPEN_MODE DATABASE_ROLE FLASHBACK_ON

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

DB01 READ ONLY WITH APPLY PHYSICAL STANDBY NO

在主庫上:

SQL> create table d(x number);

Table created.

SQL> insert into d values(1);

1 row created.

SQL> commit;

Commit complete.

SQL> alter system switch logfile;

System altered.

回到備庫:

SQL> select * from d;

X

----------

1



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章