Oracle Database 19c 意外断电,启动报错ORA-00312
尝试正常通过 alter database clear logfile 命令修复丢失的重做日志文件,失败;
clear命令无法对ACTIVE和CURRENT状态的redo日志进行清除;
SQL> select group#,thread#,sequence#,members,archived,status from v$log;
GROUP# THREAD# SEQUENCE# MEMBERS ARC STATUS
---------- ---------- ---------- ---------- --- ----------------
1 1 4 1 NO CURRENT
2 1 2 1 NO INACTIVE
3 1 3 1 NO INACTIVE
且数据库非归档;
SQL> archive log list;
数据库日志模式 非存档模式
自动存档 禁用
存档终点 /opt/oracle/product/19c/dbhome_1/dbs/arch
最早的联机日志序列 2
当前日志序列 4
SQL>
ALTER DATABASE MOUNT
2024-09-23T12:02:51.757655+08:00
Using default pga_aggregate_limit of 16112 MB
2024-09-23T12:02:53.352811+08:00
.... (PID:9837): Redo network throttle feature is disabled at mount time
2024-09-23T12:02:53.360557+08:00
Successful mount of redo thread 1, with mount id 2951532777
2024-09-23T12:02:53.361013+08:00
Database mounted in Exclusive Mode
Lost write protection disabled
.... (PID:9837): Using STANDBY_ARCHIVE_DEST parameter default value as /opt/oracle/product/19c/dbhome_1/dbs/arch [krsd.c:18141]
Completed: ALTER DATABASE MOUNT
2024-09-23T12:03:04.382387+08:00
alter database clear unarchived logfile '/opt/oracle/oradata/ORCLCDB/redo01.log'
ORA-1624 signalled during: alter database clear unarchived logfile '/opt/oracle/oradata/ORCLCDB/redo01.log'...
2024-09-23T12:03:04.424262+08:00
Errors in file /opt/oracle/diag/rdbms/orclcdb/ORCLCDB/trace/ORCLCDB_mz00_9861.trc:
ORA-00312: online log 1 thread 1: '/opt/oracle/oradata/ORCLCDB/redo01.log'
2024-09-23T12:03:04.550360+08:00
Errors in file /opt/oracle/diag/rdbms/orclcdb/ORCLCDB/trace/ORCLCDB_mz00_9861.trc:
ORA-00312: online log 2 thread 1: '/opt/oracle/oradata/ORCLCDB/redo02.log'
2024-09-23T12:03:14.511680+08:00
alter database clear logfile '/opt/oracle/oradata/ORCLCDB/redo01.log'
ORA-1624 signalled during: alter database clear logfile '/opt/oracle/oradata/ORCLCDB/redo01.log'...
2024-09-23T12:03:47.030949+08:00
alter database clear unarchived logfile '/opt/oracle/oradata/ORCLCDB/redo02.log'
ORA-1624 signalled during: alter database clear unarchived logfile '/opt/oracle/oradata/ORCLCDB/redo02.log'...
2024-09-23T12:04:09.827646+08:00
alter database open
2024-09-23T12:04:09.863577+08:00
Ping without log force is disabled:
alter database open resetlogs失败;
SQL> select open_mode from v$database;
OPEN_MODE
--------------------
MOUNTED
SQL>
SQL>
SQL> recover database until cancel;
ORA-00279: 更改 18168502601151 (在 09/16/2024 16:25:04 生成) 对于线程 1
是必需的
ORA-00289: 建议: /opt/oracle/product/19c/dbhome_1/dbs/arch1_3370_1168520910.dbf
ORA-00280: 更改 18168502601151 (用于线程 1) 在序列 #3370 中
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
CANCEL
ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below
ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: data file 1: '/opt/oracle/oradata/ORCLCDB/system01.dbf'
ORA-01112: 未启动介质恢复
SQL> alter database open;
alter database open
*
第 1 行出现错误:
ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项
SQL> alter database open resetlogs;
alter database open resetlogs
*
第 1 行出现错误:
ORA-00603: ORACLE server session terminated by fatal error
ORA-01092: ORACLE instance terminated. Disconnection forced
ORA-00704: bootstrap process failure
ORA-00600: internal error code, arguments: [kcbzib_kcrsds_1], [], [], [], [],
[], [], [], [], [], [], []
进程 ID: 13580
会话 ID: 738 序列号: 34669
SQL> select open_mode from v$database;
ERROR:
ORA-03114: 未连接到 ORACLE
重建undo表空间,数据库正常启动:
ORA-00600: internal error code, arguments: [4194], [64], [16], [], [], [], [], [], [], [], [], []
vim pfile0923.ora
undo_management=manual
event='10513 trace name context forever, level 2'
event="21307096 trace name context forever, level 3"
_allow_resetlogs_corruption=TRUE
_allow_error_simulation=TRUE
SQL> startup restrict pfile='/home/oracle/pfile0923.ora';
ORACLE 例程已经启动。
Total System Global Area 2.5367E+10 bytes
Fixed Size 16228104 bytes
Variable Size 6241124352 bytes
Database Buffers 1.9059E+10 bytes
Redo Buffers 50880512 bytes
数据库装载完毕。
数据库已经打开。
SQL> select tablespace_name,status,segment_name from dba_rollback_segs where status !='OFFLINE';
TABLESPACE_NAME STATUS SEGMENT_NAME
------------------------------ ---------------- ------------------------------
SYSTEM ONLINE SYSTEM
SQL> create undo tablespace undotbs2 datafile '/opt/oracle/oradata/ORCLCDB/undotbs02.dbf' size 2G;
表空间已创建。
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount;
ORACLE 例程已经启动。
Total System Global Area 2.5367E+10 bytes
Fixed Size 16228104 bytes
Variable Size 6241124352 bytes
Database Buffers 1.9059E+10 bytes
Redo Buffers 50880512 bytes
数据库装载完毕。
SQL> alter system set undo_tablespace=undotbs2 scope=spfile;
系统已更改。
SQL> shutdown immediate;
ORA-01109: 数据库未打开
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> SQL> SQL>
SQL>
SQL>
SQL> startup;
ORACLE 例程已经启动。
Total System Global Area 2.5367E+10 bytes
Fixed Size 16228104 bytes
Variable Size 6241124352 bytes
Database Buffers 1.9059E+10 bytes
Redo Buffers 50880512 bytes
数据库装载完毕。
数据库已经打开。
SQL> select tablespace_name,status,segment_name from dba_rollback_segs where status !='OFFLINE';
TABLESPACE_NAME STATUS SEGMENT_NAME
------------------------------ ---------------- ------------------------------
SYSTEM ONLINE SYSTEM
UNDOTBS2 ONLINE _SYSSMU25_3192300759$
UNDOTBS2 ONLINE _SYSSMU26_206110434$
UNDOTBS2 ONLINE _SYSSMU27_2898383869$
UNDOTBS2 ONLINE _SYSSMU28_3571771400$
UNDOTBS2 ONLINE _SYSSMU29_2000331538$
UNDOTBS2 ONLINE _SYSSMU30_2539881592$
UNDOTBS2 ONLINE _SYSSMU31_4041163512$
UNDOTBS2 ONLINE _SYSSMU32_4009460651$
UNDOTBS2 ONLINE _SYSSMU33_3635038207$
UNDOTBS2 ONLINE _SYSSMU34_654824878$
TABLESPACE_NAME STATUS SEGMENT_NAME
------------------------------ ---------------- ------------------------------
UNDOTBS2 ONLINE _SYSSMU35_692007111$
UNDOTBS2 ONLINE _SYSSMU36_4021360503$
UNDOTBS2 ONLINE _SYSSMU37_3779409589$
已选择 14 行。
SQL> drop tablespace undotbs1 including contents and datafiles;
表空间已删除。
SQL> select open_mode from v$database;
OPEN_MODE
--------------------
READ WRITE
SQL>