文档课题:部署oracle多租户19c rac to 19c rac adg.
1、架构情况
资源配置:cpu 2c/mem 6g
主备硬件配置:
3个2g投票磁盘asm-diskb/c/d
3个15g数据文件磁盘asm-diske/f/g
1个20g的快速恢复区磁盘asm-diskg

项目

Primary db

physical standby db

db类型

rac

rac

db version

19.13

19.13

db存储

ASM

ASM

主机IP地址/hosts配置

192.168.133.161 hisdb1

192.168.133.181 hisdbdg1

192.168.133.162 hisdb2

192.168.133.182 hisdbdg2

192.168.78.161 hisdb1-priv

192.168.78.181 hisdbdg1-priv

192.168.78.162 hisdb2-priv

192.168.78.182 hisdbdg2-priv

192.168.133.173 hisdb1-vip

192.168.133.183 hisdbdg1-vip

192.168.133.174 hisdb2-vip

192.168.133.184 hisdbdg2-vip

192.168.133.175 hisdb-scan

192.168.133.185 hisdbdg-scan

OS版本

rhel 7.9 64

rhel 7.9 64

OS hostname

hisdb1  hisdb2

hisdbdg1  hisdbdg2

字符集

AMERICAN_AMERICA.AL32UTF8

AMERICAN_AMERICA.AL32UTF8

归档模式

Archive Mode

Archive Mode

oracle_sid

tmis1 tmis2

tmisdg1 tmisdg2

db_name/GLOBAL_DBNAME

tmis

tmis

db_unique_name

tmis

tmisdg

TNS_NAME

TMIS

TMISDG

数据文件所在磁盘组

+DATA

+DATA

归档路径

+FRA

+FRA

ORACLE_HOME

/u01/app/oracle/product/19.13/db_1

/u01/app/oracle/product/19.13/db_1

PDB情况

TMISPDB、ORCLPDB

TMISPDB、ORCLPDB

主库信息
[grid@hisdb1 ~]$ crsctl stat res -t
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details       
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.LISTENER.lsnr
               ONLINE  ONLINE       hisdb1                   STABLE
               ONLINE  ONLINE       hisdb2                   STABLE
ora.chad
               ONLINE  ONLINE       hisdb1                   STABLE
               ONLINE  ONLINE       hisdb2                   STABLE
ora.net1.network
               ONLINE  ONLINE       hisdb1                   STABLE
               ONLINE  ONLINE       hisdb2                   STABLE
ora.ons
               ONLINE  ONLINE       hisdb1                   STABLE
               ONLINE  ONLINE       hisdb2                   STABLE
ora.proxy_advm
               OFFLINE OFFLINE      hisdb1                   STABLE
               OFFLINE OFFLINE      hisdb2                   STABLE
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.ASMNET1LSNR_ASM.lsnr(ora.asmgroup)
      1        ONLINE  ONLINE       hisdb1                   STABLE
      2        ONLINE  ONLINE       hisdb2                   STABLE
      3        ONLINE  OFFLINE                               STABLE
ora.DATA.dg(ora.asmgroup)
      1        ONLINE  ONLINE       hisdb1                   STABLE
      2        ONLINE  ONLINE       hisdb2                   STABLE
      3        OFFLINE OFFLINE                               STABLE
ora.FRA.dg(ora.asmgroup)
      1        ONLINE  ONLINE       hisdb1                   STABLE
      2        ONLINE  ONLINE       hisdb2                   STABLE
      3        OFFLINE OFFLINE                               STABLE
ora.LISTENER_SCAN1.lsnr
      1        ONLINE  ONLINE       hisdb1                   STABLE
ora.OCR.dg(ora.asmgroup)
      1        ONLINE  ONLINE       hisdb1                   STABLE
      2        ONLINE  ONLINE       hisdb2                   STABLE
      3        OFFLINE OFFLINE                               STABLE
ora.asm(ora.asmgroup)
      1        ONLINE  ONLINE       hisdb1                   Started,STABLE
      2        ONLINE  ONLINE       hisdb2                   Started,STABLE
      3        OFFLINE OFFLINE                               STABLE
ora.asmnet1.asmnetwork(ora.asmgroup)
      1        ONLINE  ONLINE       hisdb1                   STABLE
      2        ONLINE  ONLINE       hisdb2                   STABLE
      3        OFFLINE OFFLINE                               STABLE
ora.cvu
      1        ONLINE  ONLINE       hisdb1                   STABLE
ora.hisdb1.vip
      1        ONLINE  ONLINE       hisdb1                   STABLE
ora.hisdb2.vip
      1        ONLINE  ONLINE       hisdb2                   STABLE
ora.orcl.db
      1        OFFLINE OFFLINE                               Instance Shutdown,ST
                                                             ABLE
      2        OFFLINE OFFLINE                               Instance Shutdown,ST
                                                             ABLE
ora.qosmserver
      1        ONLINE  ONLINE       hisdb1                   STABLE
ora.scan1.vip
      1        ONLINE  ONLINE       hisdb1                   STABLE
ora.tmis.db
      1        ONLINE  ONLINE       hisdb1                   Open,HOME=/u01/app/o
                                                             racle/product/19.13/
                                                             db_1,STABLE
      2        ONLINE  ONLINE       hisdb2                   Open,HOME=/u01/app/o
                                                             racle/product/19.13/
                                                             db_1,STABLE
--------------------------------------------------------------------------------

说明:当前需给TMIS搭建rac备库.

2、前期准备
2.1、主库准备
2.1.1、归档及强制记录日志
a、force logging + archivelog
b、创建新用户leo用作测试
[oracle@hisdb1 ~]$ export ORACLE_SID=tmis1
[oracle@hisdb1 ~]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Tue Jan 23 12:53:30 2024
Version 19.13.0.0.0

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


Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.13.0.0.0

SQL> alter session set container=tmispdb;

Session altered.

SQL> create user leo identified by leo;

User created.

SQL> grant dba to leo;

Grant succeeded.

SQL> select name,open_mode,log_mode,force_logging,database_role,switchover_status from gv$database;

NAME      OPEN_MODE            LOG_MODE     FORCE_LOGGING             DATABASE_ROLE    SWITCHOVER_STATUS
--------- -------------------- ------------ ------------------------- ---------------- --------------------
TMIS      READ WRITE           NOARCHIVELOG NO                        PRIMARY          NOT ALLOWED
TMIS      READ WRITE           NOARCHIVELOG NO                        PRIMARY          NOT ALLOWED

SQL> conn / as sysdba
Connected.
SQL> alter database force logging;

Database altered.

SQL> select name,open_mode,log_mode,force_logging,database_role,switchover_status from gv$database;

NAME      OPEN_MODE            LOG_MODE     FORCE_LOGGING             DATABASE_ROLE    SWITCHOVER_STATUS
--------- -------------------- ------------ ------------------------- ---------------- --------------------
TMIS      READ WRITE           NOARCHIVELOG YES                       PRIMARY          NOT ALLOWED
TMIS      READ WRITE           NOARCHIVELOG YES                       PRIMARY          NOT ALLOWED

SQL> archive log list;
Database log mode              No Archive Mode
Automatic archival             Disabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     4
Current log sequence           5

SQL> host srvctl stop database -d tmis -o immediate;

SQL> host srvctl status database -d tmis
Instance tmis1 is not running on node hisdb1
Instance tmis2 is not running on node hisdb2

SQL> host srvctl start database -d tmis -o mount

SQL> conn / as sysdba

Connected.

SQL> archive log list;
Database log mode              No Archive Mode
Automatic archival             Disabled
Archive destination            +FRA
Oldest online log sequence     26
Current log sequence           27

SQL> select open_mode from v$database;

OPEN_MODE
--------------------
MOUNTED

SQL> alter database archivelog;

Database altered.

SQL> select name,open_mode,log_mode,force_logging,database_role,switchover_status from gv$database;

NAME      OPEN_MODE            LOG_MODE     FORCE_LOGGING             DATABASE_ROLE    SWITCHOVER_STATUS
--------- -------------------- ------------ ------------------------- ---------------- --------------------
TMIS      MOUNTED              ARCHIVELOG   YES                       PRIMARY          NOT ALLOWED
TMIS      MOUNTED              ARCHIVELOG   YES                       PRIMARY          NOT ALLOWED

SQL> archive log list;
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            +FRA
Oldest online log sequence     26
Next log sequence to archive   27
Current log sequence           27

SQL> alter database open;

Database altered.

SQL> select name,open_mode,log_mode,force_logging,database_role,switchover_status from gv$database;   

NAME      OPEN_MODE            LOG_MODE     FORCE_LOGGING             DATABASE_ROLE    SWITCHOVER_STATUS
--------- -------------------- ------------ ------------------------- ---------------- --------------------
TMIS      READ WRITE           ARCHIVELOG   YES                       PRIMARY          NOT ALLOWED
TMIS      MOUNTED              ARCHIVELOG   YES                       PRIMARY          NOT ALLOWED
--主库open节点2的tmis实例.
[oracle@hisdb2 ~]$ export ORACLE_SID=tmis2
[oracle@hisdb2 ~]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Tue Jan 23 14:05:13 2024
Version 19.13.0.0.0

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


Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.13.0.0.0

SQL> alter database open;

Database altered.

SQL> select name,open_mode,log_mode,force_logging,database_role,switchover_status from gv$database;

NAME      OPEN_MODE            LOG_MODE     FORCE_LOGGING             DATABASE_ROLE    SWITCHOVER_STATUS
--------- -------------------- ------------ ------------------------- ---------------- --------------------
TMIS      READ WRITE           ARCHIVELOG   YES                       PRIMARY          NOT ALLOWED
TMIS      READ WRITE           ARCHIVELOG   YES                       PRIMARY          NOT ALLOWED

SQL> archive log list;
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            +FRA
Oldest online log sequence     3
Next log sequence to archive   4
Current log sequence           4

2.1.2、standby redo log
说明:备库调用RFS进程将从主库接收到的重做日志按顺序写入到standby logfile,主库创建standby logfile旨在主备切换后备用.
创建原则:
a、确保standby redo log大小与主库online redo log的大小一致;
b、若主库为单实例:standby redo log组数=主库日志组总数+1;
c、若主库为rac:standby redo log组数=(每线程的日志组数+1)*线程数;
d、不建议复用standby redo log,避免增加额外的I/O以及延缓重做传输.
示例语句,单实例:
alter database add standby logfile group 4 ('/u01/app/oracle/oradata/oralg/standby_redo04.log') size 50m;
alter database add standby logfile group 5 ('/u01/app/oracle/oradata/oralg/standby_redo05.log') size 50m;
alter database add standby logfile group 6 ('/u01/app/oracle/oradata/oralg/standby_redo06.log') size 50m;
alter database add standby logfile group 7 ('/u01/app/oracle/oradata/oralg/standby_redo07.log') size 50m;
集群:
alter database add standby logfile thread 1 group 5 size 50M ,group 6 size 50M ,group 7 size 50M ;
alter database add standby logfile thread 2 group 8 size 50M ,group 9 size 50M ,group 10 size 50M;

主库节点1实际操作:
SQL> select * from v$standby_log;

no rows selected

SQL> select group#,thread#,members,bytes/1024/1024 as "Size_M" from v$log;

    GROUP#    THREAD#    MEMBERS     Size_M
---------- ---------- ---------- ----------
         1          1          2        200
         2          1          2        200
         3          2          2        200
         4          2          2        200

SQL> col member for a45
SQL> select group#,status,type,member,con_id from v$logfile;

    GROUP# STATUS  TYPE    MEMBER                                            CON_ID
---------- ------- ------- --------------------------------------------- ----------
         2         ONLINE  +DATA/TMIS/ONLINELOG/group_2.290.1158719585            0
         2         ONLINE  +FRA/TMIS/ONLINELOG/group_2.301.1158719585             0
         1         ONLINE  +DATA/TMIS/ONLINELOG/group_1.291.1158719585            0
         1         ONLINE  +FRA/TMIS/ONLINELOG/group_1.300.1158719585             0
         3         ONLINE  +DATA/TMIS/ONLINELOG/group_3.279.1158723299            0
         3         ONLINE  +FRA/TMIS/ONLINELOG/group_3.302.1158723301             0
         4         ONLINE  +DATA/TMIS/ONLINELOG/group_4.284.1158723301            0
         4         ONLINE  +FRA/TMIS/ONLINELOG/group_4.303.1158723301             0

8 rows selected.

SQL> alter database add standby logfile thread 1 group 10 size 200m,group 11 size 200m,group 12 size 200m;

Database altered.

SQL> alter database add standby logfile thread 2 group 20 size 200m,group 21 size 200m,group 22 size 200m;

Database altered.

SQL> col dbid for a15
SQL> select group#,dbid,thread#,sequence#,bytes/1024/1024,blocksize,used,archived,status from v$standby_log;

    GROUP# DBID               THREAD#  SEQUENCE# BYTES/1024/1024  BLOCKSIZE       USED ARC STATUS
---------- --------------- ---------- ---------- --------------- ---------- ---------- --- ----------
        10 UNASSIGNED               1          0             200        512          0 YES UNASSIGNED
        11 UNASSIGNED               1          0             200        512          0 YES UNASSIGNED
        12 UNASSIGNED               1          0             200        512          0 YES UNASSIGNED
        20 UNASSIGNED               2          0             200        512          0 YES UNASSIGNED
        21 UNASSIGNED               2          0             200        512          0 YES UNASSIGNED
        22 UNASSIGNED               2          0             200        512          0 YES UNASSIGNED

6 rows selected.

SQL> select group#,status,type,member from v$logfile;

    GROUP# STATUS  TYPE    MEMBER
---------- ------- ------- ---------------------------------------------
         2         ONLINE  +DATA/TMIS/ONLINELOG/group_2.290.1158719585
         2         ONLINE  +FRA/TMIS/ONLINELOG/group_2.301.1158719585
         1         ONLINE  +DATA/TMIS/ONLINELOG/group_1.291.1158719585
         1         ONLINE  +FRA/TMIS/ONLINELOG/group_1.300.1158719585
         3         ONLINE  +DATA/TMIS/ONLINELOG/group_3.279.1158723299
         3         ONLINE  +FRA/TMIS/ONLINELOG/group_3.302.1158723301
         4         ONLINE  +DATA/TMIS/ONLINELOG/group_4.284.1158723301
         4         ONLINE  +FRA/TMIS/ONLINELOG/group_4.303.1158723301
        10         STANDBY +DATA/TMIS/ONLINELOG/group_10.303.1159021149
        10         STANDBY +FRA/TMIS/ONLINELOG/group_10.304.1159021149
        11         STANDBY +DATA/TMIS/ONLINELOG/group_11.304.1159021149

    GROUP# STATUS  TYPE    MEMBER
---------- ------- ------- ---------------------------------------------
        11         STANDBY +FRA/TMIS/ONLINELOG/group_11.305.1159021151
        12         STANDBY +DATA/TMIS/ONLINELOG/group_12.305.1159021151
        12         STANDBY +FRA/TMIS/ONLINELOG/group_12.306.1159021151
        20         STANDBY +DATA/TMIS/ONLINELOG/group_20.306.1159021187
        20         STANDBY +FRA/TMIS/ONLINELOG/group_20.307.1159021187
        21         STANDBY +DATA/TMIS/ONLINELOG/group_21.307.1159021187
        21         STANDBY +FRA/TMIS/ONLINELOG/group_21.308.1159021187
        22         STANDBY +DATA/TMIS/ONLINELOG/group_22.308.1159021189
        22         STANDBY +FRA/TMIS/ONLINELOG/group_22.309.1159021191

20 rows selected.

SQL> show parameter name

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
cdb_cluster_name                     string
cell_offloadgroup_name               string
db_file_name_convert                 string
db_name                              string      tmis
db_unique_name                       string      tmis
global_names                         boolean     FALSE
instance_name                        string      tmis1
lock_name_space                      string
log_file_name_convert                string
pdb_file_name_convert                string
processor_group_name                 string

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
service_names                        string      tmis

2.1.3、参数文件
使用如下命令修改主库参数(说明:当下主库使用的是spfile启动的实例)
注意:
a、log_archive_config='dg_config=( db_unique_name, db_unique_name)',主库与备库端采用相同设置
b、log_archive_dest_n='service=……' ,service: 用于指定备库TNSNAMES描述符
c、db_file_name_convert、log_file_name_convert 参数值为转换路径,可直接写db_unique_name.
若使用ASM,可设置为*.db_file_name_convert=('+DATA','+RECOVERY')
d、fal_server、fal_client为TNSNAMES描述符

主库节点1实际操作:
SQL> alter system set log_archive_config='dg_config=(tmis,tmisdg)' sid='*';

System altered.

SQL> alter system set log_archive_dest_1='location=+fra valid_for=(all_logfiles,all_roles) db_unique_name=tmis' sid='*';

System altered.

SQL> alter system set log_archive_dest_2='service=tmisdg lgwr async valid_for=(online_logfiles,primary_role) db_unique_name=tmisdg' sid='*';

System altered.

SQL> alter system set log_archive_dest_state_1=enable sid='*';

System altered.

SQL> alter system set log_archive_dest_state_2=enable sid='*';

System altered.

SQL> alter system set standby_file_management='AUTO' sid='*';

System altered.

SQL> show parameter standby

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
enabled_PDBs_on_standby              string      *
standby_db_preserve_states           string      NONE
standby_file_management              string      AUTO
standby_pdb_source_file_dblink       string
standby_pdb_source_file_directory    string

说明:当主备切换时,需执行如下语句.
alter system set db_file_name_convert='+data/healdg/datafile/','+data/heal/datafile/','+data/healdg/tempfile/','+data/heal/tempfile/' sid='*' scope=spfile;
alter system set log_file_name_convert='+data/healdg/tempfile/','+data/heal/tempfile/','+data/healdg/onlinelog/','+data/heal/onlinelog/','+data/healdg/controlfile/','+data/heal/controlfile/' sid='*' scope=spfile;
alter system set standby_file_management='AUTO' sid='*';
alter system set fal_server='tmisdg' sid='*';
alter system set fal_client='tmis' sid='*';

--在主库用spfile文件创建pfile文件并传递至备库.
SQL> create pfile='/home/oracle/pfiletmis.ora' from spfile;

File created.
--使用scp命令.
[oracle@hisdb1 ~]$ scp pfiletmis.ora oracle@192.168.133.181:/home/oracle

2.1.4、监听文件
2.1.4.1、主库监听
配置主库和备库的监听文件,整个ADG的redo传输服务都依赖于Oracle Net,因此需要为主备库配置监听,且需要配置静态监听.配置方法可用netmgr、netca,或者直接编辑listener.ora文件.
主库节点1监听文件按如下修改:
[grid@hisdb1 admin]$ cat listener.ora
#LISTENER=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER))))           # line added by Agent
LISTENER_SCAN1=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN1))))                # line added by Agent
ASMNET1LSNR_ASM=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=ASMNET1LSNR_ASM))))              # line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_ASMNET1LSNR_ASM=ON               # line added by Agent
VALID_NODE_CHECKING_REGISTRATION_ASMNET1LSNR_ASM=SUBNET         # line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN1=ON                # line added by Agent
VALID_NODE_CHECKING_REGISTRATION_LISTENER_SCAN1=OFF             # line added by Agent - Disabled by Agent because REMOTE_REGISTRATION_ADDRESS is set
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER=ON              # line added by Agent
VALID_NODE_CHECKING_REGISTRATION_LISTENER=SUBNET                # line added by Agent

LISTENER = 
 (DESCRIPTION =
     (ADDRESS_LIST =
       (ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER))
       (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.133.161)(PORT = 1521))
       (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.133.173)(PORT = 1521))
     )
 )
 
SID_LIST_LISTENER = 
 (SID_LIST = 
   (SID_DESC = 
      (GLOBAL_DBNAME = tmis) 
      (ORACLE_HOME = /u01/app/oracle/product/19.13/db_1) 
      (SID_NAME = tmis1)
   )
 )

主库节点2监听文件按如下修改:
[grid@hisdb2 admin]$ cat listener.ora
LISTENER_SCAN1=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN1))))                # line added by Agent
#LISTENER=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER))))           # line added by Agent
ASMNET1LSNR_ASM=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=ASMNET1LSNR_ASM))))              # line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_ASMNET1LSNR_ASM=ON               # line added by Agent
VALID_NODE_CHECKING_REGISTRATION_ASMNET1LSNR_ASM=SUBNET         # line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER=ON              # line added by Agent
VALID_NODE_CHECKING_REGISTRATION_LISTENER=SUBNET                # line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN1=ON                # line added by Agent
VALID_NODE_CHECKING_REGISTRATION_LISTENER_SCAN1=OFF             # line added by Agent - Disabled by Agent because REMOTE_REGISTRATION_ADDRESS is set

LISTENER = 
 (DESCRIPTION =
     (ADDRESS_LIST =
       (ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER))
       (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.133.162)(PORT = 1521))
       (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.133.174)(PORT = 1521))
     )
 )
 
SID_LIST_LISTENER = 
 (SID_LIST = 
   (SID_DESC = 
      (GLOBAL_DBNAME = tmis) 
      (ORACLE_HOME = /u01/app/oracle/product/19.13/db_1) 
      (SID_NAME = tmis2)
   )
 )
说明:蓝色高亮为修改部分.

--重启主库监听.
[grid@hisdb1 admin]$ srvctl stop listener -l listener
[grid@hisdb1 admin]$ srvctl start listener -l listener
[grid@hisdb1 admin]$ lsnrctl status

LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 23-JAN-2024 19:16:12

Copyright (c) 1991, 2021, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 19.0.0.0.0 - Production
Start Date                23-JAN-2024 19:12:20
Uptime                    0 days 0 hr. 3 min. 52 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/19.13/grid/network/admin/listener.ora
Listener Log File         /u01/app/grid/diag/tnslsnr/hisdb1/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.133.161)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.133.173)(PORT=1521)))
Services Summary...
Service "+ASM" has 1 instance(s).
  Instance "+ASM1", status READY, has 1 handler(s) for this service...
Service "+ASM_DATA" has 1 instance(s).
  Instance "+ASM1", status READY, has 1 handler(s) for this service...
Service "+ASM_FRA" has 1 instance(s).
  Instance "+ASM1", status READY, has 1 handler(s) for this service...
Service "+ASM_OCR" has 1 instance(s).
  Instance "+ASM1", status READY, has 1 handler(s) for this service...
Service "0f52a0ce51589e1be063a185a8c0fc27" has 1 instance(s).
  Instance "tmis1", status READY, has 1 handler(s) for this service...
Service "0f5def08812e1479e063a185a8c0f65d" has 1 instance(s).
  Instance "tmis1", status READY, has 1 handler(s) for this service...
Service "86b637b62fdf7a65e053f706e80a27ca" has 1 instance(s).
  Instance "tmis1", status READY, has 1 handler(s) for this service...
Service "orclpdb" has 1 instance(s).
  Instance "tmis1", status READY, has 1 handler(s) for this service...
Service "tmis" has 2 instance(s).
  Instance "tmis1", status UNKNOWN, has 1 handler(s) for this service...
  Instance "tmis1", status READY, has 1 handler(s) for this service...
Service "tmisXDB" has 1 instance(s).
  Instance "tmis1", status READY, has 1 handler(s) for this service...
Service "tmispdb" has 1 instance(s).
  Instance "tmis1", status READY, has 1 handler(s) for this service...
The command completed successfully

注意:rac架构是在grid用户下修改监听文件.

2.1.4.2、备库监听
先搭建rac adg环境,可参照如下博客,此处不再赘述.
https://blog.51cto.com/u_12991611/5376800
注意:
a、备库只安装gi及数据库软件,不安装实例.
b、备库两个节点监听文件配置参考主库.

备库节点1监听文件按如下内容修改:
[grid@hisdbdg1 admin]$ cat listener.ora
#LISTENER=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER))))           # line added by Agent
LISTENER_SCAN1=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN1))))                # line added by Agent
ASMNET1LSNR_ASM=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=ASMNET1LSNR_ASM))))              # line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_ASMNET1LSNR_ASM=ON               # line added by Agent
VALID_NODE_CHECKING_REGISTRATION_ASMNET1LSNR_ASM=SUBNET         # line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN1=ON                # line added by Agent
VALID_NODE_CHECKING_REGISTRATION_LISTENER_SCAN1=OFF             # line added by Agent - Disabled by Agent because REMOTE_REGISTRATION_ADDRESS is set
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER=ON              # line added by Agent
VALID_NODE_CHECKING_REGISTRATION_LISTENER=SUBNET                # line added by Agent

LISTENER = 
 (DESCRIPTION =
     (ADDRESS_LIST =
       (ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER))
       (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.133.181)(PORT = 1521))
       (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.133.183)(PORT = 1521))
     )
 )
 
SID_LIST_LISTENER = 
 (SID_LIST = 
   (SID_DESC = 
      (GLOBAL_DBNAME = tmisdg) 
      (ORACLE_HOME = /u01/app/oracle/product/19.13/db_1) 
      (SID_NAME = tmisdg1)
   )
 )

注意:
a、此处global_dbname需为tmisdg.
b、蓝色高亮为修改部分.

备库节点2监听文件按如下内容修改:
[grid@hisdbdg2 admin]$ cat listener.ora
LISTENER_SCAN1=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN1))))                # line added by Agent
#LISTENER=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER))))           # line added by Agent
ASMNET1LSNR_ASM=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=ASMNET1LSNR_ASM))))              # line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_ASMNET1LSNR_ASM=ON               # line added by Agent
VALID_NODE_CHECKING_REGISTRATION_ASMNET1LSNR_ASM=SUBNET         # line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER=ON              # line added by Agent
VALID_NODE_CHECKING_REGISTRATION_LISTENER=SUBNET                # line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN1=ON                # line added by Agent
VALID_NODE_CHECKING_REGISTRATION_LISTENER_SCAN1=OFF             # line added by Agent - Disabled by Agent because REMOTE_REGISTRATION_ADDRESS is set

LISTENER = 
 (DESCRIPTION =
     (ADDRESS_LIST =
       (ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER))
       (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.133.182)(PORT = 1521))
       (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.133.184)(PORT = 1521))
     )
 )
 
SID_LIST_LISTENER = 
 (SID_LIST = 
   (SID_DESC = 
      (GLOBAL_DBNAME = tmisdg) 
      (ORACLE_HOME = /u01/app/oracle/product/19.13/db_1) 
      (SID_NAME = tmisdg2)
   )
 )
说明:
a、此处global_dbname需为tmisdg.
b、备库节点2参照备库节点1添加,同时注意LISTENER_SCAN1的信息,有时会没有scan listener信息.
c、蓝色高亮为修改部分.

--备库重启监听.
[grid@hisdbdg1 admin]$ srvctl stop listener -l listener
[grid@hisdbdg1 admin]$ srvctl start listener -l listener
[grid@hisdbdg1 admin]$ lsnrctl status

LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 23-JAN-2024 19:30:04

Copyright (c) 1991, 2021, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 19.0.0.0.0 - Production
Start Date                23-JAN-2024 19:27:05
Uptime                    0 days 0 hr. 2 min. 58 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/19.13/grid/network/admin/listener.ora
Listener Log File         /u01/app/grid/diag/tnslsnr/hisdbdg1/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.133.181)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.133.183)(PORT=1521)))
Services Summary...
Service "+ASM" has 1 instance(s).
  Instance "+ASM1", status READY, has 1 handler(s) for this service...
Service "+ASM_DATA" has 1 instance(s).
  Instance "+ASM1", status READY, has 1 handler(s) for this service...
Service "+ASM_FRA" has 1 instance(s).
  Instance "+ASM1", status READY, has 1 handler(s) for this service...
Service "+ASM_OCR" has 1 instance(s).
  Instance "+ASM1", status READY, has 1 handler(s) for this service...
Service "tmisdg" has 1 instance(s).
  Instance "tmisdg1", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully

注意:ASM信息需1分钟后才会正常显示.

2.1.5、tnsnames.ora
配置主库tnsnames.ora文件.注意:tnsnames.ora文件在oracle用户下,主库两节点均加入如下内容:
TMIS =
 (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.133.161)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.133.162)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = tmis)
    )
  )

TMISDG =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.133.181)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.133.182)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = tmisdg)
    )
  )

--将tnsnames.ora传输到备库两节点对应目录.
[oracle@hisdb1 admin]$ scp tnsnames.ora oracle@192.168.133.181:/u01/app/oracle/product/19.13/db_1/network/admin
[oracle@hisdb1 admin]$ scp tnsnames.ora oracle@192.168.133.182:/u01/app/oracle/product/19.13/db_1/network/admin

2.1.6、密码文件
配置主备库密码文件,要求主备库sys密码相同,此处直接复制主库节点1的密码文件到其它3个节点并修改名称.注意:密码文件名为orapw+ORACLE_SID.
[grid@hisdb1 ~]$ srvctl config database -d tmis
Database unique name: tmis
Database name: tmis
Oracle home: /u01/app/oracle/product/19.13/db_1
Oracle user: oracle
Spfile: +data/spfiletmis.ora
Password file: +DATA/TMIS/PASSWORD/pwdtmis.275.1158719419
Domain: 
Start options: open
Stop options: immediate
Database role: PRIMARY
Management policy: AUTOMATIC
Server pools: 
Disk Groups: DATA,FRA
Mount point paths: 
Services: 
Type: RAC
Start concurrency: 
Stop concurrency: 
OSDBA group: dba
OSOPER group: oper
Database instances: tmis1,tmis2
Configured nodes: hisdb1,hisdb2
CSS critical: no
CPU count: 0
Memory target: 0
Maximum memory: 0
Default network number for database services: 
Database is administrator managed

[grid@hisdb1 ~]$ asmcmd pwcopy +DATA/TMIS/PASSWORD/pwdtmis.275.1158719419 /home/grid/orapwtmis1
copying +DATA/TMIS/PASSWORD/pwdtmis.275.1158719419 -> /home/grid/orapwtmis1
[grid@hisdb1 ~]$ scp orapwtmis1 grid@192.168.133.181:/home/grid

--将密码文件放至备库节点1的dbs目录下.
[root@hisdbdg1 ~]# cp /home/grid/orapwtmis1 /u01/app/oracle/product/19.13/db_1/dbs/
[root@hisdbdg1 ~]# chown oracle:oinstall /u01/app/oracle/product/19.13/db_1/dbs/orapwtmis1
[root@hisdbdg1 ~]# su - oracle
[oracle@hisdbdg1 ~]$ cd /u01/app/oracle/product/19.13/db_1/dbs/
[oracle@hisdbdg1 dbs]$ mv orapwtmis1 orapwtmisdg1
处理备库节点2密码文件.
[oracle@hisdbdg1 dbs]$ scp orapwtmisdg1 oracle@192.168.133.182:/u01/app/oracle/product/19.13/db_1/dbs/
[oracle@hisdbdg2 dbs]$ pwd
/u01/app/oracle/product/19.13/db_1/dbs
[oracle@hisdbdg2 dbs]$ mv orapwtmisdg1 orapwtmisdg2


2.1.7、主机名解析
2.1.7.1、主库解析
--在主库/etc/hosts中添加IP与主机名的对应关系,以便解析.
[root@hisdb1 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
#Public IP
192.168.133.161 hisdb1
192.168.133.162 hisdb2

#Private IP 
192.168.78.161 hisdb1-priv
192.168.78.162 hisdb2-priv

#Virtual IP
192.168.133.173 hisdb1-vip
192.168.133.174 hisdb2-vip

#Scan IP
192.168.133.175 hisdb-scan

######### ADG IP ############
#Public IP
192.168.133.181 hisdbdg1
192.168.133.182 hisdbdg2

#Private IP 
192.168.78.181 hisdbdg1-priv
192.168.78.182 hisdbdg2-priv

#Virtual IP
192.168.133.183 hisdbdg1-vip
192.168.133.184 hisdbdg2-vip

#Scan IP
192.168.133.185 hisdbdg-scan

说明:主库两个节点均在/etc/hosts文件中添加蓝色高亮内容.

2.1.7.2、备库解析
--在/etc/hosts中添加IP与主机名的对应关系,以便解析.
[root@hisdbdg1 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
#Public IP
192.168.133.181 hisdbdg1
192.168.133.182 hisdbdg2

#Private IP 
192.168.78.181 hisdbdg1-priv
192.168.78.182 hisdbdg2-priv

#Virtual IP
192.168.133.183 hisdbdg1-vip
192.168.133.184 hisdbdg2-vip

#Scan IP
192.168.133.185 hisdbdg-scan

################# MASTER IP ###############
#Public IP
192.168.133.161 hisdb1
192.168.133.162 hisdb2

#Private IP 
192.168.78.161 hisdb1-priv
192.168.78.162 hisdb2-priv

#Virtual IP
192.168.133.173 hisdb1-vip
192.168.133.174 hisdb2-vip

#Scan IP
192.168.133.175 hisdb-scan
说明:分别在备库两个节点的/etc/hosts文件中添加蓝色高亮内容.

2.2、备库操作
2.2.1、修改oratab
备库两个节点均在/etc/oratab添加条目.
备库节点1
tmisdg1:/u01/app/oracle/product/19.13/db_1:N
备库节点2
tmisdg2:/u01/app/oracle/product/19.13/db_1:N

2.2.2、修改参数文件
--备库修改主库传递过来的参数文件.
[oracle@hisdbdg1 ~]$ vi pfiletmis.ora 
*.audit_file_dest='/u01/app/oracle/admin/tmisdg/adump'
*.audit_trail='db'
*.cluster_database=true
*.compatible='19.0.0'
*.control_files='+DATA/TMISDG/CONTROLFILE/control01.ctl'
*.db_block_size=8192
*.db_create_file_dest='+DATA'
*.db_name='tmis'
*.db_unique_name='tmisdg'
*.db_recovery_file_dest='+FRA'
*.db_recovery_file_dest_size=10000m
*.diagnostic_dest='/u01/app/oracle'
*.enable_pluggable_database=true
tmisdg2.instance_number=2
tmisdg1.instance_number=1
*.log_archive_config='dg_config=(tmis,tmisdg)'
*.log_archive_dest_1='location=+fra valid_for=(all_logfiles,all_roles) db_unique_name=tmisdg'
*.log_archive_dest_2='service=tmis lgwr async valid_for=(online_logfiles,primary_role) db_unique_name=tmis'
*.log_archive_dest_state_1='ENABLE'
*.log_archive_dest_state_2='ENABLE'
*.nls_language='AMERICAN'
*.nls_territory='AMERICA'
*.open_cursors=300
*.pga_aggregate_target=1129m
*.processes=300
*.remote_login_passwordfile='exclusive'
*.sga_target=3385m
*.standby_file_management='AUTO'
*.fal_client='TMISDG'
*.fal_server='TMIS'
tmisdg2.thread=2
tmisdg1.thread=1
*.log_file_name_convert='+DATA','+DATA','+FRA','+FRA'
*.db_file_name_convert='+DATA','+DATA'

2.2.3、创建相应目录
[oracle@hisdbdg1 ~]$ mkdir -p /u01/app/oracle/admin/tmisdg/adump
[oracle@hisdbdg2 ~]$ mkdir -p /u01/app/oracle/admin/tmisdg/adump
[oracle@hisdbdg1 ~]$ su - grid
[grid@hisdbdg1 ~]$ asmcmd
ASMCMD> cd data
ASMCMD> ls
ASMCMD> mkdir tmisdg
ASMCMD> cd tmisdg
ASMCMD> mkdir controlfile
ASMCMD> ls
controlfile/

2.2.4、启动到nomount
配置备库pfile文件,并启动到nomount状态,此处选择备库节点1作为实施节点.
[oracle@hisdbdg1 ~]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Wed Jan 24 16:01:52 2024
Version 19.13.0.0.0

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

Connected to an idle instance.

SQL> startup nomount pfile='/home/oracle/pfiletmis.ora';
ORACLE instance started.

Total System Global Area 3556768424 bytes
Fixed Size                  9140904 bytes
Variable Size             754974720 bytes
Database Buffers         2785017856 bytes
Redo Buffers                7634944 bytes

2.2.5、互通测试
主备库4个节点分别测试.
[oracle@hisdb1 ~]$ tnsping tmis

TNS Ping Utility for Linux: Version 19.0.0.0.0 - Production on 24-JAN-2024 16:21:24

Copyright (c) 1997, 2021, Oracle.  All rights reserved.

Used parameter files:


Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.133.161)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.133.162)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = tmis)))
OK (0 msec)
[oracle@hisdb1 ~]$ tnsping tmisdg

TNS Ping Utility for Linux: Version 19.0.0.0.0 - Production on 24-JAN-2024 16:21:28

Copyright (c) 1997, 2021, Oracle.  All rights reserved.

Used parameter files:


Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.133.181)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.133.182)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = tmisdg)))
OK (0 msec)

说明:此处仅用主库节点1示例.

2.2.6、连接验证
主库验证.
[oracle@hisdb1 ~]$ sqlplus sys/oracle_4U@tmisdg as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Wed Jan 24 16:57:03 2024
Version 19.13.0.0.0

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


Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.13.0.0.0

SQL> show parameter db_unique_name

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_unique_name                       string      tmisdg
SQL> exit
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.13.0.0.0
[oracle@hisdb1 ~]$ sqlplus sys/oracle_4U@tmis as sysdba  

SQL*Plus: Release 19.0.0.0.0 - Production on Wed Jan 24 16:57:25 2024
Version 19.13.0.0.0

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


Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.13.0.0.0

SQL> show parameter db_unique_name 

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_unique_name                       string      tmis
备库验证
[oracle@hisdbdg1 trace]$ sqlplus sys/oracle_4U@tmisdg as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Wed Jan 24 16:59:26 2024
Version 19.13.0.0.0

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


Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.13.0.0.0

SQL> set line 200
SQL> show parameter db_unique_name

NAME                                 TYPE                   VALUE
------------------------------------ ---------------------- ------------------------------
db_unique_name                       string                 tmisdg
[oracle@hisdbdg1 trace]$ sqlplus sys/oracle_4U@tmis as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Wed Jan 24 17:03:43 2024
Version 19.13.0.0.0

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


Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.13.0.0.0

SQL> show parameter db_unique_name

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_unique_name                       string      tmis

2.2.7、活动复制
[oracle@hisdbdg1 trace]$ rman target sys/oracle_4U@192.168.133.161:1521/tmis auxiliary sys/oracle_4U@192.168.133.181:1521/tmisdg

Recovery Manager: Release 19.0.0.0.0 - Production on Wed Jan 24 17:19:42 2024
Version 19.13.0.0.0

Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.

connected to target database: TMIS (DBID=346738717)
connected to auxiliary database: TMIS (not mounted)

RMAN> run{
allocate channel c1 device type disk;
allocate channel c2 device type disk;
allocate channel c3 device type disk;
allocate channel c4 device type disk;
allocate channel c5 device type disk;
allocate channel c6 device type disk;
allocate channel c7 device type disk;
allocate channel c8 device type disk;
allocate auxiliary channel a1 device type disk;
allocate auxiliary channel a2 device type disk;
allocate auxiliary channel a3 device type disk;
allocate auxiliary channel a4 device type disk;
allocate auxiliary channel a5 device type disk;
allocate auxiliary channel a6 device type disk;
allocate auxiliary channel a7 device type disk;
allocate auxiliary channel a8 device type disk;
duplicate target database for standby from active database;
}
using target database control file instead of recovery catalog
allocated channel: c1
channel c1: SID=289 instance=tmis1 device type=DISK

allocated channel: c2
channel c2: SID=53 instance=tmis1 device type=DISK

allocated channel: c3
channel c3: SID=32 instance=tmis1 device type=DISK

allocated channel: c4
channel c4: SID=269 instance=tmis1 device type=DISK

allocated channel: c5
channel c5: SID=68 instance=tmis1 device type=DISK

allocated channel: c6
channel c6: SID=292 instance=tmis1 device type=DISK

allocated channel: c7
channel c7: SID=58 instance=tmis1 device type=DISK

allocated channel: c8
channel c8: SID=310 instance=tmis1 device type=DISK

allocated channel: a1
channel a1: SID=267 instance=tmisdg1 device type=DISK

allocated channel: a2
channel a2: SID=32 instance=tmisdg1 device type=DISK

allocated channel: a3
channel a3: SID=268 instance=tmisdg1 device type=DISK

allocated channel: a4
channel a4: SID=33 instance=tmisdg1 device type=DISK

allocated channel: a5
channel a5: SID=269 instance=tmisdg1 device type=DISK

allocated channel: a6
channel a6: SID=34 instance=tmisdg1 device type=DISK

allocated channel: a7
channel a7: SID=270 instance=tmisdg1 device type=DISK

allocated channel: a8
channel a8: SID=35 instance=tmisdg1 device type=DISK

Starting Duplicate Db at 24-JAN-24

contents of Memory Script:
{
   backup as copy reuse
   passwordfile auxiliary format  '/u01/app/oracle/product/19.13/db_1/dbs/orapwtmisdg1'   ;
}
executing Memory Script

Starting backup at 24-JAN-24
Finished backup at 24-JAN-24

contents of Memory Script:
{
   restore clone from service  '192.168.133.161:1521/tmis' standby controlfile;
}
executing Memory Script

Starting restore at 24-JAN-24

channel a1: starting datafile backup set restore
channel a1: using network backup set from service 192.168.133.161:1521/tmis
channel a1: restoring control file
channel a1: restore complete, elapsed time: 00:00:04
output file name=+DATA/TMISDG/CONTROLFILE/control01.ctl
Finished restore at 24-JAN-24

contents of Memory Script:
{
   sql clone 'alter database mount standby database';
}
executing Memory Script

sql statement: alter database mount standby database
RMAN-05529: warning: DB_FILE_NAME_CONVERT resulted in invalid ASM names; names changed to disk group only.
Using previous duplicated file +DATA/TMISDG/DATAFILE/undotbs1.259.1159118809 for datafile 4 with checkpoint SCN of 4468923
Using previous duplicated file +DATA/TMISDG/DATAFILE/users.262.1159118819 for datafile 7 with checkpoint SCN of 4468986
Using previous duplicated file +DATA/TMISDG/DATAFILE/undotbs2.264.1159118857 for datafile 9 with checkpoint SCN of 4469406
Using previous duplicated file +DATA/TMISDG/0F52A0CE51589E1BE063A185A8C0FC27/DATAFILE/undotbs1.267.1159118983 for datafile 12 with checkpoint SCN of 4469737
Using previous duplicated file +DATA/TMISDG/0F52A0CE51589E1BE063A185A8C0FC27/DATAFILE/undo_2.268.1159119165 for datafile 13 with checkpoint SCN of 4470474
Using previous duplicated file +DATA/TMISDG/0F52A0CE51589E1BE063A185A8C0FC27/DATAFILE/users.269.1159119341 for datafile 14 with checkpoint SCN of 4471102

contents of Memory Script:
{
   set newname for tempfile  1 to 
 "+DATA";
   set newname for tempfile  2 to 
 "+DATA";
   set newname for tempfile  3 to 
 "+DATA";
   set newname for tempfile  4 to 
 "+DATA";
   switch clone tempfile all;
   set newname for datafile  1 to 
 "+DATA";
   set newname for datafile  3 to 
 "+DATA";
   set newname for datafile  4 to 
 "+DATA/TMISDG/DATAFILE/undotbs1.259.1159118809";
   set newname for datafile  5 to 
 "+DATA";
   set newname for datafile  6 to 
 "+DATA";
   set newname for datafile  7 to 
 "+DATA/TMISDG/DATAFILE/users.262.1159118819";
   set newname for datafile  8 to 
 "+DATA";
   set newname for datafile  9 to 
 "+DATA/TMISDG/DATAFILE/undotbs2.264.1159118857";
   set newname for datafile  10 to 
 "+DATA";
   set newname for datafile  11 to 
 "+DATA";
   set newname for datafile  12 to 
 "+DATA/TMISDG/0F52A0CE51589E1BE063A185A8C0FC27/DATAFILE/undotbs1.267.1159118983";
   set newname for datafile  13 to 
 "+DATA/TMISDG/0F52A0CE51589E1BE063A185A8C0FC27/DATAFILE/undo_2.268.1159119165";
   set newname for datafile  14 to 
 "+DATA/TMISDG/0F52A0CE51589E1BE063A185A8C0FC27/DATAFILE/users.269.1159119341";
   set newname for datafile  15 to 
 "+DATA";
   set newname for datafile  16 to 
 "+DATA";
   set newname for datafile  17 to 
 "+DATA";
   set newname for datafile  18 to 
 "+DATA";
   restore
   from  nonsparse   from service 
 '192.168.133.161:1521/tmis'   clone datafile
    1, 3, 5, 6, 8, 10, 11, 15, 16, 17, 18   ;
   sql 'alter system archive log current';
}
executing Memory Script

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

renamed tempfile 1 to +DATA in control file
renamed tempfile 2 to +DATA in control file
renamed tempfile 3 to +DATA in control file
renamed tempfile 4 to +DATA in control file

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

Starting restore at 24-JAN-24

channel a1: starting datafile backup set restore
channel a1: using network backup set from service 192.168.133.161:1521/tmis
channel a1: specifying datafile(s) to restore from backup set
channel a1: restoring datafile 00001 to +DATA
channel a2: starting datafile backup set restore
channel a2: using network backup set from service 192.168.133.161:1521/tmis
channel a2: specifying datafile(s) to restore from backup set
channel a2: restoring datafile 00003 to +DATA
channel a3: starting datafile backup set restore
channel a3: using network backup set from service 192.168.133.161:1521/tmis
channel a3: specifying datafile(s) to restore from backup set
channel a3: restoring datafile 00005 to +DATA
channel a4: starting datafile backup set restore
channel a4: using network backup set from service 192.168.133.161:1521/tmis
channel a4: specifying datafile(s) to restore from backup set
channel a4: restoring datafile 00006 to +DATA
channel a5: starting datafile backup set restore
channel a5: using network backup set from service 192.168.133.161:1521/tmis
channel a5: specifying datafile(s) to restore from backup set
channel a5: restoring datafile 00008 to +DATA
channel a6: starting datafile backup set restore
channel a6: using network backup set from service 192.168.133.161:1521/tmis
channel a6: specifying datafile(s) to restore from backup set
channel a6: restoring datafile 00010 to +DATA
channel a7: starting datafile backup set restore
channel a7: using network backup set from service 192.168.133.161:1521/tmis
channel a7: specifying datafile(s) to restore from backup set
channel a7: restoring datafile 00011 to +DATA
channel a8: starting datafile backup set restore
channel a8: using network backup set from service 192.168.133.161:1521/tmis
channel a8: specifying datafile(s) to restore from backup set
channel a8: restoring datafile 00015 to +DATA
channel a3: restore complete, elapsed time: 00:01:02
channel a3: starting datafile backup set restore
channel a3: using network backup set from service 192.168.133.161:1521/tmis
channel a3: specifying datafile(s) to restore from backup set
channel a3: restoring datafile 00016 to +DATA
channel a5: restore complete, elapsed time: 00:01:36
channel a5: starting datafile backup set restore
channel a5: using network backup set from service 192.168.133.161:1521/tmis
channel a5: specifying datafile(s) to restore from backup set
channel a5: restoring datafile 00017 to +DATA
channel a8: restore complete, elapsed time: 00:01:37
channel a8: starting datafile backup set restore
channel a8: using network backup set from service 192.168.133.161:1521/tmis
channel a8: specifying datafile(s) to restore from backup set
channel a8: restoring datafile 00018 to +DATA
channel a1: restore complete, elapsed time: 00:01:41
channel a2: restore complete, elapsed time: 00:01:41
channel a4: restore complete, elapsed time: 00:01:40
channel a6: restore complete, elapsed time: 00:01:39
channel a7: restore complete, elapsed time: 00:01:39
channel a5: restore complete, elapsed time: 00:00:10
channel a8: restore complete, elapsed time: 00:00:09
channel a3: restore complete, elapsed time: 00:00:34
Finished restore at 24-JAN-24

sql statement: alter system archive log current

contents of Memory Script:
{
   restore clone force from service  '192.168.133.161:1521/tmis' 
           archivelog from scn  4468923;
   catalog clone datafilecopy  "+DATA/TMISDG/DATAFILE/undotbs1.259.1159118809", 
 "+DATA/TMISDG/DATAFILE/users.262.1159118819", 
 "+DATA/TMISDG/DATAFILE/undotbs2.264.1159118857", 
 "+DATA/TMISDG/0F52A0CE51589E1BE063A185A8C0FC27/DATAFILE/undotbs1.267.1159118983", 
 "+DATA/TMISDG/0F52A0CE51589E1BE063A185A8C0FC27/DATAFILE/undo_2.268.1159119165", 
 "+DATA/TMISDG/0F52A0CE51589E1BE063A185A8C0FC27/DATAFILE/users.269.1159119341";
   switch clone datafile  4 to datafilecopy 
 "+DATA/TMISDG/DATAFILE/undotbs1.259.1159118809";
   switch clone datafile  7 to datafilecopy 
 "+DATA/TMISDG/DATAFILE/users.262.1159118819";
   switch clone datafile  9 to datafilecopy 
 "+DATA/TMISDG/DATAFILE/undotbs2.264.1159118857";
   switch clone datafile  12 to datafilecopy 
 "+DATA/TMISDG/0F52A0CE51589E1BE063A185A8C0FC27/DATAFILE/undotbs1.267.1159118983";
   switch clone datafile  13 to datafilecopy 
 "+DATA/TMISDG/0F52A0CE51589E1BE063A185A8C0FC27/DATAFILE/undo_2.268.1159119165";
   switch clone datafile  14 to datafilecopy 
 "+DATA/TMISDG/0F52A0CE51589E1BE063A185A8C0FC27/DATAFILE/users.269.1159119341";
   switch clone datafile all;
}
executing Memory Script

Starting restore at 24-JAN-24

channel a1: starting archived log restore to default destination
channel a1: using network backup set from service 192.168.133.161:1521/tmis
channel a1: restoring archived log
archived log thread=1 sequence=33
channel a2: starting archived log restore to default destination
channel a2: using network backup set from service 192.168.133.161:1521/tmis
channel a2: restoring archived log
archived log thread=2 sequence=17
channel a1: restore complete, elapsed time: 00:00:16
channel a2: restore complete, elapsed time: 00:00:15
Finished restore at 24-JAN-24

cataloged datafile copy
datafile copy file name=+DATA/TMISDG/DATAFILE/undotbs1.259.1159118809 RECID=15 STAMP=1159125387
cataloged datafile copy
datafile copy file name=+DATA/TMISDG/DATAFILE/undotbs2.264.1159118857 RECID=16 STAMP=1159125387
cataloged datafile copy
datafile copy file name=+DATA/TMISDG/0F52A0CE51589E1BE063A185A8C0FC27/DATAFILE/undotbs1.267.1159118983 RECID=17 STAMP=1159125387
cataloged datafile copy
datafile copy file name=+DATA/TMISDG/0F52A0CE51589E1BE063A185A8C0FC27/DATAFILE/undo_2.268.1159119165 RECID=18 STAMP=1159125387
cataloged datafile copy
datafile copy file name=+DATA/TMISDG/DATAFILE/users.262.1159118819 RECID=19 STAMP=1159125387
cataloged datafile copy
datafile copy file name=+DATA/TMISDG/0F52A0CE51589E1BE063A185A8C0FC27/DATAFILE/users.269.1159119341 RECID=20 STAMP=1159125388

datafile 4 switched to datafile copy
input datafile copy RECID=15 STAMP=1159125387 file name=+DATA/TMISDG/DATAFILE/undotbs1.259.1159118809

datafile 7 switched to datafile copy
input datafile copy RECID=19 STAMP=1159125387 file name=+DATA/TMISDG/DATAFILE/users.262.1159118819

datafile 9 switched to datafile copy
input datafile copy RECID=16 STAMP=1159125387 file name=+DATA/TMISDG/DATAFILE/undotbs2.264.1159118857

datafile 12 switched to datafile copy
input datafile copy RECID=17 STAMP=1159125387 file name=+DATA/TMISDG/0F52A0CE51589E1BE063A185A8C0FC27/DATAFILE/undotbs1.267.1159118983

datafile 13 switched to datafile copy
input datafile copy RECID=18 STAMP=1159125387 file name=+DATA/TMISDG/0F52A0CE51589E1BE063A185A8C0FC27/DATAFILE/undo_2.268.1159119165

datafile 14 switched to datafile copy
input datafile copy RECID=20 STAMP=1159125388 file name=+DATA/TMISDG/0F52A0CE51589E1BE063A185A8C0FC27/DATAFILE/users.269.1159119341

datafile 1 switched to datafile copy
input datafile copy RECID=21 STAMP=1159125390 file name=+DATA/TMISDG/DATAFILE/system.270.1159125247
datafile 3 switched to datafile copy
input datafile copy RECID=22 STAMP=1159125390 file name=+DATA/TMISDG/DATAFILE/sysaux.258.1159125249
datafile 5 switched to datafile copy
input datafile copy RECID=23 STAMP=1159125390 file name=+DATA/TMISDG/0F5213803EFF3E99E063A185A8C03FF4/DATAFILE/system.265.1159125249
datafile 6 switched to datafile copy
input datafile copy RECID=24 STAMP=1159125390 file name=+DATA/TMISDG/0F5213803EFF3E99E063A185A8C03FF4/DATAFILE/sysaux.271.1159125249
datafile 8 switched to datafile copy
input datafile copy RECID=25 STAMP=1159125391 file name=+DATA/TMISDG/0F5213803EFF3E99E063A185A8C03FF4/DATAFILE/undotbs1.266.1159125249
datafile 10 switched to datafile copy
input datafile copy RECID=26 STAMP=1159125391 file name=+DATA/TMISDG/0F52A0CE51589E1BE063A185A8C0FC27/DATAFILE/system.261.1159125249
datafile 11 switched to datafile copy
input datafile copy RECID=27 STAMP=1159125391 file name=+DATA/TMISDG/0F52A0CE51589E1BE063A185A8C0FC27/DATAFILE/sysaux.257.1159125251
datafile 15 switched to datafile copy
input datafile copy RECID=28 STAMP=1159125391 file name=+DATA/TMISDG/0F5DEF08812E1479E063A185A8C0F65D/DATAFILE/system.272.1159125253
datafile 16 switched to datafile copy
input datafile copy RECID=29 STAMP=1159125391 file name=+DATA/TMISDG/0F5DEF08812E1479E063A185A8C0F65D/DATAFILE/sysaux.274.1159125349
datafile 17 switched to datafile copy
input datafile copy RECID=30 STAMP=1159125391 file name=+DATA/TMISDG/0F5DEF08812E1479E063A185A8C0F65D/DATAFILE/undotbs1.273.1159125347
datafile 18 switched to datafile copy
input datafile copy RECID=31 STAMP=1159125391 file name=+DATA/TMISDG/0F5DEF08812E1479E063A185A8C0F65D/DATAFILE/undo_2.275.1159125349
Finished Duplicate Db at 24-JAN-24
released channel: c1
released channel: c2
released channel: c3
released channel: c4
released channel: c5
released channel: c6
released channel: c7
released channel: c8
released channel: a1
released channel: a2
released channel: a3
released channel: a4
released channel: a5
released channel: a6
released channel: a7
released channel: a8

3、单机转rac
由于备库是rac,需修改spfile到磁盘组,然后才能启动rac dg的第2个节点.
3.1、生成pfile
[oracle@hisdbdg1 ~]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Wed Jan 24 23:03:39 2024
Version 19.13.0.0.0

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


Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.13.0.0.0

SQL> select open_mode from v$database;

OPEN_MODE
--------------------
MOUNTED

SQL> show parameter cluster

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
cdb_cluster                          boolean     FALSE
cdb_cluster_name                     string
cluster_database                     boolean     TRUE
cluster_database_instances           integer     2
cluster_interconnects                string
SQL> show parameter spfile

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string

3.2、修改pfile
--按如下内容修改pfile文件.
[oracle@hisdbdg1 ~]$ cat pfiletmis.ora 
*.audit_file_dest='/u01/app/oracle/admin/tmisdg/adump'
*.audit_trail='db'
*.cluster_database=true
*.compatible='19.0.0'
*.control_files='+DATA/TMISDG/CONTROLFILE/control01.ctl'
*.db_block_size=8192
*.db_create_file_dest='+DATA'
*.db_name='tmis'
*.db_unique_name='tmisdg'
*.db_recovery_file_dest='+FRA'
*.db_recovery_file_dest_size=10000m
*.diagnostic_dest='/u01/app/oracle'
*.enable_pluggable_database=true
tmisdg2.instance_number=2
tmisdg1.instance_number=1
*.log_archive_config='dg_config=(tmis,tmisdg)'
*.log_archive_dest_1='location=+fra valid_for=(all_logfiles,all_roles) db_unique_name=tmisdg'
*.log_archive_dest_2='service=tmis lgwr async valid_for=(online_logfiles,primary_role) db_unique_name=tmis'
*.log_archive_dest_state_1='ENABLE'
*.log_archive_dest_state_2='ENABLE'
*.nls_language='AMERICAN'
*.nls_territory='AMERICA'
*.open_cursors=300
*.pga_aggregate_target=1129m
*.processes=300
*.remote_login_passwordfile='exclusive'
*.sga_target=3385m
*.standby_file_management='AUTO'
*.fal_client='TMISDG'
*.fal_server='TMIS'
tmisdg2.thread=2
tmisdg1.thread=1
*.log_file_name_convert='+DATA','+DATA','+FRA','+FRA'
*.db_file_name_convert='+DATA','+DATA'
tmisdg1.undo_tablespace='UNDOTBS1'
tmisdg2.undo_tablespace='UNDOTBS2'

注意:蓝色标注内容.

3.3、创建spfile
备库节点1:
--创建spfile文件到磁盘组,并在pfile文件中添加spfile路径.
SQL> create spfile='+data/tmisdg/parameterfile/spfiletmisdg.ora' from pfile='/home/oracle/pfiletmis.ora';

File created.

SQL> exit
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.13.0.0.0
[oracle@hisdbdg1 ~]$ echo "SPFILE='+data/tmisdg/parameterfile/spfiletmisdg.ora'" > $ORACLE_HOME/dbs/inittmisdg1.ora
[oracle@hisdbdg1 ~]$ cat $ORACLE_HOME/dbs/inittmisdg1.ora
SPFILE='+data/tmisdg/parameterfile/spfiletmisdg.ora'

在备库节点2的pfile文件中添加spfile路径.
[oracle@hisdbdg1 ~]$ echo "SPFILE='+data/tmisdg/parameterfile/spfiletmisdg.ora'" > $ORACLE_HOME/dbs/inittmisdg2.ora
[oracle@hisdbdg1 ~]$ cat $ORACLE_HOME/dbs/inittmisdg2.ora
SPFILE='+data/tmisdg/parameterfile/spfiletmisdg.ora'

注意:删除原spfile.

3.4、备库重启
启动备库两个节点后验证.
SQL> startup force
ORACLE instance started.

Total System Global Area 3556768424 bytes
Fixed Size                  9140904 bytes
Variable Size             754974720 bytes
Database Buffers         2785017856 bytes
Redo Buffers                7634944 bytes
Database mounted.
Database opened.
SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 TMISPDB                        MOUNTED
         4 ORCLPDB                        MOUNTED
SQL> alter pluggable database TMISPDB open;

Pluggable database altered.

SQL> alter pluggable database ORCLPDB open;

Pluggable database altered.

SQL> show parameter spfile; 

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      +DATA/tmisdg/parameterfile/spf
                                                 iletmisdg.ora
SQL> set line 9999
SQL> select name,open_mode,log_mode,force_logging,database_role,switchover_status from gv$database;

NAME      OPEN_MODE            LOG_MODE     FORCE_LOGGING                           DATABASE_ROLE    SWITCHOVER_STATUS
--------- -------------------- ------------ --------------------------------------- ---------------- --------------------
TMIS      READ ONLY            ARCHIVELOG   YES                                     PHYSICAL STANDBY RECOVERY NEEDED
--启动节点2后,查询结果如下.
SQL> set line 200
SQL> col force_logging for a15
SQL> select name,open_mode,log_mode,force_logging,database_role,switchover_status from gv$database;

NAME      OPEN_MODE            LOG_MODE     FORCE_LOGGING   DATABASE_ROLE    SWITCHOVER_STATUS
--------- -------------------- ------------ --------------- ---------------- --------------------
TMIS      READ ONLY            ARCHIVELOG   YES             PHYSICAL STANDBY RECOVERY NEEDED
TMIS      READ ONLY            ARCHIVELOG   YES             PHYSICAL STANDBY RECOVERY NEEDED

4、加入crsctl
将备库加入crsctl中,说明:dbca创建的数据库会自动加入crsctl,但通过rman创建的库需手动添加,加入crsctl中后可通过srvctl管理.
4.1、集群状态
--加入crsctl前集群状态.
[grid@hisdbdg1 ~]$ crsctl stat res -t
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details       
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.LISTENER.lsnr
               ONLINE  ONLINE       hisdbdg1                 STABLE
               ONLINE  ONLINE       hisdbdg2                 STABLE
ora.chad
               ONLINE  ONLINE       hisdbdg1                 STABLE
               ONLINE  ONLINE       hisdbdg2                 STABLE
ora.net1.network
               ONLINE  ONLINE       hisdbdg1                 STABLE
               ONLINE  ONLINE       hisdbdg2                 STABLE
ora.ons
               ONLINE  ONLINE       hisdbdg1                 STABLE
               ONLINE  ONLINE       hisdbdg2                 STABLE
ora.proxy_advm
               OFFLINE OFFLINE      hisdbdg1                 STABLE
               OFFLINE OFFLINE      hisdbdg2                 STABLE
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.ASMNET1LSNR_ASM.lsnr(ora.asmgroup)
      1        ONLINE  ONLINE       hisdbdg1                 STABLE
      2        ONLINE  ONLINE       hisdbdg2                 STABLE
      3        ONLINE  OFFLINE                               STABLE
ora.DATA.dg(ora.asmgroup)
      1        ONLINE  ONLINE       hisdbdg1                 STABLE
      2        ONLINE  ONLINE       hisdbdg2                 STABLE
      3        OFFLINE OFFLINE                               STABLE
ora.FRA.dg(ora.asmgroup)
      1        ONLINE  ONLINE       hisdbdg1                 STABLE
      2        ONLINE  ONLINE       hisdbdg2                 STABLE
      3        OFFLINE OFFLINE                               STABLE
ora.LISTENER_SCAN1.lsnr
      1        ONLINE  ONLINE       hisdbdg2                 STABLE
ora.OCR.dg(ora.asmgroup)
      1        ONLINE  ONLINE       hisdbdg1                 STABLE
      2        ONLINE  ONLINE       hisdbdg2                 STABLE
      3        OFFLINE OFFLINE                               STABLE
ora.asm(ora.asmgroup)
      1        ONLINE  ONLINE       hisdbdg1                 Started,STABLE
      2        ONLINE  ONLINE       hisdbdg2                 Started,STABLE
      3        OFFLINE OFFLINE                               STABLE
ora.asmnet1.asmnetwork(ora.asmgroup)
      1        ONLINE  ONLINE       hisdbdg1                 STABLE
      2        ONLINE  ONLINE       hisdbdg2                 STABLE
      3        OFFLINE OFFLINE                               STABLE
ora.cvu
      1        ONLINE  ONLINE       hisdbdg2                 STABLE
ora.hisdbdg1.vip
      1        ONLINE  ONLINE       hisdbdg1                 STABLE
ora.hisdbdg2.vip
      1        ONLINE  ONLINE       hisdbdg2                 STABLE
ora.qosmserver
      1        ONLINE  ONLINE       hisdbdg2                 STABLE
ora.scan1.vip
      1        ONLINE  ONLINE       hisdbdg2                 STABLE
--------------------------------------------------------------------------------

4.2、指令说明
[grid@hisdb3 ~]$ srvctl add database -h

Adds a database configuration to the Oracle Clusterware.

Usage: srvctl add database -d <db_unique_name> -o <oracle_home> [-c {RACONENODE | RAC | SINGLE} [-e <server_list>] [-i <inst_name>] [-w <timeout>]] [-m <domain_name>] [-p <spfile>] [-r {PRIMARY | PHYSICAL_STANDBY | LOGICAL_STANDBY | SNAPSHOT_STANDBY}] [-s <start_options>] [-t <stop_options>] [-n <db_name>] [-y {AUTOMATIC | MANUAL | NORESTART}] [-g "<serverpool_list>"] [-x <node_name>] [-a "<diskgroup_list>"] [-j "<acfs_path_list>"]
    -d <db_unique_name>      Unique name for the database
    -o <oracle_home>         ORACLE_HOME path
    -c <type>                Type of database: RAC One Node, RAC, or Single Instance
    -e <server_list>         Candidate server list for RAC One Node database
    -i <inst_name>           Instance name prefix for administrator-managed RAC One Node database (default first 12 characters of <db_unique_name>)
    -w <timeout>             Online relocation timeout in minutes
    -x <node_name>           Node name. -x option is specified for single-instance databases
    -m <domain>              Domain for database. Must be set if database has DB_DOMAIN set.
    -p <spfile>              Server parameter file path
    -r <role>                Role of the database (primary, physical_standby, logical_standby, snapshot_standby)
    -s <start_options>       Startup options for the database. Examples of startup options are OPEN, MOUNT, or 'READ ONLY'.
    -t <stop_options>        Stop options for the database. Examples of shutdown options are NORMAL, TRANSACTIONAL, IMMEDIATE, or ABORT.
    -n <db_name>             Database name (DB_NAME), if different from the unique name given by the -d option
    -y <dbpolicy>            Management policy for the database (AUTOMATIC, MANUAL, or NORESTART)
    -g "<serverpool_list>"   Comma separated list of database server pool names
    -a "<diskgroup_list>"    Comma separated list of disk groups
    -j "<acfs_path_list>"    Comma separated list of ACFS paths where database's dependency will be set
-h                       Print usage

4.3、操作过程
4.3.1、主库操作
主库将数据库置于mount状态.
[grid@hisdb1 ~]$ srvctl stop database -d tmis -o immediate
[grid@hisdb1 ~]$ srvctl start database -d tmis -o mount
[grid@hisdb1 ~]$ srvctl status database -d tmis
Instance tmis1 is running on node hisdb1
Instance tmis2 is running on node hisdb2

4.3.2、备库操作
备库节点1操作.
[oracle@hisdbdg1 ~]$ srvctl add database -d tmisdg -c RAC -o /u01/app/oracle/product/19.13/db_1 -p '+data/tmisdg/parameterfile/spfiletmisdg.ora' -r physical_standby -n tmis

注意:以上为一行命令,且需用oracle用户执行,否则报错PRCD-1025、PRKH-1014.

[oracle@hisdbdg1 ~]$ srvctl add instance -d tmisdg -i tmisdg1 -n hisdbdg1
[oracle@hisdbdg1 ~]$ srvctl add instance -d tmisdg -i tmisdg2 -n hisdbdg2
[oracle@hisdbdg1 ~]$ srvctl status database -d tmisdg
Instance tmisdg1 is not running on node hisdbdg1
Instance tmisdg2 is not running on node hisdbdg2
[oracle@hisdbdg1 ~]$ srvctl start database -d tmisdg
[oracle@hisdbdg1 ~]$ srvctl status database -d tmisdg
Instance tmisdg1 is running on node hisdbdg1
Instance tmisdg2 is running on node hisdbdg2
[oracle@hisdbdg1 ~]$ srvctl config database -d tmisdg -a
Database unique name: tmisdg
Database name: tmis
Oracle home: /u01/app/oracle/product/19.13/db_1
Oracle user: oracle
Spfile: +data/tmisdg/parameterfile/spfiletmisdg.ora
Password file: 
Domain: 
Start options: open
Stop options: immediate
Database role: PHYSICAL_STANDBY
Management policy: AUTOMATIC
Server pools: 
Disk Groups: 
Mount point paths: 
Services: 
Type: RAC
Start concurrency: 
Stop concurrency: 
Database is enabled
Database is individually enabled on nodes: 
Database is individually disabled on nodes: 
OSDBA group: dba
OSOPER group: oper
Database instances: tmisdg1,tmisdg2
Configured nodes: hisdbdg1,hisdbdg2
CSS critical: no
CPU count: 0
Memory target: 0
Maximum memory: 0
Default network number for database services: 
Database is administrator managed

4.3.3、备库查询
[grid@hisdbdg1 ~]$ crsctl stat res -t
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details       
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.LISTENER.lsnr
               ONLINE  ONLINE       hisdbdg1                 STABLE
               ONLINE  ONLINE       hisdbdg2                 STABLE
ora.chad
               ONLINE  ONLINE       hisdbdg1                 STABLE
               ONLINE  ONLINE       hisdbdg2                 STABLE
ora.net1.network
               ONLINE  ONLINE       hisdbdg1                 STABLE
               ONLINE  ONLINE       hisdbdg2                 STABLE
ora.ons
               ONLINE  ONLINE       hisdbdg1                 STABLE
               ONLINE  ONLINE       hisdbdg2                 STABLE
ora.proxy_advm
               OFFLINE OFFLINE      hisdbdg1                 STABLE
               OFFLINE OFFLINE      hisdbdg2                 STABLE
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.ASMNET1LSNR_ASM.lsnr(ora.asmgroup)
      1        ONLINE  ONLINE       hisdbdg1                 STABLE
      2        ONLINE  ONLINE       hisdbdg2                 STABLE
      3        ONLINE  OFFLINE                               STABLE
ora.DATA.dg(ora.asmgroup)
      1        ONLINE  ONLINE       hisdbdg1                 STABLE
      2        ONLINE  ONLINE       hisdbdg2                 STABLE
      3        OFFLINE OFFLINE                               STABLE
ora.FRA.dg(ora.asmgroup)
      1        ONLINE  ONLINE       hisdbdg1                 STABLE
      2        ONLINE  ONLINE       hisdbdg2                 STABLE
      3        OFFLINE OFFLINE                               STABLE
ora.LISTENER_SCAN1.lsnr
      1        ONLINE  ONLINE       hisdbdg2                 STABLE
ora.OCR.dg(ora.asmgroup)
      1        ONLINE  ONLINE       hisdbdg1                 STABLE
      2        ONLINE  ONLINE       hisdbdg2                 STABLE
      3        OFFLINE OFFLINE                               STABLE
ora.asm(ora.asmgroup)
      1        ONLINE  ONLINE       hisdbdg1                 Started,STABLE
      2        ONLINE  ONLINE       hisdbdg2                 Started,STABLE
      3        OFFLINE OFFLINE                               STABLE
ora.asmnet1.asmnetwork(ora.asmgroup)
      1        ONLINE  ONLINE       hisdbdg1                 STABLE
      2        ONLINE  ONLINE       hisdbdg2                 STABLE
      3        OFFLINE OFFLINE                               STABLE
ora.cvu
      1        ONLINE  ONLINE       hisdbdg2                 STABLE
ora.hisdbdg1.vip
      1        ONLINE  ONLINE       hisdbdg1                 STABLE
ora.hisdbdg2.vip
      1        ONLINE  ONLINE       hisdbdg2                 STABLE
ora.qosmserver
      1        ONLINE  ONLINE       hisdbdg2                 STABLE
ora.scan1.vip
      1        ONLINE  ONLINE       hisdbdg2                 STABLE
ora.tmisdg.db
      1        ONLINE  ONLINE       hisdbdg1                 Open,Readonly,HOME=/
                                                             u01/app/oracle/produ
                                                             ct/19.13/db_1,STABLE
      2        ONLINE  ONLINE       hisdbdg2                 Open,Readonly,HOME=/
                                                             u01/app/oracle/produ
                                                             ct/19.13/db_1,STABLE
--------------------------------------------------------------------------------

SQL> set line 200
SQL> select group#,thread#,sequence#,bytes/1024/1024,blocksize,members,status from v$log

    GROUP#    THREAD#  SEQUENCE# BYTES/1024/1024  BLOCKSIZE    MEMBERS STATUS
---------- ---------- ---------- --------------- ---------- ---------- ----------------
         1          1          0             200        512          2 CURRENT
         2          1          0             200        512          2 UNUSED
         3          2          0             200        512          2 CURRENT
         4          2          0             200        512          2 UNUSED

SQL> col force_logging for a15
SQL> select dbid,name,current_scn,protection_mode,database_role,force_logging,open_mode,switchover_status from gv$database;

      DBID NAME      CURRENT_SCN PROTECTION_MODE      DATABASE_ROLE    FORCE_LOGGING   OPEN_MODE            SWITCHOVER_STATUS
---------- --------- ----------- -------------------- ---------------- --------------- -------------------- --------------------
 346738717 TMIS          4499450 MAXIMUM PERFORMANCE  PHYSICAL STANDBY YES             READ ONLY            RECOVERY NEEDED
 346738717 TMIS          4499450 MAXIMUM PERFORMANCE  PHYSICAL STANDBY YES             READ ONLY            RECOVERY NEEDED
SQL> col dbid for a15
SQL> select group#,dbid,thread#,sequence#,bytes,blocksize,used,archived,status from v$standby_log
  2  ;

    GROUP# DBID               THREAD#  SEQUENCE#      BYTES  BLOCKSIZE       USED ARC STATUS
---------- --------------- ---------- ---------- ---------- ---------- ---------- --- ----------
        10 UNASSIGNED               1          0  209715200        512          0 NO  UNASSIGNED
        11 346738717                1         37  209715200        512   47114752 YES ACTIVE
        12 UNASSIGNED               1          0  209715200        512          0 YES UNASSIGNED
        20 UNASSIGNED               2          0  209715200        512          0 NO  UNASSIGNED
        21 346738717                2         19  209715200        512   88186880 YES ACTIVE
        22 UNASSIGNED               2          0  209715200        512          0 YES UNASSIGNED

6 rows selected.

说明:如上所示,数据库tmisdg已成功加入集群管理.

4.3.4、实时同步
--备库开启实时同步
SQL> alter database recover managed standby database using current logfile disconnect from session;

Database altered.
SQL> col db_unique_name for a20
SQL> col DB_UNIQUE_NAME for a15
SQL> select inst_id,dbid,name,db_unique_name,current_scn,protection_mode,database_role,force_logging,open_mode,switchover_status from gv$database;

   INST_ID       DBID NAME      DB_UNIQUE_NAME  CURRENT_SCN PROTECTION_MODE      DATABASE_ROLE    FORCE_LOGGING   OPEN_MODE            SWITCHOVER_STATUS
---------- ---------- --------- --------------- ----------- -------------------- ---------------- --------------- -------------------- --------------------
         1  346738717 TMIS      tmisdg              4660918 MAXIMUM PERFORMANCE  PHYSICAL STANDBY YES             READ ONLY WITH APPLY NOT ALLOWED
         2  346738717 TMIS      tmisdg              4660918 MAXIMUM PERFORMANCE  PHYSICAL STANDBY YES             READ ONLY WITH APPLY NOT ALLOWED

SQL> col name for a70 
SQL> r
1  SELECT dest_id, THREAD#, NAME, sequence#, archived, applied, a.NEXT_CHANGE#
2    FROM v$archived_log a
3   WHERE a.sequence# >= 12
4     AND resetlogs_change# = (SELECT d.RESETLOGS_CHANGE# FROM v$database d)
5*  ORDER BY a.THREAD#, a.sequence#, a.dest_id;

   DEST_ID    THREAD# NAME                                                                    SEQUENCE# ARC APPLIED   NEXT_CHANGE#
---------- ---------- ---------------------------------------------------------------------- ---------- --- --------- ------------
         1          1 +FRA/TMISDG/ARCHIVELOG/2024_01_24/thread_1_seq_33.257.1159125383               33 YES NO             4499502
         1          1 +FRA/TMISDG/ARCHIVELOG/2024_01_24/thread_1_seq_34.269.1159138997               34 YES YES            4601346
         2          1 +FRA/TMISDG/ARCHIVELOG/2024_01_24/thread_1_seq_35.268.1159138987               35 YES YES            4601353
         2          1 +FRA/TMISDG/ARCHIVELOG/2024_01_24/thread_1_seq_36.270.1159138997               36 YES YES            4607887
         1          2 +FRA/TMISDG/ARCHIVELOG/2024_01_24/thread_2_seq_17.256.1159125383               17 YES YES            4499507
         1          2 +FRA/TMISDG/ARCHIVELOG/2024_01_24/thread_2_seq_18.271.1159138997               18 YES YES            4601347

6 rows selected.

5、同步验证
5.1、主库启库
将主库两节点从mount开启到open状态,主库节点1切换日志验证.
[oracle@hisdb1 ~]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Thu Jan 25 00:03:17 2024
Version 19.13.0.0.0

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


Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.13.0.0.0

SQL> alter database open;

Database altered.

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 TMISPDB                        READ WRITE NO
         4 ORCLPDB                        READ WRITE NO

SQL> alter system switch logfile;

System altered.

SQL> alter system switch logfile;

System altered.

备库查询:
SQL> select thread#,sequence#,first_time,next_time,completion_time,applied from v$archived_log order by 1,2;

   THREAD#  SEQUENCE# FIRST_TIME          NEXT_TIME           COMPLETION_TIME     APPLIED
---------- ---------- ------------------- ------------------- ------------------- ---------
         1         33 2024-01-24 08:29:15 2024-01-24 19:16:06 2024-01-24 19:16:26 YES
         1         34 2024-01-24 19:16:06 2024-01-24 22:09:27 2024-01-24 23:03:16 YES
         1         35 2024-01-24 22:09:27 2024-01-24 22:09:30 2024-01-24 23:03:16 YES
         1         36 2024-01-24 22:13:02 2024-01-24 22:13:02 2024-01-24 23:03:16 YES
         1         37 2024-01-24 22:13:02 2024-01-25 00:03:32 2024-01-25 00:03:37 YES
         1         38 2024-01-25 00:03:32 2024-01-25 00:07:21 2024-01-25 00:07:22 YES
         1         39 2024-01-25 00:07:21 2024-01-25 00:07:31 2024-01-25 00:07:32 IN-MEMORY
         2         17 2024-01-24 08:31:59 2024-01-24 19:16:06 2024-01-24 19:16:25 YES
         2         18 2024-01-24 19:16:06 2024-01-24 22:09:28 2024-01-24 23:03:16 YES
         2         19 2024-01-24 22:09:28 2024-01-25 00:04:11 2024-01-25 00:04:25 YES

10 rows selected.

5.2、建表测试
--主库建表.
SQL> alter session set container=orclpdb;

Session altered.

SQL> create table test (id number);         

Table created.

SQL> insert into test values (1);

1 row created.

SQL> commit;

Commit complete.

--备库端查询日志应用情况.
SQL> alter session set container=tmispdb;

SQL> col username for a15
SQL> select username from all_users where username='LEO';

USERNAME
---------------
LEO

SQL> alter session set container=orclpdb;

Session altered.

SQL> select * from test;

        ID
----------
         1

SQL> SELECT dest_id, THREAD#, NAME, sequence#, archived, applied, a.NEXT_CHANGE#
2    FROM v$archived_log a
3   WHERE a.sequence# >= 12
4     AND resetlogs_change# = (SELECT d.RESETLOGS_CHANGE# FROM v$database d)
5   ORDER BY a.THREAD#, a.sequence#, a.dest_id;

   DEST_ID    THREAD# NAME                                                                    SEQUENCE# ARC APPLIED   NEXT_CHANGE#
---------- ---------- ---------------------------------------------------------------------- ---------- --- --------- ------------
         1          1 +FRA/TMISDG/ARCHIVELOG/2024_01_24/thread_1_seq_33.257.1159125383               33 YES YES            4499502
         1          1 +FRA/TMISDG/ARCHIVELOG/2024_01_24/thread_1_seq_34.269.1159138997               34 YES YES            4601346
         2          1 +FRA/TMISDG/ARCHIVELOG/2024_01_24/thread_1_seq_35.268.1159138987               35 YES YES            4601353
         2          1 +FRA/TMISDG/ARCHIVELOG/2024_01_24/thread_1_seq_36.270.1159138997               36 YES YES            4607887
         1          1 +FRA/TMISDG/ARCHIVELOG/2024_01_25/thread_1_seq_37.272.1159142617               37 YES YES            4660950
         1          1 +FRA/TMISDG/ARCHIVELOG/2024_01_25/thread_1_seq_38.274.1159142841               38 YES YES            4674183
         1          1 +FRA/TMISDG/ARCHIVELOG/2024_01_25/thread_1_seq_39.275.1159142853               39 YES YES            4674213
         1          2 +FRA/TMISDG/ARCHIVELOG/2024_01_24/thread_2_seq_17.256.1159125383               17 YES YES            4499507
         1          2 +FRA/TMISDG/ARCHIVELOG/2024_01_24/thread_2_seq_18.271.1159138997               18 YES YES            4601347
         1          2 +FRA/TMISDG/ARCHIVELOG/2024_01_25/thread_2_seq_19.273.1159142663               19 YES YES            4662833

10 rows selected.

SQL> select process,status from v$managed_standby;

PROCESS   STATUS
--------- ------------
ARCH      CLOSING
DGRD      ALLOCATED
DGRD      ALLOCATED
ARCH      CLOSING
ARCH      CLOSING
ARCH      CONNECTED
MRP0      APPLYING_LOG
RFS       IDLE
RFS       IDLE
RFS       IDLE
RFS       IDLE

PROCESS   STATUS
--------- ------------
RFS       IDLE
RFS       IDLE

13 rows selected.

备库节点2:
SQL> select process,status from v$managed_standby;

PROCESS   STATUS
--------- ------------
ARCH      CONNECTED
DGRD      ALLOCATED
DGRD      ALLOCATED
ARCH      CONNECTED
ARCH      CONNECTED
ARCH      CONNECTED

6 rows selected.

5.3、测试创建pdb
--主库创建pdb.
SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 TMISPDB                        READ WRITE NO
         4 ORCLPDB                        READ WRITE NO
SQL> create pluggable database healpdb admin user leo identified by leo role=(connect);

Pluggable database created.

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 TMISPDB                        READ WRITE NO
         4 ORCLPDB                        READ WRITE NO
         5 HEALPDB                        MOUNTED
SQL> alter pluggable database healpdb open instances=all;

Pluggable database altered.

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 TMISPDB                        READ WRITE NO
         4 ORCLPDB                        READ WRITE NO
         5 HEALPDB                        READ WRITE NO

--备库查询
SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 TMISPDB                        READ ONLY  NO
         4 ORCLPDB                        READ ONLY  NO
         5 HEALPDB                        MOUNTED
SQL> alter pluggable database healpdb open instances=all;

Pluggable database altered.

结论:备库数据实时同步正常,至此19c 多租户rac到rac的adg搭建完成.

参考文档:https://blog.csdn.net/jycjyc/article/details/104710732