天天看點

ORACLE10G DATAGUARD配置筆記

ORACLE10G DATAGUARD配置筆記

環境:

OS:RHL4+ORACLE10G10.2.0.1

IP:172.17.61.160(primary) 172.17.61.161(standby)

ORACLE_SID:orcl

ORACLE_HOME:/oracle/product/10.2.0

一、配置standby database為MAXIMIZE PERFORMANCE模式

二、轉換模式由MAXIMIZE PERFORMANCE到MAXIMIZE PROTECTION

三、主庫和備庫的switchover.

1.設定主庫為force logging

SQL> alter database force logging;

2.設定主庫為歸檔模式:

SQL> archive log list

SQL> shutdown immediate

SQL> startup mount

SQL> alter database archivelog;

3.檢查主機是否有密碼檔案,如沒有需建立

orapwd file='/oracle/product/10.2.0/dbs/orawdorcl.ora' password=sys entries=5

4.為主資料庫添加"備用聯機日志檔案"

SQL> alter database add standby logfile group 4

('/oracle/oradata/orcl/redo04.log') size 50m;

SQL> alter database add standby logfile group 5

('/oracle/oradata/orcl/redo05.log') size 50m;

SQL> alter database add standby logfile group 6

('/oracle/oradata/orcl/redo06.log') size 50m;

SQL> alter database add standby logfile group 7

('/oracle/oradata/orcl/redo07.log') size 50m;

5.修改主庫參數檔案

SQL> create pfile='/oracle/admin/orcl/pfile/init.ora' from spfile;

orcl.__db_cache_size=100663296

orcl.__java_pool_size=4194304

orcl.__large_pool_size=4194304

orcl.__shared_pool_size=54525952

orcl.__streams_pool_size=0

*.audit_file_dest='/oracle/admin/orcl/adump'

*.background_dump_dest='/oracle/admin/orcl/bdump'

*.compatible='10.2.0.1.0'

*.control_files='/oracle/oradata/orcl/control01.ctl','/oracle/oradata/orcl/control02.ctl','/oracle/oradata/orcl/control03.ctl'

*.core_dump_dest='/oracle/admin/orcl/cdump'

*.db_block_size=8192

*.db_domain=''

*.db_file_multiblock_read_count=16

*.db_name='orcl'

*.db_recovery_file_dest='/oracle/flash_recovery_area'

*.db_recovery_file_dest_size=2147483648

*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'

*.job_queue_processes=10

*.log_archive_format='%T%S%r.ARC'

*.log_archive_max_processes=3

*.open_cursors=300

*.pga_aggregate_target=16777216

*.processes=150

*.remote_login_passwordfile='EXCLUSIVE'

*.sga_target=167772160

*.undo_management='AUTO'

*.undo_tablespace='UNDOTBS1'

*.user_dump_dest='/oracle/admin/orcl/udump'

#add below parameter for standy database

*.DB_UNIQUE_NAME='10gpri'

*.log_archive_config='DG_CONFIG=(10gpri,10gstandby)'

*.log_archive_dest_1='location=/oracle/oradata/orcl/archive/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=10gpri'

*.log_archive_dest_2='SERVICE=10gstandby arch ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=10gstandby'

*.STANDBY_FILE_MANAGEMENT=AUTO

*.LOG_ARCHIVE_DEST_STATE_1=ENABLE

*.LOG_ARCHIVE_DEST_STATE_2=ENABLE

*.FAL_SERVER='10gstandby'

*.FAL_CLIENT='10gpri'

6.主庫用PFILE建立SPFILE

[oracle@host160 pfile]$ sqlplus '/ as sysdba'

SQL> create spfile from pfile='/oracle/admin/orcl/pfile/init.ora';

7.建立備用庫的控制檔案

SQL> alter database create standby controlfile as '/tmp/standby_ctl01.ctl';

8.配置主資料庫listener及tnsnames

[oracle@host160 admin]$ cat listener.ora

SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(GLOBAL_DBNAME = orcl)

(ORACLE_HOME = /oracle/product/10.2.0)

(SID_NAME = orcl)

)

LISTENER =

(DESCRIPTION_LIST =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = host160)(PORT = 1521))

#加1522端口供以後做switchover

SID_LIST_LISTENER1 =

LISTENER1 =

(ADDRESS = (PROTOCOL = TCP)(HOST = host160)(PORT = 1522))

[oracle@host160 admin]$ cat tnsnames.ora

#1521和1522端口都能連上主機和備機,這樣在做switchover時就不需要改這裡的設定了

10gpri =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = 172.17.61.161)(PORT = 1522))

(ADDRESS = (PROTOCOL = TCP)(HOST = 172.17.61.160)(PORT = 1522))

(CONNECT_DATA =

(SID = orcl)

10gstandby =

(ADDRESS = (PROTOCOL = TCP)(HOST = 172.17.61.160)(PORT = 1521))

(ADDRESS = (PROTOCOL = TCP)(HOST = 172.17.61.161)(PORT = 1521))

9.複制檔案到備機

[oracle@host161 ~]cd /oracle/oradata/orcl

[oracle@host161 orcl]$rcp host160:/oracle/oradata/orcl/*.dbf .

[oracle@host161 orcl]$rcp host160:/tmp/standby_ctl01.ctl .

[oracle@host161 orcl]$mv standby_ctl01.ctl control01.ctl

[oracle@host161 orcl]$cp control01.ctl control02.ctl

[oracle@host161 orcl]$cp control01.ctl control03.ctl

10.複制并修改備機的參數檔案

[oracle@host161 ~]cd /oracle/admin/orcl/pfile

[oracle@host161 pfile]$rcp host160:/oracle/admin/orcl/pfile/init.ora .

修改為如下:

*.DB_UNIQUE_NAME='10gstandby'

*.log_archive_dest_1='location=/oracle/oradata/orcl/archive/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=10gstandby'

*.log_archive_dest_2='SERVICE=10gpri arch ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=10gpri'

*.FAL_SERVER='10gpri'

*.FAL_CLIENT='10gstandby'

11.生成備用庫密碼檔案

12.修改備機的listener及tnsnames

[oracle@host161 admin]$ cat listener.ora

(ADDRESS = (PROTOCOL = TCP)(HOST = host161)(PORT = 1521))

#加一個1522的端口供以後做switchover

(ADDRESS = (PROTOCOL = TCP)(HOST = host161)(PORT = 1522))

[oracle@host161 admin]$ cat tnsnames.ora

13.測試主備之間網絡連通

[oracle@host160 admin]$ lsnrctl start

[oracle@host160 admin]$ tnsping 10gstandby

[oracle@host161 admin]$ lsnrctl start

[oracle@host161 admin]$ tnsping 10gpri

14.打開備庫

SQL> startup mount pfile='/oracle/admin/orcl/pfile/init.ora';

SQL> alter database recover managed standby database disconnect from session;

15.打開主庫

SQL> startup

16.測試是否OK

主庫:

SQL> alter system switch logfile;

從庫:

SQL> select FIRST_TIME,NEXT_TIME, APPLIED,SEQUENCE# from v$archived_log order by SEQUENCE#;

FIRST_TIME NEXT_TIME APP SEQUENCE#

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

2007-10-16 11:39:33 2007-10-16 14:16:39 YES 5

2007-10-16 14:16:39 2007-10-16 14:21:06 YES 6

1.在備機上:

SQL> shutdown immediate;

SQL> startup mount;

2 ('/oracle/oradata/orcl/redo04.log') size 50m;

2 ('/oracle/oradata/orcl/redo05.log') size 50m;

2 ('/oracle/oradata/orcl/redo06.log') size 50m;

2 ('/oracle/oradata/orcl/redo07.log') size 50m;

2.在主機上

SQL> alter system set log_archive_dest_2='SERVICE=10gstandby LGWR SYNC AFFIRM 2 VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=10gstandby';

SQL>alter database set standby database to maximize protection;

SQL>alter database open;

SQL> select protection_mode from v$database;

PROTECTION_MODE

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

MAXIMUM PROTECTION

3.在備機上

SQL> recover managed standby database disconnect from session;

4.測試一下:

在主機上執行SQL> alte system switch logfile;

在備機上檢視v$standby_log視圖

SQL> select GROUP#,THREAD#,SEQUENCE#,USED,ARCHIVED,STATUS from v$standby_log;

GROUP# THREAD# SEQUENCE# USED ARC STATUS

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

4 1 36 59392 YES ACTIVE

5 1 0 512 NO UNASSIGNED

6 0 0 512 YES UNASSIGNED

7 0 0 512 YES UNASSIGNED

MAXIMIZE PROTECTION和MAXIMIZE AVAILABILITY模式下,備機不能先關閉,會出現如下錯誤

ORA-01154: database busy. Open, close, mount, and dismount not allowed now

正确的開關機順序是:

關機:先關主機,後關備機

開機:先開備機,後開主機

注意:Swithover時隻能先從Primary切到Standby,再從Standby切到Primary.

1.準備原主庫是否有standby redo log,上面1.4已建好了。

2.準備主庫和備庫的參數檔案,最好就是将兩個資料庫的參數檔案互換,在兩台機器上同時保留主庫和備庫的參數檔案。

[oracle@host161 /]$ cd /oracle/admin/orcl/pfile

[oracle@host161 pfile]rcp host160:/oracle/admin/orcl/pfile/init.ora initprimary.ora

[oracle@host161 pfile]rcp init.ora host160:/oracle/admin/orcl/pfile/initstandby.ora

3.從primary 切換到standby

connect / as sysdba

SQL> alter database commit to switchover to physical standby with session shutdown;

SQL> shutdown

SQL> startup mount pfile=/oracle/admin/orcl/pfile/initstandby.ora;

SQL> recover managed standby database disconnect;

4.啟動新備庫端的Listener (port=1522)

[oracle@host160 admin]$ lsnrctl stop

[oracle@host160 admin]$ lsnrctl start LISTENER1

5.從standby 切換到primary

SQL> alter database commit to switchover to primary;

SQL> startup pfile=/oracle/admin/orcl/pfile/initprimary.ora

6.啟動新主庫端的Listener (port=1522)

[oracle@host161 admin]$ lsnrctl stop

[oracle@host161 admin]$ lsnrctl start LISTENER1

7.OK

按照你上的步驟,怎麼在mode轉換時出現:

Database closed.

Database dismounted.

ORACLE instance shut down.

ORACLE instance started.

Total System Global Area 2550136832 bytes

Fixed Size 1980808 bytes

Variable Size 587204216 bytes

Database Buffers 1946157056 bytes

Redo Buffers 14794752 bytes

Database mounted.

SQL> alter system set log_archive_dest_2='SERVICE=10gstandby LGWR VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=10gstandby';

System altered.

SQL> alter database set standby database to maximize protection;

Database altered.

SQL> alter database open;

alter database open

*

ERROR at line 1:

ORA-03113: end-of-file on communication channel

本文轉自 jxwpx 51CTO部落格,原文連結:http://blog.51cto.com/jxwpx/205458,如需轉載請自行聯系原作者