單機Linux平臺Oracle 10g DataGuard Logical Standby 搭建例項

cow977發表於2011-09-01

作業系統:linux redhat 5

Oracle: 10.2.0.1

主庫:orcl

備庫:stby

 

一.  邏輯Standby建立過程

1  建立物理Standby

單機Linux平臺Oracle 10g DataGuard Physical Standby 搭建例項(1)http://space.itpub.net/81227/viewspace-701181

單機Linux平臺Oracle 10g DataGuard Physical Standby 搭建例項(2)http://space.itpub.net/81227/viewspace-701198

單機Linux平臺Oracle 10g DataGuard Physical Standby 搭建例項(3)http://space.itpub.net/81227/viewspace-701231

單機Linux平臺Oracle 10g DataGuard Physical Standby 搭建例項(4)http://space.itpub.net/81227/viewspace-701293

單機Linux平臺Oracle 10g DataGuard Physical Standby 搭建例項(5)http://space.itpub.net/81227/viewspace-702254

單機Linux平臺Oracle 10g DataGuard Physical Standby 搭建例項(6)http://space.itpub.net/81227/viewspace-702263

單機Linux平臺Oracle 10g DataGuard Physical Standby 搭建例項(7)http://space.itpub.net/81227/viewspace-702264

單機Linux平臺Oracle 10g DataGuard Physical Standby 搭建例項(8)http://space.itpub.net/81227/viewspace-702270

單機Linux平臺Oracle 10g DataGuard Physical Standby 搭建例項(9)http://space.itpub.net/81227/viewspace-702272

單機Linux平臺Oracle 10g DataGuard Physical Standby 搭建例項(10)http://space.itpub.net/81227/viewspace-702273

 

2  Primary資料庫生成資料字典

執行下列過程,生成LogMiner字典資訊:

SQL> EXECUTE DBMS_LOGSTDBY.BUILD; 

注意:在Primary生成資料字典前,一定要確保待轉換的物理Standby資料庫已經停止REDO應用。如果已經啟用了REDO應用,執行下列語句停止REDO應用:

SQL>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

控制檔案中記錄了日誌檔案的應用狀態,正常情況下一個日誌檔案只會被應用一次,如果Primary生成的資料字典資訊被物理Standby資料庫應用了,等該物理Standby轉換成邏輯Standby資料庫時(不應用資料字典不代表就不能執行轉換喲)就不會再應用這些檔案,自然也沒有Primary資料庫物件的後設資料,這可能會導致這部分物件的修改不能被邏輯Standby正常應用。

我們操作的根本目的是為了讓邏輯Standby能夠應用到這部分資料字典資訊,只要能夠實現這一點,是否暫停REDO應用或什麼時間暫停REDO應用就無所謂了。這也我們理解另外一個問題,如果Primary生成LogMiner字典資訊時,待轉換的物理Standby資料庫沒有暫停REDO應用怎麼辦?好辦,馬上暫停REDO應用,然後Primary資料庫重新生成一下LogMiner字典資訊就是。

3  轉換物理Standby為邏輯Standby

執行下列語句,轉換物理Standby為邏輯Standby

SQL> SHOW PARAMETER DB_NAME

NAME         TYPE        VALUE

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

db_name        string      orcl

SQL> ALTER DATABASE RECOVER TO LOGICAL STANDBY LGDG; 

執行完該語句之後,關閉資料庫並重新啟動到MOUNT狀態:

SQL> SHUTDOWN IMMEDIATE 

ORA-01507: database not mounted 

ORACLE instance shut down. 

SQL>  STARTUP MOUNT;

為什麼要重啟?因為上述操作涉及邏輯Standby資料庫更名,包括DBIDINCARNATION等均已被重新初始化。

再次檢視DB_NAME引數和資料庫角色:

SQL> SHOW PARAMETER DB_NAME;

NAME               TYPE        VALUE

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

db_name             string      stby

SQL> SELECT DATABASE_ROLE FROM V$DATABASE;

DATABASE_ROLE

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

LOGICAL STANDBY

現在DB_NAME和資料庫的角色都已經被修改。

4  調整邏輯Standby資料庫初始化引數

設定重做日誌檔案路徑,將本地生成的歸檔檔案和Primary資料庫傳送來的歸檔檔案分開,存放到不同目錄內,注意歸檔檔案路徑不要衝突,修改引數如下:

SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=/home/oracle/software/app/oracle/oradata/arch VALID_FOR=(ONLINE_LOGFILES, ALL_ROLES) DB_UNIQUE_NAME=stby';

SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='LOCATION=/home/oracle/software/app/oracle/oradata/arch/stby VALID_FOR=(STANDBY_LOGFILES, STANDBY_ROLE) DB_UNIQUE_NAME=stby';

5  開啟邏輯Standby

由於邏輯StandbyPrimary資料庫事務並不一致,因此第一次開啟時必須指定RESETLOGS子句,執行語句如下:

SQL> ALTER DATABASE OPEN RESETLOGS;

然後執行下列SQL命令開始應用REDO資料:

SQL> ALTER DATABASE START LOGICAL STANDBY APPLY;

如果要啟用實時應用,建議首先建立Standby Redologs,例如,為該邏輯Standby建立幾組Standby Redologs

SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 4 '/u01/app/oracle/oradata/orcl/redo04.log' SIZE 50m; 

重新執行啟動REDO應用的命令,附加APPLY IMMEDIATE子句,以開啟實時應用(由於當前REDO應用已經啟動,因此我們首先停止REDO應用):

SQL> ALTER DATABASE STOP LOGICAL STANDBY APPLY; 

SQL> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;  

6  驗證環境

所有配置完成,接下來嘗試在Primary資料庫端執行修改操作,看看是否能夠分別在邏輯Standby和物理Standby端應用。

首先在Primary資料庫端執行下列語句,向表插入一條新記錄並提交:

SQL> insert into scott.dept values(1,'dave','dmm');

SQL> commit;

SQL> alter system switch logfile;

接下來看看邏輯Standby的同步情況:

SQL> select * from scott.dept;

    DEPTNO DNAME          LOC

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

        10 ACCOUNTING     NEW YORK

        20 RESEARCH       DALLAS

        30 SALES          CHICAGO

        40 OPERATIONS     BOSTON

         1 dave           dmm

提示: 細心觀察重做日誌,發現邏輯Standby有一點設計得很好,從Primary資料庫接收到的重做日誌檔案檔案,應用過之後就會自動刪除,節省了磁碟空間。(10G無此特性,可能是11G的新特性)

OK,至此邏輯Standby建立成功.

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/81227/viewspace-706435/,如需轉載,請註明出處,否則將追究法律責任。

相關文章