“This is the 24th day of my participation in the Gwen Challenge in November. Check out the details: The Last Gwen Challenge in 2021.”

First, environmental preparation

  The host name ip DB Version db_name db_unique_name
Primary library node one lucifer01 10.211.55.100 11.2.0.4 orcl orcl
Primary library node two lucifer02 10.211.55.101 11.2.0.4 orcl orcl
For the library luciferdg 10.211.55.110 11.2.0.4 orcl orcldg

Notes:

1. Db_unique_name The active and standby databases must be different.

2. The db_name must be the same as that of the active and standby databases.

3. The DB versions of the active and standby databases must be consistent.

Ii. Construction process

1. Oracle software installation

Master library one-click installation:

./ allracoraclesilent. sh -i 10.211.55.101 -n lucifer02 -o orcl -d 11g -rac Y-n1 lucifer01 -n2 lucifer02 -pb1 10.211.55.100 - PB2 10.211.55.101-VI1 10.211.55.102-VI2 10.211.55.103-PI1 10.10.1.1 - PI2 10.10.1.2 - SI 10.211.55.105 -sn lucifer-scan -cn lucifer-cluster -dd /dev/asm_data -od /dev/asm_ocr -puf eth0 -prf eth1 ./AllRacOracleSilent.sh -i 10.211.55.100 -n lucifer 01-o orcl -d 11g-rac Y-N1 lucifer 01-n2 lucifer 02-PB1 10.211.55.100 -PB2 10.211.55.101-vi1 10.211.55.102-vi2 10.211.55.103-PI1 10.10.1.1-PI2 10.10.1.2-si 10.211.55.105-sn lucifer- scan-cn lucifer-cluster -dd /dev/asm_data -od /dev/asm_ocr -puf eth0 -prf eth1Copy the code

One-click installation for the standby database :(only ORACLE software is installed for the standby database, not database construction)

./ allracoraclesilent. sh -i 10.211.55.110 -n luciferdg -o orcl -d 11g -w YCopy the code

One-click installation script for reference: One-click ORACLE 11G/12C/18C/19C stand-alone installation script and database construction

2. Environment configuration

A. Configure the hosts file

The main library:

A # # nodes
#dg
10.211.55.110 luciferdg

2 # # nodes
#dg
10.211.55.110 luciferdg
Copy the code

For library:

##dg10.211.55.100 lucifer01 10.211.55.101 lucifer02 10.211.55.105 Lucifer -scanCopy the code

B. Configure static listening and TNS

Master library + Standby library:

##listener.ora
A # # nodes
su - oracle -c "The cat < < EOF > > / u01 / app/oracle/product / 11.2.0 / db/network/admin/listener. Ora # # FOR DG BEGIN SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = former) (ORACLE_HOME = / u01 / app/oracle/product / 11.2.0 / db) (SID_NAME = orcl01))) # # FOR DG END EOF"

2 # # nodes
su - oracle -c "The cat < < EOF > > / u01 / app/oracle/product / 11.2.0 / db/network/admin/listener. Ora # # FOR DG BEGIN SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = former) (ORACLE_HOME = / u01 / app/oracle/product / 11.2.0 / db) (SID_NAME = orcl02))) # # FOR DG END EOF"

##DG
su - oracle -c "The cat < < EOF > > / u01 / app/oracle/product / 11.2.0 / db/network/admin/listener. Ora # # FOR DG BEGIN SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = former) (ORACLE_HOME = / u01 / app/oracle/product / 11.2.0 / db) (SID_NAME = former))) # # FOR DG END EOF"
 
# restart listener
##rac
su - grid -c "lsnrctl stop"
su - grid -c "lsnrctl start"

##dg
su - oracle -c "lsnrctl stop"
su - oracle -c "lsnrctl start"
 
##tnsnames.ora
su - oracle -c "Cat < < EOF > > / u01 / app/oracle/product / 11.2.0 / db/network/admin/tnsnames. Ora # # FOR DG BEGIN former = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = lucifer-scan)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = orcl) )  ) ORCL1 = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = lucifer01)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = orcl) ) ) ORCL2 = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = lucifer02)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = orcl) ) ) ORCLDG = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = luciferdg)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = orcl) ) ) ##FOR DG BEGIN EOF"
Copy the code

C. Configure primary library parameters

-- Enable the archive mode
srvctl stop database -d orcl -o immediate
srvctl start instance -d orcl -i orcl1 -o mount
alter database archivelog;
alter database open;
srvctl start instance -d orcl -i oorcl2
 
-- Enable the forced log mode
alter database force logging;
Copy the code

D. Copy the parameter file and password file to the standby database

Copy the parameter file to the standby database
su - oracle
scp oracle@lucifer01:/tmp/initorcldg.ora /tmp

Create a directory for the standby database
mkdir -p /u01/app/oracle/admin/orcl/adump
su - oracle -c "mkdir -p /oradata/orcl/datafile"
su - oracle -c "mkdir -p /oradata/orcl/onlinelog"
su - oracle -c "mkdir -p /oradata/orcl/tempfile"
mkdir -p /u01/app/oracle/fast_recovery_area/orcl
chown -R oracle:oinstall /u01/app/oracle/admin/orcl/adump
chown -R oracle:oinstall /u01/app/oracle/fast_recovery_area
 
Modify the parameter file in the backup library
*._optimizer_cartesian_enabled=FALSE
*.audit_file_dest='/u01/app/oracle/admin/orcl/adump'
*.audit_trail='NONE'
*.compatible='11.2.0.4.0'
*.db_block_size=8192
*.control_files='/oradata/orcl/control01.ctl'.'/u01/app/oracle/fast_recovery_area/orcl/control02.ctl'
*.db_create_file_dest='/oradata/orcl'
*.db_domain=' '
*.db_name='orcl'
*.db_recovery_file_dest='/u01/app/oracle/fast_recovery_area'
*.db_recovery_file_dest_size=5501878272
*.deferred_segment_creation=FALSE
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
*.event='10949 trace name context forever:28401 trace name context forever,level 1:10849 trace name context forever, level 1:19823 trace name context forever, level 90'
*.open_cursors=300
*.pga_aggregate_target=196083712
*.processes=150
*.result_cache_max_size=0
*.sga_target=784334848
*.db_unique_name='orcldg'
*.log_archive_config='dg_config=(ORCLDG,ORCL)'
*.log_archive_dest_1='location=/archivelog valid_for=(all_logfiles,all_roles) db_unique_name=ORCLDG'
*.log_archive_dest_2='service=orcl async valid_for=(online_logfiles,primary_role) db_unique_name=ORCL'
*.log_archive_dest_state_2='ENABLE'
*.log_archive_format='%t_%s_%r.arc'
*.log_archive_max_processes=4
*.remote_login_passwordfile='exclusive'
*.fal_server='ORCL'
*.fal_client='ORCLDG'
*.db_file_name_convert='+DATA'.'/oradata'
*.log_file_name_convert='+DATA'.'/oradata'
*.standby_file_management='AUTO'
*.undo_tablespace='UNDOTBS1'
 
Copy the password file to the standby databaseSu - oracle SCP oracle @ lucifer01: / u01 / app/oracle/product / 11.2.0 / db/DBS/orapworcl1 / u01 / app/oracle/product / 11.2.0 / db/DBS/orapworclCopy the code

E. Add the Stanby log file to the primary library

set pagesize100
set line222
col member for a60
select * from v$logfile;
select * from v$log;
 
-- Note:
--1. The size of stanby log is the same as that of redo log
--2. Stanby log quantity:
standby logfile=(1+Logfile group number)*thread=(1+3)*1=4Group, need to add4Set of standby logfile.If the log is rac, add a standby log for each thread
 
ALTER DATABASE ADD STANDBY LOGFILE thread 1 
group 5 ('+DATA') SIZE 120M,
group 6 ('+DATA') SIZE 120M,
group 7 ('+DATA') SIZE 120M;

ALTER DATABASE ADD STANDBY LOGFILE thread 2
group 8 ('+DATA') SIZE 120M,
group 9 ('+DATA') SIZE 120M,
group 10 ('+DATA') SIZE 120M;

select * from v$standby_log;
Copy the code

F. The standby database is in the Nomount state

startup nomount pfile='/tmp/initorcldg.ora';
Copy the code

3、 RMAN DUPLICATE

##rman restore standby database
rman target sys/oracle@orcl1 AUXILIARY sys/oracle@orcldg
 
run {
allocate channel prmy1 type disk;
allocate channel prmy2 type disk;
allocate auxiliary channel aux1 type disk;
allocate auxiliary channel aux2 type disk;
DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE DORECOVER NOFILENAMECHECK;
}

The main library sets the DG parameter
ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(ORCL,ORCLDG)';
ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=+DATA VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=ORCL';
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=orcldg LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=ORCLDG';
ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE;
ALTER SYSTEM SET LOG_ARCHIVE_FORMAT='%t_%s_%r.arc' SCOPE=SPFILE;
ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=4;
ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE SCOPE=SPFILE;
ALTER SYSTEM SET FAL_SERVER=ORCLDG;
ALTER SYSTEM SET FAL_CLIENT=ORCL;
ALTER SYSTEM SET DB_FILE_NAME_CONVERT='/oradata'.'+DATA' SCOPE=SPFILE;
ALTER SYSTEM SET LOG_FILE_NAME_CONVERT='/oradata'.'+DATA'  SCOPE=SPFILE;
ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO;
Copy the code

4. Enable the log application for the standby database

alter database open read only;
 
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
 
select database_role,open_mode from v$database;
 
DATABASE_ROLE    OPEN_MODE
---------------- --------------------
PHYSICAL STANDBY READ ONLY WITH APPLY
 
SQL> SELECT protection_mode FROM v$database;
 
PROTECTION_MODE
--------------------
MAXIMUM PERFORMANCE
Copy the code

5. Enable LOG_ARCHIVE_DEST_STATE_2 for the primary database

ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE;
Copy the code