Oracle 19C Database Data Guard 一主两备 -- 生产级

前言

Oracle 数据库使用 Data Guard 搭建一主两备,在主库发生故障时。可以无缝切换至备库支持生产。

目的

一主两备的目的是为了增加数据库的容错率。降低生产数据库崩溃导致业务停顿的几率。当前文档的操作可直接应用至生产环境。但其中的参数基于业务具体情况可适当修改。

系统信息

OS Database Memory Disk Name P/S IP OS User
Oracle RHEL 7.8 19.3.0 32G 500G PRIMARY Primary 192.168.2.11 oracle
Oracle RHEL 7.8 19.3.0 32G 500G Test Slave-One 192.168.2.12 oradg1
Oracle RHEL 7.8 19.3.0 32G 500G DGS Slave-Two 192.168.2.13 oradg2

Linux 操作步骤

1、Linux安装将不再演示

text 复制代码
# 可参见该文档
https://www.modb.pro/db/1890268454414987264

2、IP 设置

bash 复制代码
# 编辑 hosts
$ vi /etc/hosts
192.168.2.11  primary.ckpt.com primary
192.168.2.12  test.ckpt.com test
192.168.2.13  dgs.ckpt.com dgs

# 注意:更改主机名时,需要三台机器均执行,不同的服务器添加对应的一个名即可
$ vi /etc/hostname
primary
test
dgs

3、关闭防火墙

bash 复制代码
systemctl stop firewlld.service && systemctl disable firewlld.service

4、关闭Selinux策略

bash 复制代码
vi /etc/selinux/config
SELINUX=disabled

5、关闭透明大页和numa

6、开启Hugesize

目前这个值的计算方式很复杂。如果需要设置请私信我!!!

数据库配置

1、环境变量配置

sql 复制代码
# 主库oracle用户
export ORACLE_SID=PRIMARY
export ORACLE_BASE=/u01/DBDG/primary_orcl
export ORACLE_HOME=$ORACLE_BASE/19.3.0
export PATH=$ORACLE_HOME/bin:$PATH

# 从库oradg1用户
export ORACLE_SID=TEST
export ORACLE_BASE=/data/db
export ORACLE_HOME=$ORACLE_BASE/19.3.0
export PATH=$ORACLE_HOME/bin:$PATH

# 从库oradg2用户
export ORACLE_SID=DGS
export ORACLE_BASE=/u01/DBDG/slave_dg2
export ORACLE_HOME=$ORACLE_BASE/19.3.0
export PATH=$ORACLE_HOME/bin:$PATH

主库设置

2、主库开启归档

sql 复制代码
SQL> archive log list;
Database log mode          Archive Mode
Automatic archival         Enabled
Archive destination        /u01/DBDG/primary_orcl/archive
Oldest online log sequence     307
Next log sequence to archive   313
Current log sequence           313

--如未开启归档,请打开
SQL>shutdown immediate
SQL>startup mount;
SQL>alter database archivelog;
SQL>alter database open;

3、主库强制日志模式

sql 复制代码
--开启强制日志
SQL>alter database force logging;
--查询实例的归档模式和强制日志
SQL> select log_mode,force_logging from v$database;

LOG_MODE     FOR
------------ ---
ARCHIVELOG   YES

4、主库追加redo

sql 复制代码
alter database add standby logfile group 4 '/u01/DBDG/primary_orcl/oradata/primary/testredo01.log' size 200M; 
alter database add standby logfile group 5 '/u01/DBDG/primary_orcl/oradata/primary/testredo02.log' size 200M;
alter database add standby logfile group 6 '/u01/DBDG/primary_orcl/oradata/primary/dgsredo03.log' size 200M; 
alter database add standby logfile group 7 '/u01/DBDG/primary_orcl/oradata/primary/dgsredo04.log' size 200M;

SQL> select group#,thread#,sequence#,archived,status from $standby_log;

    GROUP#    THREAD#  SEQUENCE# ARC STATUS
---------- ---------- ---------- --- ----------
     4      1          0 YES UNASSIGNED
     5      1          0 YES UNASSIGNED
     6      1          0 YES UNASSIGNED
     7      1          0 YES UNASSIGNED

5、主库配置tnsnames.ora

bash 复制代码
PRIMARY =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.11)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = primary)
    )
  )

LISTENER_PRIMARY =
  (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.11)(PORT = 1521))

DGS =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.13)(PORT = 1522))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = DGS)
    )
  )

TEST =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.12)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = test)
    )
  )

6、主库配置listener.ora

sql 复制代码
PRIMARY =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.11)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )
SID_LIST_LISTENER =
   (SID_LIST =
     (SID_DESC =
        (GLOBAL_DBNAME = PRIMARY)
        (ORACLE_HOME = /u01/DBDG/primary_orcl/19.3.0)
        (SID_NAME = PRIMARY)
     )
   )

7、主库参数文件配置

bash 复制代码
*.audit_file_dest='/u01/DBDG/primary_orcl/admin/primary/adump'
*.audit_trail='db'
*.compatible='19.0.0'
*.control_files='/u01/DBDG/primary_orcl/oradata/PRIMARY/control01.ctl','/u01/DBDG/primary_orcl/oradata/PRIMARY/control02.ctl'
*.db_block_size=8192
*.db_name='primary'
*.diagnostic_dest='/u01/DBDG/primary_orcl'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=primaryXDB)'
*.local_listener='LISTENER_PRIMARY'
*.nls_language='AMERICAN'
*.nls_territory='AMERICA'
*.open_cursors=300
*.pga_aggregate_target=1434m
*.processes=300
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=5735m
*.undo_tablespace='UNDOTBS1'
*.log_archive_config='dg_config=(primary,test,dgs)'
*.log_archive_dest_1='location=/u01/DBDG/primary_orcl/archive valid_for=(all_logfiles,all_roles) db_unique_name=primary'
*.log_archive_dest_2='SERVICE=DGS LGWR ASYNC VALID_FOR=(all_logfiles,all_roles) DB_UNIQUE_NAME=DGS'
*.log_archive_dest_3='SERVICE=TEST VALID_FOR=(all_logfiles,all_roles) DB_UNIQUE_NAME=TEST'
*.log_archive_dest_state_1='enable'
*.log_archive_dest_state_2='enable'
*.log_archive_dest_state_3='enable'
*.fal_server='TEST'
*.fal_client='primary'
*.db_unique_name='primary'
*.standby_file_management=auto
*.db_file_name_convert='/u01/DBDG/primary_orcl/oradata','/data/db/oradata','/u01/DBDG/primary_orcl/oradata','/u01/DBDG/slave_dg1/oradata'
*.log_file_name_convert='/u01/DBDG/primary_orcl/oradata','/data/db/oradata','/u01/DBDG/primary_orcl/oradata','/u01/DBDG/slave_dg1/oradata'

8、主库密码文件配置

bash 复制代码
$ orapwd file=orapwprimary password=admin!11

9、发送主库文件至从库

bash 复制代码
$ scp ../dbs/initprimary.ora orapwprimary 192.168.2.12:..../dbs
$ scp ../network/admin/listener.ora tnsnames.ora 192.168.2.12:..../network/admin
$ scp ../dbs/initprimary.ora orapwprimary 192.168.2.13:..../dbs
$ scp ../network/admin/listener.ora tnsnames.ora 192.168.2.13:..../network/admin

一号从库配置

1、listner.ora配置

bash 复制代码
DGS =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.13)(PORT = 1522))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1522))
    )
  )
SID_LIST_DGS =
   (SID_LIST =
     (SID_DESC =
        (GLOBAL_DBNAME = DGS)
        (ORACLE_HOME = /u01/DBDG/slave_dg1/19.3.0)
        (SID_NAME = DGS)
     )
   )

2、tnsnames.ora配置

bash 复制代码
DGS =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.13)(PORT = 1522))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = DGS)
    )
  )

LISTENER_DGS =
  (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.13)(PORT = 1522))


PRIMARY =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.11)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = primary)
    )
  )

3、参数文件配置

bash 复制代码
$ cd $ORACLE_HOME/dbs
$ mv initprimary.ora initdgs.ora
$ mv orapwprimary orapwDGS

*.audit_file_dest='/u01/DBDG/slave_dg1/admin/dgs/adump'
*.audit_trail='db'
*.compatible='19.0.0'
*.control_files='/u01/DBDG/slave_dg1/oradata/DGS/control01.ctl','/u01/DBDG/slave_dg1/oradata/DGS/control02.ctl'
*.db_block_size=8192
*.db_name='primary'
*.diagnostic_dest='/u01/DBDG/slave_dg1'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=dgsXDB)'
#*.local_listener='LISTENER_TEST'
*.nls_language='AMERICAN'
*.nls_territory='AMERICA'
*.open_cursors=300
*.pga_aggregate_target=1434m
*.processes=300
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=5735m
*.undo_tablespace='UNDOTBS1'
*.log_archive_config='dg_config=(primary,DGS)'
*.log_archive_dest_1='location=/u01/DBDG/slave_dg1/archive valid_for=(all_logfiles,all_roles) db_unique_name=dgs'
*.log_archive_dest_state_1='enable'
*.fal_server='primary'
*.fal_client='dgs'
*.db_unique_name='dgs'
*.standby_file_management=auto
*.db_file_name_convert='/u01/DBDG/primary_orcl/oradata','/u01/DBDG/slave_dg1/oradata'
*.log_file_name_convert='/u01/DBDG/primary_orcl/oradata','/u01/DBDG/slave_dg1/oradata'

4、启动监听

bash 复制代码
$ lsnrctl start DGS

LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 14-FEB-2025 14:05:22

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

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.211.103)(PORT=1522)))
STATUS of the LISTENER
------------------------
Alias                     DGS
Version                   TNSLSNR for Linux: Version 19.0.0.0.0 - Production
Start Date                14-FEB-2025 10:39:07
Uptime                    0 days 3 hr. 26 min. 14 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/DBDG/slave_dg1/19.3.0/network/admin/listener.ora
Listener Log File         /u01/DBDG/slave_dg1/diag/tnslsnr/localhost/dgs/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.2.13)(PORT=1522)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1522)))
Services Summary...
Service "DGS" has 1 instance(s).
  Instance "DGS", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully

5、创建文件夹

bash 复制代码
$ mkdir -p /u01/DBDG/slave_dg1/admin/dgs/adump
$ mkdir -p /u01/DBDG/slave_dg1/oradata
$ mkdir -p /u01/DBDG/slave_dg1/archive

6、启动到nomount

sql 复制代码
$ sqlplus sys/admin*11@dgs as sysdba
SQL> startup nomount pfile='initdgs.ora';

7、备库开始复制

sql 复制代码
$ rman target sys/admin*11@primary auxiliary sys/admin*11@dgs
Recovery Manager: Release 19.0.0.0.0 - Production on Fri Feb 14 10:42:51 2025
Version 19.3.0.0.0

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

connected to target database: PRIMARY (DBID=2030450347)
connected to auxiliary database: PRIMARY (not mounted)

RMAN> duplicate target database for standby from active database nofilenamecheck;

Starting Duplicate Db at 14-FEB-25
using target database control file instead of recovery catalog
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=21 device type=DISK

contents of Memory Script:
{
   backup as copy reuse
   passwordfile auxiliary format  '/u01/DBDG/slave_dg1/19.3.0/dbs/orapwDGS'   ;
}
executing Memory Script

Starting backup at 14-FEB-25
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=40 device type=DISK
Finished backup at 14-FEB-25

contents of Memory Script:
{
   restore clone from service  'primary' standby controlfile;
}
executing Memory Script

Starting restore at 14-FEB-25
using channel ORA_AUX_DISK_1

channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service primary
channel ORA_AUX_DISK_1: restoring control file
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:02
output file name=/u01/DBDG/slave_dg1/oradata/DGS/control01.ctl
output file name=/u01/DBDG/slave_dg1/oradata/DGS/control02.ctl
Finished restore at 14-FEB-25

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

sql statement: alter database mount standby database

contents of Memory Script:
{
   set newname for tempfile  1 to
 "/u01/DBDG/slave_dg1/oradata/PRIMARY/temp01.dbf";
   switch clone tempfile all;
   set newname for datafile  1 to
 "/u01/DBDG/slave_dg1/oradata/PRIMARY/system01.dbf";
   set newname for datafile  3 to
 "/u01/DBDG/slave_dg1/oradata/PRIMARY/sysaux01.dbf";
   set newname for datafile  4 to
 "/u01/DBDG/slave_dg1/oradata/PRIMARY/undotbs01.dbf";
   set newname for datafile  5 to
 "/u01/DBDG/slave_dg1/oradata/PRIMARY/apps.dbf";
   set newname for datafile  7 to
 "/u01/DBDG/slave_dg1/oradata/PRIMARY/users01.dbf";
   restore
   from  nonsparse   from service
 'primary'   clone database
   ;
   sql 'alter system archive log current';
}
executing Memory Script

executing command: SET NEWNAME

renamed tempfile 1 to /u01/DBDG/slave_dg1/oradata/PRIMARY/temp01.dbf in control file

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

Starting restore at 14-FEB-25
using channel ORA_AUX_DISK_1

channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service primary
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring datafile 00001 to /u01/DBDG/slave_dg1/oradata/PRIMARY/system01.dbf
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:45
channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service primary
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring datafile 00003 to /u01/DBDG/slave_dg1/oradata/PRIMARY/sysaux01.dbf
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:25
channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service primary
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring datafile 00004 to /u01/DBDG/slave_dg1/oradata/PRIMARY/undotbs01.dbf
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:25
channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service primary
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring datafile 00005 to /u01/DBDG/slave_dg1/oradata/PRIMARY/apps.dbf
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:16
channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service primary
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring datafile 00007 to /u01/DBDG/slave_dg1/oradata/PRIMARY/users01.dbf
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:01
Finished restore at 14-FEB-25

sql statement: alter system archive log current

contents of Memory Script:
{
   switch clone datafile all;
}
executing Memory Script

datafile 1 switched to datafile copy
input datafile copy RECID=1 STAMP=1193049908 file name=/u01/DBDG/slave_dg1/oradata/PRIMARY/system01.dbf
datafile 3 switched to datafile copy
input datafile copy RECID=2 STAMP=1193049908 file name=/u01/DBDG/slave_dg1/oradata/PRIMARY/sysaux01.dbf
datafile 4 switched to datafile copy
input datafile copy RECID=3 STAMP=1193049908 file name=/u01/DBDG/slave_dg1/oradata/PRIMARY/undotbs01.dbf
datafile 5 switched to datafile copy
input datafile copy RECID=4 STAMP=1193049908 file name=/u01/DBDG/slave_dg1/oradata/PRIMARY/apps.dbf
datafile 7 switched to datafile copy
input datafile copy RECID=5 STAMP=1193049908 file name=/u01/DBDG/slave_dg1/oradata/PRIMARY/users01.dbf
Finished Duplicate Db at 14-FEB-25

RMAN> exit


Recovery Manager complete.

8、开启同步

sql 复制代码
SQL>ALTER DATABASE OPEN READ ONLY;
SQL>alter database recover managed standby database using current logfile disconnect from session;

二号从库配置

1、listner.ora配置

bash 复制代码
TEST =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.12)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )
SID_LIST_LISTENER =
   (SID_LIST =
     (SID_DESC =
        (GLOBAL_DBNAME = TEST)
        (ORACLE_HOME = /data/db/19.3.0)
        (SID_NAME = TEST)
     )
   )

2、tnsnames.ora配置

bash 复制代码
TEST =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.12)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = test)
    )
  )

LISTENER_TEST =
  (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.12)(PORT = 1521))


PRIMARY =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.11)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = primary)
    )
  )

3、参数文件配置

bash 复制代码
$ cd $ORACLE_HOME/dbs
$ mv initprimary.ora inittest.ora
$ mv orapwprimary orapwTEST

*.audit_file_dest='/data/db/admin/test/adump'
*.audit_trail='db'
*.compatible='19.0.0'
*.control_files='/data/db/oradata/TEST/control01.ctl','/data/db/oradata/TEST/control02.ctl'
*.db_block_size=8192
*.db_name='primary'
*.diagnostic_dest='/data/db'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=testXDB)'
#*.local_listener='LISTENER_TEST'
*.nls_language='AMERICAN'
*.nls_territory='AMERICA'
*.open_cursors=300
*.pga_aggregate_target=1434m
*.processes=300
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=5735m
*.undo_tablespace='UNDOTBS1'
*.log_archive_config='dg_config=(primary,test)'
*.log_archive_dest_1='location=/data/db/archive valid_for=(all_logfiles,all_roles) db_unique_name=test'
*.log_archive_dest_state_1='enable'
*.fal_server='primary'
*.fal_client='test'
*.DB_UNIQUE_NAME='test'
*.standby_file_management=auto
*.db_file_name_convert='/u01/DBDG/primary_orcl/oradata','/data/db/oradata'
*.log_file_name_convert='/u01/DBDG/primary_orcl/oradata','/data/db/oradata'

4、启动监听

bash 复制代码
$ lsnrctl start TEST

LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 14-FEB-2025 14:13:50

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

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.2.)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 19.0.0.0.0 - Production
Start Date                14-FEB-2025 09:58:23
Uptime                    0 days 4 hr. 15 min. 27 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /data/db/19.3.0/network/admin/listener.ora
Listener Log File         /data/db/diag/tnslsnr/slave/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.2.13)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=192.168.2.13)(PORT=5500))(Security=(my_wallet_directory=/data/db/admin/test/xdb_wallet))(Presentation=HTTP)(Session=RAW))
Services Summary...
Service "TEST" has 2 instance(s).
  Instance "TEST", status UNKNOWN, has 1 handler(s) for this service...
  Instance "TEST", status READY, has 1 handler(s) for this service...
Service "testXDB" has 1 instance(s).
  Instance "TEST", status READY, has 1 handler(s) for this service...
The command completed successfully

5、创建文件夹

bash 复制代码
$ mkdir -p /data/db/admin/test/adump
$ mkdir -p /data/db /oradata
$ mkdir -p /data/db /archive

6、启动到nomount

sql 复制代码
$ sqlplus sys/admin*11@test as sysdba
SQL> startup nomount pfile='inittest.ora';

7、备库开始复制

sql 复制代码
$ rman target sys/admin*11@primary auxiliary sys/admin*11@test
Recovery Manager: Release 19.0.0.0.0 - Production on Fri Feb 14 10:19:39 2025
Version 19.3.0.0.0

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

connected to target database: PRIMARY (DBID=2030450347)
connected to auxiliary database: PRIMARY (not mounted)

RMAN> duplicate target database for standby from active database nofilenamecheck;

Starting Duplicate Db at 14-FEB-25
using target database control file instead of recovery catalog
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=38 device type=DISK

contents of Memory Script:
{
   backup as copy reuse
   passwordfile auxiliary format  '/data/db/19.3.0/dbs/orapwTEST'   ;
}
executing Memory Script

Starting backup at 14-FEB-25
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=276 device type=DISK
Finished backup at 14-FEB-25

contents of Memory Script:
{
   restore clone from service  'primary' standby controlfile;
}
executing Memory Script

Starting restore at 14-FEB-25
using channel ORA_AUX_DISK_1

channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service primary
channel ORA_AUX_DISK_1: restoring control file
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:03
output file name=/data/db/oradata/TEST/control01.ctl
output file name=/data/db/oradata/TEST/control02.ctl
Finished restore at 14-FEB-25

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

sql statement: alter database mount standby database

contents of Memory Script:
{
   set newname for tempfile  1 to
 "/data/db/oradata/PRIMARY/temp01.dbf";
   switch clone tempfile all;
   set newname for datafile  1 to
 "/data/db/oradata/PRIMARY/system01.dbf";
   set newname for datafile  3 to
 "/data/db/oradata/PRIMARY/sysaux01.dbf";
   set newname for datafile  4 to
 "/data/db/oradata/PRIMARY/undotbs01.dbf";
   set newname for datafile  5 to
 "/data/db/oradata/PRIMARY/apps.dbf";
   set newname for datafile  7 to
 "/data/db/oradata/PRIMARY/users01.dbf";
   restore
   from  nonsparse   from service
 'primary'   clone database
   ;
   sql 'alter system archive log current';
}
executing Memory Script

executing command: SET NEWNAME

renamed tempfile 1 to /data/db/oradata/PRIMARY/temp01.dbf in control file

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

Starting restore at 14-FEB-25
using channel ORA_AUX_DISK_1

channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service primary
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring datafile 00001 to /data/db/oradata/PRIMARY/system01.dbf
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:01:16
channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service primary
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring datafile 00003 to /data/db/oradata/PRIMARY/sysaux01.dbf
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:45
channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service primary
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring datafile 00004 to /data/db/oradata/PRIMARY/undotbs01.dbf
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:03
channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service primary
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring datafile 00005 to /data/db/oradata/PRIMARY/apps.dbf
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:03
channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service primary
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring datafile 00007 to /data/db/oradata/PRIMARY/users01.dbf
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:01
Finished restore at 14-FEB-25

sql statement: alter system archive log current

contents of Memory Script:
{
   switch clone datafile all;
}
executing Memory Script

datafile 1 switched to datafile copy
input datafile copy RECID=1 STAMP=1193048530 file name=/data/db/oradata/PRIMARY/system01.dbf
datafile 3 switched to datafile copy
input datafile copy RECID=2 STAMP=1193048530 file name=/data/db/oradata/PRIMARY/sysaux01.dbf
datafile 4 switched to datafile copy
input datafile copy RECID=3 STAMP=1193048530 file name=/data/db/oradata/PRIMARY/undotbs01.dbf
datafile 5 switched to datafile copy
input datafile copy RECID=4 STAMP=1193048530 file name=/data/db/oradata/PRIMARY/apps.dbf
datafile 7 switched to datafile copy
input datafile copy RECID=5 STAMP=1193048530 file name=/data/db/oradata/PRIMARY/users01.dbf
Finished Duplicate Db at 14-FEB-25

RMAN> exit


Recovery Manager complete.

8、开启同步

sql 复制代码
SQL>ALTER DATABASE OPEN READ ONLY;
SQL>alter database recover managed standby database using current logfile disconnect from session;

同步测试

1、主库创建数据

sql 复制代码
SQL> create user test identified by test;
SQL> alter system switch logfile;

2、一号从库查询

sql 复制代码
SQL> select account_status from dba_users where username='TEST';

ACCOUNT_STATUS
--------------------------------
OPEN

2、二号从库查询

sql 复制代码
SQL> select account_status from dba_users where username='TEST';

ACCOUNT_STATUS
--------------------------------
OPEN
相关推荐
problc3 分钟前
大模型API和秘钥获取地址
数据库·redis·缓存
Antonio9154 分钟前
【Redis】Linux 配置Redis
linux·数据库·redis
qq_463944861 小时前
如何把Excel文件导入Navicat?
数据库·excel
不太厉害的程序员1 小时前
Excel 将数据导入到SQLServer数据库
数据库·sqlserver·excel
技术卷2 小时前
详解力扣高频SQL50题之610. 判断三角形【简单】
sql·leetcode·oracle
betazhou3 小时前
MySQL ROUTER安装部署
android·数据库·mysql·adb·mgr·mysql router
中东大鹅3 小时前
Mybatis Plus 多数据源
java·数据库·spring boot·后端·mybatis
一枚小小程序员哈4 小时前
springboot基于Java与MySQL库的健身俱乐部管理系统设计与实现
数据库·spring boot·mysql·spring·java-ee·intellij-idea
Antonio9154 小时前
【Redis】 Redis 基础命令和原理
数据库·redis·缓存
非优秀程序员4 小时前
未来的编程将会是什么样子?从面向对象转为面向业务数据!!
数据库·架构