Oracle MAA--Maximum Availability Architecture

系统环境:

操作系统:RedHat EL5

Oracle:       Oracle 10gR2

Cluster:      CRS 10.2.0.1


Maximum Availability Architecture  最高可用性架构


wKiom1NOWR_gl6IWAAONMffLKdc159.jpg

MAA 配置案例:通过DG实现RAC to RAC的Physical DG,实现数据的容灾。

1、系统环境

案例:

主机环境:

(Prmary DB:)

192.168.8.150  rac1

192.168.8.152  rac1-vip

10.10.10.1     rac1-priv

192.168.8.161  rac2

192.168.8.163  rac2-vip

10.10.10.2     rac2-priv

(Standby  DB:)

192.168.8.191  node1

192.168.8.193  node1-vip

10.10.10.191    node2-priv

192.168.8.192  node2

192.168.8.194  node2-vip

10.10.10.192    node2-priv

数据库环境:

Primary Database:

db_name = prod

db_unique_name = prod

instance_name = prod1 ,prod2

service_name = prod


Standby Database:

db_name = prod

db_unique_name = stddb

instance_name = stddb1 ,stddb2

service_name = stddb

2、主备库配置

主库初始化参数配置:

[oracle@rac2 ~]$ cat initprod2.ora

*.audit_file_dest='/u01/app/oracle/admin/prod/adump'

*.background_dump_dest='/u01/app/oracle/admin/prod/bdump'

*.cluster_database_instances=2

*.cluster_database=true

*.compatible='10.2.0.1.0'

*.control_files='+DG1/prod/controlfile/current.260.801040711','+RECOVERY/prod/controlfile/current.256.801040711','+dg2/prod/controlfile/control03.ctl'

*.core_dump_dest='/u01/app/oracle/admin/prod/cdump'

*.db_block_size=8192

*.db_create_file_dest='+DG1'

*.db_domain=''

*.db_file_multiblock_read_count=16

*.db_name='prod'

*.db_recovery_file_dest='+RECOVERY'

*.db_recovery_file_dest_size=2147483648

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

prod1.instance_number=1

prod2.instance_number=2

*.job_queue_processes=10

*.log_archive_format='arch_%t_%s_%r.log'

*.open_cursors=300

*.pga_aggregate_target=94371840

*.processes=150

*.remote_listener='LISTENERS_PROD'

*.remote_login_passwordfile='exclusive'

*.sga_target=285212672

prod2.thread=2

prod1.thread=1

*.undo_management='AUTO'

prod1.undo_tablespace='UNDOTBS1'

prod2.undo_tablespace='UNDOTBS2'

*.user_dump_dest='/u01/app/oracle/admin/prod/udump'

*.db_unique_name='prod'

LOG_ARCHIVE_CONFIG='DG_CONFIG=(prod,stddb)'

LOG_ARCHIVE_DEST_1= 'LOCATION=+RECOVERY   VALID_FOR=(ALL_LOGFILES,ALL_ROLES)  DB_UNIQUE_NAME=prod'

LOG_ARCHIVE_DEST_2= 'SERVICE=stddb LGWR ASYNC  VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)   DB_UNIQUE_NAME=stddb'

LOG_ARCHIVE_DEST_STATE_1=ENABLE

LOG_ARCHIVE_DEST_STATE_2=ENABLE

REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE

LOG_ARCHIVE_MAX_PROCESSES=3

FAL_SERVER=stddb

FAL_CLIENT=prod

DB_FILE_NAME_CONVERT='+DG1','+DG1'

LOG_FILE_NAME_CONVERT='+DG1/STDDB','+DG1/PROD','+RECOVERY/STDDB','+RECOVERY/PROD'

STANDBY_FILE_MANAGEMENT=AUTO

备库初始化参数配置:

[oracle@node1 dbs]$ cat initstddb1.ora

*.audit_file_dest='/u01/app/oracle/admin/stddb/adump'

*.background_dump_dest='/u01/app/oracle/admin/stddb/bdump'

*.cluster_database_instances=2

*.cluster_database=true

*.compatible='10.2.0.1.0'

*.control_files='+DG1/stddb/controlfile/std_control.ctl'

*.core_dump_dest='/u01/app/oracle/admin/stddb/cdump'

*.db_block_size=8192

*.db_create_file_dest='+DG1'

*.db_domain=''

*.db_file_multiblock_read_count=16

*.db_name='prod'

*.db_recovery_file_dest_size=2147483648

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

stddb1.instance_number=1

stddb2.instance_number=2

*.job_queue_processes=10

*.log_archive_format='arch_%t_%s_%r.log'

*.open_cursors=300

*.pga_aggregate_target=94371840

*.processes=150

*.remote_listener='LISTENERS_PROD'

*.remote_login_passwordfile='exclusive'

*.sga_target=285212672

stddb2.thread=2

stddb1.thread=1

*.undo_management='AUTO'

stddb1.undo_tablespace='UNDOTBS1'

stddb2.undo_tablespace='UNDOTBS2'

*.user_dump_dest='/u01/app/oracle/admin/stddb/udump'

*.db_unique_name='stddb'

LOG_ARCHIVE_CONFIG='DG_CONFIG=(prod,stddb)'

LOG_ARCHIVE_DEST_1= 'LOCATION=+RECOVERY   VALID_FOR=(ALL_LOGFILES,ALL_ROLES)  DB_UNIQUE_NAME=stddb'

LOG_ARCHIVE_DEST_2= 'SERVICE=prod LGWR ASYNC  VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)   DB_UNIQUE_NAME=prod'

LOG_ARCHIVE_DEST_STATE_1=ENABLE

LOG_ARCHIVE_DEST_STATE_2=ENABLE

REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE

LOG_ARCHIVE_MAX_PROCESSES=3

FAL_SERVER=prod

FAL_CLIENT=stddb

DB_FILE_NAME_CONVERT='+DG1','+DG1'

LOG_FILE_NAME_CONVERT='+DG1/PROD','+DG1/STDDB','+RECOVERY/PROD','+RECOVERY/STDDB'

STANDBY_FILE_MANAGEMENT=AUTO

主备库网络配置:

[oracle@node1 dbs]$

------主库端tnsnames.ora 添加以下信息

STDDB =

 (DESCRIPTION =

   (ADDRESS = (PROTOCOL = TCP)(HOST = node1-vip)(PORT = 1521))

   (ADDRESS = (PROTOCOL = TCP)(HOST = node2-vip)(PORT = 1521))

   (LOAD_BALANCE = yes)

   (CONNECT_DATA =

     (SERVER = DEDICATED)

     (SERVICE_NAME = racdb)

   )

 )


-------备库端tnsnames.ora 添加以下信息


PROD =

 (DESCRIPTION =

   (ADDRESS = (PROTOCOL = TCP)(HOST = rac1-vip)(PORT = 1521))

   (ADDRESS = (PROTOCOL = TCP)(HOST = rac2-vip)(PORT = 1521))

   (LOAD_BALANCE = yes)

   (CONNECT_DATA =

     (SERVER = DEDICATED)

     (SERVICE_NAME = prod)

   )

 )

3、建立Physical DG后,注册数据库和Instance 到GI

(具体构建Physical DG的过程,见相关文档)


------注册数据库 、实例 (以 oracle 身份)

[root@node1 ~]# su - oracle

[oracle@node1 ~]$ srvctl add database -h

Usage: srvctl add database -d <name> -o <oracle_home> [-m <domain_name>] [-p <spfile>] [-A <name|ip>/netmask] [-r {PRIMARY | PHYSICAL_STANDBY | LOGICAL_STANDBY}] [-s <start_options>] [-n <db_name>] [-y {AUTOMATIC | MANUAL}]

   -d <name>           Unique name for the database

   -o <oracle_home>    ORACLE_HOME for cluster database

   -m <domain>         Domain for cluster database

   -p <spfile>         Server parameter file for cluster database

   -A <addr_str>       Database cluster alias

   -n <db_name>        Database name (DB_NAME), if different from the unique name given by the -d option

   -r <role>           Role of the database (primary, physical_standby, logical_standby)

   -s <start_options>  Startup options for the database

   -y <dbpolicy>       Management policy for the database (automatic, manual)

   -h                  Print usage

注册数据库:

[oracle@node1 ~]$ srvctl add database -d stddb -o /u01/app/oracle/product/10.2.0/db_1 -n prod

[oracle@node1 ~]$ crs_stat -t

Name           Type           Target    State     Host        

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

ora....SM1.asm application    ONLINE    ONLINE    node1      

ora....E1.lsnr application    ONLINE    ONLINE    node1      

ora.node1.gsd  application    ONLINE    ONLINE    node1      

ora.node1.ons  application    ONLINE    ONLINE    node1      

ora.node1.vip  application    ONLINE    ONLINE    node1      

ora....SM2.asm application    ONLINE    ONLINE    node2      

ora....E2.lsnr application    ONLINE    ONLINE    node2      

ora.node2.gsd  application    ONLINE    ONLINE    node2      

ora.node2.ons  application    ONLINE    ONLINE    node2      

ora.node2.vip  application    ONLINE    ONLINE    node2      

ora.stddb.db   application    OFFLINE   OFFLINE  

注册实例:

[oracle@node1 ~]$ srvctl add instance -h

Usage: srvctl add instance -d <name> -i <inst_name> -n <node_name>

   -d <name>           Unique name for the database

   -i <inst>           Instance name

   -n <node>           Node name

   -h                  Print usage

[oracle@node1 ~]$ srvctl add instance -d stddb -i stddb1 -n node1

[oracle@node1 ~]$ srvctl add instance -d stddb -i stddb2 -n node2

[oracle@node1 ~]$ crs_stat -t

Name           Type           Target    State     Host        

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

ora....SM1.asm application    ONLINE    ONLINE    node1      

ora....E1.lsnr application    ONLINE    ONLINE    node1      

ora.node1.gsd  application    ONLINE    ONLINE    node1      

ora.node1.ons  application    ONLINE    ONLINE    node1      

ora.node1.vip  application    ONLINE    ONLINE    node1      

ora....SM2.asm application    ONLINE    ONLINE    node2      

ora....E2.lsnr application    ONLINE    ONLINE    node2      

ora.node2.gsd  application    ONLINE    ONLINE    node2      

ora.node2.ons  application    ONLINE    ONLINE    node2      

ora.node2.vip  application    ONLINE    ONLINE    node2      

ora.stddb.db   application    OFFLINE   OFFLINE              

ora....b1.inst application    OFFLINE   OFFLINE              

ora....b2.inst application    OFFLINE   OFFLINE

注册ASM:(如果是11g环境,不需要这一步)

[oracle@node1 ~]$ crs_stat |grep asm

NAME=ora.node1.ASM1.asm

NAME=ora.node2.ASM2.asm

[oracle@node1 ~]$ srvctl modify instance -d stddb -i stddb1 -s +ASM1

[oracle@node1 ~]$ srvctl modify instance -d stddb -i stddb2 -s +ASM2

[oracle@node1 ~]$ srvctl enable asm -n node1 -i +ASM1

[oracle@node1 ~]$ srvctl enable asm -n node2 -i +ASM2

[oracle@node1 ~]$ crs_stat -t

Name           Type           Target    State     Host        

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

ora....SM1.asm application    ONLINE    ONLINE    node1      

ora....E1.lsnr application    ONLINE    ONLINE    node1      

ora.node1.gsd  application    ONLINE    ONLINE    node1      

ora.node1.ons  application    ONLINE    ONLINE    node1      

ora.node1.vip  application    ONLINE    ONLINE    node1      

ora....SM2.asm application    ONLINE    ONLINE    node2      

ora....E2.lsnr application    ONLINE    ONLINE    node2      

ora.node2.gsd  application    ONLINE    ONLINE    node2      

ora.node2.ons  application    ONLINE    ONLINE    node2      

ora.node2.vip  application    ONLINE    ONLINE    node2      

ora.stddb.db   application    OFFLINE   OFFLINE              

ora....b1.inst application    OFFLINE   OFFLINE              

ora....b2.inst application    OFFLINE   OFFLINE              

[oracle@node1 ~]$

更改备库DB在CRS中的启动方式

----把备库的启动方式改为手工

在10g ,standby的DB只能在mount下做recover,而11g可以在open下做recover,所以对于11g的环境不需要修改!

[oracle@node1 ~]$ srvctl modify database -d stddb -y manual

@至此,Oracle MAA 架构基本完成!