签到成功

知道了

CNDBA社区CNDBA社区

Oracle 19.14 启动报 ORA-38760 ORA-38780 错误解决方法

2022-02-09 18:59 2149 0 原创 Oracle 19c
作者: dave

升级Oracle 19c 环境时,执行datapatch 脚本前启动数据库报错。

http://www.cndba.cn/dave/article/106633

因为之前升级时OS 磁盘空间不足,所以在物理上删除了闪回目录下的文件。

http://www.cndba.cn/dave/article/106633

在执行startup 时报错如下:

ORA-38760: This database instance failed to turn on flashback databasehttp://www.cndba.cn/dave/article/106633

[dave@www.cndba.cn  u01]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Wed Feb 9 17:48:40 2022
Version 19.14.0.0.0

Copyright (c) 1982, 2021, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> startup
ORACLE instance started.

Total System Global Area 1543500824 bytes
Fixed Size                  9135128 bytes
Variable Size            1207959552 bytes
Database Buffers          318767104 bytes
Redo Buffers                7639040 bytes
Database mounted.
ORA-38760: This database instance failed to turn on flashback database


SQL> alter pluggable database all open;
alter pluggable database all open
*
ERROR at line 1:
ORA-01109: database not open


SQL> !oerr ora 38760
38760, 00000, "This database instance failed to turn on flashback database"
// *Cause: Database flashback is on but this instance failed to
//         start generating flashback data. Look in alert log for more
//         specific errors.
// *Action: Correct the error or turn off database flashback.

这个错误如果是非CDB 环境解决其实非常简单,直接关闭闪回数据库即可,但我们这里是19C 的CDB 环境,关闭依旧报错,如下:

SQL> alter database flashback off;

Database altered.

SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-38760: This database instance failed to turn on flashback database

这里实际上还是因为之前的还原点导致的问题:http://www.cndba.cn/dave/article/106633


SQL>  select flashback_on from v$database;

FLASHBACK_ON
------------------------------------------------------
RESTORE POINT ONLY

SQL> select * from v$restore_point;
select * from v$restore_point
              *
ERROR at line 1:
ORA-38701: Flashback database log 1 seq 1 thread 1:
"/u01/app/oracle/fast_recovery_area/CNDBA/flashback/o1_mf_jm600lwy_.flb"
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 7

SQL> col name for a30
SQL> select NAME,SCN,GUARANTEE_FLASHBACK_DATABASE,DATABASE_INCARNATION# from v$restore_point;

NAME                                  SCN GUARANTEE DATABASE_INCARNATION#
------------------------------ ---------- --------- ---------------------
BEFORE_UPGRADE                    6155158 YES                           2
MYPDB_GRP_BEFORE_UPGRADE          6157542 YES                           2
FS_UPDATE                         6061562 NO                            2
CDB_BEFORE_UPGRADE                6137797 NO                            2
BEFORE_PATCHING1                  6156151 NO                            2
MYPDB_BEFORE_PATCHING             6157517 NO                            2

6 rows selected.

通过查询我们这里有2个受保护的还原点,只要删除这2个还原点,就可以解决问题:http://www.cndba.cn/dave/article/106633

SQL> drop restore point BEFORE_UPGRADE;
drop restore point BEFORE_UPGRADE
*
ERROR at line 1:
ORA-38780: Restore point 'BEFORE_UPGRADE' does not exist.

但是删除的时候,报还原点不存在,实际上这2个还原点是存在的。


SQL> desc v$restore_point;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 SCN                                                NUMBER
 DATABASE_INCARNATION#                              NUMBER
 GUARANTEE_FLASHBACK_DATABASE                       VARCHAR2(3)
 STORAGE_SIZE                                       NUMBER
 TIME                                               TIMESTAMP(9)
 RESTORE_POINT_TIME                                 TIMESTAMP(9)
 PRESERVED                                          VARCHAR2(3)
 NAME                                               VARCHAR2(128)
 PDB_RESTORE_POINT                                  VARCHAR2(3)
 CLEAN_PDB_RESTORE_POINT                            VARCHAR2(3)
 PDB_INCARNATION#                                   NUMBER
 REPLICATED                                         VARCHAR2(3)
 CON_ID                                             NUMBER

继续查询,我们发现这2个还原点是PDB的:http://www.cndba.cn/dave/article/106633http://www.cndba.cn/dave/article/106633

SQL> set lines 150
SQL> select NAME,SCN,GUARANTEE_FLASHBACK_DATABASE,DATABASE_INCARNATION# ,pdb_restore_point,con_id from v$restore_point;


NAME                                  SCN GUARANTEE DATABASE_INCARNATION# PDB_RESTO     CON_ID
------------------------------ ---------- --------- --------------------- --------- ----------
BEFORE_UPGRADE                    6155158 YES                           2 YES                3
MYPDB_GRP_BEFORE_UPGRADE          6157542 YES                           2 YES                3
FS_UPDATE                         6061562 NO                            2 YES                3
CDB_BEFORE_UPGRADE                6137797 NO                            2 NO                 0
BEFORE_PATCHING1                  6156151 NO                            2 NO                 0
MYPDB_BEFORE_PATCHING             6157517 NO                            2 YES                3

6 rows selected.

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       MOUNTED
         3 DAVE                           MOUNTED
         4 USTC                           MOUNTED
SQL>

切换PDB 后,继续删除:

http://www.cndba.cn/dave/article/106633
http://www.cndba.cn/dave/article/106633

SQL> alter session set container=DAVE;

Session altered.

SQL> drop restore point BEFORE_UPGRADE;
drop restore point BEFORE_UPGRADE
*
ERROR at line 1:
ORA-38701: Flashback database log 1 seq 1 thread 1: "/u01/app/oracle/fast_recovery_area/CNDBA/flashback/o1_mf_jm600lwy_.flb"
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 7

这里报了ORA-38701的错误,但是实际上,这里是删除成功了的:http://www.cndba.cn/dave/article/106633

SQL> drop restore point BEFORE_UPGRADE;
drop restore point BEFORE_UPGRADE
*
ERROR at line 1:
ORA-38780: Restore point 'BEFORE_UPGRADE' does not exist.


SQL>  select NAME,SCN,GUARANTEE_FLASHBACK_DATABASE,DATABASE_INCARNATION# ,pdb_restore_point,con_id from v$restore_point;

NAME                                  SCN GUARANTEE DATABASE_INCARNATION# PDB_RESTO     CON_ID
------------------------------ ---------- --------- --------------------- --------- ----------
MYPDB_GRP_BEFORE_UPGRADE          6157542 YES                           2 YES                3
FS_UPDATE                         6061562 NO                            2 YES                3
CDB_BEFORE_UPGRADE                6137797 NO                            2 NO                 0
BEFORE_PATCHING1                  6156151 NO                            2 NO                 0
MYPDB_BEFORE_PATCHING             6157517 NO                            2 YES                3

删除另外一个还原点:

SQL> drop restore point MYPDB_GRP_BEFORE_UPGRADE;

Restore point dropped.

SQL>  select NAME,SCN,GUARANTEE_FLASHBACK_DATABASE,DATABASE_INCARNATION# ,pdb_restore_point,con_id from v$restore_point;

NAME                                  SCN GUARANTEE DATABASE_INCARNATION# PDB_RESTO     CON_ID
------------------------------ ---------- --------- --------------------- --------- ----------
FS_UPDATE                         6061562 NO                            2 YES                3
CDB_BEFORE_UPGRADE                6137797 NO                            2 NO                 0
BEFORE_PATCHING1                  6156151 NO                            2 NO                 0
MYPDB_BEFORE_PATCHING             6157517 NO                            2 YES                3

SQL>

重启启动数据库成功:

[dave@www.cndba.cn  33515361]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Wed Feb 9 18:42:01 2022
Version 19.14.0.0.0

Copyright (c) 1982, 2021, Oracle.  All rights reserved.


Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.14.0.0.0

SQL>  alter database flashback off;

Database altered.

SQL> alter database open;

Database altered.

SQL> alter pluggable database all open;

Pluggable database altered.

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 DAVE                           READ WRITE NO
         4 USTC                           READ WRITE NO
SQL>

实际上,这个问题还有另外一种方法,因为还原点的信息是记录在控制文件里的,也可以尝试直接重建控制文件来解决。 这里不再测试。

版权声明:本文为博主原创文章,未经博主允许不得转载。

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
dave

dave

关注

人的一生应该是这样度过的:当他回首往事的时候,他不会因为虚度年华而悔恨,也不会因为碌碌无为而羞耻;这样,在临死的时候,他就能够说:“我的整个生命和全部精力,都已经献给世界上最壮丽的事业....."

  • 2261
    原创
  • 3
    翻译
  • 578
    转载
  • 191
    评论
  • 访问:7967492次
  • 积分:4346
  • 等级:核心会员
  • 排名:第1名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ