DATA GUARD搭建过程
准备工作
安装包准备
操作系统安装包
官网下载操作系统安装包
里面需要安装的rpm包如下
oracle-rdbms-server-11gR2-preinstall-1.0-13.el6.x86_64.rpm
oracle软件安装包(11.2.0.4)
p13390677_112040_Linux-x86-64_1of7.zip: 下载地址
p13390677_112040_Linux-x86-64_2of7.zip: 下载地址
安装
安装rpm包
挂载操作系统iso文件至某目录,如/media/cdrom
# cd /media/cdrom/Packages
# yum install oracle-rdbms-server-11gR2-preinstall-1.0-13.el6.x86_64.rpm
oracle软件安装
注:主库安装oracle并添加实例、设置监听,备库只需要安装oracle软件并添加监听,无需创建数据库。
主库安装
安装oracle软件
netca添加监听
dbca添加数据库
备库安装
安装oracle软件
netca创建监听
搭建data guard
- 主库开启 force logging
SQL> ALTER DATABASE FORCE LOGGING;
- 如果数据库没有开启归档模式 开启归档模式
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE OPEN;
3.根据redo log 创建standby redo log
SQL> SELECT GROUP#, BYTES FROM V$LOG;
GROUP# BYTES
---------- ----------
1 52428800
2 52428800
3 52428800
SQL> alter database add standby logfile ('/home/oracle/app/oracle/oradata/orcl/standby_redo01.log') size 50M;
Database altered.
SQL> alter database add standby logfile ('/home/oracle/app/oracle/oradata/orcl/standby_redo02.log') size 50M;
Database altered.
SQL> alter database add standby logfile ('/home/oracle/app/oracle/oradata/orcl/standby_redo03.log') size 50M;
Database altered.
SQL> alter database add standby logfile ('/home/oracle/app/oracle/oradata/orcl/standby_redo04.log') size 50M;
Database altered.
SQL> SELECT GROUP#, BYTES FROM V$STANDBY_LOG;
GROUP# BYTES
---------- ----------
4 52428800
5 52428800
6 52428800
7 52428800
- 开启flashback
SQL> ALTER DATABASE FLASHBACK ON;
- 修改主库参数
Database DB_UNIQUE_NAME Oracle Net Service Name
Primary chicago chicago
Physical standby boston boston
SQL> alter system set DB_UNIQUE_NAME=pri scope=spfile;
**重启数据库**
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=std NOAFFIRM ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=std';
System altered.
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE;
System altered.
SQL> ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO;
System altered.
- 在主库和备库上配置$ORACLE_HOME/network/admin/tnsnames.ora
pri =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = pri.wenzhou)(PORT = 1521))
)
(CONNECT_DATA =
(SID = orcl)
)
)
std =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = std.wenzhou)(PORT = 1521))
)
(CONNECT_DATA =
(SID = orcl)
)
)
- 在主库上配置$ORACLE_HOME/network/admin/listener.ora
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = pri.wenzhou)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = chicago_DGMGRL)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
(SID_NAME = ORCL)
)
)
- 在备库上配置$ORACLE_HOME/network/admin/listener.ora
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = std.wenzhou)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = std_DGMGRL)
(ORACLE_HOME = /home/oracle/app/oracle/product/11.2.0/dbhome_1)
(SID_NAME = orcl)
)
)
- 配置备库
vi /tmp/initboston.ora
*.db_name='orcl'
$ mkdir -p /home/oracle/app/oracle/oradata/orcl
$ mkdir -p /home/oracle/app/oracle/fast_recovery_area/orcl
$ mkdir -p /home/oracle/app/oracle/admin/orcl/adump
$ orapwd file=/u01/app/oracle/product/11.2.0.4/db_1/dbs/orapwORCL password=tdr123456 entries=10
- 用rman复制备库
$ export ORACLE_SID=ORCL
$ sqlplus / as sysdba
SQL> STARTUP NOMOUNT PFILE='/tmp/initboston.ora';
$ rman TARGET sys/tdr123456@pri AUXILIARY sys/tdr123456@std
DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE DORECOVER SPFILE SET db_unique_name='std' COMMENT 'Is standby' NOFILENAMECHECK;
- 启用 broker
在主库和备库上执行
ALTER SYSTEM SET dg_broker_start=true;
连接主库执行
dgmgrl sys/tdr123456@chicago
DGMGRL> CREATE CONFIGURATION dg_config AS PRIMARY DATABASE IS pri CONNECT IDENTIFIER IS pri;
Configuration "dg_config" created with primary database "pri"
DGMGRL> ADD DATABASE std AS CONNECT IDENTIFIER IS std MAINTAINED AS PHYSICAL;
Database "std" added
DGMGRL> ENABLE CONFIGURATION;
Enabled.
DGMGRL> SHOW CONFIGURATION;
Configuration - dg_config
Protection Mode: MaxPerformance
Databases:
chicago - Primary database
boston - Physical standby database
Fast-Start Failover: DISABLED
Configuration Status:
SUCCESS
DGMGRL> SHOW DATABASE pri;
Database - pri
Role: PRIMARY
Intended State: TRANSPORT-ON
Instance(s):
orcl
Database Status:
SUCCESS
DGMGRL> SHOW DATABASE std;
Database - std
Role: PHYSICAL STANDBY
Intended State: APPLY-ON
Transport Lag: 0 seconds (computed 1 second ago)
Apply Lag: 0 seconds (computed 1 second ago)
Apply Rate: 0 Byte/s
Real Time Query: OFF
Instance(s):
orcl
Database Status:
SUCCESS
- 开启ADG
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE OPEN READ ONLY;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
- 开启Fast-Start Failover
DGMGRL> EDIT DATABASE 'chicago' SET PROPERTY 'LogXptMode'='SYNC';
Property "LogXptMode" updated
DGMGRL> EDIT DATABASE 'boston' SET PROPERTY 'LogXptMode'='SYNC';
Property "LogXptMode" updated
DGMGRL> EDIT DATABASE 'chicago' SET PROPERTY FastStartFailoverTarget='boston';
Property "faststartfailovertarget" updated
DGMGRL> EDIT CONFIGURATION SET PROTECTION MODE AS MAXAVAILABILITY;
Succeeded.
- 开启flashback
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE FLASHBACK ON;
ALTER DATABASE OPEN;
- 启动 observer
DGMGRL> START OBSERVER;
Observer started
- 启用 FAST_START FAILOVER
DGMGRL> ENABLE FAST_START FAILOVER;
Enabled.
DGMGRL> SHOW FAST_START FAILOVER;
Fast-Start Failover: ENABLED
Threshold: 30 seconds
Target: boston
Observer: ol6-11g-ob
Lag Limit: 30 seconds (not in use)
Shutdown Primary: TRUE
Auto-reinstate: TRUE
Observer Reconnect: (none)
Observer Override: FALSE
Configurable Failover Conditions
Health Conditions:
Corrupted Controlfile YES
Corrupted Dictionary YES
Inaccessible Logfile NO
Stuck Archiver NO
Datafile Offline YES
Oracle Error Conditions:
(none)
SHOW DATABASE 'chicago' FastStartFailoverTarget;
SHOW DATABASE 'boston' FastStartFailoverTarget;
- 测试
关闭主库
shutdown abort
观察observer
11:57:09.35 Thursday, January 10, 2019
Initiating Fast-Start Failover to database "std"...
Performing failover NOW, please wait...
Failover succeeded, new primary is "std"
11:57:16.03 Thursday, January 10, 2019
11:58:46.14 Thursday, January 10, 2019
Initiating reinstatement for database "pri"...
Reinstating database "chicago", please wait...
Operation requires shutdown of instance "ORCL" on database "chicago"
Shutting down instance "ORCL"...
ORA-01109: database not open
Database dismounted.
ORACLE instance shut down.
Operation requires startup of instance "ORCL" on database "chicago"
Starting instance "ORCL"...
ORACLE instance started.
Database mounted.
Continuing to reinstate database "chicago" ...
Reinstatement of database "chicago" succeeded
11:59:46.13 Thursday, January 10, 2019
DGMGRL> SHOW FAST_START FAILOVER;
Fast-Start Failover: ENABLED
Threshold: 30 seconds
Target: chicago
Observer: ol6-11g-ob
Lag Limit: 30 seconds (not in use)
Shutdown Primary: TRUE
Auto-reinstate: TRUE
Observer Reconnect: (none)
Observer Override: FALSE
Configurable Failover Conditions
Health Conditions:
Corrupted Controlfile YES
Corrupted Dictionary YES
Inaccessible Logfile NO
Stuck Archiver NO
Datafile Offline YES
Oracle Error Conditions:
(none)
DGMGRL> show configuration
Configuration - dg_config
Protection Mode: MaxAvailability
Databases:
boston - Primary database
chicago - (*) Physical standby database
Fast-Start Failover: ENABLED
Configuration Status:
SUCCESS
主备切换成功
the end