完整版Oracle DataGuard文档
1、主库准备工作
Host IP DB_NAME DB_UNIQUE_NAME Net ServiceName(网络服务名)
主库192.168.137.128 ORCLDB WENDING db_wending
备库192.168.137.129 ORCLDB PHYSTDBY db_phystdby
保护模式:默认最大性能模式
注意DataGuard启动顺序:
启动顺序: 先standby,后primary;
关闭顺序: 先primary,后standby;
1.1、检查数据库是否支持Data Guard(企业版才支持),是否归档模式,Enable force logging
$sqlplus '/as sysdba'
SQL>select * from v$option where parameter = 'Managed Standby';
确认主库处于归档模式
SQL>archive log list (先检查是否归档模式,不是则修改)
startup mount
alter database archivelog;
alter database open;
将primary数据库置为FORCE LOGGING模式
SQL>alter database force logging; (强制产生日志)
1.2、如果主库没有密码文件则建立密码文件,从而可以OS验证的方式登陆
$orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=iamwangnc entries=5
1.3、配置standby redolog(最佳性能模式可以忽略,如果将来变成备库且要转为其它两种模式则要建立)
SQL>alter database add standby logfile
group 4('/orahome/oradata/WENDING/stdby_redo04.log') size 50m,
group 5 ('/orahome/oradata/WENDING/stdby_redo05.log')size 50m,
group 6('/orahome/oradata/WENDING/stdby_redo06.log') size 50m,
group 7('/orahome/oradata/WENDING/stdby_redo07.log') size 50m;
standbyredolog的组数参考公式:(online redolog组数 + 1) * 数据库线程数;单机线程数为1,RAC一般为2。
standbyredolog的组成员数和大小也尽量和online redolog一样。
1.4、设置主库初始化参数
$sqlplus '/as sysdba'
SQL>create pfile='/home/oracle/pfile.ora' from spfile; (备份参数文件)
SQL>alter system set LOG_ARCHIVE_CONFIG='DG_CONFIG=(WENDING,PHYSTDBY)'scope=spfile; (启动db接受或发送redo data,包括所有库的db_unique_name)
SQL>alter system set LOG_ARCHIVE_DEST_1='LOCATION=/orahome/arch1/WENDINGVALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=WENDING' scope=spfile; (主库归档目的地)
SQL>alter system set LOG_ARCHIVE_DEST_2='SERVICE=db_phystdby LGWR ASYNCVALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=PHYSTDBY'scope=spfile; (当该库充当主库角色时,设置物理备库redo data的传输目的地)
SQL>alter system set LOG_ARCHIVE_MAX_PROCESSES=5 scope=spfile; (最大ARCn进程数)
SQL>alter system set LOG_ARCHIVE_DEST_STATE_1=ENABLE scope=spfile; (允许redo传输服务传输数据到目的地,默认是enable)
SQL>alter system set LOG_ARCHIVE_DEST_STATE_2=ENABLE scope=spfile; (同上)
SQL>altersystem set REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE scope=spfile; (exclusiveor shared,所有库sys密码要一致,默认是exclusive)
--以下是主库切换为备库,充当备库角色时的一些参数设置,如果不打算做数据库切换就不用设置了
SQL>alter system set FAL_SERVER=db_phystdby scope=spfile; (配置网络服务名,假如转换为备库角色时,从这里获取丢失的归档文件)
SQL>alter system set FAL_CLIENT=db_wending scope=spfile; (配置网络服务名,fal_server拷贝丢失的归档文件到这里)
SQL>alter system set DB_FILE_NAME_CONVERT='PHYSTDBY','WENDING' scope=spfile; (前为切换后的主库路径,后为切换后的备库路径,如果主备库目录结构完全一样,则无需设定)
SQL>alter system set LOG_FILE_NAME_CONVERT='PHYSTDBY','WENDING' scope=spfile; (同上,这两个名字转换参数是主备库的路径映射关系,可能会是路径全名,看情况而定)
SQL>alter system set STANDBY_FILE_MANAGEMENT=auto scope=spfile; (auto后当主库的datafiles增删时备库也同样自动操作,且会把日志传送到备库standby_archive_dest参数指定的目录下,确保该目录存在,如果你的存储采用文件系统没有问题,但是如果采用了裸设备,你就必须将该参数设置为manual)
SQL>alter system set STANDBY_ARCHIVE_DEST='LOCATION=/orahome/arch1/WENDING'scope=spfile; (一般和LOG_ARCHIVE_DEST_1的位置一样,如果备库采用ARCH传输方式,那么主库会把归档日志传到该目录下)
有了以上参数设置,则无论该库充当主库角色还是备库角色都无需再修改了。
然后重启数据库:
SQL>shutdown immediate
SQL>startup;
1.5、备份主库数据文件
关闭应用服务器,停止监听,开始rman备份:
$lsnrctl stop
$ rmantarget /
RMAN>backup full database format '/backup/backup_%T_%s_%p.bak';
##RMAN>sql "alter system archive log current";
##RMAN>backup archive log all format='/backup/arch_%T_%s_%p.bak';
1.6、在主库上建立备库控制文件(控制文件通常需要有多份,手工将文件复制几份)
$sqlplus '/as sysdba'
SQL>alter database create standby controlfile as '/backup/stdby_control01.ctl';
$ cd/backup/
$ cpsdtby_control01.ctl stdby_control02.ctl
$ cpsdtby_control01.ctl stdby_control03.ctl
1.7、为备库准备init参数
$sqlplus '/as sysdba'
SQL>create pfile = '/backup/initPHYSTDBY.ora' from spfile;
$ cd/backup/
$ viinitPHYSTDBY.ora
注意主备库不同角色的属性配置,注意文件路径等,注意db_name要和主库一致,主要是以下参数:
audit_file_dest='/u01/app/oracle/admin/PHYSTDBY/adump'
background_dump_dest='/u01/app/oracle/admin/PHYSTDBY/bdump'
core_dump_dest='/u01/app/oracle/admin/PHYSTDBY/bdump'
user_dump_dest='/u01/app/oracle/admin/PHYSTDBY/udump'
--
control_files='/orahome/oradata/stdby_control01.ctl','/orahome/oradata/stdby_control02.ctl','/orahome/oradata/stdby_control03.ctl'
db_unique_name='PHYSTDBY'
log_archive_config='DG_CONFIG=(PHYSTDBY,WENDING)'
log_archive_dest_1='LOCATION=/orahome/arch1/PHYSTDBYVALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=PHYSTDBY'
log_archive_dest_2='SERVICE=db_wendingLGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=WENDING'
--
fal_client='DB_PHYSTDBY'
fal_server='DB_WENDING'
db_file_name_convert='WENDING','PHYSTDBY'
log_file_name_convert='WENDING','PHYSTDBY'
standby_archive_dest='LOCATION=/orahome/arch1/PHYSTDBY'
另外,如果备库将来要打开成只读模式,需要确认audit_trail参数不是含db,应该设成os或none。
1.8、拷贝上面生成的文件backup_%T.bak、stdby_control01/02/03.ctl、initPHYSTDBY.ora到备库所在主机
注意rman备份的文件在主备库主机上目录要一致。
$ scpbackup*.bak 192.168.137.129:/backup/
$ scpinitPHYSTDBY.ora 192.168.137.129:$ORACLE_HOME/dbs/
$ scpstdby_control*.ctl 192.168.137.129:/orahome/oradata/
1.9、建立主库监听和主备库的网络服务名(必须是dedicated的),并启动监听
$netca (是图形界面,或者手工从别的库把listener.ora和tnsnames.ora拷过来修改也行)
$lsnrctl start
$tnsping db_wending
$tnsping db_phystdby (此时tnsping还不通物理备库)
tnsping对方的时候,有可能linux防火墙限制了,会提示TNS-12560: TNS: 协议适配器错误。
临时禁用防火墙方法:
#service iptables stop
永久禁用防火墙方法:
#chkconfig --list iptables
# chkconfig--level 345 iptables off
2、建立备库
2.1、设置环境变量并建立备库一些必需目录
$export ORACLE_BASE=/u01/app/oracle
$export ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1
$export ORACLE_SID=PHYSTDBY
$mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/adump
$mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/bdump
$mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/cdump
$mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/udump
--以下目录要看哪些地方可能会存放数据库文件,注意不能少建
$mkdir -p /orahome/oradata/$ORACLE_SID
$mkdir -p /u01/app/oracle/oradata/$ORACLE_SID
$mkdir -p /orahome/arch1/$ORACLE_SID
2.2、在备库主机上生成密码文件,且sys密码和主库得一致
$orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=iamwangnc entries=5
2.3、在备库上建立监听,和主备库网络服务名(必须是dedicated的),并启动监听
$netca (是图形界面,或者手工从别的库把listener.ora和tnsnames.ora拷过来修改也行)
$lsnrctl start
$ tnspingdb_wending
$tnsping db_phystdby
2.4、在备库上建立spfile
$sqlplus '/as sysdba'
SQL>create spfile from pfile;
如果pfile没有放到$ORACLE_HOME/dbs/下,而是放在别的位置:
SQL>create spfile from pfile='/backup/initPHYSTDBY.ora';
2.5、启动物理备库
SQL>startup nomount
SQL>alter database mount standby database;
2.6、备库做rman恢复
$ rmantarget / (要求主备库rman备份文件的存放路径和文件名一致)
RMAN>restore database;
##RMAN>restore archivelog all;
介质恢复后,rman 自动将standby 数据库打开到mount 状态。
2.7、配置standby redolog(最佳性能模式可以忽略,如果要转为其它两种模式则要建立)
SQL>alter database add standby logfile
group 4('/orahome/oradata/PHYSTDBY/stdby_redo04.log') size 50m,
group 5('/orahome/oradata/PHYSTDBY/stdby_redo05.log') size 50m,
group 6('/orahome/oradata/PHYSTDBY/stdby_redo06.log') size 50m,
group 7 ('/orahome/oradata/PHYSTDBY/stdby_redo07.log')size 50m;
standbyredolog的组数参考公式:(online redolog组数 + 1) * 数据库线程数;单机线程数为1,RAC一般为2。
standbyredolog的组成员数和大小也尽量和online redolog一样。
3、主备库各参数文件内容
2.8、在备库上,启动redo apply
SQL>alter database recover managed standby database disconnect from session;
到此物理备库创建完毕!
3.1、主备库listener.ora一样,如果有不一样也是host不一样
----------------------------------------
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME =/u01/app/oracle/product/10.2.0/db_1)
(PROGRAM = extproc)
)
)
LISTENER=
(DESCRIPTION_LIST=
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST =localhost.localdomain)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY =EXTPROC0))
)
)
----------------------------------------
3.3、init$ORACLE_SID.ora
主库initWENDING.ora:
----------------------------------------
WENDING.__db_cache_size=226492416
WENDING.__java_pool_size=4194304
WENDING.__large_pool_size=4194304
WENDING.__shared_pool_size=96468992
WENDING.__streams_pool_size=0
*.audit_file_dest='/u01/app/oracle/admin/WENDING/adump'
*.audit_sys_operations=TRUE
*.audit_trail='db','extended'
*.background_dump_dest='/u01/app/oracle/admin/WENDING/bdump'
*.control_files='/orahome/oradata/control1.ctl','/orahome/oradata/control2.ctl','/orahome/oradata/control3.ctl'
*.core_dump_dest='/u01/app/oracle/admin/WENDING/cdump'
*.db_block_size=8192
*.db_domain='LK'
*.db_file_name_convert='PHYSTDBY','WENDING'
*.db_name='ORCLDB'
*.db_unique_name='WENDING'
*.fal_client='DB_WENDING'
*.fal_server='DB_PHYSTDBY'
*.job_queue_processes=10
*.log_archive_config='DG_CONFIG=(WENDING,PHYSTDBY)'
*.log_archive_dest_1='LOCATION=/orahome/arch1/WENDINGVALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=WENDING'
*.log_archive_dest_2='SERVICE=db_phystdbyLGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=PHYSTDBY'
*.log_archive_max_processes=5
*.log_file_name_convert='PHYSTDBY','WENDING'
*.open_cursors=1500
*.processes=500
*.sga_max_size=320M
*.sga_target=320M
*.standby_archive_dest='LOCATION=/orahome/arch1/WENDING'
*.standby_file_management='AUTO'
*.undo_management='AUTO'
*.undo_retention=10800
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='/u01/app/oracle/admin/WENDING/udump'
----------------------------------------
备库initPHYSTDBY.ora:
----------------------------------------
PHYSTDBY.__db_cache_size=226492416
PHYSTDBY.__java_pool_size=4194304
PHYSTDBY.__large_pool_size=4194304
PHYSTDBY.__shared_pool_size=96468992
PHYSTDBY.__streams_pool_size=0
*.audit_file_dest='/u01/app/oracle/admin/PHYSTDBY/adump'
*.audit_sys_operations=TRUE
*.audit_trail='os'
*.background_dump_dest='/u01/app/oracle/admin/PHYSTDBY/bdump'
*.control_files='/orahome/oradata/stdby_control01.ctl','/orahome/oradata/stdby_control02.ctl','/orahome/oradata/stdby_control03.ctl'
*.core_dump_dest='/u01/app/oracle/admin/PHYSTDBY/cdump'
*.db_block_size=8192
*.db_domain='LK'
*.db_file_name_convert='WENDING','PHYSTDBY'
*.db_name='ORCLDB'
*.db_unique_name='PHYSTDBY'
*.fal_client='DB_PHYSTDBY'
*.fal_server='DB_WENDING'
*.job_queue_processes=10
*.log_archive_config='DG_CONFIG=(PHYSTDBY,WENDING)'
*.log_archive_dest_1='LOCATION=/orahome/arch1/PHYSTDBYVALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=PHYSTDBY'
*.log_archive_dest_2='SERVICE=db_wendingLGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=WENDING'
*.log_archive_max_processes=5
*.log_file_name_convert='WENDING','PHYSTDBY'
*.open_cursors=1500
*.processes=500
*.sga_max_size=320M
*.sga_target=320M
*.standby_archive_dest='LOCATION=/orahome/arch1/PHYSTDBY'
*.standby_file_management='AUTO'
*.undo_management='AUTO'
*.undo_retention=10800
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='/u01/app/oracle/admin/PHYSTDBY/udump'
----------------------------------------
4、主库归档测试
主库归档前:
SQL>archive log list;
Databaselog mode Archive Mode
Automaticarchival Enabled
Archivedestination /orahome/arch1/WENDING
Oldestonline log sequence 6
Nextlog sequence to archive 8
Currentlog sequence 8
此时备库:
SQL>archive log list;
Databaselog mode Archive Mode
Automaticarchival Enabled
Archivedestination /orahome/arch1/PHYSTDBY
Oldestonline log sequence 0
Nextlog sequence to archive 0
Currentlog sequence 8
主库归档后:
SQL>ALTER SYSTEM SWITCH LOGFILE; --对单实例数据库或RAC中的当前实例执行日志切换
SQL>ALTER SYSTEM ARCHIVE LOG CURRENT; --对数据库中的所有实例执行日志切换
SQL>archive log list;
Databaselog mode Archive Mode
Automaticarchival Enabled
Archivedestination /orahome/arch1/WENDING
Oldestonline log sequence 7
Nextlog sequence to archive 9
Currentlog sequence 9
此时备库:
SQL>archive log list;
Databaselog mode Archive Mode
Automaticarchival Enabled
Archivedestination /orahome/arch1/PHYSTDBY
Oldestonline log sequence 0
Nextlog sequence to archive 0
Currentlog sequence 9
3.2、主备库tnsnames.ora一样,如果有不一样也是host和port不一样
----------------------------------------
DB_WENDING=
(DESCRIPTION=
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST =192.168.137.128)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = wending.lk)
)
)
DB_PHYSTDBY=
(DESCRIPTION=
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST =192.168.137.129)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = phystdby.lk)
)
)
EXTPROC_CONNECTION_DATA=
(DESCRIPTION=
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY =EXTPROC0))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)
----------------------------------------
5、修改主库DataGuard保护模式
5.1、LGWR传送日志的配置方法:
为了便于大家更好的理解,我们先画一个表,表中描述了不同保护模式下LOG_ARCHIVE_DEST_n参数应该设置的属性:
5.2、修改主库DataGuard保护模式
SQL> select name,db_unique_name,protection_mode from v$database; 查看当前保护模式
5.3、主库修改初始化参数 (主库db_wending操作)
SQL>alter system set log_archive_dest_2='SERVICE=db_phystdby OPTIONAL LGWR SYNCAFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=ora10gdg';
Systemaltered.
5.4、主库通过命令行修改数据保护模式,重启主数据库 (主库db_wending操作)
SQL> startup mount
SQL>alter database set standby database to maximize availability;
Databasealtered.
切换主库保护模式的语法:
alterdatabase set standby database to maximize { protection | availability |performance }
附:下面列出不同数据保护模式的修改方法
SQL> alter database set standby database to maximize protection; --最大保护
SQL> alter database set standby database to maximize availability; --最高可用性
SQL> alter database set standby database to maximize performance; --最高性能
5.5、重启主库 (主库操作)
SQL>shutdown immediate;
Databaseclosed.
Databasedismounted.
ORACLEinstance shut down.
SQL>startup;
ORACLEinstance started.
TotalSystem Global Area 104857600 bytes
FixedSize 1266056 bytes
VariableSize 79695480 bytes
DatabaseBuffers 20971520 bytes
RedoBuffers 2924544 bytes
Databasemounted.
Databaseopened.
5.6、查看主库保护模式是否变更成功 (主库操作)
SQL>select protection_mode,protection_level from v$database;
PROTECTION_MODE PROTECTION_LEVEL
----------------------------------------
MAXIMUMAVAILABILITY MAXIMUM AVAILABILITY
5.7、修改备库的log_archive_dest_2初始化参数方便数据库角色切换 (备库操作)
SQL>alter system set log_archive_dest_2='SERVICE=db_wending OPTIONAL LGWR SYNCAFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=ora10g';
Systemaltered.
5.8、查看备库数据保护模式 (备库操作)
SQL>select protection_mode,protection_level from v$database;
PROTECTION_MODE PROTECTION_LEVEL
----------------------------------------
MAXIMUMAVAILABILITY MAXIMUM AVAILABILITY
5.9、验证一下“最高可用性”切换成果
1).备库关闭前主库的状态:
SQL>select protection_mode,protection_level from v$database;
PROTECTION_MODE PROTECTION_LEVEL
----------------------------------------
MAXIMUMAVAILABILITY MAXIMUM AVAILABILITY
2).备库关闭后主库的状态(注意这里的变化,主库的PROTECTION_LEVEL标示为RESYNCHRONIZATION状态):
sys@ora10g>select protection_mode,protection_level from v$database;
PROTECTION_MODE PROTECTION_LEVEL
----------------------------------------
MAXIMUMAVAILABILITY RESYNCHRONIZATION
3).备库恢复数据恢复后,主库的状态:
sys@ora10g>select protection_mode,protection_level from v$database;
PROTECTION_MODE PROTECTION_LEVEL
---------------------------------------
MAXIMUMAVAILABILITY MAXIMUM AVAILABILITY
5.9打开备用库恢复进程
recovermanaged standby database disconnect from session;
执行上面这条语句,备用库会在主库日志文件切换归档后,使用归档文件恢复数据库。
recover managed standby database using current logfile disconnect fromsession;
这条语句与上面不同的是,备用日志文件切换,生成归档日志前,先恢复数据库。
recovermanaged standby database finish;
这条语句在做切换时,尽量多的保护数据。从备用日志文件中恢复数据
recovermanaged standby database cancel; 取消备用库自动恢复
可以在使用上面两条语句时,查看v$managed_standby的不同。
SQL>recover managed standby database disconnect;
Mediarecovery complete.
SQL>select process,status from v$managed_standby;
查询当前库的角色和保护模式:
SQL>select database_role,db_unique_name,open_mode,protection_mode,protection_level,switchover_status,supplemental_log_data_pk,supplemental_log_data_uifrom v$database;
6、DataGuard关启状态
启用备用数据库
SQL> STARTUP NOMOUNMT;
SQL>alter database mount standby database;
SQL>alter database recover managed standby database disconnect from session;
关闭备用数据库
SQL>alter database recover managed standby database cancel;
SQL>shutdown immediate;
从关闭状态打开
SQL>startup nomount;
SQL>alter database mount standby database;
SQL>alter database open read only;
从正在恢复状态只读打开
SQL>alter database recover managed standby database cancel;
SQL>alter database open read only;
切换回到恢复状态
SQL>alter database recover managed standby database disconnect from session;
7、主备数据库切换
7.1、正常切换:
主服务器
SQL>alter database commit to switchover to physical standby;
SQL>shutdown immediate
SQL>startup nomount;
SQL>alter database mount standby database;
SQL>alter database recover managed standby database disconnect from session
备用服务器
SQL>alter database commit to switchover to primary
SQL>shutdown immediate;
SQL>startup
7.2、非正常切换:(即主服务器当机的情况)启动failover
备服务器
SQL>alter database recover managed standby database finish;
SQL>alter database commit to switchover to primary;
SQL>shutdown immediate;
SQL>startup;
7 切换SNAPSHOT DATABASE
执行:SQL> alter databaserecover managed standby database cancel;
SQL> alter database convert to snapshot standby;
SNAPSHOT的原理是基于闪回数据原理,此时备库是可读写状态,可以用这种真实的生产环境进行一些无法在测试环境做的实验。使用完后,可以执行命令退回,SNAPSHOT期间对备库做的所有变更都会还原:SQL> alterdatabase convert to physical standby;
SQL> alter database recover managed standby database disconnect
8、常用维护SQL
添加几个常用命令
备库启动归档日志应用
alterdatabase recover managed standby database disconnect from session;
备库停止归档日志应用
alterdatabase recover managed standby database cancel;
查询归档日志是否被应用,查询V$archived_log视图的applied列
selectsequence#,dest_id,first_time,next_time,archvied,applied from v$archived_log;
查看备库是否和主库同步,查询V$archive_dest_status视图
selectarchived_thread#,archived_seq#,applied_thread#,applied_seq# fromv$archive_dest_status;
监控日志传送状态,V$archive_gap记录当前备库mrp进程恢复需要的但是还没有传到备库的日志更简单的是查看主备库的归档日志的序列号相差多少
select* from v$archive_gap;
查看当前主机的运行状态
selectswitchover_status,database_role,protection_mode from v$database
查看备库接收、应用redo数据的过程
selectmessage from v$dataguard_status
备库端查看RFS(RemoteFile Service)接收日志情况和MRP应用日志同步主数据库的情况(Physical Standby Database Only) 记录当前备库的一些进程情况和进程ID
selectprocess,status,thread#,sequence#,block#,blocks from v$managed_standby;
V$STANDBY_LOG备用数据库的备用日志的数量与当前状态等信息
SELECT* FROM V$STANDBY_LOG;
启动Data Guard 后,查看同步情况::
SQL>select error from v$archive_dest;
用SQL 查看了一下同步正常:
SQL>select sequence#,applied from v$archived_log;
主库归档:
SQL>ALTER SYSTEM SWITCH LOGFILE; --对单实例数据库或RAC中的当前实例执行日志切换
SQL>ALTER SYSTEM ARCHIVE LOG CURRENT; --对数据库中的所有实例执行日志切换
在备库上,验证一下传过来的归档文件:
SQL>SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME, APPLIED, completion_time FROMV$ARCHIVED_LOG ORDER BY SEQUENCE#;
在主库上,查询待转换standby库的归档文件是否连接:
SQL>SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;
如过上面查到存在不连续的归档,那查找sequence 对应的归档文件:
SQL>SELECT NAME FROM V$ARCHIVED_LOG WHERE THREAD#=1 AND DEST_ID=1 AND SEQUENCE#BETWEEN 7 AND 10;
查询主备库已归档文件最大序号是否相同:
SQL>select distinct thread#,max(sequence#) over(partition by thread#) a fromv$archived_log;
在备库上,显示备库相关进程的当前状态信息:
SQL>select process,client_process,sequence#,status from v$managed_standby;
显示归档文件路径配置信息及redoapply情况:
SQL>selectdest_name,archived_thread#,archived_seq#,applied_thread#,applied_seq#,db_unique_name
fromv$archive_dest_status where status='VALID';
检查应用模式(是否启用了实时应用):
如果打开了实时应用,则recovery_mode会显示为:MANAGED REAL TIME APPLY。
SQL>select dest_id,DEST_NAME,STATUS,TYPE,DATABASE_MODE, recovery_mode fromv$archive_dest_status;
显示那些被自动触发写入alert.log或服务器trace文件的事件:
通常是在你不便访问到服务器查询alert.log时,可以临时访问本视图查看一些与dataguard 相关的信息。
SQL>select * from v$dataguard_status;
--End--