IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Oracle RAC镜像恢复的单实例数据库Redo日志增量抽取报错: ORA-01291 & 删除日志组报错: ORA-01567 -> 正文阅读

[大数据]Oracle RAC镜像恢复的单实例数据库Redo日志增量抽取报错: ORA-01291 & 删除日志组报错: ORA-01567


Oracle RAC镜像恢复的单实例数据库Redo日志增量抽取报错: ORA-01291 & 删除日志组报错: ORA-01567

今天碰到一个Oracle单实例数据库,是Oracle 12c RAC环境(2节点)克隆出来的一套单实例数据库,在进行Redo日志增量抽取时遇到报错:ORA-01291: missing logfile
结果查看日志组信息,发现是日志组还存在2个节点的原因导致的,排查过程及信息如下:

首先确认当前在哪个数据库中:
select sys_context ('USERENV', 'CON_NAME') from dual;?

如果是在CDB中会返回CDB容器名(CDB$ROOT),可以继续执行下面命令查看pdb:select con_id,dbid,NAME,OPEN_MODE from v$pdbs;
如果是在PDB中会返回 PDB容器名(例如:PDBORCL),切换容器可以用命令(alter session set container=容器名)
如果是在单实例数据库中会返回实例名(例如:ORCL)


查看当前日志组成员:
SQL> select member from v$logfile;

MEMBER
--------------------------------------------------------------------------------
/data1/oradata121/datafile/sjzy/SJZY/onlinelog/o1_mf_3_kdyz0m6q_.log
/data1/oradata121/datafile/sjzy/SJZY/onlinelog/o1_mf_2_kdyz0dq9_.log
/data1/oradata121/datafile/sjzy/SJZY/onlinelog/o1_mf_1_kdyz069k_.log
/data1/oradata121/datafile/sjzy/SJZY/onlinelog/o1_mf_4_kdyz0wo8_.log
/data1/oradata121/datafile/sjzy/SJZY/onlinelog/o1_mf_5_kdyz1634_.log


查看当前日志组状态:
SQL> select group#,members,bytes/1024/1024,status from v$log;

? ? GROUP# ? ?MEMBERS BYTES/1024/1024 ?STATUS
---------- ---------- --------------------------

?? ? 1?? ? ? ?1?? ??? ? ?256 ? ?INACTIVE

?? ? 2?? ? ? ?1?? ??? ? ?256 ? ?CURRENT

?? ? 3?? ? ? ?1?? ??? ? ?256 ? ?INACTIVE

? ? GROUP# ? ?MEMBERS BYTES/1024/1024 ? ?STATUS
---------- ---------- --------------------------

?? ? 4?? ? ? ?1?? ??? ? ?256 ? ?INACTIVE

?? ? 5?? ? ? ?1?? ??? ? ?256 ? ?UNUSED

查看当前日志组的状态、完整信息(包括THREAD节点信息):
SQL> select * from v$log;

? ? GROUP# ? ?THREAD# ?SEQUENCE# ? ? ?BYTES ?BLOCKSIZE?? ? ?MEMBERS ARCHIVED ?STATUS ? ?FIRST_CHANGE# FIRST_TIME ?NEXT_CHANGE# NEXT_TIME ?CON_ID
---------- ---------- ---------- ---------- ---------- ---------- ------------------- ---------- ---------- ---------- ---------- ----------

?? ? 1?? ? ? ?1?? ? ? ? ?28 ?268435456?? ? ? 512?? ??? ?1 YES ?INACTIVE?? ??? ??? ??? ??? ? ? ?4.8522E+10 17-JUL-22 ?4.8522E+10 17-JUL-22?? ??? ? ? ? ?0
?? ? 2?? ? ? ?1?? ? ? ? ?29 ?268435456?? ? ? 512?? ??? ?1 NO ? CURRENT ?? ??? ??? ??? ??? ? ? ?4.8522E+10 17-JUL-22 ?2.8147E+14?? ??? ??? ? ? ? ?0

? ? GROUP# ? ?THREAD# ?SEQUENCE# ? ? ?BYTES ?BLOCKSIZE?? ? ?MEMBERS ARCHIVED ?STATUS ? ?FIRST_CHANGE# FIRST_TIME ?NEXT_CHANGE# NEXT_TIME ?CON_ID
---------- ---------- ---------- ---------- ---------- ---------- ------------------- ---------- ---------- ---------- ---------- ----------

?? ? 3?? ? ? ?1?? ? ? ? ?27 ?268435456?? ? ? 512?? ??? ?1 YES ?INACTIVE?? ??? ??? ??? ??? ? ? ?4.8522E+10 17-JUL-22 ?4.8522E+10 17-JUL-22?? ??? ? ? ? ?0

?? ? 4?? ? ? ?2?? ? ? ? ? 1 ?268435456?? ? ? 512?? ??? ?1 YES INACTIVE?? ??? ??? ??? ??? ? ? ?4.8522E+10 14-JUL-22 ?4.8522E+10 14-JUL-22?? ??? ? ? ? ?0

? ? GROUP# ? ?THREAD# ?SEQUENCE# ? ? ?BYTES ?BLOCKSIZE?? ? ?MEMBERS ARCHIVED ?STATUS ? ?FIRST_CHANGE# FIRST_TIME ?NEXT_CHANGE# NEXT_TIME ?CON_ID
---------- ---------- ---------- ---------- ---------- ---------- ------------------- ---------- ---------- ---------- ---------- ----------

?? ? 5?? ? ? ?2?? ? ? ? ? 0 ?268435456?? ? ? 512?? ??? ?1 YES ?UNUSED?? ??? ??? ??? ??? ??? ??? ? ? ? 0?? ? ? 0?? ??? ??? ? ? ? ?0

SQL>?


也可以执行:
SQL> SELECT SEQUENCE# AS SEQ,FIRST_CHANGE#,NEXT_CHANGE#,STATUS,V$DATABASE.CURRENT_SCN,THREAD# FROM V$LOG OUTER JOIN V$DATABASE ON 1=1 ?ORDER BY SEQUENCE# DESC;


确定了 THREAD=2 (logfile group 4 和 logfile group 5)的日志组可以删除 (从Oracle RAC镜像过来的节点,节点2已结不在了)
通过单节点上进行日志文件切换时(alter system switch logfile;),只会在 logfile group 1、2、3 这三个日志组质检循环切换,
不会切换到4和5上,4和5对应的节点THREAD=2节点已不在了


尝试直接删除THREAD=2对应的日志文件组 4 和 5:
alter database drop logfile group 4;
alter database drop logfile group 5;

结果执行报错:
SQL> alter database drop logfile group 4;
alter database drop logfile group 4
*
ERROR at line 1:
ORA-01623: log 4 is current log for instance sjzy2 (thread 2) - cannot drop
ORA-00312: online log 4 thread 2:
'/data1/oradata121/datafile/sjzy/SJZY/onlinelog/o1_mf_4_kdyz0wo8_.log'

SQL> alter database drop logfile group 5; ??
alter database drop logfile group 5
*
ERROR at line 1:
ORA-01567: dropping log 5 would leave less than 2 log files for instance sjzy2
(thread 2)
ORA-00312: online log 5 thread 2:
'/data1/oradata121/datafile/sjzy/SJZY/onlinelog/o1_mf_5_kdyz1634_.log'

删除时提示数据库实例的日志文件组不能少于2个,就剩2个的时候,无法删除了。这是Oracle Redo的机制,每个节点不能少于2个日志组,如果少于2个日志无法切换了。

解决方法很简单,直接把下线的节点2剔除掉(disable)、然后再删除对应的日志文件组:
alter database disable THREAD 2;
alter database drop logfile group 4;
alter database drop logfile group 5;

OK,删除成功了。

ls -l /data1/oradata121/datafile/sjzy/SJZY/onlinelog/o1_mf_4_kdyz0wo8_.log
ls -l /data1/oradata121/datafile/sjzy/SJZY/onlinelog/o1_mf_5_kdyz1634_.log
确认一下,如果日志文件没有自动删除,就手动删除掉
rm -rf /data1/oradata121/datafile/sjzy/SJZY/onlinelog/o1_mf_4_kdyz0wo8_.log
rm -rf /data1/oradata121/datafile/sjzy/SJZY/onlinelog/o1_mf_5_kdyz1634_.log

再尝试重新Redo日志增量抽取,成功了,原来的报错问题也解决了。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-07-21 21:37:17  更:2022-07-21 21:38:23 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 0:31:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码