DG备库无法接受主库归档日志之密码文件
DG备库无法接受主库归档日志之密码文件
实验目的:还原某个客户案例,客户审计需要,对主库sys用户进行锁定,一小时后对sys用户进行解锁后,发现备库无法接受主库的归档日志
本篇文章,测试sys用户与DG备库接受归档有什么关系?
1. 实验环境:
类别 |
主库 |
备库 |
软件版本 |
11.2.0.4.0 |
11.2.0.4.0 |
是否RAC |
否 |
否 |
Db_name |
ENMO |
|
Db_unique_name |
ENMO |
dage |
Service_name |
ENMO |
dage |
Listener.ora |
192.168.20.128:1521/ENMO |
192.168.20.66:1521/dage |
Tnsnames.ora |
ENMO |
DAGE |
log_archive_config |
ENMO,dage |
|
Log_Archive_dest_ x=service |
SERVICE=dage lgwr ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=dage |
|
Log_desc_x |
ENABLE |
|
Log_Archive_dest_ x=local |
LOCATION=/picclife/app/oracle/oradata/arch VALID_FOR=(ALL_LO GFILES,ALL_ROLES) DB_UNIQUE_NAME =dage |
|
Log_desc_x |
enable |
1.1实验环境检测
--主库操作
SYS > alter system switch logfile;
SYS@dage >select max(sequence#),thread# from v$archived_log group by thread#;
MAX(SEQUENCE#) THREAD#
-------------- ----------
1009 1
--主库查询
SELECT THREAD#,NAME,SEQUENCE#,APPLIED,REGISTRAR,CREATOR FROM V$ARCHIVED_LOG WHERE SEQUENCE#=1009
THREAD# NAME SEQUENCE# APPLIED REGISTR CREATOR
---------- ------------------------------------------------- --------- --------- ------- -------
1 /u01/app/oracle/oradata/arch/1_1009_960955299.log 1009 NO ARCH ARCH
1 dage 1009 NO LGWR LGWR
--备库查询
SYS@dage >SELECT THREAD#,NAME,SEQUENCE#,NAME,APPLIED,REGISTRAR,CREATOR FROM V$ARCHIVED_LOG WHERE SEQUENCE#=1009;
THREAD# NAME SEQUENCE# APPLIED REGISTR CREATOR
---------- ------------------------------------------------- --------- --------- ------- -------
1/picclife/app/oracle/oradata/arch1_1009_960955299.log 1009 NO RFS LGWR
解释说明:备库,当registrar=RFS且 applied=NO 代表远程归档已接受,但日志未应用。
Memory 代表内存已应用但数据文件未更新,Yes代表接受且应用完毕
2. 测试
2.1测试对主库修改sys密码,对备库的影响
--主库操作
SYS > select sysdate from dual;
SYSDATE
-------------------
2018-05-03 08:57:55
SYS > alter user sys identified by sys;
SYS > alter system switch logfile;
SYS > select max(sequence#),thread# from v$archived_log group by thread#;
MAX(SEQUENCE#) THREAD#
-------------- ----------
1010 1
--备库查询
SYS@dage >SELECT THREAD#,NAME,SEQUENCE#,NAME,APPLIED,REGISTRAR,CREATOR FROM V$ARCHIVED_LOG WHERE SEQUENCE#=1010;
THREAD# NAME SEQUENCE# APPLIED REGISTR CREATOR
---------- ------------------------------------------------- --------- --------- ------- -------
1
/picclife/app/oracle/oradata/arch1_1010_960955299.log
1010 YES RFS LGWR
--主库修改sys用户密码,主备状态都不变的情况下,无异常,备库可正常接受主库的归档文件
--查询主备之间的操作系统的密码文件
[oracle@enmo dbs]$ strings orapwENMO
]\[Z
ORACLE Remote Password file
INTERNAL
6A75B1BBE50E66AB
[oracle@dage ~]$ sqlplus sys/sys@enmo as sysdba
[oracle@dage dbs]$ strings orapwdage
]\[Z
ORACLE Remote Password file
INTERNAL
AB27B53EDC5FEF41
8A8F025737A9097A
[oracle@dage ~]$ sqlplus sys/oracle@dage as sysdba
--发现主库修改sys密码后,对于操作系统口令文件也会改变,但是备库即使应用了主库修改sys日志的归档日志,也并未主动修改sys密码口令,未改变
#重启主库,主库切换日志,查询备库是否存在无法接受日志的情况
--备库查询
SYS@dage >SELECT THREAD#,NAME,SEQUENCE#,NAME,APPLIED,REGISTRAR,CREATOR FROM V$ARCHIVED_LOG WHERE SEQUENCE#=1016;
no rows selected
--主库查询
SYS > select dest_id,error from v$archive_dest;
DEST_ID ERROR
---------- -----------------------------------------------------------------
1
2 ORA-16191: Primary log shipping client not logged on standby
--由于本次实验操作,知道由于密码文件修改主备不一致造成的情况
--还原主库操作,恢复主备之间的连通性
--主库操作
SYS > alter user sys identified by oracle;
SYS > alter system switch logfile;
select dest_id,error from v$archive_dest;
DEST_ID ERROR
---------- -----------------------------------------------------------------
1
2 ORA-16191: Primary log shipping client not logged on standby
alter system set log_archive_dest_state_2=defer;
alter system set log_archive_dest_state_2=enable;
System altered.
SYS > select dest_id,error from v$archive_dest;
DEST_ID ERROR
---------- -----------------------------------------------------------------
1
2 ORA-16191: Primary log shipping client not logged on standby
alter system switch logfile;
[oracle@enmo dbs]$ strings orapwENMO
]\[Z
ORACLE Remote Password file
INTERNAL
AB27B53EDC5FEF41
>#.Y
8A8F025737A9097A
[oracle@dage dbs]$ strings orapwdage
]\[Z
ORACLE Remote Password file
INTERNAL
AB27B53EDC5FEF41
8A8F025737A9097A
--手工将sys用户密码口令文件传输至备库
[oracle@enmo dbs]$ scp orapwENMO 192.168.20.66:/picclife/app/oracle/product/11.2.0/dbhome_1/dbs/orapwdage
--重置后,v$archive_dest dest_id=2无异常
--主库操作
alter system set log_archive_dest_state_2=defer;
alter system set log_archive_dest_state_2=enable;
SYS > select dest_id,error from v$archive_dest;
DEST_ID ERROR
---------- -----------------------------------------------------------------
1
2
--再次修改SYS用户密码,测试
SYS > alter user sys identified by sys;
--备库操作
#重启备库监听,主库切换日志,查询备库是否存在无法接受日志的情况
[oracle@dage ~]$ lsnrctl stop
[oracle@dage ~]$ lsnrctl start
--测试结果,无影响
--备库操作
#对于备库而言,外部的连接只有4个
[oracle@dage dbs]$ ps -ef|grep LOCAL=NO|grep -v grep
oracle 8682 1 0 15:03 ? 00:00:00 oracledage (LOCAL=NO)
oracle 8684 1 0 15:03 ? 00:00:00 oracledage (LOCAL=NO)
oracle 8696 1 0 15:03 ? 00:00:00 oracledage (LOCAL=NO)
oracle 8702 1 0 15:03 ? 00:00:00 oracledage (LOCAL=NO)
#kill 备库所有的外部连接
[oracle@dage dbs]$ ps -ef|grep LOCAL=NO|grep -v grep|cut -c 9-15|xargs kill -9
[oracle@dage dbs]$ ps -ef|grep LOCAL=NO|grep -v grep
--主库切换归档--日志无法传输过去,报错不同
alter system switch logfile
SYS > select dest_id,error from v$archive_dest;
DEST_ID ERROR
---------- -----------------------------------------------------------------
2 ORA-03135: connection lost contact
--重置归档线程后,发现报错与之前的报错相同
--主库操作
alter system set log_archive_dest_state_2=defer;
alter system set log_archive_dest_state_2=enable;
SYS > select dest_id,error from v$archive_dest;
DEST_ID ERROR
---------- -----------------------------------------------------------------
2 ORA-16191: Primary log shipping client not logged on standby
--还原上述操作
SYS > alter user sys identified by oracle;
[oracle@enmo dbs]$ scp orapwENMO 192.168.20.66:/picclife/app/oracle/product/11.2.0/dbhome_1/dbs/orapwdage
小结测试2.1
结论一:对于修改SYS用户密码而言,在主备之间数据库实例状态未改变的情况下,备库能正常接受主库的日志,但是当主备任何实例重启或者主库的归档远程进程重置,新建立的连接都会导致备库无法接受主库的归档
结论二:在明确知道sys用户密码修改后,通过alter user sys identified by 重置原密码,但是操作系统层面口令文件OrapwSID.ora文件不一致,也是白瞎,只能通过scp主库操作系统层面sys密码达到想要的效果
添加小测试:
测试备库修改操作系统口令文件与主库sys密码口令文件不一致情况会如何
--备库修改操作系统口令文件,kill主库的远程连接
--备库操作
[oracle@dage dbs]$ orapwd file=orapwdage password=abc entries=10 ignorecase=y force=y
[oracle@dage dbs]$ sqlplus sys/abc@dage as sysdba
[oracle@dage dbs]$ ps -ef|grep LOCAL=NO|grep -v grep|cut -c 9-15|xargs kill -9
--主库重置远程归档
SYS > select dest_id,error from v$archive_dest;
DEST_ID ERROR
---------- -----------------------------------------------------------------
2 ORA-03135: connection lost contact
alter system set log_archive_dest_state_2=defer;
alter system set log_archive_dest_state_2=enable;
SYS > select dest_id,error from v$archive_dest;
2 ORA-16191: Primary log shipping client not logged on standby
结论三、对于主备而言,只要主备操作系统口令文件不一致,且主库远程归档参数需要重新建立连接,都会得到dest_id 无法连接备库,解决方法,cp操作系统口令文件
2.2测试对主库sys用户进行锁定,切换归档后测试
--备库开启MRP进程
SYS@dage >recover managed standby database disconnect;
SYS@dage >select process,client_process,sequence#,status,BLOCK#,BLOCKS from v$managed_standby;
PROCESS CLIENT_P SEQUENCE# STATUS BLOCK# BLOCKS
--------- -------- ---------- ------------ ---------- ----------
MRP0 N/A 1007 APPLYING_LOG 14740 82074
--主库对sys用户进行锁定
SYS > alter user sys account lock;
SYS > select username,ACCOUNT_STATUS from dba_users where username='SYS';
USERNAME ACCOUNT_STATUS
------------------------------ --------------------------------
SYS LOCKED
SYS > alter system switch logfile;
--备库重启库后--查询
SYS@dage >startup force;
SYS@dage >select username,ACCOUNT_STATUS from dba_users where username='SYS';
USERNAME ACCOUNT_STATUS
------------------------------ --------------------------------
SYS LOCKED
--主库操作,重置线程查询状态
alter system set log_archive_dest_state_2=defer;
alter system set log_archive_dest_state_2=enable;
SYS > select dest_id,error from v$archive_dest;
2 ORA-16191: Primary log shipping client not logged on standby
SYS > select severity,error_code,to_char(timestamp,'DD-MON-YYYY HH24:MI:SS') "timestamp" , message from v$dataguard_status where dest_id=2;
SEVERITY ERROR_CODE timestamp MESSAGE
--------------- ---------- -------------------- ----------------------------------------------------------------------
Error 16191 03-MAY-2018 10:10:50 PING[ARC2]: Heartbeat failed to connect to standby 'dage'. Error is 16191.
--主库查询归档参数
SYS > show parameter archive
log_archive_dest_2
SERVICE=dage lgwr ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=dage
SYS > host tnsping dage
OK (40 msec)
--主库查询alert日志
[oracle@enmo dbs]$ tail -200f /u01/app/oracle/diag/rdbms/enmo/ENMO/trace/alert_ENMO.log
Thu May 03 10:10:50 2018
Error 1017 received logging on to the standby
------------------------------------------------------------
Check that the primary and standby are using a password file
and remote_login_passwordfile is set to SHARED or EXCLUSIVE,
and that the SYS password is same in the password files. -密码文件sys密码相同!!!
returning error ORA-16191 --只能作为参考
--正常途径以及无法自动主库归档传输至备库了
--一般情况下,scp操作系统口令文件就能解决问题,但是本次主备密码文件一致
[oracle@enmo dbs]$ strings orapwENMO
]\[Z
ORACLE Remote Password file
INTERNAL
AB27B53EDC5FEF41
8A8F025737A9097A
#D}r
[oracle@dage dbs]$ strings orapwdage
]\[Z
ORACLE Remote Password file
INTERNAL
AB27B53EDC5FEF41
8A8F025737A9097A
#D}r
--通过处理gap归档的方法实现上述功能,原理理论分析:主库修改了sys用户密码
--对主库sys用户进行解锁
SYS > alter user sys account unlock;
SYS > alter system switch logfile;
SYS@dage >r
1* select username,ACCOUNT_STATUS from dba_users where username='SYS'
USERNAME ACCOUNT_STATUS
------------------------------ --------------------------------
SYS LOCKED
--备库sys用户状态不变,因为主库的归档文件无法传输至备库
--原理分析:主库锁定的日志传输至备库,备库sys用户被锁定,在备库重启后,主库的远程归档参数无法连接备库,无法传输归档日志,主库对sys用户的解锁操作,无法在备库应用
--
--查询主库最新的归档日志
SYS > select max(sequence#),thread# from v$archived_log group by thread#;
MAX(SEQUENCE#) THREAD#
-------------- ----------
1032 1
select thread#,sequence#,name,applied from v$archived_log
THREAD# SEQUENCE# NAME APPLIED
-----------------------------------------------------------------------------------------------------------------------------------------
1 1029 dage YES
1 1030 /u01/app/oracle/oradata/arch/1_1030_960955299.log NO
1 1030 dage YES
1 1031 /u01/app/oracle/oradata/arch/1_1031_960955299.log NO
1 1032 /u01/app/oracle/oradata/arch/1_1032_960955299.log NO
--查询备库最后接受应用的归档日志
select thread#,sequence#,name,applied from v$archived_log
THREAD# SEQUENCE# NAME APPLIED
-----------------------------------------------------------------------------------------------------------------------------------------
1 1030 /picclife/app/oracle/oradata/arch1_1030_960955299.log YES
--为稳妥起见:对主库1031/1032两个日志文件手工拷贝
[oracle@enmo ~]$ scp /u01/app/oracle/oradata/arch/1_1031_960955299.log /u01/app/oracle/oradata/arch/1_1032_960955299.log 192.168.20.66:/picclife/app/oracle/oradata/.
--备库注册归档日志
RMAN> catalog start with '/picclife/app/oracle/oradata/';
--备库重启后,需手工启动Mrp进程
SYS@dage >recover managed standby database disconnect from session;
--备库查询sys用户状态
SYS@dage >select username,ACCOUNT_STATUS from dba_users where username='SYS';
USERNAME ACCOUNT_STATUS
------------------------------ --------------------------------
SYS OPEN
结论
当出现备库无法接受主库归档日志现象时:
主库查询视图:select dest_id,error from v$archive_dest;
select severity,error_code,to_char(timestamp,'DD-MON-YYYY HH24:MI:SS') "timestamp" , message from v$dataguard_status where dest_id=2;
主备库alert日志文件
主库归档远程参数log_archive_dest_xxx
log_archive_dest_state_2状态
如果以上均OK,增加一个可能性,sys用户状态,及操作系统密码文件是否一致
--本篇文档主要考虑sys密码文件造成备库无法接受日志的情况,不详细介绍log_archive_dest_xx参数
DG备库无法接受主库归档日志之密码文件的更多相关文章
- oracle dg 备库不同步主库数据
今天遇到一个数据库同步问题,主库被关闭,重启主库后,备库不能正常同步主库数据.只有当手动切换归档日志的时候,备库才能和主库一致. 这个问题的解决方法: 重启备库,重新应用归档日志. 操作步骤如下: / ...
- 模拟主库创建数据文件,dg备库空间不足时问题处理
本篇文档测试目的: 模拟实际环境中,主库对表空间添加数据文件,备库空间不足,最终导致MRP进程自动断开,处理方式. 1.问题环境模拟 1)正常情况下的dg 主库创建数据文件,备库接受日志,自动创建表空 ...
- DG备库,实时应用如何判断,MR进程,及MRP应用归档,三种情况的查询及验证
本篇文档学习,DG备库,实时应用如何判断,MR进程,及MRP应用归档,三种情况的查询及验证 1.取消MRP进程 备库查询进程状态select process,client_process,sequen ...
- DG备库缺失归档文件GAP日志
问题现象: XXXsdgebus-dg GAP手工注册归档 #出现GAP idle>select * from v$archive_gap; THREAD# LOW_SEQUENCE# HIGH ...
- DG备库磁盘空间满导致无法创建归档
上周五去某客户那里做数据库巡检.是window 2008系统上10g的一套NC系统的库,已经配置了DG,可是巡检时发现数据库报错: Tue Nov 11 10:13:57 2014 LNS: Stan ...
- Oracle-DG最大保护模式下,dg备库出现问题对主库有什么影响?
一.需求 疑问?Oracle最大保护模式下,dg备库出现问题,影响主库吗? 我们都知道Oracle最大保护模式的意思是oracle不允许数据丢失,1条记录都不行! 那么备库有问题? oracle主库还 ...
- 使用using current logfile实现DG备库实时更新
DG1是主库,DG2是备库:运行在最大可用模式. 实验一:未使用using current logfile参数时,备库在最大可用模式下,不能实时同步备库的更新 -此时需要等待主库进行归档---侧面证明 ...
- Oracle DG备库强制switch_over过程
故障描述: 主库异常下线,需要将备库强制启动为主库,切断日志时提示需要介质恢复,执行介质恢复后,再激活日志即可进行切换 1. 执行alter database recover managed sta ...
- 使用DUPLICATE 方式创建ORACLE 11G DG备库环境
我的最佳实践 ① 手动创建好初始化参数文件: *.audit_file_dest='E:\APP\XJXU\ADMIN\ORASTAND\ADUMP'*.control_files='E:\APP\X ...
随机推荐
- [每周一文]week 1
花开人间四月天 摘自美文网:https://www.lookmw.cn/xinqing/49623.html 赏春 四月芳菲淡淡香,寻花问柳向斜阳. 陌上行人思作客,人间遍地是春情. 文/ ...
- Convex Fence
Convex Fence I have a land consisting of n trees. Since the trees are favorites to cows, I have a bi ...
- python操作文件(增、删、改、查)
内容 global log 127.0.0.1 local2 daemon maxconn 256 log 127.0.0.1 local2 info defaults log global mode ...
- PHP json_encode重要的秘密
php格式化json的函数 json_encode($value,$options) 其中有2个比较常用到的参数 JSON_UNESCAPED_UNICODE(中文不转为unicode ,对应的数字 ...
- 【转】EF 获取类的属性并排除特定属性(getType().GetProperties())
当获取一个类型(class)的所有属性时,想排除指定属性,该如何操作? 比如:EF中一个实体类型UserEntity,通过反射获取这个类的属性时,想排除这个为映射的字段ID 使用以下方法即可! Pro ...
- 模块之 logging, shelve, sys 模块
一. logging模块 用来记录日志,日志:记录某个时间点发生了什么事 日志作用:程序调试 了解软件程序的运行情况,是否正常 软件程序运行故障分析与问题定位 还可用来做用户行为分析 日志等级:在不改 ...
- 一篇文章有若干行,以空行作为输入结束的条件。统计一篇文章中单词the(不管大小写,单词the是由空格隔开的)的个数。
#include <iostream>using namespace std; int k = 0;int n = 0;int main() { char c; char a[1000]; ...
- JAVA工程师面试常见问题集锦
集锦一: 一.面试题基础总结 1. JVM结构原理.GC工作机制详解 答:具体参照:JVM结构.GC工作机制详解 ,说到GC,记住两点:1.GC是负责回收所有无任何引用对象的内存空间. 注意: ...
- learning at command AT+CSUB
[Purpose] Learning how to get mobile module info [Eevironment] Shell terminal, base on gcom command ...
- Java 方法重载 方法重写
方法重载规则 参数个数不同 参数个数相同,但参数列表中对应的某个参数的类型不一样 方法的返回类型和参数名称不参与重载 "编译期绑定",,因为未产生对象,只看参数.引用类型绑定方法 ...