本文通过手工冷备+pfile文件的方式,搭建oracle11g dataguard 物理备库。在搭建前的规划中,特意将主库的数据库名和服务名、备库的文件存放位置等等做了差异处理。
在进行初始化参数文件的配置时,也进行了最小化处理。这样能够更好的理解DataGuard搭建所需要的的日志传输、应用所需参数配置。
前提
主库服务器上已安装数据库软件并创建实例
备库服务器上已安装数据库软件
主、备服务器/etc/hosts文中必须包含主备节点信息如下:
[root@db01:]$ more /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
## OracleBegin
192.168.40.52 db01
192.168.40.53 db02环境准备
DATABASE_ROLE | DB_NAME | IPADDR | OS Version | DB version |
Primary | fuwa | 192.168.40.52 | Centos7.9 | 11.2.0.4.0 |
Standby | wafu | 192.168.40.53 | Centos7.9 | 11.2.0.4.0 |
主库配置
主库已安装好数据库、配置好数据库参数
主库开启归档,开启强制日志,关闭闪回,删除外部表
--开启归档,若已开启归档跳过该步骤
archive log list;
shutdown immediate
startup mount;
alter system set log_archive_dest_1='location=/oradata/archivelog' scope=spfile;
alter database archivelog;
alter database open;
--强制日志写 no-->yes
select force_logging from v$database;
alter database force logging;
--关闭闪回 默认未开启显示no
select flashback_on from v$database;
--删除外部表
##xxx_external_locations 可以知道当前所有的目录对象以及相关的外部表,还会查询出这些外部表所对应的操作系统文件的名字。
##select * from all_external_locations;
##select * from user_external_locations;
##select * from dba_external_locations;参数解释:
alter database force logging;所有都记日志,nologging 无效。防止主库上有操作不记日志。产生主从库差异。
主库创建standby logfile
配置原则:
①standby logfile大小要和redo logfile大小相同;
②standby logfile要比redo logfile多一组,目前redo logfile是3组,因此创建4组standby logfile;
③为了安全,standby logfile可以包含多个member。
补充:创建适当的日志组
一般而言,standby redo日志文件组数要比primary数据库的online redo日志文件组数至少多一个。推荐standby redo日志组数量基于primary数据库的线程数(这里的线程数可以理解为rac结构中的rac节点数)。
有一个推荐的公式可以做参考:(每线程的日志组数+1)*最大线程数
例如primary数据库有两个线程,每个线程分配两组日志,则standby日志组数建议为6组,使用这个公式可以降低primary数据库实例LGWR进程锁住的可能性。
v$logfile不光有online redo文件还有standby redo文件
--查询日志组
set linesize 999
col MEMBER for a60
select b.thread#,a.group#,a.member,bytes/1024/1024,b.members,b.status from v$logfile a,v$log b where a.group#=b.group# order by a.group#;
#创建standby logfile
alter database add standby logfile group 4('/oradata/fuwa/redo04.log') size 50M;
alter database add standby logfile group 5('/oradata/fuwa/redo05.log') size 50M;
alter database add standby logfile group 6('/oradata/fuwa/redo06.log') size 50M;
alter database add standby logfile group 7('/oradata/fuwa/redo07.log') size 50M;
--查询日志组
col member for a60
select group#,member from v$logfile order by 1;
GROUP# MEMBER
---------- --------------------------------------------------
1 /u01/app/oracle/oradata/dhh/redo01.log
2 /u01/app/oracle/oradata/dhh/redo02.log
3 /u01/app/oracle/oradata/dhh/redo03.log
4 /u01/app/oracle/oradata/dhh/redo04.log
5 /u01/app/oracle/oradata/dhh/redo05.log
6 /u01/app/oracle/oradata/dhh/redo06.log
7 /u01/app/oracle/oradata/dhh/redo07.log
SQL> select group#,thread#,sequence#,bytes,status from v$standby_log;
GROUP# THREAD# SEQUENCE# BYTES STATUS
---------- ---------- ---------- ---------- --------------------
4 0 0 52428800 UNASSIGNED
5 0 0 52428800 UNASSIGNED
6 0 0 52428800 UNASSIGNED
7 0 0 52428800 UNASSIGNED主库关闭OMF(可选)
因为omf优先级比db_file_name_convert高,避免备库接收到主库的数据文件后路径和原来的不一致。
当然关了omf之后,主备切换后,如果转换的参数没有设置好,会不同步,那个参数要关库后才可以生效
##关闭OMF(避免备库接收到主库的数据文件后路径和原来的不一致)
show parameter db_create_file_dest --不为空则清空,空:关闭OMF;不为空:
alter system set db_create_file_dest='' scope=both;如果主备库都设置了db_create_file_dest参数,通常不需要再配置db_file_name_convert,因为db_create_file_dest的优先级更高,会直接决定备库数据文件的默认存放路径。但需注意以下场景:
- 主库使用非OMF(OracleManaged Files)命名方式如果主库数据文件路径与备库db_create_file_dest路径不一致(例如主库手动指定路径),且未配置db_file_name_convert,备库可能因路径转换失败导致同步报错(如ORA-01119、0RA-17502)。此时建议同时配置db_file_name_convert作为几余保障。
跨平台或路径结构差异较大时
若主备库操作系统或存储路径差异明显(如Windows到Linux),即使设置了b_create_file_dest,仍需通过db_file_name_convert明确路径映射规则,避免因路径格式问题导致文件创建失败 410。总结建议:
若主库使用OMF且路径结构一致,仅配置db_create_file_dest即可68。
若主库手动指定路径或路径差异较大,建议同时配置dbfile name_convert以覆盖潜在路径转换问题 13 10验证时可通过主库创建测试表空间,观察备库数据文件是否生成在预期路径13。
传输口令文件 确保日志传输时的权限
将主库的口令文件,scp到从库并修改名称,该步骤的作用:具有sysdba权限的远程用户可以登录。
--主库创建口令文件 该步骤可省略通常dbca创建库时会自动创建口令文件
echo $ORACLE_SID
orapwd file=$ORACLE_HOME/dbs/orapwfuwa password=oracle entries=3 force=y
--scp到从库
cd $ORACLE_HOME/dbs
scp orapwfuwa oracle@192.168.40.53:/u01/app/oracle/product/11.2.0/db/dbs/orapwwafu主库的初始化参数
生成pfile文本参数文件
create pfile from spfile;
shutdown immediate修改参数
参数模板可以在官方文档中查到,把其中的名称用自己的数据库名称替换即可。
如果主库参数中有审计目录等,备库需创建相应目录
在实验情况下,可删除主库、从库 审计和审计目录 删除OMF管理路径
重启数据库 看是否有效
cd /u01/app/oracle/product/11.2.0/db/dbs
cp initfuwa.ora initfuwa.orabak
vi initfuwa.ora
尾部增加如下参数:
#Primary Role Initialization Parameters
DB_UNIQUE_NAME=fuwa #主库
LOG_ARCHIVE_CONFIG='DG_CONFIG=(fuwa,wafu)' #主库,备库
LOG_ARCHIVE_DEST_1=
'LOCATION=/data/oradata/archivelog/
VALID_FOR=(ALL_LOGFILES,ALL_ROLES) #所有角色
DB_UNIQUE_NAME=fuwa' #主库
LOG_ARCHIVE_DEST_2=
'SERVICE=wafu LGWR ASYNC NOAFFIRM #备库
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) #主角色
DB_UNIQUE_NAME=wafu' #备库
LOG_ARCHIVE_DEST_STATE_1=ENABLE #必须是启用
LOG_ARCHIVE_DEST_STATE_2=ENABLE #必须是启用
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
LOG_ARCHIVE_FORMAT=%t_%s_%r.dbf #格式和库里保持一致
LOG_ARCHIVE_MAX_PROCESSES=30
#Standby Role Initialization Parameters
FAL_SERVER=wafu #备库
DB_FILE_NAME_CONVERT='wafu','fuwa' #备库,主库
LOG_FILE_NAME_CONVERT='wafu','fuwa' #备库,主库
STANDBY_FILE_MANAGEMENT=AUTO生产系统里面最建议的是使用LGWR的异步模式,就是LGWR的ASYNC模式
第1步,还是老样子,主库里产生redo log
第2步,主库的LGWR进程会将redo log写入online redo log里面
第3步,ASYNC:写完了在线的日志后,LNS0进程会将新生成的日志传到备库(也就是说,只要主库一产生日志,就发送给备库)
第4步,同样备库的RFS进程负责接收备库,将接收到的日志写到standby重做日志第5步,应用日志
的
如果选择【实时应用日志】,在归档前就立刻应用日志(一般都是实时应用的)如果不是实时应用的话,就等到standby日志归档之后再应用日志
DB_FILE_NAME_CONVERT和LOG_FILE_NAME_CONVERT里面主备库顺序说明:
远程在前,自己在后
远程1:本地,远程2:本地
对于主库来说,备库就是远端,这是个相对概念
所以不要说主备,要说远端和本地
convert参数只在备库生效,不用考虑主备目录是否一致,主库可写可不写convert参数,备库必须写convert参数,通常为了方便理解主备库都写上
主库可以不用,只有它切换到备库才有用,就在恢复备份,创建新的文件时候才生效,切换前写上就行
主库备库目录,存在一一对应关系
参数配置后得重启库,不重启有坑
这里关库重后主要是为了让 db file_name convert 和LOG_FILE_NAME_CONVERT 立即生效!这两个参数如果这里不配置也可以!等需要的时候再配置。如果配置了该参数没有立即重启
库,以后可能会出现1个实例崩溃后无法正常启动,提示参数不致!!!!)可等切换时再配,
dblink
手动冷备方式 用rman备份恢复方式 用主库rman数据复制方式 这3种方式都分别适合场景说明:
- 冷备份 长时间的停机 且两边库结构完全一致
- 备份恢复 数据库量很大 并且主备库不在同地 需要背盘的方式进行数据库恢复
- 数据库复制 要求网络必须好 主库不能停 且备库需要快速恢复上线的模式
pfile启库
startup pfile='/u01/app/oracle/product/11.2.0/db/dbs/initfuwa.ora';生成spfile文件,以spfile文件启库
shutdown immediate
create spfile from pfile;
startup传输初始化参数文件pfile到备库并改名
cd /u01/app/oracle/product/11.2.0/db/dbs
scp initfuwa.ora oracle@192.168.40.53:/u01/app/oracle/product/11.2.0/db/dbs/initwafu.ora主库备份数据文件、日志文件(冷备cp)
--关闭主库
shutdown immediate;
--创建备份目录
mkdir -p /home/oracle/backup/wafu
--查看数据目录下的文件
[oracle@db01:/oradata/fuwa]$ cd /oradata/fuwa/ && ls -l
total 1526116
-rw-r----- 1 oracle oinstall 9748480 Mar 4 14:03 control01.ctl
-rw-r----- 1 oracle oinstall 52429312 Mar 4 14:03 redo01.log
-rw-r----- 1 oracle oinstall 52429312 Mar 4 13:22 redo02.log
-rw-r----- 1 oracle oinstall 52429312 Mar 4 13:28 redo03.log
-rw-r----- 1 oracle oinstall 534781952 Mar 4 13:55 sysaux01.dbf
-rw-r----- 1 oracle oinstall 775954432 Mar 4 14:00 system01.dbf
-rw-r----- 1 oracle oinstall 30416896 Mar 3 16:36 temp01.dbf
-rw-r----- 1 oracle oinstall 78651392 Mar 4 14:00 undotbs01.dbf
-rw-r----- 1 oracle oinstall 5251072 Mar 4 13:30 users01.dbf
--备份数据文件、日志文件
cd /oradata/fuwa
cp *.dbf /home/oracle/backup/wafu
cp *.log /home/oracle/backup/wafu如果是rman备份,必须要先备份,再创建standby控制文件。
主库启库
startup查看主库身份
select database_role from v$database;
DATABASE_ROLE
----------------
PRIMARY主库生成standby控制文件
alter database create standby controlfile as '/home/oracle/backup/wafu/control.std';至此,standby 控制文件 、所有数据文件、redo日志文件 全部在/home/oracle/backup/fuwa目录下。
打包压缩后scp到备库
--创建wafu.tar
cd /home/oracle/backup/
tar -cvf wafu.tar wafu/
--压缩 DGDB.tar 为 gzip格式 wafu.tar会消失生成wafu.tar.gz
gzip wafu.tarscp到备库
cd /home/oracle/backup
scp wafu.tar.gz oracle@192.168.40.53:/oradata/主库配置监听
配置listener
--查看监听参数是否是默认监听,如果是空值则是默认监听,跳过该步骤
show parameter local_listener
---修改local_listener为默认监听
alter system set local_listener='';
show parameter local_listener
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
local_listener string
--配置监听文件listener.ora host值:主机名或者ip地址
cd /u01/app/oracle/product/11.2.0/db/network/admin/
cp listener.ora listener.orabak
vi /u01/app/oracle/product/11.2.0/db/network/admin/listener.ora
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = db01)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
sid_list_listener=
(sid_list=
(sid_desc=
(global_dbname=fuwa)
(ORACLE_HOME=/u01/app/oracle/product/11.2.0/db)
(sid_name=fuwa))
)
ADR_BASE_LISTENER = /u01/app/oracle配置后重新加载下监听 lsnrctl reload
配置tnsnames
vi /u01/app/oracle/product/11.2.0/db/network/admin/tnsnames.ora
FUWA =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = db01)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = fuwa)
)
)
wafu = #备库服务名
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.40.53)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = wafu) #备库服务名
)
)
ADR_BASE_LISTENER = /u01/app/oracle备库配置
备库解压主库传来的压缩包
cd /oradata/
gunzip wafu.tar.gz
tar -xvf wafu.tar生成备库的控制文件
复制 standby控制文件 生成两个备库的控制文件,主备库控制文件路径可以和主库路径不一样,最关键的是数据文件和日志文件
cd /oradata/wafu
cp control.std control01.ctl
cp control.std control02.ctl修改备库初始化参数文件
控制文件路径
db_unique_name
本地归档路径:log_archive_dest_1=
删除dest_2
添加数据文件、日志文件 位置转换
把主库名称修改为备库名称,备库名称修改为主库名称,但参数文件中的db_name要和主库名称一致。
cd /u01/app/oracle/product/11.2.0/db/dbs
vi initwafu.ora
wafu.__db_cache_size=687865856
wafu.__java_pool_size=16777216
wafu.__large_pool_size=33554432
wafu.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
wafu.__pga_aggregate_target=671088640
wafu.__sga_target=989855744
wafu.__shared_io_pool_size=0
wafu.__shared_pool_size=234881024
wafu.__streams_pool_size=0
*.audit_file_dest='/u01/app/oracle/admin/wafu/adump'
*.audit_trail='db'
*.compatible='11.2.0.4.0'
*.control_files='/oradata/wafu/control01.ctl','/oradata/wafu/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='fuwa'
*.db_recovery_file_dest='/u01/app/oracle/fast_recovery_area'
*.db_recovery_file_dest_size=4385144832
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=wafuXDB)'
*.log_archive_dest_1='LOCATION=/oradata/archivelog'
*.log_archive_format='%t_%s_%r.dbf'
*.memory_target=1647312896
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.undo_tablespace='UNDOTBS1'
DB_UNIQUE_NAME=wafu
LOG_ARCHIVE_CONFIG='DG_CONFIG=(wafu,fuwa)'
LOG_ARCHIVE_DEST_1=
'LOCATION=/oradata/archivelog
VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
DB_UNIQUE_NAME=wafu'
LOG_ARCHIVE_DEST_2=
'SERVICE=fuwa LGWR ASYNC NOAFFIRM
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
DB_UNIQUE_NAME=fuwa'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE #必须是启用
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
LOG_ARCHIVE_FORMAT=%t_%s_%r.dbf #格式和库里保持一致
LOG_ARCHIVE_MAX_PROCESSES=30
#Standby Role Initialization Parameters
FAL_SERVER=fuwa #备库
DB_FILE_NAME_CONVERT='fuwa','wafu' #备库,主库
LOG_FILE_NAME_CONVERT='fuwa','wafu' #备库,主库
STANDBY_FILE_MANAGEMENT=AUTO
FAL_SERVER=fuwa 如果归档或日志有gap差异,从库向主库请求日志
STANDBY_FILE_MANAGEMENT=AUTO 主库创建文件,从库自动创建。
备库按照参数文件创建目录
mkdir -p /u01/app/oracle/admin/wafu/adump
mkdir -p /oradata/wafu
mkdir -p /u01/app/oracle/fast_recovery_area/wafu
mkdir -p /oradata/archivelog备库配置监听
配置listener
--创建静态监听
cd /u01/app/oracle/product/11.2.0/db/network/admin
vi listener.ora
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = db02)(PORT = 1521))
)
)
sid_list_listener=
(sid_list=
(sid_desc=
(global_dbname=wafu)
(ORACLE_HOME=/u01/app/oracle/product/11.2.0/db)
(sid_name=wafu))
)
ADR_BASE_LISTENER = /u01/app/oracle
--重启监听
lsnrctl
stop listener
start listener
status listener #返回如下:UNKNOWN即静态监听
Services Summary...
Service "wafu" has 1 instance(s).
Instance "wafu", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully配置tnsnames
vi /u01/app/oracle/product/11.2.0/db/network/admin/tnsnames.ora
FUWA =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = db01)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = fuwa)
)
)
wafu = #备库服务名
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.40.53)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = wafu) #备库服务名
)
)
ADR_BASE_LISTENER = /u01/app/oracle备库启动到open阶段
##打开备库
startup;
select open_mode from v$database; #READ ONLY
##关闭OMF(避免备库接收到主库的数据文件后路径和原来的不一致)
show parameter db_create_file_dest --不为空则清空,空:关闭OMF;不为空:
alter system set db_create_file_dest='' scope=both;查看备库数据库身份
select database_role from v$database;
DATABASE_ROLE
----------------
PHYSICAL STANDBY从库进行standby recover 开始应用日志
重启库后需再次执行
##备库启用日志实时应用
--备库open read only用
alter database recover managed standby database parallel 10 using current logfile disconnect from session;
--备库mount模式用
alter database recover managed standby database parallel 10 disconnect from session;
#补充:备库关闭日志实时应用
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;查看日志:
cd $ORACLE_BASE/diag/rdbms/wafu/wafu/trace问题处理
ORA-01153: an incompatible media recovery is active
问题描述
在standby 数据库上执行alter database recover managed standby database parallel 10 disconnect from session;
提示如下报错:
SQL> select status from v$instance;
STATUS
------------
MOUNTED
SQL> alter database recover managed standby database parallel 10 disconnect from session;
alter database recover managed standby database parallel 10 disconnect from session
*
ERROR at line 1:
ORA-01153: an incompatible media recovery is active解决办法
从字面意思理解应该是“存在一个不兼容的介质恢复”。
仔细检查发现上面已经执行过一次
alter database recover managed standby database disconnect from session;
猜想应该是重复启用日志应用所致。故取消应用
alter database recover managed standby database cancel;
重新开启应用
alter database recover managed standby database using current logfile disconnect from session;
问题解决,没有报错。参考链接:https://blog.csdn.net/yanfalee/article/details/50945840
FAL[client]: Failed to request gap sequence
问题描述
巡检备库alert日志发现如下报错:
Tue Mar 04 13:22:22 2025
FAL[client]: Failed to request gap sequence
GAP - SCN range: 0x0000.000f262c - 0x0000.000f262c
DBID 2287326734 branch 1194792401
FAL[client]: All defined FAL servers have been attempted.
------------------------------------------------------------
Check that the CONTROL_FILE_RECORD_KEEP_TIME initialization
parameter is defined to a value that's sufficiently large
enough to maintain adequate log switch information to resolve
archivelog gaps.
查看v$archive_gap 为空
select * from v$archive_gap;
no rows selected解决办法1:监听未启动
如果监听未启动,则启动监听:lsnrctl start即可。
解决办法2:监听已启动
检查一下备库监听是否启动(当状态为‘ready’,表示已经启动)。手工把缺的日志从主库scp/rcp拷过来,然后alter database register logfile.再应用日志。
比如下面是应该拷贝的日志:
+DATA/prod/1_29_856078807.arc 29 1
+DATA/prod/2_14_856078807.arc 14 2
+DATA/prod/1_30_856078807.arc 30 1
+DATA/prod/2_15_856078807.arc 15 2
+DATA/prod/2_16_856078807.arc 16 2
使用RMAN从ASM设备中拷贝出来所需归档文件
run {
copy archivelog '+DATA/PROD/1_29_856078807.arc' to '/home/oracle/1_29_856078807.arc';
copy archivelog '+DATA/PROD/1_30_856078807.arc' to '/home/oracle/1_30_856078807.arc';
copy archivelog '+DATA/prod/2_14_856078807.arc' to '/home/oracle/2_14_856078807.arc';
copy archivelog '+DATA/prod/2_15_856078807.arc' to '/home/oracle/2_15_856078807.arc';
copy archivelog '+DATA/prod/2_16_856078807.arc' to '/home/oracle/2_16_856078807.arc';
}
Starting backup at 27-AUG-14
using channel ORA_DISK_1
channel ORA_DISK_1: starting archive copy
input archive log thread=1 sequence=29 recid=82 stamp=856665609
output filename=/home/oracle/1_29_856078807.arc recid=89 stamp=856669631
channel ORA_DISK_1: archivelog copy complete, elapsed time: 00:00:02
Finished backup at 27-AUG-14
……在备库查看归档路径
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /arch/sdyprod
Oldest online log sequence 0
Next log sequence to archive 0
Current log sequence 0在主库将未同步的归档日志拷贝到备库
[oracle@rac1 ~]$ scp 2* 192.168.8.225:/arch/sdyprod/
oracle@192.168.8.225's password:
2_14_856078807.arc 100% 1024 1.0KB/s 00:00
2_15_856078807.arc 100% 121KB 120.5KB/s 00:00
2_16_856078807.arc 100% 20KB 20.0KB/s 00:00
[oracle@rac1 ~]$ scp 1* 192.168.8.225:/arch/sdyprod/
oracle@192.168.8.225's password: 100% 5356KB 5.2MB/s 00:01
1_30_856078807.arc 100% 12MB 11.7MB/s 00:00
[oracle@rac1 ~]$ 在备库取消日志应用
SQL> alter database recover managed standby database cancel;
Database altered.注册日志文件
SQL> alter database register logfile '/arch/sdyprod/1_29_856078807.arc';
……
Database altered.
SQL> alter database register logfile '/arch/sdyprod/2_16_856078807.arc';
Database altered.开始日志应用
SQL> alter database recover managed standby database disconnect from session;
Database altered.验证同步成功
主库切日志组
alter system switch logfile;
System altered.从库跟踪文件
tail –f $ORACLE_BASE/diag/rdbms/wafu/wafu/trace/alert_wafu.log
查看主备库状态
--主库信息 switchover显示to standby或者session active为正常
set linesize 999
col open_mode for a30
select name,open_mode,database_role,protection_mode,switchover_status from v$database;
NAME OPEN_MODE DATABASE_ROLE PROTECTION_MODE SWITCHOVER_STATUS
FUWA READ WRITE PRIMARY MAXIMUM PERFORMANCE TO STANDBY
--备库信息 switchover显示NOT ALLOWED为正常
set linesize 999
col open_mode for a30
select name,open_mode,database_role,protection_mode,switchover_status from v$database;
NAME OPEN_MODE DATABASE_ROLE PROTECTION_MODE SWITCHOVER_STATUS
FUWA READ ONLY WITH APPLY PHYSICAL STANDBY MAXIMUM PERFORMANCE NOT ALLOWED单点非DG环境通过该语句查的结果和备库信息一样。
该语句是已经搭完dg之后检查的语句,但是不能检查现在连的数据库是不是dg,需要结合参数查看show parameter server 看fal_server和其他参数。
v$database 中 switchover_Status参数含义说明
值 | 含义 |
NOT ALLOWED | 当前的数据库不是带有备用数据库的主数据库 |
PREPARING DICTIONARY | 该逻辑备用数据库正在向一个主数据库和其他备用数据库发送它的重做数据,以便为切换做准备 |
PREPARING SWITCHOVER | 接受用于切换的重做数据时,逻辑备用配置会使用它 |
RECOVERY NEEDED | 备用数据库还没有接收到切换请求 |
SESSIONS ACTIVE | 在主数据库中存在活动的SQL会话;在继续执行之前必须断开这些会话 |
SWITCHOVER PENDING | 适用于那些已收到主数据库切换请求但是还没有处理该请求的备用数据库 |
SWITCHOVER LATENT | 切换没有完成并返回到主数据库 |
TO LOGICAL STANDBY | 主数据库已经收到了来自逻辑备用数据库的完整的字典 |
TO PRIMARY | 该备用数据库可以转换为主数据库 |
TO STANDBY | 该主数据库可以转换为备用数据库 |
总结:
使用了手工冷备主库数据文件、scp到备库的方式,一步一步搭建dataguard物理备库。最主要的是突出主库、备库参数文件的配置。
参数文件:主库增加远程归档目录、FAL挖掘日志GAP、CONVERT;备库增加FAL挖掘日志GAP、CONVERT进行目录转换。
控制文件:主库生产standby控制文件作为备库的控制文件。
数据文件:备库使用主库冷备的数据文件。
建议:看大佬们的博客还得动手实践,有疑问及时抛出并交流
交流:到最后可能会有疑问:为啥主库么有add standby log,原因如下:
本文档是基于DG架构,备库是mount模式,就是纯恢复数据,不查询可不加standby log。
参考链接:https://blog.csdn.net/Ruishine/article/details/119955711
参考链接:https://blog.csdn.net/hpy1985/article/details/122313234




