1.文档介绍
本实施方案主要对Oracle DataGuard实施部署作相应的说明。以便实施人员能根据当前业务特点,规划、建设符合高可用、高可靠的数据库集群系统。
具体由Oracle DG环境拓扑、Oracle单机数据库规划部分构成。
| 最大保护 | 最大可用 | 最大性能 | |
|---|---|---|---|
| 进程 | LGWR | LGWR | LGWR或ARCH |
| 网络传输模式 | SYNC | SYNC | LGWR时设置ASYNC |
| 磁盘写操作 | AFFIRM | AFFIRM | NOAFFIRM |
| 备用日志 | YES | 物理备用需要 | LGWR和物理备用时需要 |
| 备用库类型 | 物理Standby | 物理或逻辑 | 物理或逻辑 |
2.安装oracle数据库软件
| role | hostname | ip_addr | OS | software | storage |
|---|---|---|---|---|---|
| Primary | primary-database | 192.168.10.91 | Oracle Linux 7.6 | Oracle 19.3.0 | local |
| Stadnby | stadnby-database | 192.168.10.94 | Oracle Linux 7.6 | Oracle 19.3.0 | local |
2.1.环境配置
关闭防火墙
[root@localhost ~]# service iptables stop
[root@localhost ~]# service iptables status
iptables: Firewall is not running.
[root@localhost ~]#
[root@localhost ~]# chkconfig --del iptables
关闭selinux
[root@localhost ~]# getenforce
Enforcing
[root@localhost ~]# setenforce 0
[root@localhost ~]# getenforce
Permissive
[root@localhost ~]#
[root@localhost ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
修改主机名
[root@localhost ~]# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=dmmsdg
# oracle-database-server-12cR2-preinstall : Add NOZEROCONF=yes
[root@localhost ~]#
2.2.配置 Oracle 环境
使用oracle-database-server-12cR2-preinstall-1.0-3.el6.x86_64.rpm配置安装环境
yum install oracle-database-preinstall-18c-1.0-1.el7.x86_64.rpm -y
2.3.创建用户文件夹
mkdir -p /u01/app/oracle
mkdir -p /u01/app/oracle/product/19.3.0/dbhome_1
mkdir -p /u01/app/oraInventory
chmod -R 755 /u01
chown oracle:oinstall /u01
2.4.编辑 Oracle 用户环境变量
cat >> /home/oracle/.bash_profile <<EOF
export ORACLE_SID=orcl
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19.3.0/dbhome_1/
export ORACLE_UNQNAME=orcl
export ORACLE_TERM=xterm
export PATH=/usr/sbin:$PATH
export PATH=/$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export NLS_DATE_FORMAT="yyyy-mm-dd HH24:MI:SS"
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
export ORA_NLS11=$ORACLE_HOME/nls/data
export THREADS_FLAG=native
export TMP=/tmp
export TMPDIR=$TMP
EOF
2.5.安装环境
修改 SQL 提示符:
cat >> $ORACLE_HOME/sqlplus/admin/glogin.sql <<EOF
set linesize 200 pagesize 50
set sqlprompt "_user'@'_connect_identifier> "
define_editor=vi
EOF
3.主数据库配置
3.1.设置数据库归档
查看数据库是否运行在归档模式:
SYS@orcl> archive log list
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination /u01/app/oracle/product/19.3.0/dbhome_1/dbs/arch
Oldest online log sequence 4
Current log sequence 6
SYS@orcl>
数据库已经开启归档,下面的操纵可以忽略。
如上所示未开启归档,可按下面方法开启数据库归档
SYS@orcl> shut immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SYS@orcl> startup mount
ORACLE instance started.
Total System Global Area 2432695144 bytes
Fixed Size 8899432 bytes
Variable Size 536870912 bytes
Database Buffers 1879048192 bytes
Redo Buffers 7876608 bytes
Database mounted.
SYS@orcl> alter database archivelog;
Database altered.
SYS@orcl> alter database open;
Database altered.
SYS@orcl>
设置归档路径
SYS@orcl> alter system set log_archive_dest_1='location=/u01/app/oracle/archivelog';
System altered.
SYS@orcl> archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /u01/app/oracle/archivelog
Oldest online log sequence 4
Next log sequence to archive 6
Current log sequence 6
SYS@orcl>
3.2.设置数据库闪回
验证是否开启闪回
SYS@orcl> select flashback_on from v$database;
FLASHBACK_ON
------------------------------------
NO
SYS@orcl> show parameter db_recovery_file_dest
NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
db_recovery_file_dest string
db_recovery_file_dest_size big integer 0
SYS@orcl>
数据库已经开启flashback,那么下面步骤可忽略。
如上显示,该数据库未开启flashback,可按下面方法开启。
创建文件夹
[oracle@primary-database oracle]$ mkdir /u01/app/oracle/fast_recovery_area
SYS@orcl> alter system set db_recovery_file_dest_size='5G';
System altered.
SYS@orcl> alter system set db_recovery_file_dest='/u01/app/oracle/fast_recovery_area';
System altered.
SYS@orcl> show parameter db_recovery_file_dest
NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
db_recovery_file_dest string /u01/app/oracle/fast_recovery_
area
db_recovery_file_dest_size big integer 5G
SYS@orcl>
开启闪回
SYS@orcl> alter database flashback on;
Database altered.
SYS@orcl> select flashback_on from v$database;
FLASHBACK_ON
------------------------------------
YES
SYS@orcl>
3.3.设置数据库强制归档
验证是否开启focelogging
SYS@orcl> select force_logging from v$database;
FORCE_LOGGING
------------------------------------------------------------------------------
NO
SYS@orcl>
数据库已经开启force logging,那么下面步骤可忽略。
如上可以看出数据库未开启,则按下面步骤执行:
SYS@orcl> alter database force logging;
Database altered.
SYS@orcl> select force_logging from v$database;
FORCE_LOGGING
------------------------------------------------------------------------------
YES
SYS@orcl>
3.4.添加 STANDBY 日志文件
在备库,当RFS进程接受到日志后,就将其写入Standby日志文件里,备库的Standby日志文件可以看做是主库在线日志文件的一个镜像,当主库做日志切换时,备库的Standby日志也做相应的切换,切换后的Standby日志由备库的ARCH进程归档。
Oracle规定备库的Standby日志文件大小不能小于主库在线日志文件最大的一个,一般情况下,为了管理方便,最好把所有的在线日志和Standby日志大小设为一样。
通过下面语句可以查询主库在线日志的大小和组数:
SYS@dmms> select group#,bytes/1024/1024 from v$log;
GROUP# BYTES/1024/1024
---------- ---------------
1 50
2 50
3 50
SYS@dmms>
通过下面的语句可以查询备库Standby日志的大小和组数:
SYS@dmms> select group#,bytes/1024/1024 from v$standby_log;
no rows selected
SYS@dmms>
创建standby logfile
alter database add standby logfile group 4 '/u01/app/oracle/oradata/ORCL/STANDBY_REDO04.LOG' size 200M;
alter database add standby logfile group 5 '/u01/app/oracle/oradata/ORCL/STANDBY_REDO05.LOG' size 200M;
alter database add standby logfile group 6 '/u01/app/oracle/oradata/ORCL/STANDBY_REDO06.LOG' size 200M;
alter database add standby logfile group 7 '/u01/app/oracle/oradata/ORCL/STANDBY_REDO07.LOG' size 200M;
确认 standby redolog file
SYS@orcl> select group#,bytes/1024/1024 from v$standby_log;
GROUP# BYTES/1024/1024
---------- ---------------
4 200
5 200
6 200
7 200
SYS@orcl>
3.5.修改监听配置文件
主库
[root@localhost ~]# cat /u01/app/oracle/product/19.3.0/dbhome_1/network/admin/listener.ora
# listener.ora Network Configuration File: /u01/app/oracle/product/19.3.0/dbhome_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = primary-database)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(SID_NAME = orcl)
(ORACLE_HOME = /u01/app/oracle/product/19.3.0/dbhome_1)
)
)
ADR_BASE_LISTENER = /u01/app/oracle
注意:如果主库上的监听之前已经配置过,这里可以忽略该步骤。
重启监听服务
lsnrctl stop
lsnrctl start
3.6.修改TNS配置文件
主库
[root@localhost ~]# cat /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/19.3.0/dbhome_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
LISTENER_ORCL =
(ADDRESS = (PROTOCOL = TCP)(HOST = primary-database)(PORT = 1521))
PRIMARY =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = primary-database)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
STANDBY =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = standby-database)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
3.7.修改参数文件
主库
alter system set LOG_ARCHIVE_DEST_1='LOCATION=/u01/app/oracle/archivelog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcl';
alter system set LOG_ARCHIVE_DEST_2='SERVICE=standby LGWR SYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl';
alter system set log_archive_dest_state_2='ENABLE' scope=both;
alter system set fal_server='standby' scope=both;
alter system set fal_client='primary' scope=both;
alter system set standby_file_management='AUTO' scope=both;
1.DB_NAME
数据库名字,需要保持同一个Data Guard中所有数据库DB_NAME相同。
主库和备库相同:
DB_NAME='chicago'
DB_NAME='chicago'
2.DB_UNIQUE_NAME
DB_UNIQUE_NAME = unique_service_provider_name_for_this_database
为每一个数据库指定一个唯一的名称。
主库:
DB_UNIQUE_NAME=chicago
备库:
DB_UNIQUE_NAME=boston
3.LOG_ARCHIVE_CONFIG:
LOG_ARCHIVE_CONFIG=’DG_CONFIG=(db_unique_name, db_unique_name, …)’
该参数通过DG_CONFIG属性罗列同一个Data Guard中所有DB_UNIQUE_NAME(含primary db及standby db),以逗号分隔。
主库和备库相同:
LOG_ARCHIVE_CONFIG='DG_CONFIG=(chicago,boston)'
LOG_ARCHIVE_CONFIG='DG_CONFIG=(chicago,boston)'
初始化参数 LOG_ARCHIVE_CONFIG 用于控制发送归档日志到远程位置、接收远程归档日志,并指定 Data Guard配置的惟一数据库名。
默认值为 SEND,RECEIVE,NODG_CONFIG。
- 当设置该参数为SEND时,会激活发送归档日志到远程位置;
- 当设置该参数为NOSEND时,会禁止发送归档日志到远程位置;
- 当设置该参数为RECEIVE时,会激活接收远程归档日志;
- 当设置该参数为NORECEIVE时,会禁止接收远程归档日志;
- 当设置该参数为DG_CONFIG时,可以最多指定9个惟一数据库名;
- 当设置该参数为NODG_CONFIG时,会禁止指定惟一数据库名,即便归档传输路径中指定了DB_UNIQUE_NAME也不生效。
当主库与备库的db_unique_name相同时,log_archive_config就不需要配置了,直接将其置空。
此时log_archive_dest_2参数中的db_unique_name可以随意写。
例如主库与备库 db_unique_name 为 orcl
alter system set log_archive_config='' scope=both;
alter system set log_archive_dest_2='SERVICE=orcl2 db_unique_name=xiangxun' scope=both;
SERVICE后面接的是 tnsname,db_unique_name 可以随意写
当主库与备库的db_unique_name不同时,log_archive_config可以配置也可以不配置。
- 如果配置了log_archive_config,那么log_archive_dest_2参数中的db_unique_name 必须与log_archive_config 参数中的 db_unique_name 相匹配
- 如果没有配置log_archive_config,那么log_archive_dest_2参数中的db_unique_name可以随意写。
因为日志发送主要是依靠于SERVICE进行发送日志。
例如主库db_unique_name为orcl1,备库db_unique_name为orcl2:
配置了log_archive_config:
alter system set log_archive_config='DG_CONFIG=(orcl1,orcl2)' scope=both;
alter system set log_archive_dest_2='SERVICE=orcl2 db_unique_name=orcl2' scope=both;
SERVICE后面接的是tnsname,db_unique_name要与log_archive_config参数中的db_unique_name相匹配
没有配置log_archive_config:
alter system set log_archive_config='' scope=both;
alter system set log_archive_dest_2='SERVICE=orcl2 db_unique_name=xxx' scope=both;
SERVICE后面接的是tnsname, db_unique_name 随意写
4.CONTROL_FILES
CONTROL_FILES = ‘control_file_name’ , ‘control_file_name’, ‘…’)
控制文件位置说明,注意要修改到具体的控制文件位置。
主库:
control_files='/u01/app/oracle/oradata/chicago/control01.ctl','/u01/app/oracle/oradata/chicago/control02.ctl','/u01/app/oracle/oradata/chicago/control03.ctl'
备库:
control_files='/u01/app/oracle/oradata/boston/control01.ctl','/u01/app/oracle/oradata/boston/control02.ctl',
5.log_archive_dest_2
在Oracle数据库中,可以通过设置LOG_ARCHIVE_DEST_n 参数来指定归档日志的目标位置。这个参数的值通常设置为LGWR(Log Writer)或者ARCH(Archiver),分别表示将归档日志发送给Log Writer进程或者归档器进程。
- LGWR
LGWR是Oracle数据库中的一个后台进程,负责将重做日志(Redo Log)写入磁盘。当LOG_ARCHIVE_DEST_2参数设置为LGWR时,表示归档日志会直接交给LGWR进程处理。 - ARCH
ARCH是Oracle数据库中的一个归档进程,负责将重做日志归档到指定位置。当LOG_ARCHIVE_DEST_2参数设置为ARCH时,表示归档日志会由ARCH进程处理。
在Oracle数据库中,你需要修改参数文件以配置log_archive_dest_2。参数文件通常是"init.ora"或"spfile.ora"。
在设置 “log_archive_dest_n” 参数之前,你需要先创建归档目的地。归档目的地可以是一个本地目录,也可以是一个远程服务器。
LOG_ARCHIVE_DEST_n = {LOCATION=path_name| SERVICE=service_name, attribute, attribute, … }
归档文件的生成路径,location代表本地机上,service指明在另一台机器上。
主库:
LOG_ARCHIVE_DEST_1='LOCATION=/home/oracle/arch/chicago VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=chicago'
LOG_ARCHIVE_DEST_2='SERVICE=boston LGWR SYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=boston'
备库:
LOG_ARCHIVE_DEST_1='LOCATION=/home/oracle/arch/boston VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=boston'
LOG_ARCHIVE_DEST_2='SERVICE=chicago LGWR SYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=chicago'
- 如果你想将归档日志备份到本地目录,你可以执行以下命令:
ALTER SYSTEM SET log_archive_dest_2='LOCATION=/path/to/archive/destination' SCOPE=BOTH;
其中,“/path/to/archive/destination” 是你希望归档日志备份的目标目录的路径。
- 如果你想将归档日志备份到远程服务器,你可以执行以下命令:
ALTER SYSTEM SET log_archive_dest_2='SERVICE=remote_service LGWR SYNC AFFIRM REOPEN=5 OPTIONAL' SCOPE=BOTH;
- "remote_service"是指归档日志备份的目标服务
- LGWR: 表示使用LGWR进程将归档日志备份到目标位置。
- ASYNC: 表示异步备份,LGWR将归档日志写入本地磁盘后立即返回,而不等待归档日志备份完成。
- SYNC: 表示同步备份,LGWR将归档日志写入本地磁盘后等待归档日志备份完成。
- AFFIRM: 表示需要确认归档日志备份的完成。
- REOPEN=n: 表示如果归档日志备份失败,LGWR将尝试重新打开归档日志文件的次数。
- OPTIONAL: 表示如果归档日志备份失败,LGWR将继续写入归档日志文件,而不抛出错误。
DG环境中,log_archive_dest_n参数解释
log_archive_dest_n: DG传输redo data的主要参数,还用于指定online redo和standby redo的归档日志文件存储位置。一般用log_archive_dest_1指定本地归档目录,log_archive_dest_2指定DG传输redo data存储目录.
alter system set log_archive_dest_2='service=remote_service lgwr async valid_for=(online_logfiles,primary_role)' scope=both;
主要属性
| 参数 | 描述 |
|---|---|
| location | 指定归档目录。 如location=/u01 |
| service | tnsnames.ora文件中设定的指向备端的 TNS-Alias |
| sync | 同步传输redo。lgwr进程等待来自LNS的确认信息,然后告知客户端事务已经提交。对最大保护模式和高可用模式的DG至少一个standby配置该参数 |
| async | 异步传输redo。默认 |
| valid_for | LOG_ARCHIVE_DEST_n参数中的VALID_FOR属性,用来指定传输的内容。该属性有两个参数值需要指定:REDO_LOG_TYPE和DATABASE_ROLE,发送指定角色生成的指定类型的日志文件,该参数的主要目的是为了确保,一旦发生角色切换操作后数据库的正常运转。 其格式为:VALID_FOR=(redo_log_type,database_role)。没有写VALID_FOR时,默认 “VALID_FOR=(all_logfiles,all_roles)” REDO_LOG_TYPE:可设置为ONLINE_LOGFILE、STANDBY_LOGFILE、ALL_LOGFILES。 * online_logfile: 参数LOG_ARCHIVE_DEST_n只在从v$logfile中的type为online的日志中读取redo数据生效 * standby_logfile: 参数LOG_ARCHIVE_DEST_n只在从v$logfile中的type为standby的日志中读取redo数据 * all_logfiles: online_logfile和standby_logfile DATABASE_ROLE:可设置为PRIMARY_ROLE、STANDBY_ROLE、ALL_ROLES。 + primary_role: 仅当数据库角色为主库时候生效 + standby_role: 仅当数据库角色为备库时候生效 + all_role: 任意角色均生效 |
| db_unique_name | 数据库唯一名。该值必须同时存在于log_archive_config与log_archive_dest_n参数中,DG间才能互相通信 |
| net_timeout | 指定LGWR进程等待LNS进程响应的时间,如果超出时间,将因故障放弃备用,稍后LNS进程发起重新连接,默认30s |
| reopen | 控制DG尝试重连备库前的等待时间。默认300s |
| compression | 启用redo data压缩 例:log_archive_dest_2=‘service=standby compression=enable valid_for=(online_logfiles,primary_roles) db_unique_name=standby’ |
| noaffirm | async默认方式 |
| delay | standby接受redo data后,延迟指定秒数再应用 |
| alternate | 重定向归档目录。当location中指定的归档满时,用此属性指定的目录代替 |
| mandatory | 要求redo data必须传到standby,若无法传输,primary就无法重用redo,若主备断连,当primary遍历完所有的redo log,就会挂起。切勿设置这个属性 |
| noregister | standby默认注册传输过来的归档日志,DG无需设置 |
| template | 指定archivelog的路径名或者文件名模板。覆盖log_archive_format设定值,若不设置,默认采用log_archive_format。该属性仅对remote归档目标生效 %t:实例线程号 %T实例线程号,填充0 %s:logfile序列号 %T:logfile序列号,填充0 %r:resetlogs ID $R:resetlogs ID,填充0 |
5.LOG_ARCHIVE_DEST_STATE_n
Initialization Parameter Attributes
- ENABLE
Log transport services can transmit redo data to this destination. ENABLE is the default. - DEFER
Log transport services will not transmit redo data to this destination. This is a valid but unused destination. - ALTERNATE
This destination is not enabled, but it will become enabled if communication to its associated destination fails. - RESET
Functions the same as DEFER, but clears any error messages for the destination if it had previously failed.
6.db_file_name_convert
DB_FILE_NAME_CONVERT:Standby 数据库的数据文件路径与 Primary 数据库数据文件路径不一致时,可以通过设置 DB_FILE_NAME_CONVERT 参数的方式让其自动转换。该参数值应该成对出现,前面的值表示转换前的形式,后面的值表示转换后的形式例如:
DB_FILE_NAME_CONVERT = (‘location_of_primary_database_datafile’ , ‘location_of_standby_database_datafile_name’ , ‘…’
主数据库和备数据库的数据文件转换目录对映(如果两数据库的目录结构不一样),如果有多个对应关系,需逐一给出。
主库(主库进行设置,是为了在切换后主备角色互换后使用):
DB_FILE_NAME_CONVERT='/u01/app/oracle/oradata/boston/','/u01/app/oracle/oradata/chicago/'
备库:
DB_FILE_NAME_CONVERT='/u01/app/oracle/oradata/chicago/','/u01/app/oracle/oradata/boston/'
7.LOG_FILE_NAME_CONVERT
LOG_FILE_NAME_CONVERT: 使用方式与上相同,只不过 LOG_FILE_NAME_CONVERT 专用来转换在线日志文件路径
LOG_FILE_NAME_CONVERT=’location_of_primary_database_redo_logs’, ‘location_of_standby_database_redo_logs’
指明主数据库和备用数据库的log文件转换目录对应关系。
主库(主库进行设置,是为了在切换后主备角色互换后使用):
LOG_FILE_NAME_CONVERT='/u01/app/oracle/oradata/boston/','/u01/app/oracle/oradata/chicago/'
备库:
LOG_FILE_NAME_CONVERT='/u01/app/oracle/oradata/chicago/','/u01/app/oracle/oradata/boston/'
8.fal_server & fal_client
fal 指获取归档日志, 值为oracle net service name,即tnsnames.ora中的服务名。
- FAL_SERVER
FAL_SERVER = Oracle_Net_service_name
备库端的参数。指定一个数据库SID,通常该库为primary 角色。(FAL 是Fetch Archived Log 的缩写)
主库(主库进行设置,是为了在切换后主备角色互换后使用):
FAL_SERVER=boston
备库:
FAL_SERVER=chicago
- FAL_CLIENT
FAL_CLIENT = Oracle_Net_service_name
备库端的参数。指定一个数据库SID,通常该库为standby 角色。
主库(主库进行设置,是为了在切换后主备角色互换后使用):
FAL_CLIENT=chicago
备库:
FAL_CLIENT=boston
在一定的条件下,或者因为网络失败,或者因为资源紧张,会在primary和standby之间产生裂隙,也就是有些归档日志没有及时的传输并应用到standby库。因为MRP(managed recovery process)/LSP(logical standby process)没有与primary直接通讯的能力来获取丢失的归档日志。因此这些gaps通过FAL客户和服务器来解决,由初始化参数定义FAL_CLIENT和FAL_SERVER。
设置这两个参数可以用来解决Archive Gaps(日志间隙)。一旦产生了gap,fal_client会自动向fal_server请求传输gap的archivelog。
设置了这2个参数,就不需要在产生gap时手动向standby注册归档日志了。
所需要做的就是确认主库有这些归档日志,并且主库的控制文件中有这些日志的注册信息。
fal_client设置为数据库自身的service name,fal_server设置为远端数据库的service name。
fal_server可以设置多个值,用逗号隔开。
9.standby_file_management
如果主数据库数据文件发生修改(如新建,重命名等)则按照本参数的设置在备库中做相应修改。
启用自动备用文件管理后,主数据库上的操作系统文件添加和删除操作将复制到备用数据库上。STANDBY_FILE_MANAGEMENT仅适用于物理备用数据库。
- MANUAL
禁用自动备用文件管理 - AUTO
启用自动备用文件管理
设置STANDBY_FILE_MANAGEMENT为AUTO会导致 Oracle 自动在备用数据库上创建文件,并在某些情况下覆盖现有文件。设置时必须小心STANDBY_FILE_MANAGEMENT,DB_FILE_NAME_CONVERT以免现有的备用文件被意外覆盖。
如果备用数据库与主数据库位于同一系统上,则确保主系统和备用系统不指向相同的文件。
设置正确的方法:
- 在Oracle实例中,使用ALTER SYSTEM 命令将STANDBY_FILE_MANAGEMENT参数的值设置为AUTO:
ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO SCOPE=SPFILE;
- 使用V$PARAMETER视图查看参数设置是否生效:
SELECT NAME, VALUE FROM V$PARAMETER WHERE NAME = ‘STANDBY_FILE_MANAGEMENT’;
- 如果设置生效,则参数值会变为AUTO;如果没有生效,则重启数据库可以使参数正确设置。
3.8.拷贝参数文件
scp /u01/app/oracle/product/19.3.0/dbhome_1/dbs/spfileorcl.ora oracle@192.168.10.94:/u01/app/oracle/product/19.3.0/dbhome_1/dbs
3.9.拷贝密码文件
scp /u01/app/oracle/product/19.3.0/dbhome_1/dbs/orapworcl oracle@192.168.10.94:/u01/app/oracle/product/19.3.0/dbhome_1/dbs
4.备数据库配置
4.1.创建相应的文件目录
根据上面修改的参数文件,为备库创建相应的文件目录
mkdir -p /u01/app/oracle/archivelog
mkdir -p /u01/app/oracle/fast_recovery_area/orcl
mkdir -p /u01/app/oracle/admin/orcl/adump
mkdir -p /u01/app/oracle/oradata/orcl
4.2 修改密码文件
修改从主库拷贝过来的密码文件,具体如下:
mv orapwdmms orapwdmms
chmod 640 orapwdmms
chown oracle:oinstall orapwdmms
密码文件主要进行dba权限的认证。
位置:Linux下的存放位置:$ORACLE_HOME/dbs/orapw$ORACLE_SID
即:ORACLE_HOME/dbs/orapw<sid>
4.3.启动数据库到nomount状态
startup nomount
4.4.修改参数文件
备库:
alter system set LOG_ARCHIVE_DEST_1='LOCATION=/u01/app/oracle/archivelog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcl';
alter system set LOG_ARCHIVE_DEST_2='SERVICE=primary LGWR SYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl';
alter system set log_archive_dest_state_2='ENABLE' scope=both;
alter system set fal_server='primary' scope=both;
alter system set fal_client='standby' scope=both;
alter system set standby_file_management='AUTO' scope=both;
4.5.修改监听配置文件
备库
# listener.ora Network Configuration File: /u01/app/oracle/product/19.3.0/dbhome_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = standby-database)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(SID_NAME = orcl)
(ORACLE_HOME = /u01/app/oracle/product/19.3.0/dbhome_1)
)
)
ADR_BASE_LISTENER = /u01/app/oracle
启动监听服务
lsnrctl start
重新启动数据库到 nomount 状态。
4.6.修改TNS配置文件
备库
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/19.3.0/dbhome_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
LISTENER_ORCL =
(ADDRESS = (PROTOCOL = TCP)(HOST = standby-database)(PORT = 1521))
STANDBY =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = standby-database)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
PRIMARY =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = primary-database)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
创建认证配置文件
cat > /u01/app/oracle/product/19.3.0/dbhome_1/network/admin/sqlnet.ora <<EOF
# sqlnet.ora Network Configuration File: /u01/app/oracle/product/19.3.0/dbhome_1/network/admin/sqlnet.ora
# Generated by Oracle configuration tools.
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
ADR_BASE = /u01/app/oracle
EOF
4.7.验证监听和TNS配置
主库:
sqlplus sys/admin123@primary as sysdba
sqlplus sys/admin123@standby as sysdba
备库:
sqlplus sys/admin123@primary as sysdba
sqlplus sys/admin123@standby as sysdba
注意:该步骤一定要在主备库上都能通过才能执行下面步骤
4.8.恢复数据库
# 连接数据库
rman target sys/admin123@primary auxiliary sys/admin123@standby nocatalog
# 备份数据
duplicate target database for standby from active database nofilenamecheck;
备份过程:
[oracle@standby-database admin]$ rman target sys/admin123@primary auxiliary sys/admin123@standby nocatalog
Recovery Manager: Release 19.0.0.0.0 - Production on Wed Apr 24 11:26:56 2024
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
connected to target database: ORCL (DBID=1694913959)
using target database control file instead of recovery catalog
connected to auxiliary database: ORCL (not mounted)
RMAN> duplicate target database for standby from active database nofilenamecheck;
Starting Duplicate Db at 2024-04-24 11:27:15
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=135 device type=DISK
contents of Memory Script:
{
backup as copy reuse
passwordfile auxiliary format '/u01/app/oracle/product/19.3.0/dbhome_1/dbs/orapworcl' ;
}
executing Memory Script
Starting backup at 2024-04-24 11:27:17
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=148 device type=DISK
Finished backup at 2024-04-24 11:27:20
duplicating Online logs to Oracle Managed File (OMF) location
contents of Memory Script:
{
restore clone from service 'primary' standby controlfile;
}
executing Memory Script
Starting restore at 2024-04-24 11:27:21
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:06
output file name=/u01/app/oracle/oradata/ORCL/control01.ctl
output file name=/u01/app/oracle/oradata/ORCL/control02.ctl
Finished restore at 2024-04-24 11:27:30
contents of Memory Script:
{
sql clone 'alter database mount standby database';
}
executing Memory Script
sql statement: alter database mount standby database
RMAN-05158: WARNING: auxiliary (datafile) file name /u01/app/oracle/oradata/ORCL/system01.dbf conflicts with a file used by the target database
RMAN-05158: WARNING: auxiliary (datafile) file name /u01/app/oracle/oradata/ORCL/sysaux01.dbf conflicts with a file used by the target database
RMAN-05158: WARNING: auxiliary (datafile) file name /u01/app/oracle/oradata/ORCL/undotbs01.dbf conflicts with a file used by the target database
RMAN-05158: WARNING: auxiliary (datafile) file name /u01/app/oracle/oradata/ORCL/users01.dbf conflicts with a file used by the target database
RMAN-05158: WARNING: auxiliary (tempfile) file name /u01/app/oracle/oradata/ORCL/temp01.dbf conflicts with a file used by the target database
contents of Memory Script:
{
set newname for tempfile 1 to
"/u01/app/oracle/oradata/ORCL/temp01.dbf";
switch clone tempfile all;
set newname for datafile 1 to
"/u01/app/oracle/oradata/ORCL/system01.dbf";
set newname for datafile 3 to
"/u01/app/oracle/oradata/ORCL/sysaux01.dbf";
set newname for datafile 4 to
"/u01/app/oracle/oradata/ORCL/undotbs01.dbf";
set newname for datafile 7 to
"/u01/app/oracle/oradata/ORCL/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/app/oracle/oradata/ORCL/temp01.dbf in control file
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
Starting restore at 2024-04-24 11:27:41
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/app/oracle/oradata/ORCL/system01.dbf
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:46
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/app/oracle/oradata/ORCL/sysaux01.dbf
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:35
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/app/oracle/oradata/ORCL/undotbs01.dbf
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:15
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/app/oracle/oradata/ORCL/users01.dbf
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:03
Finished restore at 2024-04-24 11:29:22
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=1167132564 file name=/u01/app/oracle/oradata/ORCL/system01.dbf
datafile 3 switched to datafile copy
input datafile copy RECID=2 STAMP=1167132565 file name=/u01/app/oracle/oradata/ORCL/sysaux01.dbf
datafile 4 switched to datafile copy
input datafile copy RECID=3 STAMP=1167132565 file name=/u01/app/oracle/oradata/ORCL/undotbs01.dbf
datafile 7 switched to datafile copy
input datafile copy RECID=4 STAMP=1167132565 file name=/u01/app/oracle/oradata/ORCL/users01.dbf
Finished Duplicate Db at 2024-04-24 11:30:14
RMAN>
使用的是非catalog,在rman 连接时,加上nocatalog关键字,避免产生如下错误:
DBGSQL: TARGET> begin :fhdbi := dbms_rcvcat.getDbid; end;
DBGSQL: sqlcode = 6550
DBGSQL: B :fhdbi = 32767
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGESTACK FOLLOWS ===============
RMAN-00571:===========================================================
RMAN-03002: failure of Duplicate Db commandat 10/28/2011 17:53:04
RMAN-05501: aborting duplication of targetdatabase
RMAN-03015: error occurred in stored scriptMemory Script
ORA-06550: line 1, column 17:
PLS-00201: identifier'DBMS_RCVCAT.GETDBID' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
如果在RMAN恢复时不指定 nofilenamecheck 参数,则在数据文件相同文件名恢复时会出现RMAN-05501错误,当主库,备库的数据库文件目录是一样的时候,必须使用 nofilenamecheck参数告诉rman主库和被创建的备份库拥有一样的文件目录和文件名。
4.9.开启实时同步(备库)
step 1.开始同步数据库,在备库上执行
alter database open;
step 2.开启实时同步
要在物理备用数据库上启动应用服务,请确保物理备用数据库已启动并 mounte ,然后启动“重做应用”。
如果备用数据库配置有备用重做日志并且处于ARCHIVELOG模式,这也会自动启用实时应用。“重做应用”既可以作为前台会话运行,也可以作为后台进程运行。
要在前台启动“重做应用”,请发出以下SQL语句:
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE;
如果启动前台会话,则在另一个会话取消恢复之前,控制权不会返回到命令提示符。
要在后台启动“重做应用”,请在SQL语句中包含DISCONNECT关键字。例如
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;
or
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING ARCHIVED LOGFILE DISCONNECT;
此语句启动一个分离的服务器进程,并立即将控制权返回给用户。当托管恢复进程在后台执行恢复时,发出RECOVER 语句的前台进程可以继续执行其他任务。此命令不会断开当前SQL会话的连接。
step 3.停止重做应用
使用ALTER DATABASE SQL语句停止“重做应用”。
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
4.10.开启flashback
把备库的flashback打开,具体如下:
# 取消实时同步
SYS@standby> alter database recover managed standby database cancel;
Database altered.
# 关闭数据库
SYS@standby> shut immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
# 打开到mount状态
SYS@standby> startup mount
ORACLE instance started.
Total System Global Area 1.4932E+10 bytes
Fixed Size 2267744 bytes
Variable Size 2046821792 bytes
Database Buffers 1.2851E+10 bytes
Redo Buffers 31424512 bytes
Database mounted.
# 开始flashback
SYS@standby> alter database flashback on;
Database altered.
SYS@standby> alter database open;
Database altered.
# 开启实时同步
SYS@standby> alter database recover managed standby database using current logfile disconnect from session;
Database altered.
SYS@standby>
5.验证DG同步
下面介绍如何验证DataGuard是否能实时同步
step 1.通过查看archive_log_dest_2列是否有error报错,如果有报错,则需要先根据报错内容解决问题
col dest_name format a30
col error format a20
select dest_name,error from v$archive_dest;
注意:上面显示没有报错
step 2.查询主库最大归档序号,一致即归档同步成功。
主库:
SYS@primary> select max(sequence#) from v$archived_log;
MAX(SEQUENCE#)
--------------
48591
SYS@primary>
备库:
SYS@standby> select max(sequence#) from v$archived_log;
MAX(SEQUENCE#)
--------------
48591
SYS@standby>
主库执行日志切换
SYS@primary> alter system archive log current;
System altered.
SYS@primary> select max(sequence#) from v$archived_log;
MAX(SEQUENCE#)
--------------
48592
SYS@primary>
备库上再次验证:
SYS@standby> select max(sequence#) from v$archived_log;
MAX(SEQUENCE#)
--------------
48592
SYS@standby>
step 3.查看主备库状态
主库:
SYS@primary> select switchover_status,database_role from v$database;
SWITCHOVER_STATUS DATABASE_ROLE
------------------------------------------------------------
SESSIONS ACTIVE PRIMARY
SYS@primary>
备库:
SYS@standby> select switchover_status,database_role from v$database;
SWITCHOVER_STATUS DATABASE_ROLE
------------------------------------------------------------
NOT ALLOWED PHYSICAL STANDBY
SYS@standby>
step 4.在主库上建立表,插入数据进行测试,以保证数据同步
6.DG切换与恢复
配置DG的目的就是为了在主库出现故障时,备库能够提供服务,保证业务的正常运行。DG的故障切换分为switchover和failover两种:
6.1.switchover
switchover是用户有计划的进行停机切换,能够保证不丢失数据,下面我们来看下switchover是怎样操作的:
主库:
SYS@primary> select switchover_status,database_role from v$database;
SWITCHOVER_STATUS DATABASE_ROLE
------------------------------------------------------------
SESSIONS ACTIVE PRIMARY
SYS@primary>
注意:上面查询结果为TO STANDBY 或 SESSIONS ACTIVE表明可以进行切换
SYS@primary> alter database commit to switchover to physical standby;
Databasealtered.
SYS@primary> startup mount
ORACLE instance started.
Total System Global Area 688959488 bytes
Fixed Size 2256432 bytes
Variable Size 566231504 bytes
Database Buffers 117440512 bytes
Redo Buffers 3031040 bytes
Database mounted.
SYS@primary> select database_role from v$database;
DATABASE_ROLE
----------------
PHYSICAL STANDBY
备库:
SYS@standby> select switchover_status,database_role from v$database;
SWITCHOVER_STATUS DATABASE_ROLE
------------------------------------
TO PRIMARY PHYSICAL STANDBY
SYS@standby>
注意:上面查询结果显示为TO PRIMARY 或 SESSIONS ACTIVE表明可以切换成主库;现在可以把备库切换成主库:
SYS@standby> alter database commit to switchover to primary with session shutdown;
Database altered.
SYS@standby> alter database open;
Database altered.
SYS@standby> select switchover_status,database_role,open_mode from v$database;
SWITCHOVER_STATUS DATABASE_ROLE OPEN_MODE
-------------------- ------------------------------------
SESSIONS ACTIVE PRIMARY READ WRITE
SYS@standby>
需要在现在的备库(原先的主库)开启实时同步
SYS@primary> alter database open;
Database altered.
SYS@primary> alter database recover managed standby database using current logfile disconnect fromsession;
Database altered.
SYS@primary>
6.2 failover
failover是当主库真正出现严重系统故障,如数据库宕机,软硬件故障导致主库不能支持服务,从而进行的切换动作。
为了能够在failover后能够恢复DG,需要在主库上开启flashback,如果不开启flashback的话,DG就可能需要重新搭建;由于主库已经不可访问,下面所有的操作都在备库完成
备库:
step 1.停止实时同步
SYS@standby> alter database recover managed standby database cancel;
Database altered.
SYS@standby>
step 2.备库强制停掉 edo apply
SYS@standby> alter database recover managed standby database finish force;
Database altered.
SYS@standby>
step 3.查看数据库的角色
SYS@standby> select database_role from v$database;
DATABASE_ROLE
----------------
PHYSICAL STANDBY
SYS@standby>
step 4.切换备库为
SYS@standby> alter database commit to switchover to primary;
Database altered.
SYS@standby> alter database open;
Database altered.
SYS@standby>
step 5.查看数据库的状态,角色,打开模式
SYS@standby> select switchover_status,database_role,open_mode from v$database;
SWITCHOVER_STATUS DATABASE_ROLE OPEN_MODE
-------------------- ------------------------------------
RESOLVABLE GAP PRIMARY READ WRITE
SYS@standby>
至此failover操作完成,原来的备库已经切换为主库,可以给业务提供服务了。
6.3.failover恢复
failover,这种情形是当主库真正出现异常之后,才会执行的操作,那么我们执行过failover 之后,如何在重新构建DG,这里我们利用flashback database来重构,具体方法如下:
主库:
SYS@primary> select to_char(standby_became_primary_scn) from v$database;
TO_CHAR(STANDBY_BECAME_PRIMARY_SCN)
----------------------------------------
977458
SYS@primary>
备库:
SYS@standby> startup mount
ORA-32004: obsolete or deprecatedparameter(s) specified for RDBMS instance
ORACLE instance started.
Total System Global Area 688959488 bytes
Fixed Size 2256432 bytes
Variable Size 566231504 bytes
Database Buffers 117440512 bytes
Redo Buffers 3031040 bytes
Database mounted.
SYS@standby>
# SCN为在新主库上查询到的值
SYS@standby> flashback database to scn 977458;
Flashback complete.
SYS@standby> alter database convert to physical standby;
Database altered.
SYS@standby> shutdown immediate
ORA-01507: database not mounted
ORACLE instance shut down.
SYS@standby> startup
ORA-32004: obsolete or deprecatedparameter(s) specified for RDBMS instance
ORACLE instance started.
Total System Global Area 688959488 bytes
Fixed Size 2256432 bytes
Variable Size 566231504 bytes
Database Buffers 117440512 bytes
Redo Buffers 3031040 bytes
Database mounted.
Database opened.
SYS@standby> alter database recover managed standby database using current logfile disconnect fromsession;
Database altered.
SYS@standby>
7.Using Views to Monitor Primary, Physical, and Snapshot Standby Databases
You can use dynamic performance views to monitor primary, physical standby, and snapshot standby databases.
The following dynamic performance views are discussed:
- V$DATABASE
- V$MANAGED_STANDBY
- V$ARCHIVED_LOG
- V$LOG_HISTORY
- V$DATAGUARD_STATUS
- V$ARCHIVE_DEST
V$DATABASE
You can use the V$DATABASE view to display information about data protection, switchover status, and fast-start failover status.
The following query displays the data protection mode, data protection level, database role, and switchover status for a primary, physical standby or snapshot standby database:
SQL> SELECT PROTECTION_MODE, PROTECTION_LEVEL, –
> DATABASE_ROLE ROLE, SWITCHOVER_STATUS –
> FROM V$DATABASE;
The following query displays fast-start failover status:
SQL> SELECT FS_FAILOVER_STATUS "FSFO STATUS", -
> FS_FAILOVER_CURRENT_TARGET TARGET, -
> FS_FAILOVER_THRESHOLD THRESHOLD, -
> FS_FAILOVER_OBSERVER_PRESENT "OBSERVER PRESENT" –
> FROM V$DATABASE;
V$MANAGED_STANDBY
You can use the V$MANAGED_STANDBY view to query Redo Apply and redo transport status on a physical standby database.
For example, issue the following query:
SQL> SELECT PROCESS, STATUS, THREAD#, SEQUENCE#,-
> BLOCK#, BLOCKS FROM V$MANAGED_STANDBY;
PROCESS STATUS THREAD# SEQUENCE# BLOCK# BLOCKS
------- ------------ ---------- ---------- ---------- ----------
RFS ATTACHED 1 947 72 72
MRP0 APPLYING_LOG 1 946 10 72
The sample output shows that a remote file server (RFS) process completed archiving a redo log file with a sequence number of 947 and that Redo Apply is actively applying an archived redo log file with a sequence number of 946. Redo Apply is currently recovering block number 10 of the 72-block archived redo log file.
V$ARCHIVED_LOG
You can use the V$ARCHIVED_LOG view to query information about archived redo log files that have been received by a physical or snapshot standby database from a primary database.
For example, issue the following query:
SQL> SELECT THREAD#, SEQUENCE#, FIRST_CHANGE#, -
> NEXT_CHANGE# FROM V$ARCHIVED_LOG;
THREAD# SEQUENCE# FIRST_CHANGE# NEXT_CHANGE#
---------- ---------- ------------- ------------
1 945 74651 74739
1 946 74739 74772
1 947 74772 74795
The sample output shows that three archived redo log files have been received from the primary database.
V$LOG_HISTORY
You can use the V$LOG_HISTORY view to query archived log history information.
For example, issue the following query:
SQL> SELECT THREAD#, SEQUENCE#, FIRST_CHANGE#, -
> NEXT_CHANGE# FROM V$LOG_HISTORY;
V$DATAGUARD_STATUS
You can use the V$DATAGUARD_STATUS view to display messages generated by Oracle Data Guard events that caused a message to be written to the alert log or to a server process trace file.
For example, issue the following query :
SQL> SELECT MESSAGE FROM V$DATAGUARD_STATUS;
V$ARCHIVE_DEST
You can query the V$ARCHIVE_DEST view to show the status of each redo transport destination, and for redo transport destinations that are standby databases, the SCN of the last primary database redo applied at that standby database.
For example, issue the following query:
SQL> SELECT DEST_ID, APPLIED_SCN FROM V$ARCHIVE_DEST WHERE TARGET='STANDBY';
DEST_ID STATUS APPLIED_SCN
---------- --------- -----------
2 VALID 439054
3 VALID 439054
8.实施影响评估
(1)主备角色切换过程中,涉及到启停数据库。为了顺利启停数据库,需要避免在有大事务运行期间执行主备切换。否则会延长数据库的停机时间。建议在业务量小的时间段进行操作。
(2)通常情况下,DataGuard switchover操作不会引起数据丢失,并且切换的过程是可逆的。
(3)ADG主备切换会启停数据库,手动切换时间正常情况下不超过3分钟。切换完成后,业务访问数据库的地址需要更改。




