首页 » ORACLE » 配置11Gr2 physical dataguard,11203 RAC 到single instance

配置11Gr2 physical dataguard,11203 RAC 到single instance

11G DATA Guard在新特性physical standby可以在apply log时,open read only,并且可以real-time apply,这样standby db 也就告别了用户老觉的机器闲置,丢掉了在发生故障时才见其价值的歧视。

standby db在高可用中不但可以用来做灾备,还可以平时用来测试、做报表统计,及logical standby的Rolling upgrade

下面配置一种DATA Guard,primary db是2nodes 11203 RAC,physical standby是11203 的single instance,Primary db有用到ASM存储文件,Single instance只用local filesystem

primary database server:

[grid@znode1 ~]$ olsnodes
znode1
znode2

sys@RAC>select * from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production
PL/SQL Release 11.2.0.3.0 - Production
CORE    11.2.0.3.0      Production
TNS for Linux: Version 11.2.0.3.0 - Production
NLSRTL Version 11.2.0.3.0 - Production

sys@RAC>show parameter cluster
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
cluster_database                     boolean     TRUE
cluster_database_instances           integer     2
cluster_interconnects                string

sys@RAC>select group#,thread#,sequence#,bytes,blocksize,members from v$log;

GROUP#    THREAD#  SEQUENCE#      BYTES  BLOCKSIZE    MEMBERS
---------- ---------- ---------- ---------- ---------- ----------
1          1         93   52428800        512          2
2          1         92   52428800        512          2
3          2         33   52428800        512          2
4          2         32   52428800        512          2

sys@RAC>select member,group# from v$logfile order by 2;
MEMBER                                                           GROUP#
------------------------------------------------------------ ----------
+FLRV/rac/onlinelog/group_1.260.790169423                             1
+DBDG/rac/onlinelog/group_1.262.790169417                             1
+FLRV/rac/onlinelog/group_2.259.790169425                             2
+DBDG/rac/onlinelog/group_2.261.790169423                             2
+DBDG/rac/onlinelog/group_3.258.790169683                             3
+FLRV/rac/onlinelog/group_3.258.790169685                             3
+DBDG/rac/onlinelog/group_4.257.790169685                             4
+FLRV/rac/onlinelog/group_4.257.790169689                             4

8 rows selected.

sys@RAC>select name from v$datafile;
NAME
----------------------------------------------------
+DBDG/rac/datafile/system.260.790169267
+DBDG/rac/datafile/sysaux.267.790169269
+DBDG/rac/datafile/undotbs1.263.790169271
+DBDG/rac/datafile/users.266.790169271
+DBDG/rac/datafile/undotbs2.259.790169575

sys@RAC>show parameter name
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_file_name_convert                 string
db_name                              string      rac
db_unique_name                       string      rac
global_names                         boolean     FALSE
instance_name                        string      rac1
service_names                        string      rac.anbob.com

NOTE:
每个THREAD 两组日志,每组日志两个成员分别在+DBDG,+FLRV

standby database server:

sys@ORA11GR2>select * from v$version WHERE ROWNUM=1;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production


sys@ORA11GR2>show parameter cluster
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
cluster_database                     boolean     FALSE
cluster_database_instances           integer     1
cluster_interconnects                string

NOTE:
Standby db版本与primary db相同,但是一个单实例



确保实例使用spfile启动,在primary db为了直观增加一个service name,不是必须的,修改service_names 参数,默认是db_unique_name + [.db_domain],这是一个动态参数不需要重启实例,可以通过

system set也可以通过srvctl add service增加,pmon process会自动注册到listener上。
sys@RAC>show parameter service

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
service_names                        string      rac.anbob.com

sys@RAC>alter system set service_names='rac.anbob.com','prmrdb';

sys@RAC>show parameter service

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
service_names                        string      rac.anbob.com, prmrdb

下面正式开始DATA GUARD配置


1.physical standby安装oracle software . 另外创建db所需要的目录机构如adump,oradata,这里我们用OMF结构也就是ORACLE管理方式

[oracle@dbserver1 ~]$ . 11g.env
[oracle@dbserver1 ~]$ env |grep ORACLE
ORACLE_SID=stdby
ORACLE_BASE=/u02/app/oracle
ORACLE_TERM=xterm
ORACLE_HOME=/u02/app/oracle/product/11.2.0/db_2

[oracle@dbserver1 admin]$ mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/{a,dp}dump
[oracle@dbserver1 admin]$ mkdir -p $ORACLE_BASE/fast_recovery_area/$ORACLE_SID/onlinelog
[oracle@dbserver1 admin]$ mkdir -p $ORACLE_BASE/oradata/$ORACLE_SID/datafile
[oracle@dbserver1 admin]$ mkdir -p $ORACLE_BASE/oradata/$ORACLE_SID/tempfile
[oracle@dbserver1 admin]$ mkdir -p $ORACLE_BASE/oradata/$ORACLE_SID/controlfile


2. 在standby db配置tnsnames.ora记录,这里我用的是SCAN 地址,也就是可以连接任何节点

primarytns =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac-scan.anbob.com)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = prmrdb.anbob.com)
)
)



3. 增加一个静态监听,在 physical standby db

cd $ORACLE_HOME/network/admin
vi listener.ora

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = stdby)
(SID_NAME = stdby)
(ORACLE_HOME = /u02/app/oracle/product/11.2.0/db_2)
)
)

LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = dbserver1)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)



4. 在RAC的每个节点增加TNSNAMES.ORA记录,在primary db

[oracle@znode1 ~]$ cd $ORACLE_HOME/network/admin
[oracle@znode1 admin]$ vi tnsnames.ora
stdbytns =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.168.173)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SID = stdby)
)
)


5. 启动force logging 在 primary DB
sys@RAC>select force_logging from v$database;
FOR
---
NO
sys@RAC>alter database force logging;

sys@RAC>select force_logging from v$database;
FOR
---
YES




6,对于网络认证我这里没有用SSL,而是PASSWORD文件,复制password文件从primary db到standby host's ORACLE_HOME/dbs,并重命名为standby instance

[oracle@znode1 dbs]$ scp orapwrac1 192.168.168.173:/u02/app/oracle/product/11.2.0/db_2/dbs
oracle@192.168.168.173's password:
orapwrac1         100% 1536     1.5KB/s   00:00

login standby host
[oracle@dbserver1 dbs]$ mv orapwrac1 orapwstdby


7.修改 data guard 参数 to primary. 包括DG配置和 redo传输参数如SYNC,ASYNC, AFFIRM, NOAFFIRM, archive log , datafile/logfile 文件名转换

sys@RAC>alter system set log_archive_config='dg_config=(rac,stdby)' scope=both ;
System altered.

tip:
DG_CONFIG list that includes the DB_UNIQUE_NAME of the primary database and each standby database

sys@RAC>alter system set log_archive_dest_1='location=use_db_recovery_file_dest valid_for=(all_logfiles,all_roles) db_unique_name=rac' scope=both;
System altered.

sys@RAC>alter system set log_archive_dest_2='service=STDBYTNS LGWR ASYNC NOAFFIRM max_failure=10 max_connections=5 reopen=180 valid_for=(online_logfiles,primary_role)

db_unique_name=stdby' scope=both;
System altered.

sys@RAC>alter system set log_archive_dest_state_1='enable' scope=both;
sys@RAC>alter system set log_archive_dest_state_2='enable' scope=both;
sys@RAC>alter system set fal_server='STDBYTNS' scope=both;
sys@RAC>alter system set log_archive_max_processes=10 scope=both;
sys@RAC>alter system set db_file_name_convert='+DBDG/rac','/u02/app/oracle/oradata/stdby' scope=spfile;
sys@RAC>alter system set log_file_name_convert='+FLRV/rac','/u02/app/oracle/fast_recovery_area/stdby','+DBDG/rac','/u02/app/oracle/fast_recovery_area/stdby' scope=spfile;
sys@RAC>alter system set standby_file_management='AUTO' scope=both;


8,启用primary库rac 到archivelog mode
[oracle@znode1 oracle]$ srvctl stop database  -d rac
[oracle@znode1 oracle]$ srvctl start database  -d rac -o mount
idle>archive log list
Database log mode              No Archive Mode
Automatic archival             Disabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     72
Current log sequence           73

idle>alter database archivelog;
Database altered.

idle>archive log list
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     72
Next log sequence to archive   73
Current log sequence           73


9,在standby database 创建初始化参数,只写db_name

[oracle@dbserver1 dbs]$ vi initstdby.ora

*.db_name='stdby'

10,standby database 启动到nomount状态
[oracle@dbserver1 dbs]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.3.0 Production on Wed Aug 8 17:59:06 2012

Copyright (c) 1982, 2011, Oracle.  All rights reserved.

Connected to an idle instance.

idle>startup nomount
ORACLE instance started.
Total System Global Area  167395328 bytes
Fixed Size                  1343640 bytes
Variable Size             113250152 bytes
Database Buffers           50331648 bytes
Redo Buffers                2469888 bytes
idle>


11,用11g的新特性rman active duplicate 还原主库到备库,在primary host
[oracle@znode1 oracle]$ rman target / auxiliary sys/oracle@stdbytns
rman>

duplicate target database for standby from active database
spfile
parameter_value_convert 'rac','stdby','RAC','stdby'
set db_unique_name='stdby'
set db_file_name_convert='+DBDG/rac','/u02/app/oracle/oradata/stdby','+DBDG/rac/tempfile','/u02/app/oracle/oradata/stdby'
set log_file_name_convert='+FLRV/rac','/u02/app/oracle/fast_recovery_area/stdby','+DBDG/rac','/u02/app/oracle/oradata/stdby'
set control_files='/u02/app/oracle/oradata/stdby/controlfile/control01.ctl'
set log_archive_max_processes='5'
set LOG_ARCHIVE_FORMAT='log%t_%s_%r.arc'
set REMOTE_LOGIN_PASSWORDFILE='EXCLUSIVE'
set fal_server='primarytns'
SET cluster_database='false'
set db_create_file_dest  = '/u02/app/oracle/oradata/stdby'
set db_recovery_file_dest  = '/u02/app/oracle/fast_recovery_area'
set standby_file_management='AUTO'
set log_archive_config='dg_config=(rac,stdby)'
set log_archive_dest_2='service=PRIMARYTNS LGWR ASYNC NOAFFIRM max_failure=10 max_connections=5 reopen=180 valid_for=(online_logfiles,primary_role) db_unique_name=rac'
set log_archive_dest_1='location=use_db_recovery_file_dest valid_for=(all_logfiles,all_roles) db_unique_name=stdby'
set audit_file_dest = '/u02/app/oracle/admin/stdby/adump'
set diagnostic_dest= '/u02/app/oracle'
reset REMOTE_LISTENER
reset local_listener

TIP:
保证以下参数指定目录在备库存在audit_file_dest,control_files,如果没有audit_file_dest目录,备库会启动后无法登录遇ORA-09925 错误,解决方法是如下
[root@dbserver1 ~]# ps -ef|grep ora_|grep -v grep|awk  '{print $2}'|xargs kill -9
[oracle@dbserver1 dbs]$ rm -rf /dev/shm/ora_stdby*

如果上面失败第二次duplicate会遇RMAN-05537,解决方法是shutdown abort standby db,rm spfile,startup nomount with pfile,re-run rman dumplicate on primary db


12,修改standby database spfile 记录,把primary instance记录删除,重建Standby spfile
sys@RAC>create pfile from spfile;
File created.

[oracle@dbserver1 dbs]$ vi initstdby.ora
rac1.__db_cache_size=209715200
rac2.__db_cache_size=209715200
stdby.__db_cache_size=339738624
stdby.__java_pool_size=4194304
rac1.__large_pool_size=4194304
rac2.__large_pool_size=4194304
stdby.__large_pool_size=4194304
rac1.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
stdby.__oracle_base='/u02/app/oracle'#ORACLE_BASE set from environment
rac1.__pga_aggregate_target=293601280
rac2.__pga_aggregate_target=293601280
stdby.__pga_aggregate_target=339738624
...

note:
删除rac1和rac2开头的实例参数,可以按需要修改要修改的参数,因为从primary db传过来两个undo TBS(每个实例一个),需在standby db指定undo表空间*.undo_tablespace='UNDOTBS1',重建spfile

sql>create spfile from pfile;
File created.

sql>startup force

13,在standby db增加standby 日志 做real-time apply,standby log 每个thread 日志组比online log 组数多一个,standby日志大小与online redo相同



primary db:
sys@RAC>select group#,thread#,bytes,members from v$log;

GROUP#    THREAD#      BYTES    MEMBERS
---------- ---------- ---------- ----------
1          1   52428800          2
2          1   52428800          2
3          2   52428800          2
4          2   52428800          2

standby db:
alter database add standby logfile size 52428800;
增加6组(number of group per thread +1)* number of thread

14,修改standby database 到archive log mode

15,Starting Redo Apply on the physical standby database

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;

USING CURRENT LOGFILE 表示接受到redo log立及应用,启用real-time apply
DISCONNECT 表示后台进程应用


有时因为primary db log_archive_dest_2 值  service=STDBYTNS LGWR ASYNC NOAFFIRM,不能保证适时传输时,需要alter system archive log current 或alter system switch logfile切日志查看

同步数据是否成功,当然也可以改log_archive_dest_2 的值。

验证日志传输与应用
SELECT RESETLOGS_ID,THREAD#,SEQUENCE#,STATUS,ARCHIVED FROM V$ARCHIVED_LOG

sys@RAC>SELECT RECOVERY_MODE FROM V$ARCHIVE_DEST_STATUS WHERE DEST_ID=2;

RECOVERY_MODE
-----------------------
MANAGED REAL TIME APPLY

SQL>SELECT MESSAGE FROM V$DATAGUARD_STATUS;
...
LNS: Beginning to archive log 1 thread 1 sequence 117
ARCH: Completed archiving thread 1 sequence 116 (6010717-6011086)
LNS: Completed archiving log 1 thread 1 sequence 117
ARCH: Beginning to archive thread 1 sequence 117 (6011086-6011618)
LNS: Standby redo logfile selected for thread 1 sequence 118 for destination LOG_ARCHIVE_DEST_2
LNS: Beginning to archive log 2 thread 1 sequence 118
ARCH: Completed archiving thread 1 sequence 117 (6011086-6011618)

sys@RAC>SELECT name, value, datum_time, time_computed FROM V$DATAGUARD_STATS;

NAME                             VALUE                          DATUM_TIME                     TIME_COMPUTED
-------------------------------- ------------------------------ ------------------------------ ------------------------------
transport lag                    +00 00:00:00                   08/13/2012 16:09:02            08/13/2012 16:09:03
apply lag                        +00 00:00:00                   08/13/2012 16:09:02            08/13/2012 16:09:03
apply finish time                +00 00:00:00.000                                              08/13/2012 16:09:03
estimated startup time           20                                                            08/13/2012 16:09:03

The apply lag metric is computed using data that is periodically received from the primary database. The DATUM_TIME column contains a timestamp of when this data was last

received by the standby database. The TIME_COMPUTED column contains a timestamp taken when the apply lag metric was calculated

sql>SELECT * FROM V$STANDBY_EVENT_HISTOGRAM WHERE NAME = 'apply lag'
sys@RAC>SELECT * FROM V$STANDBY_EVENT_HISTOGRAM WHERE NAME = 'apply lag';

NAME                  TIME UNIT                  COUNT LAST_TIME_UPDATED
--------------- ---------- ---------------- ---------- --------------------
apply lag                0 seconds                2402 08/13/2012 16:12:45
apply lag                1 seconds                  43 08/13/2012 16:12:40
apply lag                2 seconds                  13 08/13/2012 16:02:40
apply lag                3 seconds                  13 08/13/2012 16:01:08
apply lag                4 seconds                   4 08/13/2012 13:16:47
...

当然可以建一张表来测试同步了,在两个节点上的事务也都可以同步到standby实例上

Stopping Redo Apply
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

打赏

对不起,这篇文章暂时关闭评论。