oracle dataguard

zhengbao_jun發表於2009-03-30

Logical Standby配置:

 

以下資料型別不被支援:

NCLOB

LONG

LONG RAW

BFILE

ROWID

UROWID

 

檢查不被支援的表:

SQL> SELECT DISTINCT OWNER,TABLE_NAME FROM DBA_LOGSTDBY_UNSUPPORTED ORDER BY OWNER,TABLE_NAME;

 

以下操作不被支援:

ALTER DATABASE

ALTER SESSION

ALTER SNAPSHOT

ALTER SNAPSHOT LOG

ALTER SYSTEM SWITCH LOG

CREATE CONTROL FILE

CREATE DATABASE

CREATE DATABASE LINK

CREATE PFILE FROM SPFILE

CREATE SCHEMA AUTHORIZATION

CREATE SNAPSHOT

CREATE SNAPSHOT LOG

CREATE SPFILE FROM PFILE

CREATE TABLE AS SELECT FROM A CLUSTER TABLE

DROP DATABASE LINK

DROP SNAPSHOT

DROP SNAPSHOT LOG

EXPLAIN

LOCK TABLE

RENAME

SET CONSTRAINTS

SET ROLE

SET TRANSACTION

 

高階佇列的管理和物化檢視的重新整理不被支援(DBMS_AQADMDBMS_MVIEW_REFRESH

 

Logical Standby要求每張表應該有Primary key或者Unique index,如果必須有沒有唯一性標示的表,那麼可以啟用Primary庫的supplemental logging屬性,但是這樣將會在redo log中記錄該表中每一條記錄的所有欄位作為標示,會大大增加redo log的記錄量。

 

檢查沒有唯一性標示的表:

SQL> SELECT OWNER, TABLE_NAME,BAD_COLUMN FROM DBA_LOGSTDBY_NOT_UNIQUE WHERE TABLE_NAME NOT IN (SELECT TABLE_NAME FROM DBA_LOGSTDBY_UNSUPPORTED);

 

如果可以確認表中有唯一標示的欄位,但是又不想真正建立主鍵或者索引來增加更新的開銷,那麼可以建立disabled RELY型別的約束,比如:

SQL> ALTER TABLE mytab ADD PRIMARY KEY (id, name) RELY DISABLE;

 

檢查supplemental logging是否已經被啟用。

SQL> SELECT SUPPLEMENTAL_LOG_DATA_PK, SUPPLEMENTAL_LOG_DATA_UI FROM V$DATABASE;

 

用以下方法啟用Primary庫的supplemental logging屬性:

SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY, UNIQUE INDEX) COLUMNS;

 

啟用supplemental logging屬性以後,作一次日誌切換,保證當前日誌中不包含非追加日誌資料(nonsupplemental log)。

SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;

 

建立一個新的表空間,用於LogMiner,否則Logical Standby需要的物件將預設建立在SYSTEM表空間中。

SQL> CREATE TABLESPACE logmnrts DATAFILE '/disk1/oracle/dbs/logmnrts.dbf' SIZE25MAUTOEXTEND ON MAXSIZE UNLIMITED;

SQL> EXECUTE DBMS_LOGMNR_D.SET_TABLESPACE('logmnrts');

 

關閉Primary備份所有資料檔案,傳到Standby

 

啟動Primary,建立logical standby database的資料字典

SQL> EXECUTE DBMS_LOGSTDBY.BUILD;

 

檢查需要上傳到Standby上的歸檔日誌資訊

SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;

SQL> SELECT NAME FROM V$ARCHIVED_LOG WHERE (SEQUENCE#=(SELECT MAX(SEQUENCE#) FROM V$ARCHIVED_LOG WHERE DICTIONARY_BEGIN = 'YES' AND STANDBY_DEST= 'NO'));

 

NAME

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

/opt/oracle/oradata/orcl/archive/1_29.dbf

 

修改PrimaryStandby上的tnsnames.oralistener.ora,配置方法跟Physical Standby中一樣。

 

修改Standby上初始化引數中的fal_serverfal_client值。

 

設定Standby資料庫

SQL> STARTUP MOUNT;

SQL> ALTER DATABASE GUARD ALL;

SQL> ALTER DATABASE REGISTER LOGICAL LOGFILE '/opt/oracle/oradata/orcl/archive/1_29.dbf';

SQL> ALTER DATABASE START LOGICAL STANDBY APPLY INITIAL;

 

初次啟動Standby需要APPLY INITIAL,以後直接執行以下SQL啟動和關閉Standby日誌應用。

SQL> ALTER DATABASE STOP LOGICAL STANDBY APPLY;

SQL> ALTER DATABASE START LOGICAL STANDBY APPLY;

 

Primary作日誌歸檔,測試整個環境是否設定成功。

 

檢查Standby的日誌應用情況:

SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME, DICT_BEGIN, DICT_END FROM DBA_LOGSTDBY_LOG ORDER BY SEQUENCE#;

Trackback:http://tb.blog.csdn.net/TrackBack.aspx?PostId=59323

 

http://www.360doc.com/content/060711/17/7925_153837.html

 

 

 


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

相關文章