天天看点

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,如需转载请自行联系原作者