Logical Standby Database的配置步驟.

imlihj2007發表於2008-08-26

Logical Standby Database的配置步驟.

一:首先要確認主資料庫處於歸檔模式

Archive log list

如果是沒有歸檔的話要做如下操作

Shutdown immediate

Startup mount

Alter database archivelog;

Alter system archive log start

Archive log list

Alter database open

後:將主資料庫置為FORCE LOGGING模式.在主資料庫建立之後做如下操作:

ALTER DATABASE FORCE LOGGING;

確認主資料庫是歸檔的並定義好本地歸檔.如下:

SQL >ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=e:oracleoradataorclarchive MANDATORY' SCOPE=BOTH;(路徑根據實際的生產環境來確定)

確認LOG_PARALLELISM初始化引數值

Logical Standby Database要求此引數的值為1,是個預設值.如果查出來的引數值為1則不需要做修改,如果不是1值則要用ALTER SYSTEM SET命令做修改.具體操作如下:

SQL>SHOW PARAMETER LOG_PARALLELISM ------檢視引數的當前值

SQL>ALTER SYSTEM SET LOG_PARALLELISM=1 SCOPE=BOTH;

修改完以後要關閉資料庫並重新啟動此引數才有效.

SQL>SHUTDOWN IMMEDIATE

SQL>STARTUP

三:確認支援的資料型別和表(略):

四:確認主資料庫可以補足日誌(Supplemental Logging)

SQL> SELECT SUPPLEMENTAL_LOG_DATA_PK, SUPPLEMENTAL_LOG_DATA_UI FROM V$DATABASE;

SUP SUP

--- ---

NO NO (NO值表示此時主資料庫是不支援補足日誌的)

使主資料庫可以補足日誌

SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY, UNIQUE INDEX) COLUMNS;(這條語句將有關由主資料修改的行唯一資訊可以透過日誌傳到備用資料庫中並做Log Apply)

SQL>ALTER SYSTEM ARCHIVE LOG CURRENT;

確認一下主資料庫此時支援補足日誌

SQL> SELECT SUPPLEMENTAL_LOG_DATA_PK, SUPPLEMENTAL_LOG_DATA_UI FROM V$DATABASE;

SUP SUP

--- ---

YES YES (YES值表示此時主資料庫是支援補足日誌的)

SUPPLEMENTAL_LOG_DATA_PK:支援補足日誌,其資訊是primary key

SUPPLEMENTAL_LOG_DATA_UI:支援補足日誌,其資訊是unique index

五:在主資料庫建立一個交替的表空間.

並用DBMS_LOGMNR_D.SET_TABLESPACE將某些表放到這個表空間中.因為在邏輯備用資料庫中有一些表是屬於SYSSYSTEM使用者的,而這些是放在表空間的.這些表可能在一段時間後記錄猛增.為了使SYSTEM表空間不會被用滿而導致資料庫DOWN,建立這個交替的表空間來存放這些表.

SQL>CREATE TABLESPACE logmnrts DATAFILE '/disk1/oracle/dbs/logmnrts.dbf'

SIZE 25M AUTOEXTEND ON MAXSIZE 2048M

SEGMENT SPACE MANAGEMENT AUTO;(根據實際的生產環境具體修改)

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

(上面一步EXECUTE DBMS_LOGMNR_D.SET_TABLESPACE('logmnrts');可以在以後的維護中再做相應的維護)

六:建立邏輯備用資料庫

確認主資料庫的資料檔案和日誌檔案(冷備資料庫

在主資料庫中透過查詢V$DATAFILE獲得資料檔案的位置

SQL> select name from v$datafile;

關閉資料庫:SQL>SHUTDOWN IMMEDIATE

將前面得到的資料檔案複製到一個臨時的位置 F:ORACLE

啟動資料庫到MOUNT狀態下:SQL>STARTUP MOUNT

為邏輯備用資料庫建立一個備份的控制檔案:

ALTER DATABASE BACKUP CONTROLFILE TO

f:oraclebkcontrol.ora';

七: 將主資料庫放在restricted session模式下

ALTER SYSTEM ENABLE RESTRICTED SESSION;

建立Logminer字典(Logical Standby Database在分解REDO LOGSQL語句時需要Logminer工具,而這個工具在使用之前需要建立Logminer字典):

SQL> ALTER DATABASE OPEN;

SQL> EXECUTE DBMS_LOGSTDBY.BUILD;

取消主資料庫的restricted session模式使使用者可以執行DMLDDL語句:

SQL> ALTER SYSTEM DISABLE RESTRICTED SESSION;

八:檢視最近的歸檔日誌(在後面的邏輯備用資料庫的建立過程中需要用到)

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

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

E:ORACLEORADATAORCLARCHIVE1_19.DBF

九:為備用資料庫建立準備初始化引數:

SQL> CREATE PFILE='f:oracleinitstdby.ora' FROM SPFILE;

在備用資料庫伺服器修改初始化引數(剛複製過來的初始化引數檔案)修改後的值大概如下:

在備用資料庫一端建立一個新的例項.如下操作:

oradim –new –sid standby –startmode auto

在主資料配置qlnet.ora檔案.配置完之後分別如下:

SQLNET.EXPIRE_TIME=2

db_name='bak'

log_archive_dest_1='LOCATION=E:oracleoradatabakarch MANDATORY'

standby_archive_dest='E:oracleoradatabakarch1'

log_archive_start=TRUE

lock_name_space=bak

這些的地方都是主要的地方!

在主資料庫和備用資料庫用lsnrctl startlsnrctl stop啟動和關閉監聽器.然後在主資料庫用tnsping standby和在備用資料庫用tnsping orcl試看兩個庫是否是通的.

用初始化引數檔案啟動資料庫到MOUNT狀態下.

SQL> STARTUP MOUNT PFILE= f:oracleadminstandbypfileinitstdby.ora;

十:在備用資料庫開啟DATA GUARD

SQL> ALTER DATABASE GUARD ALL;

SQL> ALTER DATABASE OPEN RESETLOGS;ALTER DATABASE OPEN

十一:使用DBNEWID(nid)工具來重設資料庫名.

要先關閉資料庫並把資料庫啟動為MOUNT狀態:

SQL> SHUTDOWN IMMEDIATE;

SQL> STARTUP MOUNT PFILE= f:oracleinitstdby.ora;

DBNEWID工具,操作如下(這個是在命令列下操作):

nid TARGET=SYS/oracled@orcl DBNAME=standby

然後再關閉資料庫:SQL>SHUTDOWN IMMEDIATE

改變初始化引數: db_name=standby

啟動資料庫為MOUNT狀態:SQL>STARTUP MOUNT;

為備用資料庫建立SERVER PARAMETER FILE:

SQL>CREATE SPFILE FROM PFILE= f:oracleinitstdby.ora;

關閉資料庫然後用SPFILE重啟動資料庫:

SQL>SHUTDOWN IMMEDIATE

SQL>STARTUP MOUNT

SQL>ALTER DATABASE OPEN RESETLOGS;

十二:給備用資料庫建立一個新的臨時檔案(屬於臨時表空間)

先檢視備用庫中是否有臨時檔案,如果沒有就直接建立,如果有要刪除重新建立.(因為從主庫的冷備份複製過來的臨時檔案在備用庫中是不能用的.所以得重建)相應操作如下:

SQL> SELECT * FROM V$TEMPFILE;-------檢視是否有臨時檔案

no rows selected

SQL> ALTER DATABASE TEMPFILE 'tempfilename' DROP;------刪除重建前的臨時檔案

SQL> SELECT TABLESPACE_NAME FROM DBA_TABLESPACES WHERE

2> CONTENTS ='TEMPORARY';--------檢視臨時檔案所屬的臨時表空間名

TABLESPACE_NAME

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

TEMP

SQL> ALTER TABLESPACE TEMP ADD TEMPFILE

2> 'f:oraclestandbytemp01.dbf'

3> SIZE 40M REUSE;--------給這個臨時表空間重建一個臨時檔案

十三:註冊歸檔日誌和啟動SQL Apply Services

SQL> ALTER DATABASE REGISTER LOGICAL LOGFILE

2> ' e:oracleoradataorclarc0004.001';------將最近的歸檔日誌註冊到Logical Standby Database.這裡的e:oracleoradatastdarch ARCH1069826922_21.DBF是在前面得到的.

SQL> ALTER DATABASE START LOGICAL STANDBY APPLY INITIAL;-----啟動redo logs apply,用執行SQL語句的方式來apply redo logs.就是SQL Apply Services.到於INITIAL是第一次啟動SQL Apply Services時要寫的.後面的可以直接用如下操作

SQL> ALTER DATABASE STOP LOGICAL STANDBY APPLY;----停止

SQL> ALTER DATABASE START LOGICAL STANDBY APPLY;----啟動

十四:在主資料庫配置遠端歸檔.

SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_3='SERVICE=payroll3' SCOPE=BOTH;

--------配置遠端歸檔目錄

SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_3=ENABLE SCOPE=BOTH;

--------配置這個歸檔目錄的狀態為可用

SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;----對當前日誌進行歸檔,啟動遠端歸檔.

十五:測試!

查日誌是否已經被註冊到Logical Standby Database.連線到備用資料庫並查詢DBA_LOGSTDBY_LOG檢視.

SQL> ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YY HH24:MI:SS';

Session altered.

SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME, DICT_BEGIN, DICT_END

FROM DBA_LOGSTDBY_LOG ORDER BY SEQUENCE#;

SEQUENCE# FIRST_TIME NEXT_TIME DIC DIC

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

22 23-11-04 14:00:17 23-11-04 14:26:58 NO NO

1 rows selected.

連線到主資料庫並歸檔部分日誌.

SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;

System altered.

SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;

System altered.

再查詢一下DBA_LOGSTDBY_LOG檢視.

SQL> ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YY HH24:MI:SS';

Session altered.

SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME, DICT_BEGIN, DICT_END

2 FROM DBA_LOGSTDBY_LOG ORDER BY SEQUENCE#;

SEQUENCE# FIRST_TIME NEXT_TIME DIC DIC

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

22 23-11-04 14:00:17 23-11-04 14:26:58 NO NO

23 23-11-04 14:26:58 23-11-04 14:33:33 NO NO

2 rows selected.

(可以看到多出來一個新的歸檔日誌)

檢查日誌中的資料是否Apply到邏輯備用資料庫中

在邏輯備用資料庫中查詢DBA_LOGSTDBY_STATS檢視來檢查日誌中的資料是否正被正確地Appled.

SQL> COLUMN NAME FORMAT A30

SQL> COLUMN VALUE FORMAT A30

SQL> SELECT NAME, VALUE FROM V$LOGSTDBY_STATS WHERE NAME = 'coordinator state';

NAME VALUE

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

coordinator state INITIALIZING

在上面的輸出中,coordinator程式正在初始化,這表明Log Apply Service正準備Apply SQL.但是日誌中的資料還沒有開始被Applied到邏輯備用資料庫中.

V$LOGSTDBY看當前的SQL Apply活動狀態.連線到邏輯備用資料庫中,查詢V$LOGSTDBY檢視.

SQL> COLUMN STATUS FORMAT A50

SQL> COLUMN TYPE FORMAT A12

SQL> SELECT TYPE, HIGH_SCN, STATUS FROM V$LOGSTDBY;

TYPE HIGH_SCN STATUS

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

COORDINATOR ORA-16115: loading Log Miner dictionary data

READER ORA-16127: stalled waiting for additional transact

ions to be applied

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

相關文章