郑重申明:以下操作过程都是虚拟机模拟生产环境部署搭建adg的,仅供学习参考,直接套用到线上生产环境造成事故损失的,本文章不承担任何责任

一、环境准备

dg1(主库)环境准备

ip	            10.0.0.7	                                       
db_name	        orcl	                                       
db_unique_name	dbprimary07	                               
ORACLE_BASE	    /u01/oracle/tools/oracle11g                          
ORACLE_HOME	    /u01/oracle/tools/oracle11g/product/11.2.0/dbhome_1	       
主机名	        dbprimary07 	                                   
数据库版本	    11.2.0.1.0	                               
操作系统	    centos7.8	                               
instance_name	orcl	                               
service_name	orcl	                               
数据库安装	    安装数据库软件,创建监听和数据库实例
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.

dg2(备库)环境准备

ip	            10.0.0.8
db_name	        orcl
db_unique_name	dbstandby08
ORACLE_BASE	    /u01/oracle/tools/oracle11g                        
ORACLE_HOME	    /u01/oracle/tools/oracle11g/product/11.2.0/dbhome_1
主机名	        dbstandby08
数据库版本	    11.2.0.1.0
操作系统	    centos7.8
instance_name	orcl
service_name	orcl
数据库安装	    安装数据库软件
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

1.1 dg1(主库) 安装EE版本oracle11g软件-静默安装以及创建实例orcl

安装oracle11g软件和创建orcl实例参考如下文档,此处不再描述 https://blog.51cto.com/wujianwei/12207655

1.2 dg2(备库) 安装EE版本oracle11g软件-静默安装,注意备库不需要创建实例orcl
安装oracle11g软件例参考如下文档,此处不再描述 https://blog.51cto.com/wujianwei/12207655

二、部署DG

2.1、修改hosts文件

hostnamectl set-hostname dbprimary07  #主库
hostnamectl set-hostname dbprimary08 #备库
[oracle@dbprimary07 ~]$ tail -2 /etc/hosts
10.0.0.7 dbprimary07
10.0.0.8 dbstandby08
[oracle@dbprimary08 ~]$ tail -2 /etc/hosts
10.0.0.7 dbprimary07
10.0.0.8 dbstandby08
##同时 虚拟机本地要关闭iptables服务
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

2.2、DG1配置(主库oracle操作)

a、开启归档

提示:1.生产环境数据库严禁随意关停。2生产环境数据库在安装初始化时,就已经开启归档日志的。下面的操作只是为了模拟演示需要

关闭数据库
SQL> shutdown immediate

启动数据库到 mount
SQL> startup mount;

开启归档
SQL> alter database archivelog;

打开数据库
SQL> alter database open;

查询是否启用归档
SQL>archive log list
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
b、主库启用强制记录日志功能
查询是否启用强制记录日志
SQL>select force_logging from v$database;

如果未启用,则使用下面语句来开启强制记录日志
SQL> alter database force logging;
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
c、主库参数配置

一共11个参数需要进行配置。这是关键,如果参数有误,那么搭建可能会失败。1、db_unique_name

alter system set db_unique_name = 'dbprimary07' scope=spfile;
  • 1.

2、log_archive_config

alter system set log_archive_config='DG_CONFIG=(dbprimary07,dbstandby08)'  scope=both;
  • 1.
  • 2.

3、log_archive_dest_1 设置归档日志的目录位置

alter system set log_archive_dest_1='LOCATION=/u01/oracle/tools/oracle11g/product/11.2.0/dbhome_1/dbs/arch  VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=dbprimary07' scope=both;

##创建归档日志存放目录arch
su - oracle
mkdir -p /u01/oracle/tools/oracle11g/product/11.2.0/dbhome_1/dbs/arch

##查看归档日志的目录位置
SQL> SELECT NAME, ARCHIVED, DEST_ID, COMPLETION_TIME FROM V$ARCHIVED_LOG ORDER BY COMPLETION_TIME DESC;
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

提示:
主数据库和备用数据库的数据文件转换目录对映(如果两数据库的目录结构不一样),如果有多个对映,逐一指明对映关系。
一对一映射设定,在主库spfile配置文件中,第一个路径是备库的路径,第二个路径是主库的路径,这点是比较特别的,和常规的情况是相反的;
在备库spfile配置文件中,第一个路径是主库的路径,第二个路径是备库的路径,这点是比较特别的,和常规的情况是相反的;

4、log_archive_dest_2

alter system set log_archive_dest_2='SERVICE=dbstandby08 LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=dbstandby08' scope=spfile;
  • 1.
  • 2.

5、log_archive_dest_state_1

SQL> alter system set log_archive_dest_state_1 = ENABLE;
  • 1.

6、log_archive_dest_state_2

SQL> alter system set log_archive_dest_state_2 = ENABLE;
  • 1.
  • 2.

7、db_file_name_convert 查找数据文件的位置

SQL> select name from v$datafile;

SQL> alter system set db_file_name_convert='/u01/oracle/tools/oracle11g/oradata/orcl','/u01/oracle/tools/oracle11g/oradata/orcl' scope=spfile;
  • 1.
  • 2.
  • 3.
  • 4.

8、log_file_name_convert 查看在线日志文件的位置

select member from v$logfile;
alter system set log_file_name_convert='/u01/oracle/tools/oracle11g/oradata/orcl','/u01/oracle/tools/oracle11g/oradata/orcl' scope=spfile;
  • 1.
  • 2.
  • 3.

9、standby_file_management

SQL> alter system set standby_file_management=auto scope=spfile;
  • 1.
  • 2.

10、fal_client

SQL> alter system set fal_client='dbprimary07' scope=both;
  • 1.
  • 2.

11、fal_server

SQL> alter system set fal_server='dbstandby08' scope=both;
  • 1.
  • 2.
d、主库静态监听配置
[oracle@dbprimary07 admin]$ cat /u01/oracle/tools/oracle11g/product/11.2.0/dbhome_1/network/admin/listener.ora 
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = orcl)
      (ORACLE_HOME = /u01/oracle/tools/oracle11g/product/11.2.0/dbhome_1)
      (SID_NAME = orcl)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = dbprimary07)  
      (ORACLE_HOME = /u01/oracle/tools/oracle11g/product/11.2.0/dbhome_1)  
      (SID_NAME = orcl)  
    )
  )

LISTENER =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.7)(PORT = 1521))
  )

ADR_BASE_LISTENER = /u01/oracle/tools/oracle11g
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
[oracle@dbprimary07 admin]$ cat /u01/oracle/tools/oracle11g/product/11.2.0/dbhome_1/network/admin/tnsnames.ora 
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/db/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

LISTENER_ORCL =
  (ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.7)(PORT = 1521))

dbprimary07 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.7)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

dbstandby08 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.8)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )
[oracle@dbprimary07 admin]$
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.

##查看监听的状态

lsnrctl status
lsnrctl start

[oracle@dbprimary07 admin]$ lsnrctl status

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 11-OCT-2024 12:20:26

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

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.0.0.7)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date                11-OCT-2024 12:20:23
Uptime                    0 days 0 hr. 0 min. 3 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/oracle/tools/oracle11g/product/11.2.0/dbhome_1/network/admin/listener.ora
Listener Log File         /u01/oracle/tools/oracle11g/diag/tnslsnr/dbprimary07/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.0.0.7)(PORT=1521)))
Services Summary...
Service "dbprimary07" has 1 instance(s).
  Instance "orcl", status UNKNOWN, has 1 handler(s) for this service...
Service "orcl" has 1 instance(s).
  Instance "orcl", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.

2.3、DG2配置

a、密码文件

在dataguard中,主库与备库sys密码需一致,需要将主库的密码文件拷贝到备库中。

[oracle@dbprimary07 admin]$ cd $ORACLE_HOME/dbs
[oracle@dbprimary07 dbs]$ ls
arch  hc_DBUA0.dat  hc_orcl.dat  init.ora  lkORCL  orapworcl  spfileorcl.ora
[oracle@dbprimary07 dbs]$ scp orapworcl 10.0.0.8:/u01/oracle/tools/oracle11g/product/11.2.0/dbhome_1/dbs/
oracle@10.0.0.8's password: 
orapworcl
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

如果不拷贝密码文件,直接使用orapwd生成一个新的密码文件,密码需与主库一致:

[oracle@dbstandby08 dbs]$ orapwd file=orapworcl password=oracle force=y   #与主库 sys 用户密码一致
  • 1.
b、初始化参数文件
1、在主库生成初始化参数文件
SQL> create pfile from spfile;
  • 1.

在主库的目录下会生成一个 initorcl.ora 文件 文件部分内容就是刚才登录主库alter设置的参数.具体文件内容如下:

[oracle@dbprimary07 dbs]$ pwd
/u01/oracle/tools/oracle11g/product/11.2.0/dbhome_1/dbs
[oracle@dbprimary07 dbs]$ cat initorcl.ora 
orcl.__db_cache_size=654311424
orcl.__java_pool_size=16777216
orcl.__large_pool_size=16777216
orcl.__oracle_base='/u01/oracle/tools/oracle11g'#ORACLE_BASE set from environment
orcl.__pga_aggregate_target=637534208
orcl.__sga_target=956301312
orcl.__shared_io_pool_size=0
orcl.__shared_pool_size=251658240
orcl.__streams_pool_size=0
*.audit_file_dest='/u01/oracle/tools/oracle11g/admin/orcl/adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='/u01/oracle/tools/oracle11g/oradata/orcl/control01.ctl','/u01/oracle/tools/oracle11g/flash_recovery_area/orcl/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_file_name_convert='/u01/oracle/tools/oracle11g/oradata/orcl','/u01/oracle/tools/oracle11g/oradata/orcl'
*.db_name='orcl'
*.db_recovery_file_dest='/u01/oracle/tools/oracle11g/flash_recovery_area'
*.db_recovery_file_dest_size=4070572032
*.db_unique_name='dbprimary07'
*.diagnostic_dest='/u01/oracle/tools/oracle11g'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
*.fal_client='dbprimary07'
*.fal_server='dbstandby08'
*.log_archive_dest_1='LOCATION=/u01/oracle/tools/oracle11g/product/11.2.0/dbhome_1/dbs/arch  VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=dbprimary07'
*.log_archive_dest_2='SERVICE=dbstandby08 LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=dbstandby08'
*.log_archive_dest_state_1='ENABLE'
*.log_archive_dest_state_2='ENABLE'
*.log_file_name_convert='/u01/oracle/tools/oracle11g/oradata/orcl','/u01/oracle/tools/oracle11g/oradata/orcl'
*.memory_target=1580204032
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.standby_file_management='AUTO'
*.undo_tablespace='UNDOTBS1'
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
2、拷贝主库的initorcl.ora参数文件到备库
[oracle@dbprimary07 dbs]$ pwd
/u01/oracle/tools/oracle11g/product/11.2.0/dbhome_1/dbs
[oracle@dbprimary07 dbs]$ scp initorcl.ora 10.0.0.8:/u01/oracle/tools/oracle11g/product/11.2.0/dbhome_1/dbs/
  • 1.
  • 2.
  • 3.
  • 4.
3、修改备库的参数文件内容如下
[oracle@dbstandby08 dbs]$ cat /u01/oracle/tools/oracle11g/product/11.2.0/dbhome_1/dbs/initorcl.ora 
orcl.__db_cache_size=654311424
orcl.__java_pool_size=16777216
orcl.__large_pool_size=16777216
orcl.__oracle_base='/u01/oracle/tools/oracle11g'#ORACLE_BASE set from environment
orcl.__pga_aggregate_target=637534208
orcl.__sga_target=956301312
orcl.__shared_io_pool_size=0
orcl.__shared_pool_size=251658240
orcl.__streams_pool_size=0
*.audit_file_dest='/u01/oracle/tools/oracle11g/admin/orcl/adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='/u01/oracle/tools/oracle11g/oradata/orcl/control01.ctl','/u01/oracle/tools/oracle11g/flash_recovery_area/orcl/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_file_name_convert='/u01/oracle/tools/oracle11g/oradata/orcl','/u01/oracle/tools/oracle11g/oradata/orcl'
*.db_name='orcl'
*.db_recovery_file_dest='/u01/oracle/tools/oracle11g/flash_recovery_area'
*.db_recovery_file_dest_size=4070572032
*.db_unique_name='dbstandby08'
*.diagnostic_dest='/u01/oracle/tools/oracle11g'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
*.fal_client='dbstandby08'
*.fal_server='dbprimary07'
*.log_archive_dest_1='LOCATION=/u01/oracle/tools/oracle11g/product/11.2.0/dbhome_1/dbs/arch  VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=dbstandby08'
*.log_archive_dest_2='SERVICE=dbprimary07 LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=dbprimary07'
*.log_archive_dest_state_1='ENABLE'
*.log_archive_dest_state_2='ENABLE'
*.log_file_name_convert='/u01/oracle/tools/oracle11g/oradata/orcl','/u01/oracle/tools/oracle11g/oradata/orcl'
*.memory_target=1580204032
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.standby_file_management='AUTO'
*.undo_tablespace='UNDOTBS1'
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.

注意:里面涉及到路径的需要手动创建

[oracle@dbstandby08 dbs]$ mkdir  -p /u01/oracle/tools/oracle11g/admin/orcl/adump
[oracle@dbstandby08 dbs]$ mkdir -p /u01/oracle/tools/oracle11g/oradata/orcl
[oracle@dbstandby08 dbs]$ mkdir -p /u01/oracle/tools/oracle11g/product/11.2.0/dbhome_1/dbs/arch
  • 1.
  • 2.
  • 3.
  • 4.

登陆到备库使用pfile文件创建spfile文件

sqlplus / as sysdba
create spfile from pfile='/u01/oracle/tools/oracle11g/product/11.2.0/dbhome_1/dbs/initorcl.ora';
##提示:此处使用pfile文件创建spfile文件,默认找的就是$ORACLE_HOME/11.2.0/dbhome_1/dbs/initorcl.ora文件。此处可以直接create spfile from pfile;来生成spfileorcl.ora二进制文件。
要是initorcl.ora文件不在默认$ORACLE_HOME/11.2.0/dbhome_1/dbs/路径下,创建spfile文件时 需要create spfile from pfile='xxxx';指定pfile文件具体路径
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
SQL> startup nomount
  • 1.

提示报错:

SQL>  startup nomount
ORA-09925: Unable to create audit trail file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 9925
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

需要创建下adump目录

[oracle@dbstandby08 dbs]$ mkdir  -p /u01/oracle/tools/oracle11g/admin/orcl/adump

关闭备库oracle  再次启动

SQL> shutdown immediate;
ORA-01507: database not mounted
ORACLE instance shut down.
SQL> 
SQL> 
SQL> shutdown immediate;
ORA-01012: not logged on
SQL> startup nomount;
ORACLE instance started.

Total System Global Area 1586708480 bytes
Fixed Size                  2213736 bytes
Variable Size             922749080 bytes
Database Buffers          654311424 bytes
Redo Buffers                7434240 bytes
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
4、配置静态监听
[oracle@dbstandby08 admin]$ cat /u01/oracle/tools/oracle11g/product/11.2.0/dbhome_1/network/admin/listener.ora 
# listener.ora Network Configuration File: /u01/oracle/product/11.2.0/db/network/admin/listener

.ora
# Generated by Oracle configuration tools.

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS_LIST = 
        (ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.8)(PORT = 1521))
      )
    )
  )

SID_LIST_LISTENER = 
  (SID_LIST = 
    (SID_DESC = 
      (GLOBAL_DBNAME=orcl)
      (SID_NAME = orcl)
      (ORACLE_HOME = /u01/oracle/tools/oracle11g/product/11.2.0/dbhome_1)       
    ) 
    (SID_DESC =
      (GLOBAL_DBNAME = dbstandby08)
      (ORACLE_HOME = /u01/oracle/tools/oracle11g/product/11.2.0/dbhome_1)
      (SID_NAME = orcl)
    )
  ) 

ADR_BASE_LISTENER = /u01/oracle/tools/oracle11g
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
[oracle@dbstandby08 admin]$ cat /u01/oracle/tools/oracle11g/product/11.2.0/dbhome_1/network/admin/tnsnames.ora 
LISTENER_ORCL =
  (ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.8)(PORT = 1521))

dbprimary07 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.7)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = orcl)
    )
  )

dbstandby08 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.8)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = orcl)
    )
  )
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
5、测试网络连通性
[oracle@dbprimary07 ~]$ tnsping dbstandby08

TNS Ping Utility for Linux: Version 11.2.0.1.0 - Production on 11-OCT-2024 13:00:26

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

Used parameter files:

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


[oracle@dbstandby08 admin]$ tnsping dbprimary07

TNS Ping Utility for Linux: Version 11.2.0.1.0 - Production on 11-OCT-2024 13:00:52

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

Used parameter files:

Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.7)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = orcl)))
OK (0 msec)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
6、在主库进行登录测试

均可以正常登录

[oracle@dbprimary07 ~]$ sqlplus sys/oracle@dbprimary07 as sysdba
[oracle@dbprimary07 ~]$ sqlplus sys/oracle@dbstandby08 as sysdba

[oracle@dbstandby08 admin]$ sqlplus sys/oracle@dbprimary07 as sysdba
[oracle@dbstandby08 admin]$ sqlplus sys/oracle@dbstandby08 as sysdba
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

要是有不能登录的情况,就重新启动下监听器
lsnrctl stop ;
lsnrctl start ;

7、使用duplicate创建物理standby

(1)连接到主备库

[oracle@dbstandby08 admin]$ rman target sys/oracle@dbprimary07 auxiliary sys/oracle@dbstandby08 nocatalog

Recovery Manager: Release 11.2.0.1.0 - Production on Fri Oct 11 13:05:44 2024

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

connected to target database: ORCL (DBID=1709860377)
using target database control file instead of recovery catalog
connected to auxiliary database: ORCL (not mounted)

RMAN> exit
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.

(2)使用duplicate复制数据库

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

Starting Duplicate Db at 11-OCT-24
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=10 device type=DISK

contents of Memory Script:
{
   backup as copy reuse
   targetfile  '/u01/oracle/tools/oracle11g/product/11.2.0/dbhome_1/dbs/orapworcl' auxiliary format 
 '/u01/oracle/tools/oracle11g/product/11.2.0/dbhome_1/dbs/orapworcl'   ;
}
executing Memory Script

Starting backup at 11-OCT-24
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=39 device type=DISK
Finished backup at 11-OCT-24

contents of Memory Script:
{
   backup as copy current controlfile for standby auxiliary format  '/u01/oracle/tools/oracle11g/oradata/orcl/control01.ctl';
   restore clone controlfile to  '/u01/oracle/tools/oracle11g/flash_recovery_area/orcl/control02.ctl' from 
 '/u01/oracle/tools/oracle11g/oradata/orcl/control01.ctl';
}
executing Memory Script

Starting backup at 11-OCT-24
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile copy
copying standby control file
output file name=/u01/oracle/tools/oracle11g/product/11.2.0/dbhome_1/dbs/snapcf_orcl.f tag=TAG20241011T130642 RECID=1 STAMP=1182085603
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:02
Finished backup at 11-OCT-24

Starting restore at 11-OCT-24
using channel ORA_AUX_DISK_1

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of Duplicate Db command at 10/11/2024 13:06:45
RMAN-03015: error occurred in stored script Memory Script
ORA-19504: failed to create file "/u01/oracle/tools/oracle11g/flash_recovery_area/orcl/control02.ctl"
ORA-27040: file create error, unable to create file
Linux-x86_64 Error: 2: No such file or directory
ORA-19600: input file is control file  (/u01/oracle/tools/oracle11g/oradata/orcl/control01.ctl)
ORA-19601: output file is control file  (/u01/oracle/tools/oracle11g/flash_recovery_area/orcl/control02.ctl)

RMAN>
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.

提示报错:根据报错查看备库机器上flash_recovery_area/orcl 目录不存在,需要创建下

[oracle@dbstandby08 ~]$ ll  /u01/oracle/tools/oracle11g/flash_recovery_area/orcl
ls: cannot access /u01/oracle/tools/oracle11g/flash_recovery_area/orcl: No such file or directory
[oracle@dbstandby08 ~]$ mkdir -p  /u01/oracle/tools/oracle11g/flash_recovery_area/orcl
  • 1.
  • 2.
  • 3.

再次执行命令下面指令,顺利运行完成

duplicate target database for standby from active database nofilenamecheck; 

RMAN> 

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

Starting Duplicate Db at 11-OCT-24
using channel ORA_AUX_DISK_1

contents of Memory Script:
{
   backup as copy reuse
   targetfile  '/u01/oracle/tools/oracle11g/product/11.2.0/dbhome_1/dbs/orapworcl' auxiliary format 
 '/u01/oracle/tools/oracle11g/product/11.2.0/dbhome_1/dbs/orapworcl'   ;
}
executing Memory Script

Starting backup at 11-OCT-24
using channel ORA_DISK_1
Finished backup at 11-OCT-24

contents of Memory Script:
{
   backup as copy current controlfile for standby auxiliary format  '/u01/oracle/tools/oracle11g/oradata/orcl/control01.ctl';
   restore clone controlfile to  '/u01/oracle/tools/oracle11g/flash_recovery_area/orcl/control02.ctl' from 
 '/u01/oracle/tools/oracle11g/oradata/orcl/control01.ctl';
}
executing Memory Script

Starting backup at 11-OCT-24
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile copy
copying standby control file
output file name=/u01/oracle/tools/oracle11g/product/11.2.0/dbhome_1/dbs/snapcf_orcl.f tag=TAG20241011T130942 RECID=2 STAMP=1182085782
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
Finished backup at 11-OCT-24

Starting restore at 11-OCT-24
using channel ORA_AUX_DISK_1

channel ORA_AUX_DISK_1: copied control file copy
Finished restore at 11-OCT-24

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/oracle/tools/oracle11g/oradata/orcl/temp01.dbf";
   switch clone tempfile all;
   set newname for datafile  1 to 
 "/u01/oracle/tools/oracle11g/oradata/orcl/system01.dbf";
   set newname for datafile  2 to 
 "/u01/oracle/tools/oracle11g/oradata/orcl/sysaux01.dbf";
   set newname for datafile  3 to 
 "/u01/oracle/tools/oracle11g/oradata/orcl/undotbs01.dbf";
   set newname for datafile  4 to 
 "/u01/oracle/tools/oracle11g/oradata/orcl/users01.dbf";
   backup as copy reuse
   datafile  1 auxiliary format 
 "/u01/oracle/tools/oracle11g/oradata/orcl/system01.dbf"   datafile 
 2 auxiliary format 
 "/u01/oracle/tools/oracle11g/oradata/orcl/sysaux01.dbf"   datafile 
 3 auxiliary format 
 "/u01/oracle/tools/oracle11g/oradata/orcl/undotbs01.dbf"   datafile 
 4 auxiliary format 
 "/u01/oracle/tools/oracle11g/oradata/orcl/users01.dbf"   ;
   sql 'alter system archive log current';
}
executing Memory Script

executing command: SET NEWNAME

renamed tempfile 1 to /u01/oracle/tools/oracle11g/oradata/orcl/temp01.dbf in control file

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

Starting backup at 11-OCT-24
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile copy
input datafile file number=00001 name=/u01/oracle/tools/oracle11g/oradata/orcl/system01.dbf
output file name=/u01/oracle/tools/oracle11g/oradata/orcl/system01.dbf tag=TAG20241011T130950
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:03
channel ORA_DISK_1: starting datafile copy
input datafile file number=00002 name=/u01/oracle/tools/oracle11g/oradata/orcl/sysaux01.dbf
output file name=/u01/oracle/tools/oracle11g/oradata/orcl/sysaux01.dbf tag=TAG20241011T130950
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:03
channel ORA_DISK_1: starting datafile copy
input datafile file number=00003 name=/u01/oracle/tools/oracle11g/oradata/orcl/undotbs01.dbf
output file name=/u01/oracle/tools/oracle11g/oradata/orcl/undotbs01.dbf tag=TAG20241011T130950
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
channel ORA_DISK_1: starting datafile copy
input datafile file number=00004 name=/u01/oracle/tools/oracle11g/oradata/orcl/users01.dbf
output file name=/u01/oracle/tools/oracle11g/oradata/orcl/users01.dbf tag=TAG20241011T130950
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
Finished backup at 11-OCT-24

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=2 STAMP=1182085798 file name=/u01/oracle/tools/oracle11g/oradata/orcl/system01.dbf
datafile 2 switched to datafile copy
input datafile copy RECID=3 STAMP=1182085798 file name=/u01/oracle/tools/oracle11g/oradata/orcl/sysaux01.dbf
datafile 3 switched to datafile copy
input datafile copy RECID=4 STAMP=1182085798 file name=/u01/oracle/tools/oracle11g/oradata/orcl/undotbs01.dbf
datafile 4 switched to datafile copy
input datafile copy RECID=5 STAMP=1182085798 file name=/u01/oracle/tools/oracle11g/oradata/orcl/users01.dbf
Finished Duplicate Db at 11-OCT-24

RMAN>
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 102.
  • 103.
  • 104.
  • 105.
  • 106.
  • 107.
  • 108.
  • 109.
  • 110.
  • 111.
  • 112.
  • 113.
  • 114.
  • 115.
  • 116.
  • 117.
  • 118.
  • 119.
  • 120.
  • 121.
  • 122.
  • 123.
  • 124.
  • 125.
  • 126.
  • 127.
  • 128.
  • 129.
8、添加主库和备库的standby日志组

添加standby日志组需要注意的事项
standby日志组个数:配置为redo日志组个数+1
在主库与备库都添加standby日志组。主库可以不添加,但是如果后期发生主备切换,还是要添加,所以最好一次性添加

先查看主库redo日志的位置

SQL> select member from v$logfile;

MEMBER
--------------------------------------------------------------------------------
/u01/oracle/tools/oracle11g/oradata/orcl/redo03.log
/u01/oracle/tools/oracle11g/oradata/orcl/redo02.log
/u01/oracle/tools/oracle11g/oradata/orcl/redo01.log
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

先添加主库的standby日志组:

alter database add standby logfile group 4 '/u01/oracle/tools/oracle11g/oradata/orcl/redo04.log' size 50M; 
alter database add standby logfile group 5 '/u01/oracle/tools/oracle11g/oradata/orcl/redo05.log' size 50M; 
alter database add standby logfile group 6 '/u01/oracle/tools/oracle11g/oradata/orcl/redo06.log' size 50M; 
alter database add standby logfile group 7 '/u01/oracle/tools/oracle11g/oradata/orcl/redo07.log' size 50M; 

SQL> select member from v$logfile;

MEMBER
--------------------------------------------------------------------------------
/u01/oracle/tools/oracle11g/oradata/orcl/redo03.log
/u01/oracle/tools/oracle11g/oradata/orcl/redo02.log
/u01/oracle/tools/oracle11g/oradata/orcl/redo01.log
/u01/oracle/tools/oracle11g/oradata/orcl/redo04.log
/u01/oracle/tools/oracle11g/oradata/orcl/redo05.log
/u01/oracle/tools/oracle11g/oradata/orcl/redo06.log
/u01/oracle/tools/oracle11g/oradata/orcl/redo07.log

7 rows selected.
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.

再查看从库的redo日志位置:
(从库的redolog文件是第7步duplicate指令由主库复制过来的)

SQL> select member from v$logfile;

MEMBER
--------------------------------------------------------------------------------
/u01/oracle/tools/oracle11g/oradata/orcl/redo03.log
/u01/oracle/tools/oracle11g/oradata/orcl/redo02.log
/u01/oracle/tools/oracle11g/oradata/orcl/redo01.log
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

添加备库的standby日志组:

alter database add standby logfile group 4 '/u01/oracle/tools/oracle11g/oradata/orcl/redo04.log' size 50M; 
alter database add standby logfile group 5 '/u01/oracle/tools/oracle11g/oradata/orcl/redo05.log' size 50M; 
alter database add standby logfile group 6 '/u01/oracle/tools/oracle11g/oradata/orcl/redo06.log' size 50M; 
alter database add standby logfile group 7 '/u01/oracle/tools/oracle11g/oradata/orcl/redo07.log' size 50M;
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
9、开始同步数据库,在备库上执行
alter database open;

SQL>  alter database open;
Database altered.
  • 1.
  • 2.
  • 3.
  • 4.

10、开启实时同步

alter database recover managed standby database using current logfile disconnect from session;

SQL> alter database recover managed standby database using current logfile disconnect from session;

Database altered.
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

三、查看主备库状态

1、主库检查

SQL>  set line 300 pages 300
SQL> select name,remote_archive,database_role,guard_status,db_unique_name from v$database;

NAME                        REMOTE_ARCHIVE           DATABASE_ROLE                                    GUARD_STATUS          DB_UNIQUE_NAME
--------------------------- ------------------------ ------------------------------------------------ --------------------- ------------------------------------------------------------------------------------------
ORCL                        ENABLED                  PRIMARY                                          NONE                  orcl
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

发现主库DB_UNIQUE_NAME的名称为orcl,这个是主库初始化时给设定的 DB_UNIQUE_NAME名称为orcl。一开始主库配置dg1时 alter system set db_unique_name = ‘dbprimary07’ scope=spfile; 并没有生效。需要 create spfile from pfile;重启oracle才能生效

此时需要先关闭备库监听,关闭备库,然后重启主库,最后开启备库和备库监听

//关闭备库监听器
lsnrctl stop

//关闭备库
sqlplus / as sysdba

alter database recover managed standby database cancel;
shutdown immediate;

//关闭和重启主库操作
shutdown immediate;
startup mount;
SQL>  set line 300 pages 300
SQL>  select name,remote_archive,database_role,guard_status,db_unique_name from v$database;

NAME                        REMOTE_ARCHIVE           DATABASE_ROLE                                    GUARD_STATUS          DB_UNIQUE_NAME
--------------------------- ------------------------ ------------------------------------------------ --------------------- ------------------------------------------------------------------------------------------
ORCL                        ENABLED                  PRIMARY                                          NONE                  dbprimary07


//启动备库
startup nomount;

alter database mount standby database;

alter database open;

alter database recover managed standby database using current logfile disconnect from session;

//启动备库监听器
quit;
lsnrctl start
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.

当然给线上正在运行的单实例orcl部署备用实例时,这个DB_UNIQUE_NAME是不能随便修改的,因为修改的话,是需要重启oracle服务的。
所以给线上正在运行oracle实例配置adg时,DB_UNIQUE_NAME要保持不变,从库的配置参数DB_UNIQUE_NAME进行修改就行

2、备库检查

SQL> set line 300 pages 300
SQL> select name,remote_archive,database_role,guard_status,db_unique_name from v$database;

NAME                        REMOTE_ARCHIVE           DATABASE_ROLE                                    GUARD_STATUS          DB_UNIQUE_NAME
--------------------------- ------------------------ ------------------------------------------------ --------------------- ------------------------------------------------------------------------------------------
ORCL                        ENABLED                  PHYSICAL STANDBY                                 NONE                  dbstandby08

SQL>
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

3、查询主备库日志是否同步(确保最大 SEQUENCE#相同)

SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME  FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;

 SEQUENCE# FIRST_TIME      NEXT_TIME
---------- --------------- ---------------
         2 11-OCT-24       11-OCT-24
		 
		 
SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME  FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;

 SEQUENCE# FIRST_TIME         NEXT_TIME
---------- ------------------ ------------------
         2 11-OCT-24          11-OCT-24

SQL>
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.

4、检查日志是否被备库使用(APPLIED 值为 yes)

SQL> SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;

 SEQUENCE# APPLIED
---------- ---------------------------
         2 YES

SQL>
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

5. 主库上手动切换下归档日志进行验证同步

主库操作:

SQL> alter system archive log current;

System altered.


SQL> SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;

 SEQUENCE# APPLIED
---------- ---------------------------
         2 NO
         3 NO
         3 YES
         4 NO
         4 YES
         5 NO
         5 YES
         6 NO
         6 NO

9 rows selected.

SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME  FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;

 SEQUENCE# FIRST_TIME      NEXT_TIME
---------- --------------- ---------------
         2 11-OCT-24       11-OCT-24
         3 11-OCT-24       11-OCT-24
         3 11-OCT-24       11-OCT-24
         4 11-OCT-24       11-OCT-24
         4 11-OCT-24       11-OCT-24
         5 11-OCT-24       11-OCT-24
         5 11-OCT-24       11-OCT-24
         6 11-OCT-24       11-OCT-24
         6 11-OCT-24       11-OCT-24

9 rows selected.
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.

备库查看证明同步已经完成

SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME  FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;

 SEQUENCE# FIRST_TIME         NEXT_TIME
---------- ------------------ ------------------
         2 11-OCT-24          11-OCT-24
         3 11-OCT-24          11-OCT-24
         4 11-OCT-24          11-OCT-24
         5 11-OCT-24          11-OCT-24
         6 11-OCT-24          11-OCT-24

SQL> SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;

 SEQUENCE# APPLIED
---------- ---------------------------
         2 YES
         3 YES
         4 YES
         5 YES
         6 IN-MEMORY
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.

四、DataGuard测试

在主库上创建测试表并插入数据

create table test0001(id  number,name  varchar2(255));
insert into test0001 values(1,'zhangsan');
insert into test0001 values(2,'lisi');
commit;
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

提示:
主库执行完sql后,必须进行commit,主库数据才会同步到备库

在standby数据库上查询测试表,验证数据同步成功

SQL> select *  from test0001;

        ID
----------
NAME
--------------------------------------------------------------------------------
         1
zhangsan

         2
lisi
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.

五、日常运维必备命令

5.1、主备库角色状态查询

select switchover_status,database_role from v$database;
select name,open_mode,database_role,dataguard_broker,guard_status,switchover_status from v$database;


SQL> select switchover_status,database_role from v$database;

SWITCHOVER_STATUS                                            DATABASE_ROLE
------------------------------------------------------------ ------------------------------------------------
TO STANDBY                                                   PRIMARY

SQL>  select name,open_mode,database_role,dataguard_broker,guard_status,switchover_status from v$database;

NAME                        OPEN_MODE                                                    DATABASE_ROLE                                    DATAGUARD_BROKER         GUARD_STATUS          SWITCHOVER_STATUS
--------------------------- ------------------------------------------------------------ ------------------------------------------------ ------------------------ --------------------- ------------------------------------------------------------
ORCL                        READ WRITE                                                   PRIMARY                                          DISABLED                 NONE                  TO STANDBY
SQL> 


SQL> select switchover_status,database_role from v$database;

SWITCHOVER_STATUS                                            DATABASE_ROLE
------------------------------------------------------------ ------------------------------------------------
NOT ALLOWED                                                  PHYSICAL STANDBY

SQL>  select name,open_mode,database_role,dataguard_broker,guard_status,switchover_status from v$database;

NAME                        OPEN_MODE                                                    DATABASE_ROLE                                    DATAGUARD_BROKER         GUARD_STATUS          SWITCHOVER_STATUS
--------------------------- ------------------------------------------------------------ ------------------------------------------------ ------------------------ --------------------- ------------------------------------------------------------
ORCL                        READ ONLY WITH APPLY                                         PHYSICAL STANDBY                                 DISABLED                 NONE                  NOT ALLOWED

SQL>
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.

5.2、查看dataguard最新状态

alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
set line 160
set pagesize 1000
col type for a20
select process, status, thread#,sequence#, block#, blocks from v$managed_standby;
select GROUP#,THREAD#,SEQUENCE#,STATUS,LAST_CHANGE#,LAST_TIME from v$standby_log;
select START_TIME,TYPE, ITEM,UNITS,SOFAR,TIMESTAMP from v$recovery_progress where ITEM='Last Applied Redo';
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

主库查看:

SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';

Session altered.

SQL> set line 160
SQL> set pagesize 1000
SQL> col type for a20
SQL> select process, status, thread#,sequence#, block#, blocks from v$managed_standby;

PROCESS                     STATUS                                  THREAD#  SEQUENCE#     BLOCK#     BLOCKS
--------------------------- ------------------------------------ ---------- ---------- ---------- ----------
ARCH                        CLOSING                                       1          4          1         84
ARCH                        CONNECTED                                     0          0          0          0
ARCH                        CONNECTED                                     0          0          0          0
ARCH                        CLOSING                                       1          3          1        238
LNS                         WRITING                                       1          7       2438          1

SQL> select GROUP#,THREAD#,SEQUENCE#,STATUS,LAST_CHANGE#,LAST_TIME from v$standby_log;

    GROUP#    THREAD#  SEQUENCE# STATUS                         LAST_CHANGE# LAST_TIME
---------- ---------- ---------- ------------------------------ ------------ -------------------
         4          0          0 UNASSIGNED                                0
         5          0          0 UNASSIGNED                                0
         6          0          0 UNASSIGNED                                0
         7          0          0 UNASSIGNED                                0

SQL> select START_TIME,TYPE, ITEM,UNITS,SOFAR,TIMESTAMP from v$recovery_progress where ITEM='Last Applied Redo';

no rows selected
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.

备库查看:

SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';

Session altered.

SQL> set line 160
SQL> set pagesize 1000
SQL> col type for a20
SQL> select process, status, thread#,sequence#, block#, blocks from v$managed_standby;

PROCESS                     STATUS                                  THREAD#  SEQUENCE#     BLOCK#     BLOCKS
--------------------------- ------------------------------------ ---------- ---------- ---------- ----------
ARCH                        CLOSING                                       1          5          1         44
ARCH                        CLOSING                                       1          3          1        238
ARCH                        CLOSING                                       1          6          1          6
ARCH                        CONNECTED                                     0          0          0          0
MRP0                        APPLYING_LOG                                  1          7       2495     102400
RFS                         IDLE                                          0          0          0          0
RFS                         IDLE                                          0          0          0          0
RFS                         IDLE                                          1          7       2495          1

8 rows selected.

SQL> select GROUP#,THREAD#,SEQUENCE#,STATUS,LAST_CHANGE#,LAST_TIME from v$standby_log;

    GROUP#    THREAD#  SEQUENCE# STATUS                         LAST_CHANGE# LAST_TIME
---------- ---------- ---------- ------------------------------ ------------ -------------------
         4          1          7 ACTIVE                               959080 2024-10-11 14:21:04
         5          0          0 UNASSIGNED                                0
         6          0          0 UNASSIGNED                                0
         7          0          0 UNASSIGNED                                0

SQL> select START_TIME,TYPE, ITEM,UNITS,SOFAR,TIMESTAMP from v$recovery_progress where ITEM='Last Applied Redo';

START_TIME          TYPE                 ITEM
------------------- -------------------- ------------------------------------------------------------------------------------------------
UNITS                                                                                                 SOFAR TIMESTAMP
------------------------------------------------------------------------------------------------ ---------- -------------------
2024-10-11 13:55:06 Media Recovery       Last Applied Redo
SCN+Time                                                                                                  0 2024-10-11 14:21:06
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.

5.3、主库查看redo_log;备库查看standby log

SQL>  select group#,thread#,bytes/1024/1024 M,status from v$log;

    GROUP#    THREAD#          M STATUS
---------- ---------- ---------- ------------------------------------------------
         1          1         50 CURRENT
         2          1         50 INACTIVE
         3          1         50 INACTIVE

SQL>
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
SQL> select group#,thread#,bytes/1024/1024M,status,last_change#,last_time from v$standby_log;

    GROUP#    THREAD#          M STATUS                         LAST_CHANGE# LAST_TIME
---------- ---------- ---------- ------------------------------ ------------ -------------------
         4          1         50 ACTIVE                               963990 2024-10-11 15:32:36
         5          0         50 UNASSIGNED                                0
         6          0         50 UNASSIGNED                                0
         7          0         50 UNASSIGNED                                0
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

5.4、主、备库查看当前日志状况

select group#,thread#,bytes/1024/1024 M,status from v$log;

主库查看
SQL>  select group#,thread#,bytes/1024/1024 M,status from v$log;

    GROUP#    THREAD#          M STATUS
---------- ---------- ---------- ------------------------------------------------
         1          1         50 CURRENT
         2          1         50 INACTIVE
         3          1         50 INACTIVE

备库查看		 
SQL> select group#,thread#,bytes/1024/1024 M,status from v$log;

    GROUP#    THREAD#          M STATUS
---------- ---------- ---------- ------------------------------------------------
         1          1         50 CLEARING_CURRENT
         2          1         50 CLEARING
         3          1         50 CLEARING
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.

5.5、显示服务名称

SQL> show parameter service_names;

NAME                                 TYPE                 VALUE
------------------------------------ -------------------- ------------------------------
service_names                        string               dbprimary07
SQL> 

SQL> show parameter service_names;

NAME                                 TYPE                 VALUE
------------------------------------ -------------------- ------------------------------
service_names                        string               dbstandby08
SQL>
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.

5.6、查看从库日志应用情况

SQL> select name,sequence#,archived,applied from v$archived_log order by sequence#;

NAME
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 SEQUENCE# ARCHIVED  APPLIED
---------- --------- ---------------------------
/u01/oracle/tools/oracle11g/product/11.2.0/dbhome_1/dbs/arch/1_2_1182079644.dbf
         2 YES       YES

/u01/oracle/tools/oracle11g/product/11.2.0/dbhome_1/dbs/arch/1_3_1182079644.dbf
         3 YES       YES

/u01/oracle/tools/oracle11g/product/11.2.0/dbhome_1/dbs/arch/1_4_1182079644.dbf
         4 YES       YES

/u01/oracle/tools/oracle11g/product/11.2.0/dbhome_1/dbs/arch/1_5_1182079644.dbf
         5 YES       YES

/u01/oracle/tools/oracle11g/product/11.2.0/dbhome_1/dbs/arch/1_6_1182079644.dbf
         6 YES       IN-MEMORY


SQL>
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.

5.7、强制注册服务

SQL> alter system register;

①如果是先启动监听,后启动数据库实例,则动态监听会自动识别到启动的数据库实例;
②在数据库实例正常运行的情况下重启监听,则数据库实例会等很长时间才能在动态监听中注册成功,大约需要1分钟的等待时间;
③如果是先启动数据库实例,后启动监听,效果和②一样;
④如果不希望长时间等待动态监听注册的过程,可以使用“alter system register;”命令加速。
网友验证结论过程 https://blog.csdn.net/anzhen0429/article/details/78351712

5.8、手动切换归档日志

SQL> alter system archive log current;  #用于将当前的重做日志文件归档
或者
SQL> alter system switch logfile;   #用于切换重做日志文件
  • 1.
  • 2.
  • 3.
  • 4.

郑重申明:上述操作过程都是虚拟机模拟生产环境部署搭建adg的,仅供学习参考,直接套用到线上生产环境造成事故损失的,本文章不承担任何责任
参考文章: https://zhuanlan.zhihu.com/p/720176867 https://www.cnblogs.com/lijiaman/p/10663047.html

以上就是整个oracle11g ADG配置整个过程,欢迎一起留言交流学习。