重庆思庄Oracle、KingBase、PostgreSQL、Redhat认证学习论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 803|回复: 0
打印 上一主题 下一主题

[Oracle] 备库数据文件自动创建错误引发的 ORA-16766: Redo Apply is stopped

[复制链接]
跳转到指定楼层
楼主
发表于 2025-6-1 17:43:54 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
1.错误描述
检查 ADG 同步状态

DGMGRL> show database verbose sljj2dg;

Database - sljj2dg

  Role:            PHYSICAL STANDBY
  Intended State:  APPLY-ON
  Transport Lag:   0 seconds (computed 1 second ago)
  Apply Lag:       39 days 17 hours 52 minutes 32 seconds (computed 0 seconds ago)
  Apply Rate:      5.94 MByte/s
  Real Time Query: OFF
  Instance(s):
    sljj

  Database Error(s):
    ORA-16766: Redo Apply is stopped

  Properties:
    DGConnectIdentifier             = 'sljj2dg'
    ObserverConnectIdentifier       = ''
    LogXptMode                      = 'ASYNC'
    DelayMins                       = '120'
    Binding                         = 'optional'
    MaxFailure                      = '0'
    MaxConnections                  = '1'
    ReopenSecs                      = '300'
    NetTimeout                      = '30'
    RedoCompression                 = 'DISABLE'
    LogShipping                     = 'ON'
    PreferredApplyInstance          = ''
    ApplyInstanceTimeout            = '0'
    ApplyParallel                   = 'AUTO'
    StandbyFileManagement           = 'AUTO'
    ArchiveLagTarget                = '0'
    LogArchiveMaxProcesses          = '4'
    LogArchiveMinSucceedDest        = '1'
    DbFileNameConvert               = '+data/sljj/datafile, /u01/app/oracle/oradata/sljj, +IMAGE/sljj/datafile, /u01/app/oracle/oradata/sljj'
    LogFileNameConvert              = '+REDO/sljj/onlinelog, /u01/app/oracle/oradata/sljj, +FRA/sljj/onlinelog, /u01/app/oracle/oradata/sljj'
    FastStartFailoverTarget         = ''
    InconsistentProperties          = '(monitor)'
    InconsistentLogXptProps         = '(monitor)'
    SendQEntries                    = '(monitor)'
    LogXptStatus                    = '(monitor)'
    RecvQEntries                    = '(monitor)'
    ApplyLagThreshold               = '0'
    TransportLagThreshold           = '0'
    TransportDisconnectedThreshold  = '30'
    SidName                         = 'sljj'
    StaticConnectIdentifier         = '(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=jcpt-database)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=sljj2dg_DGMGRL)(INSTANCE_NAME=sljj)(SERVER=DEDICATED)))'
    StandbyArchiveLocation          = '/u01/app/oracle/archivelog'
    AlternateLocation               = ''
    LogArchiveTrace                 = '0'
    LogArchiveFormat                = '%t_%s_%r.dbf'
    TopWaitEvents                   = '(monitor)'

Database Status:
ERROR

DGMGRL>
发现备库日志应用停止。

2.错误检查
主库检查命令
step 1.主库dg环境的保护模式检查

SQL> select db_unique_name,database_role, protection_mode,switchover_status from v$database;

DB_UNIQUE_NAME    DATABASE_ROLE     PROTECTION_MODE       SWITCHOVER_STATUS

---------------- ---------------- -------------------- --------------------

ORCL                PRIMARY            MAXIMUM PERFORMANCE  TO STANDBY
上述结果显示:主库db_unique_name为 SLJJ;角色为主库;保护模式为最大性能;切换状态为可以切备库。

step 2.主库上查看设置的归档日志路径是否可用

SQL> select dest_name,status,error from v$archive_dest;
该视图用户查看本地和远程的归档日志路径是否可用,如果远程的归档日志路径不可用,在ERROR列会有相应报错
step 3.主库上查看DG的状态信息

SQL> set linesize 300
SQL> set pagesize 1000
SQL> col message for a100
SQL> select to_char(timestamp,'DD-mm-YYYY HH24:MI:SS') time,message FROM v$dataguard_status;

......
MESSAGE
--------------------------------------------------------------------------------
MRP0: Background Media Recovery process shutdown
ARC3: Beginning to archive thread 1 sequence 78376 (22999090901-22999329239)
ARC3: Completed archiving thread 1 sequence 78376 (0-0)

256 rows selected.

SQL>
step 4.主库上查看DG环境进程的状态

SQL> select PROCESS,STATUS from v$managed_standby;

PROCESS   STATUS
--------- ------------
ARCH      CLOSING
ARCH      CLOSING
ARCH      CONNECTED
ARCH      CLOSING
RFS   IDLE
RFS   IDLE
RFS   IDLE
RFS   IDLE
RFS   IDLE
RFS   IDLE
RFS   IDLE

PROCESS   STATUS
--------- ------------
RFS   IDLE

12 rows selected.
ARCH进程:用于主库上复制redo log,从而生成归档日志,当前状态为CLOSING表示该进程目前正在复制 redo log,我们在参数文件中设置了该进程的数量上限是4个。
LNS进程:用于在主库上将主库的归档日志同步到备库上,将归档日志投递给备库上的RFS进程;lns从主库端日志缓冲区中读取相同的重做记录,通过oracle net服务传给备用数据库,备用数据库上的rfs接收重做数据,然后将其写入备用重做日志文件中。
备库检查命令
step 1.备库上查看DG环境特有进程的状态

SQL> SELECT PROCESS, STATUS, THREAD#, SEQUENCE#, BLOCK#, BLOCKS FROM V$MANAGED_STANDBY;
RFS进程:用于备库接收从主库LNS进程或ARCH进程投递过来的归档日志
ARCH:用于复制从主库上同步过来的归档日志
MRP0:用于应用归档日志
step 2.备库上查看DG环境的状态信息

SQL> set linesize 300
SQL> set pagesize 1000
SQL> col message for a100
SQL> select message_num,message from v$dataguard_status;
step 3. 备库端查看日志是否应用

SQL> select name,SEQUENCE#,APPLIED from v$archived_log order by sequence#;
如果发现备库归档日志的编号不连续,则需要到主库去对照主库的归档日志编号,找到主库上已经归档但却没有同步到备库上的那些归档日志手动拷贝过来,并将其注册到备库内,注册归档日志的命令如下所示:

SQL> alter database register physical logfile '/u01/app/oracle/archivelog/’
然后再重新开启备库的应用归档日志进程

step 4.备库上查看归档日志有没有断档

SQL> select * from v$archive_gap;
如果DG环境日志同步正常,则不会查到任何记录。如果查出结果,则说明目前的DG环境归档日志传递有断档。

3.解决办法
停止redo apply

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
oracle data guard 备库启停日志应用

dg broker 启用日志同步
DGMGRL> edit database sljj2dg set state='apply-on';
Succeeded.
DGMGRL>
在Dataguard的备库上应用日志的时候,通常有两个语句,但是这两个语句是有区别的,一个是实时应用,一个是非实时应用。
alter database recover managed standby database disconnect from session;(非实时应用)
alter database recover managed standby database using current logfile disconnect;(实时应用)
启用日志应用,该问题未得到解决。查看告警日志如下:

<msg time='2025-05-26T09:13:51.491+08:00' org_id='oracle' comp_id='rdbms'
client_id='' type='UNKNOWN' level='16'
host_id='jcpt-database' host_addr='92.236.125.173' module=''
pid='27957'>
<txt>Errors in file /u01/app/oracle/diag/rdbms/sljj2dg/sljj/trace/sljj_dbw0_27957.trc:
ORA-01186: file 334 failed verification tests
ORA-01157: cannot identify/lock data file 334 - see DBWR trace file
ORA-01111: name for data file 334 is unknown - rename to correct file
ORA-01110: data file 334: &apos;/u01/app/oracle/product/11.2.0/dbhome_1/dbs/UNNAMED00334&apos;
</txt>
</msg>
<msg time='2025-05-26T09:13:51.491+08:00' org_id='oracle' comp_id='rdbms'
client_id='' type='UNKNOWN' level='16'
host_id='jcpt-database' host_addr='92.236.125.173' module=''
pid='27957'>
<txt>File 334 not verified due to error ORA-01157
</txt>
</msg>
<msg time='2025-05-26T09:13:51.491+08:00' org_id='oracle' comp_id='rdbms'
client_id='' type='UNKNOWN' level='16'
host_id='jcpt-database' host_addr='92.236.125.173' module=''
pid='27957'>
<txt>Errors in file /u01/app/oracle/diag/rdbms/sljj2dg/sljj/trace/sljj_dbw0_27957.trc:
ORA-01186: file 2001 failed verification tests
ORA-01157: cannot identify/lock data file 2001 - see DBWR trace file
ORA-01110: data file 2001: &apos;+DATA&apos;
</txt>
</msg>
<msg time='2025-05-26T09:13:51.491+08:00' org_id='oracle' comp_id='rdbms'
client_id='' type='UNKNOWN' level='16'
host_id='jcpt-database' host_addr='92.236.125.173' module=''
pid='27957'>
<txt>File 2001 not verified due to error ORA-01157
</txt>
</msg>
<msg time='2025-05-26T09:13:55.996+08:00' org_id='oracle' comp_id='rdbms'
client_id='' type='UNKNOWN' level='16'
host_id='jcpt-database' host_addr='92.236.125.173' module=''
pid='2823'>
<txt>MRP0: Background Media Recovery terminated with error 1111
</txt>
</msg>
<msg time='2025-05-26T09:13:55.996+08:00' org_id='oracle' comp_id='rdbms'
client_id='' type='UNKNOWN' level='16'
host_id='jcpt-database' host_addr='92.236.125.173' module=''
pid='2823'>
<txt>Errors in file /u01/app/oracle/diag/rdbms/sljj2dg/sljj/trace/sljj_pr00_2823.trc:
ORA-01111: name for data file 334 is unknown - rename to correct file
ORA-01110: data file 334: &apos;/u01/app/oracle/product/11.2.0/dbhome_1/dbs/UNNAMED00334&apos;
ORA-01157: cannot identify/lock data file 334 - see DBWR trace file
ORA-01111: name for data file 334 is unknown - rename to correct file
ORA-01110: data file 334: &apos;/u01/app/oracle/product/11.2.0/dbhome_1/dbs/UNNAMED00334&apos;
</txt>
</msg>
出现问题,描述如下:
根据报错信息可以初步判断334号数据文件没有创建成功,也就是主库添加的数据文件在备库创建失败。

4.解决问题
step 1.停止redo apply

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL
*
ERROR at line 1:
ORA-16136: Managed Standby Recovery not active

SQL>
由于该问题,导致日志应用无法正常启动。

step 2.将备库启动到mount状态

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

NAME      OPEN_MODE        DATABASE_ROLE
--------- -------------------- ----------------
SLJJ      MOUNTED          PHYSICAL STANDBY

SQL>
step 3.将standby_file_management改为 manual

SQL> alter system set standby_file_management=manual;

System altered.

SQL> show parameter standby

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
standby_archive_dest                 string      ?/dbs/arch
standby_file_management              string      MANUAL

step 4.主库检查334号数据文件

SQL> select file#,name from v$datafile where file#=334;

     FILE#          NAME
--------------------------------------------------------------------------------
       334          +FRA/sljj/datafile/rm_index.12427.1198592895
      

SQL>
step 5.备库使用create datafile as方式创建数据文件

SQL> select file#,name from v$datafile where file#=334;


     FILE#          NAME
--------------------------------------------------------------------------------
       334          /u01/app/oracle/product/11.2.0/dbhome_1/dbs/UNNAMED00334

SQL>

SQL> alter database create datafile '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/UNNAMED00334' as '/u01/app/oracle/oradata/sljj/rm_index.12427.1198592895';

Database altered.

SQL> select file#,name from v$datafile where file#=334;

     FILE#    NAME
--------------------------------------------------------------------------------
       334    /u01/app/oracle/oradata/sljj/rm_index.12427.1198592895

SQL>
step 6.修改standby_file_management参数为auto

SQL> alter system set standby_file_management=auto;

System altered.

SQL> show parameter standby

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
standby_archive_dest                 string      ?/dbs/arch
standby_file_management              string      AUTO
step 7.开启MRP,检查数据同步情况

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

Database altered.
step 8.查看日志应用进程

SQL> select process,status,thread#,sequence#,block# from v$managed_standby;

PROCESS   STATUS      THREAD#  SEQUENCE#     BLOCK#
--------- ------------ ---------- ---------- ----------
ARCH      CLOSING       1      78391     522240
ARCH      CLOSING       1      78392     624640
ARCH      CONNECTED     0      0          0
ARCH      CLOSING       2      28925     325632
RFS   IDLE          0      0          0
RFS   IDLE          0      0          0
RFS   WRITING       1      78393     280347
RFS   WRITING       2      28926     386394
RFS   IDLE          0      0          0
RFS   IDLE          0      0          0
MRP0      APPLYING_LOG      1      70176     624390

11 rows selected.

SQL>
复制
至此,日志应用开始。


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|重庆思庄Oracle、Redhat认证学习论坛 ( 渝ICP备12004239号-4 )

GMT+8, 2026-5-1 05:13 , Processed in 0.227776 second(s), 21 queries .

重庆思庄学习中心论坛-重庆思庄科技有限公司论坛

© 2001-2020

快速回复 返回顶部 返回列表