oracle,平台,linux,資料庫,archive,sql
作業系統:linux redhat 4.7
Oracle: 10.2.0.1
主庫:orcl_pd
備庫:LGDG
一、邏輯Standby建立過程
1、建立物理Standby
具體的參考:
Oracle Data Guard Linux 平台 Physical Standby 搭建執行個體
簡單的做如下幾點提示:
(1)初始化參數配置
初始化參數的修改並不僅僅只是在待建立的Standby資料庫端建立,當前的Primary資料庫甚至同一個Data Guard配置中的其他Standby資料庫的初始化參數都有可能需要進行修改。
對於Primary資料庫,至少需要新增一個LOG_ARCHIVE_DEST_n參數,以發送REDO資料到新的Standby端,同時其他一些與Standby環境相關的參數也會涉及調整,如LOG_ARCHIVE_CONFIG及FAL_*等參數。
而對於現有的Standby資料庫(如果有的話),主要是基於角色轉換的考慮,有必要對一些參數提前進行設定,設定的參數對當前功能不會有任何影響或促進,如果確定不進行角色轉換,那麼同一個Data Guard配置中的其他Standby資料庫初始化參數也可以不做任何調整。
(2)監聽和NetService配置
建議用Net Manager 工具來配置,這樣不容易出現錯誤。
(3)建立密鑰檔案
必須確保在同一個Data Guard環境中,所有資料庫的SYS使用者擁有相同密碼,建議從其他伺服器複製密鑰檔案到本地,然後按照密鑰檔案名稱的格式修改檔案名稱即可。
注意Windows平台和Linux/UNIX平台下,密鑰檔案名稱的命名格式並不相同,Windows平台下密鑰檔案名稱格式為PWD[sid].ora,而Linux/UNIX平台下密鑰檔案名稱格式為orapw[sid],注意檔案名稱的大小寫喲。
2、Primary資料庫產生資料字典
執行下列過程,產生LogMiner字典資訊:
SQL> EXECUTE DBMS_LOGSTDBY.BUILD;
PL/SQL procedure successfully completed.
注意:在Primary產生資料字典前,一定要確保待轉換的物理Standby資料庫已經停止REDO應用。如果已經啟用了REDO應用,執行下列語句停止REDO應用:
SQL>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
Database altered.
控制檔案中記錄了記錄檔的應用狀態,正常情況下一個記錄檔只會被應用一次,如果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;
Database altered.
執行完該語句之後,關閉資料庫並重新啟動到MOUNT狀態:
SQL> SHUTDOWN IMMEDIATE
ORA-01507: database not mounted
ORACLE instance shut down.
SQL> STARTUP MOUNT;
ORACLE instance started.
Total System Global Area 167772160 bytes
Fixed Size 1218316 bytes
Variable Size 79694068 bytes
Database Buffers 83886080 bytes
Redo Buffers 2973696 bytes
Database mounted.
為什麼要重啟?因為上述操作涉及邏輯Standby資料庫更名,包括DBID、INCARNATION等均已被重新初始化。
再次查看DB_NAME參數和資料庫角色:
SQL> SHOW PARAMETER DB_NAME;
NAME TYPE VALUE
-------------------------- ----------- ------------------------------
db_name string LGDG
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=/u01/archive VALID_FOR=(ONLINE_LOGFILES, ALL_ROLES) DB_UNIQUE_NAME=LGDG'; # LGDG 是在tnsnames.ora 中配置的
System altered.
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_3='LOCATION=/u01/std
VALID_FOR=(STANDBY_LOGFILES, STANDBY_ROLE) DB_UNIQUE_NAME=LGDG';
System altered.
5、開啟邏輯Standby
由於邏輯Standby與Primary資料庫事務並不一致,因此第一次開啟時必須指定RESETLOGS子句,執行語句如下:
SQL> ALTER DATABASE OPEN RESETLOGS;
Database altered.
然後執行下列SQL命令開始應用REDO資料:
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY ;
Database altered.
如果要啟用即時應用,建議首先建立Standby Redologs,例如,為該邏輯Standby建立幾組Standby Redologs:
SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 4 '/u01/app/oracle/oradata/orcl/redo04.log' SIZE 50m;
Database altered.
重新執行啟動REDO應用的命令,附加APPLY IMMEDIATE子句,以開啟即時應用(由於當前REDO應用已經啟動,因此我們首先停止REDO應用):
SQL> ALTER DATABASE STOP LOGICAL STANDBY APPLY;
Database altered.
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;
Database altered.
6、驗證環境
所有配置完成,接下來嘗試在Primary資料庫端執行修改操作,看看是否能夠分別在邏輯Standby和物理Standby端應用。
首先在Primary資料庫端執行下列語句,向tmp1表插入一條新記錄並提交:
SQL> insert into scott.dept values(1,'dave','dmm');
1 row created.
SQL> commit;
Commit complete.
SQL> alter system switch logfile;
System altered.
接下來看看邏輯Standby的同步情況:
SQL> select * from scott.dept;