DG数据同步是基于日志流的,这也是为什么在配置DG阶段需要将主库设置为FORCE LOGGING的原因。 但是,这也会带来很多问题,例如,会导致DML类型的SQL执行效率变慢,尤其在大批量数据更新或导入的时候显得尤为明显。 DBA在使用数据泵进行迁移时希望在最少停机时间内完成,这时候就可能会考虑到以最小日志导入的方式以加快导入速度, 然后重新同步备库。在这些场景中,DBA可能会使用NOLOGGING操作去节省大量数据插入的时间, 而这种操作所带来的问题就是,如果该库在有备库的情况下,因为主库的NOLOGGING插入操作不会生成Redo, 所以不会在备库上传输和应用,这会导致备库的数据出现问题,报ORA-01578和ORA-26040的错误。 模拟测试恢复: prod为primary database stddb为standby database 在一个具有主备关系的主库上 将FORCE_LOGGING设置为NOLOGGING模式: SYS@prod>alter database no force logging; HR@prod>create table test as select * from employees; 进行自插入构造数据 HR@prod>insert /+APPEND/ into test select * from test; HR@prod>commit; HR@prod>insert /+APPEND/ into test select * from test; HR@prod>commit; HR@prod>insert /+APPEND/ into test select * from test; HR@prod>commit; HR@prod>insert /+APPEND/ into test select * from test; HR@prod>commit; 在备库执行查询操作: SYS@stddb>select count() from hr.test; select count() from hr.test * ERROR at line 1: ORA-01578: ORACLE data block corrupted (file # 4, block # 669) ORA-01110: data file 4: ‘/u01/app/oracle/oradata/stddb/users01.dbf’ ORA-26040: Data block was loaded using the NOLOGGING option 解决办法: 将包含缺少数据的数据文件从主库复制到物理备库再重命名数据文件来解决问题。 主库查询: SYS@prod>select name,unrecoverable_change# from v$datafile; /u01/app/oracle/oradata/prod/users01.dbf 1151089 SYS@stddb>select name,unrecoverable_change# from v$datafile; /u01/app/oracle/oradata/stddb/users01.dbf 0 比较主数据库和备用数据库的查询结果: 在以上两个查询结果中,比较UNRECOVERABLE_CHANGE#列的值。 如果主库中UNRECOVERABLE_CHANGE#列的值大于备库中的同一列,那么需要将这些数据文件在备库恢复。 将主库对应的数据文件拷贝至备库: SYS@prod>ALTER TABLESPACE USERS BEGIN BACKUP; [oracle@service1 prod]$ cp users01.dbf /tmp/ SYS@prod> ALTER TABLESPACE USERS END BACKUP; [oracle@service1 tmp]$ scp users01.dbf 192.168.1.104:/home/oracle/ SYS@prod>ALTER TABLESPACE USERS END BACKUP; 在备库上,将旧的数据文件RENAME至新的数据文件: 由于主备数据文件名字相同,将从主库传输过来的数据文件改个名 [oracle@service2 ~]$ mv users01.dbf users02.dbf [oracle@service2 ~]$ cp users02.dbf /u01/app/oracle/oradata/stddb/ SYS@stddb>alter database recover managed standby database cancel; SYS@stddb>startup force mount; SYS@stddb>alter system set standby_file_management=manual; #在备库执行RENAME操作时,需要此参数为MANUAL SYS@stddb>alter database rename file ‘/u01/app/oracle/oradata/stddb/users01.dbf’ to ‘/u01/app/oracle/oradata/stddb/users02.dbf’; SYS@stddb>alter system set standby_file_management=auto; SYS@stddb>alter database open; SYS@stddb>alter databsae recover managed standby database using current logfile disconnect from session; SYS@stddb>select count(*) from hr.test; COUNT(*) 1712
Oracle 修复由于主库NOLOGGING引起的备库ORA-01578和ORA-26040错误
来源:这里教程网
时间:2026-03-03 15:47:01
作者:
编辑推荐:
- Oracle 修复由于主库NOLOGGING引起的备库ORA-01578和ORA-26040错误03-03
- Oracle undo表空间文件丢失情况案例汇总03-03
- Oracle 12.2应用PSU后数据库无法启动03-03
- 如何同步多家自媒体?方法工具篇03-03
- 比较好用的新媒体账号一键管理第三方应用03-03
- 多个小红书一起登陆,用这个工具就够了!03-03
- oracle trouble shooting 时看 call stack03-03
- ORA-00600: internal error code, arguments: [kcratr_scan_lastbwr]逻辑坏块解决03-03
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- 如何同步多家自媒体?方法工具篇
如何同步多家自媒体?方法工具篇
26-03-03 - 比较好用的新媒体账号一键管理第三方应用
比较好用的新媒体账号一键管理第三方应用
26-03-03 - 多个小红书一起登陆,用这个工具就够了!
多个小红书一起登陆,用这个工具就够了!
26-03-03 - oracle trouble shooting 时看 call stack
- 有没有好用的自媒体账号批量发文章小工具?
有没有好用的自媒体账号批量发文章小工具?
26-03-03 - 多个百家号怎么批量登陆?怎么一次性登录多个百家号?
多个百家号怎么批量登陆?怎么一次性登录多个百家号?
26-03-03 - 手工创建Oracle 11g数据库
手工创建Oracle 11g数据库
26-03-03 - oracle 19c 初体验
oracle 19c 初体验
26-03-03 - 有什么一键分发的自媒体工具吗?我来教你操作,很简单
有什么一键分发的自媒体工具吗?我来教你操作,很简单
26-03-03 - 自媒体一键分发哪个平台好?线上用户30万,这个平台强烈推荐
自媒体一键分发哪个平台好?线上用户30万,这个平台强烈推荐
26-03-03
