oracle19c rac 本地搭建adg
注意点:
本地搭建和异地搭建,主要需注意pdb的访问问题,本地需要将备库绑定到不同端口的监听,避免无法连接pdb(关键第4步)
(也可以不修改端口,修改tnsnames.ora指定实例即可,参看https://blog.csdn.net/jycjyc/article/details/107738737)
存在问题:这种情况下不能通过scan-ip的方式连接,只能通过两个vip做连接。除非使用两个不同scan网络。
https://dbamarco.wordpress.com/2015/04/15/using-a-separate-network-for-dataguard-in-12c-rac/
1.启用归档:
[root@rac1 ~]# su - oracle
Last login: Thu Jul 30 13:51:20 CST 2020 on pts/0
[oracle@rac1 ~]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on Thu Jul 30 13:53:41 2020
Version 19.8.0.0.0
Copyright (c) 1982, 2020, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.8.0.0.0
SQL> show parameter name;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
cdb_cluster_name string
cell_offloadgroup_name string
db_file_name_convert string
db_name string orcl
db_unique_name string orcl
global_names boolean FALSE
instance_name string orcl1
lock_name_space string
log_file_name_convert string
pdb_file_name_convert string
processor_group_name string
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
service_names string orcl
SQL> select force_logging from v$database;
FORCE_LOGGING
---------------------------------------
NO
SQL> alter database force logging;
Database altered.
SQL>
SQL> select force_logging from v$database;
FORCE_LOGGING
---------------------------------------
YES
SQL> alter system set db_recovery_file_dest='+DATA' scope=spfile sid='*';
System altered.
SQL> alter system set db_recovery_file_dest_size = 20G scope=spfile sid='*';
System altered.
SQL> shutdown immediate
ORA-01109: database not open
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.
Total System Global Area 4999610048 bytes
Fixed Size 9146048 bytes
Variable Size 1291845632 bytes
Database Buffers 3690987520 bytes
Redo Buffers 7630848 bytes
Database mounted.
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 21
Next log sequence to archive 22
Current log sequence 22
SQL> alter database open;
Database altered.
SQL> show parameter recover;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest string +DATA
db_recovery_file_dest_size big integer 20G
db_unrecoverable_scn_tracking boolean TRUE
recovery_parallelism integer 0
remote_recovery_file_dest string
SQL> exit
主备配置归档删除策略,避免归档未应用被删除的情况:
CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY;
2.增加standby_log
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.8.0.0.0
[oracle@rac1 ~]$ srvctl stop database -d orcl
[oracle@rac1 ~]$ srvctl start database -d orcl
[oracle@rac1 ~]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on Thu Jul 30 14:30:52 2020
Version 19.8.0.0.0
Copyright (c) 1982, 2020, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.8.0.0.0
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 21
Next log sequence to archive 22
Current log sequence 22
SQL> set line 160
SQL> set wrap off
SQL> select * from v$Log;
GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME NEXT_CHANGE# NEXT_TIME
---------- ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ------------------- ------------ -------------------
1 1 21 209715200 512 1 YES INACTIVE 3782017 2020-07-29 12:22:29 3964886 2020-07-30 13:51:03
2 1 22 209715200 512 1 NO CURRENT 3964886 2020-07-30 13:51:03 9.2954E+18
3 2 9 209715200 512 1 YES INACTIVE 3964887 2020-07-30 13:51:04 3985738 2020-07-30 13:59:05
4 2 10 209715200 512 1 NO CURRENT 3987920 2020-07-30 14:28:03 9.2954E+18 2020-07-30 14:28:03
SQL> select * from v$standby_log;
no rows selected
SQL> alter database add standby logfile thread 1 group 5 ('+DATA') size 200M;
Database altered.
SQL> alter database add standby logfile thread 1 group 6 ('+DATA') size 200M;
Database altered.
SQL> alter database add standby logfile thread 1 group 7 ('+DATA') size 200M;
Database altered.
SQL> select * from v$standby_log;
GROUP# DBID THREAD# SEQUENCE# BYTES BLOCKSIZE USED ARC STATUS FIRST_CHANGE# FIRST_TIME NEXT
---------- ---------------------------------------- ---------- ---------- ---------- ---------- ---------- --- ---------- ------------- ------------------- ----
5 UNASSIGNED 1 0 209715200 512 0 YES UNASSIGNED
6 UNASSIGNED 1 0 209715200 512 0 YES UNASSIGNED
7 UNASSIGNED 1 0 209715200 512 0 YES UNASSIGNED
SQL> alter database add standby logfile thread 2 group 8 ('+DATA') size 200M;
Database altered.
SQL> alter database add standby logfile thread 2 group 9 ('+DATA') size 200M;
Database altered.
SQL> alter database add standby logfile thread 2 group 10 ('+DATA') size 200M;
Database altered.
SQL> select * from v$standby_log;
GROUP# DBID THREAD# SEQUENCE# BYTES BLOCKSIZE USED ARC STATUS FIRST_CHANGE# FIRST_TIME NEXT
---------- ---------------------------------------- ---------- ---------- ---------- ---------- ---------- --- ---------- ------------- ------------------- ----
5 UNASSIGNED 1 0 209715200 512 0 YES UNASSIGNED
6 UNASSIGNED 1 0 209715200 512 0 YES UNASSIGNED
7 UNASSIGNED 1 0 209715200 512 0 YES UNASSIGNED
8 UNASSIGNED 2 0 209715200 512 0 YES UNASSIGNED
9 UNASSIGNED 2 0 209715200 512 0 YES UNASSIGNED
10 UNASSIGNED 2 0 209715200 512 0 YES UNASSIGNED
6 rows selected.
SQL> exit
3.主库添加db_unique_name
SQL> alter system set db_unique_name='orcl' scope=spfile sid='*';
4.创建监听DGLISTENER,端口2521
grid用户通过图形netca创建DGLISTENER,方便自动添加资源到集群中管理。
增加scan listener端口:srvctl modify scan_listener -endpoints "TCP:1521/TCP:2521"
节点rac1添加如下静态监听参数:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME = /oracle/app/oracle/product/19c/dbhome_1)
(SID_NAME = orcl1)
)
(SID_DESC =
(GLOBAL_DBNAME = orcl_DGMGRL)
(ORACLE_HOME = /oracle/app/oracle/product/19c/dbhome_1)
(SID_NAME = orcl1)
)
)
SID_LIST_DGLISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = dgorcl)
(ORACLE_HOME = /oracle/app/oracle/product/19c/dbhome_1)
(SID_NAME = dgorcl1)
)
(SID_DESC =
(GLOBAL_DBNAME = dgorcl_DGMGRL)
(ORACLE_HOME = /oracle/app/oracle/product/19c/dbhome_1)
(SID_NAME = dgorcl1)
)
)
节点rac2添加如下静态监听参数:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME = /oracle/app/oracle/product/19c/dbhome_1)
(SID_NAME = orcl2)
)
(SID_DESC =
(GLOBAL_DBNAME = orcl_DGMGRL)
(ORACLE_HOME = /oracle/app/oracle/product/19c/dbhome_1)
(SID_NAME = orcl2)
)
)
SID_LIST_DGLISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = dgorcl)
(ORACLE_HOME = /oracle/app/oracle/product/19c/dbhome_1)
(SID_NAME = dgorcl2)
)
(SID_DESC =
(GLOBAL_DBNAME = dgorcl_DGMGRL)
(ORACLE_HOME = /oracle/app/oracle/product/19c/dbhome_1)
(SID_NAME = dgorcl2)
)
)
5.创建tnsnames.ora内容
[oracle@rac1 admin]$ cat tnsnames.ora
# tnsnames.ora Network Configuration File: /oracle/app/oracle/product/19c/dbhome_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
scan-orcl =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac-scan)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
scan-dgorcl =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac-scan)(PORT = 2521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = dgorcl)
)
)
scan_orcl_pdb =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac-scan)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = pdb)
)
)
scan_dgorcl_pdb =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac-scan)(PORT = 2521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = pdb)
)
)
scan_orcl_jyc =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac-scan)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = jyc)
)
)
scan_dgorcl_jyc =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac-scan)(PORT = 2521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = jyc)
)
)
orcl =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.52.183)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.52.184)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
dgorcl =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.52.183)(PORT = 2521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.52.184)(PORT = 2521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = dgorcl)
)
)
tns_orcl =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.52.183)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.52.184)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
tns_dgorcl =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.52.183)(PORT = 2521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.52.184)(PORT = 2521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = dgorcl)
)
)
orcl_pdb =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.52.183)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.52.184)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = pdb)
)
)
dgorcl_pdb =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.52.183)(PORT = 2521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.52.184)(PORT = 2521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = pdb)
)
)
orcl_jyc =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.52.183)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.52.184)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = jyc)
)
)
dgorcl_jyc =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.52.183)(PORT = 2521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.52.184)(PORT = 2521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = jyc)
)
)
6.修改local_listener和remote_listener内容
节点1:
export ORACLE_SID=orcl1
sqlplus / as sysdba
alter system set local_listener ='(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.52.183)(PORT=1521))' scope=both sid='orcl1';
alter system set remote_listener ='rac-scan:1521' scope=both sid='orcl1';
export ORACLE_SID=dgorcl1
sqlplus / as sysdba
alter system set local_listener ='(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.52.183)(PORT=2521))' scope=both sid='dgorcl1';
alter system set remote_listener ='rac-scan:2521' scope=both sid='dgorcl1';
节点2:
export ORACLE_SID=orcl2
sqlplus / as sysdba
alter system set local_listener ='(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.52.184)(PORT=1521))' scope=both sid='orcl2';
alter system set remote_listener ='rac-scan:1521' scope=both sid='orcl2';
export ORACLE_SID=dgorcl2
sqlplus / as sysdba
alter system set local_listener ='(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.52.184)(PORT=2521))' scope=both sid='dgorcl2';
alter system set remote_listener ='rac-scan:2521' scope=both sid='dgorcl2';
7.dbca创建备库dgorcl
dbca -silent -createDuplicateDB \
-gdbName orcl \
-sid dgorcl \
-sysPassword oracle \
-primaryDBConnectionString 192.168.52.183:1521/orcl \
-nodelist rac1,rac2 \
-adminManaged \
-databaseConfigType RAC \
-createAsStandby -dbUniqueName dgorcl \
-datafileDestination '+DATA' \
-initParams db_create_file_dest=+DATA, db_create_online_log_dest_1=+DATA
dbca -silent -createDuplicateDB \
> -gdbName orcl \
> -sid dgorcl \
> -sysPassword oracle \
> -primaryDBConnectionString 192.168.52.183:1521/orcl \
> -nodelist rac1,rac2 \
> -adminManaged \
> -databaseConfigType RAC \
> -createAsStandby -dbUniqueName dgorcl \
> -datafileDestination '+DATA' \
> -initParams db_create_file_dest=+DATA, db_create_online_log_dest_1=+DATA
Prepare for db operation
22% complete
Listener config step
44% complete
Auxiliary instance creation
67% complete
RMAN duplicate
89% complete
Post duplicate database operations
100% complete
Look at the log file "/oracle/app/oracle/cfgtoollogs/dbca/dgorcl/dgorcl.log" for further details.
8.添加主备参数:
---创建路径
ASMCMD> mkdir +DATA/dgshare/
主库修改参数:
show parameter dg
alter system set dg_broker_config_file1='+DATA/dgshare/dr1orcl.dat' SID='*';
alter system set dg_broker_config_file2='+DATA/dgshare/dr2orcl.dat' SID='*';
alter system set dg_broker_start=true sid='*';
alter system set LOG_ARCHIVE_DEST_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcl' sid='*';
alter system set LOG_ARCHIVE_DEST_2='service=tns_dgorcl VALID_FOR=(online_logfiles,primary_role) DB_UNIQUE_NAME=dgorcl' sid='*';
alter system set log_archive_config='dg_config=(orcl,dgorcl)' sid='*';
alter system set db_file_name_convert='+DATA','+DATA' scope=spfile sid='*';
alter system set log_file_name_convert='+DATA','+DATA' scope=spfile sid='*';
alter system set standby_file_management=auto scope=spfile sid='*';
alter system set fal_client='tns_orcl' sid='*';
alter system set fal_server='tns_dgorcl' sid='*';
备库修改参数:
show parameter dg
alter system set dg_broker_config_file1='+DATA/dgshare/dr1dgorcl.dat' SID='*';
alter system set dg_broker_config_file2='+DATA/dgshare/dr2dgorcl.dat' SID='*';
alter system set dg_broker_start=true sid='*';
alter system set LOG_ARCHIVE_DEST_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=dgorcl' scope=spfile sid='*';
alter system set LOG_ARCHIVE_DEST_2='service=tns_orcl VALID_FOR=(online_logfiles,primary_role) DB_UNIQUE_NAME=orcl' sid='*';
alter system set log_archive_config='dg_config=(orcl,dgorcl)';
alter system set db_file_name_convert='+DATA','+DATA' scope=spfile sid='*';
alter system set log_file_name_convert='+DATA','+DATA' scope=spfile sid='*';
alter system set standby_file_management=auto scope=spfile sid='*';
alter system set fal_client='tns_dgorcl' sid='*';
alter system set fal_server='tns_orcl' sid='*';
srvctl stop db -d orcl
srvctl start db -d orcl
srvctl stop db -d dgorcl
srvctl start db -d dgorcl
set line 160
set wrap off
col inst_id for 99
select INST_ID, dbid,name,DB_UNIQUE_NAME,current_scn,protection_mode,database_role,force_logging,open_mode,switchover_status from gv$database;
启用同步测试:
alter database recover managed standby database cancel;
alter database recover managed standby database using current logfile disconnect;
测试连接:
sqlplus sys/oracle@orcl as sysdba
sqlplus sys/oracle@dgorcl as sysdba
sqlplus jyc/jyc@dgorcl_pdb
sqlplus jyc/jyc@dgorcl_jyc
9.配置dg_broker
dgmgrl sys/oracle@orcl
show configuration
create configuration orcl as
primary database is orcl
connect identifier is tns_orcl;
add database dgorcl as
connect identifier is tns_dgorcl
maintained as physical;
enable configuration
show configuration verbose
show database verbose orcl;
show database verbose dgorcl;
switchover to dgorcl;
edit database dgorcl set property logxptmode='sync';
edit configuration set protection mode as maxavailability;
edit database orcl set property 'faststartfailovertarget'='dgorcl';
edit database dgorcl set property 'faststartfailovertarget'='orcl';
edit database 'dgorcl' set state='apply-off';
alter database open;
edit database 'dgorcl' set state='apply-on';
edit database dgorcl set state='apply-on' with apply instance=orcl1;
show fast_start failover
show database verbose orcl 'faststartfailovertarget';
enable fast_start failover;
show fast_start failover;
failover to dgorcl;
reinstate database orcl;
alter database recover managed standby database cancel;
alter database flashback on;
select flashback_on,force_logging from v$database;
alter database recover managed standby database using current logfile disconnect;