首页 > 数据库 >ORACLE还原恢复启动时数据库报ORA-00704, ORA-00604, ORA-00904

ORACLE还原恢复启动时数据库报ORA-00704, ORA-00604, ORA-00904

时间:2023-04-13 21:34:25浏览次数:38  
标签:00904 opt 00604 数据库 Oracle ORACLE ID ORA

Oracle数据库还原恢复后,执行alter database open resetlogs时遇到下面错误。如下所示:

SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:
ORA-00603: ORACLE server session terminated by fatal error
ORA-01092: ORACLE instance terminated. Disconnection forced
ORA-00704: bootstrap process failure
ORA-00604: error occurred at recursive SQL level 1
ORA-00904: "I"."UNUSABLEBEGINNING#": invalid identifier
Process ID: 19288
Session ID: 2 Serial number: 4441

刚开始有点懵的,第一次遇到这种情形。不过搜索了一下metalink相关资料后,大致了解到是因为环境变量设置有误导致这些错误出现的。这里先介绍一下这个案例的复杂背景:

当前机器为一个测试服务器(UAT环境),操作系统版本为HP-UX,数据库版本Oracle 19c,然后因为Support人员要查找历史数据,需要还原一个2020年时间点的数据库备份。但是生产环境(PROD)在2020年是Oracle 11g,然后在2021年升级为了Oracle 19c,现在测试服务器(UAT环境)的数据库版本也是Oracle 19c,于是从其它测试服务器拷贝了一个Oracle 11g版本的挂载带点/opt/oracle11g到当前测试服务器(为了方便省事,如果重新安装搭建Oracle 11g环境还麻烦一些),然后设置了一下/etc/oratab,如下所示:(xxx表示ORACLE_SID)

#xxx:/opt/oracle19c/product/19.3.0/db_1:N
xxx:/opt/oracle11g/product/11.2:N

退出当前SecureCRT窗口,重新登陆,提示修改成功,如下所示

ORACLE_SID = [xxx] ? xxx

Oracle SID  = xxx
Oracle BASE = /opt/oracle11g
Oracle HOME = /opt/oracle11g/product/11.2
SQL*Net TNS = /etc
ORA_NLS10   = /opt/oracle11g/product/11.2/nls/data

由于忙着检查/修改pfile文件中的参数,当时没有仔细检查环境变量,匆匆忙忙就开始了数据库实例的还原恢复,但是当前的ORACLE_HOME环境变量确实还是Oracle 19c的环境变量

>echo $ORACLE_BASE
/opt/oracle19c
>echo $ORACLE_HOME
/opt/oracle19c/product/19.3.0/db_1

修改环境变量~/.profile后,执行. ~/.profile设置生效。然后重新登陆SecureCRT后,重新还原数据库就不会遇到这个问题。另外,如果不重新还原,关闭数据库后,重新OPEN数据库亦可以,测试没有什么问题。

官方文档Database Startup Failure After RMAN Restore with ORA-00704, ORA-00604, ORA-00904 (Doc ID 2540757.1)的具体内容如下:

APPLIES TO:
Oracle Database - Enterprise Edition - Version 11.2.0.4 and later
Information in this document applies to any platform.

SYMPTOMS
 
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01092: ORACLE instance terminated. Disconnection forced
ORA-00704: bootstrap process failure
ORA-00604: error occurred at recursive SQL level 2
ORA-00904: "I"."UNUSABLEBEGINNING#": invalid identifier
Process ID: 23346
Session ID: 680 Serial number: 51933

CHANGES

 After restoring the database to another server by RMAN, it is failed to startup.
After upgrade or post upgrade

CAUSE

 >>>>>ORA-00904: "I"."UNUSABLEBEGINNING#": invalid identifier
This error appears due to using the incorrect sqlplus environment. For example., By default SQLPLUS will connect to the default ORACLE_HOME, say 12C Home but if you are duplicating the 11g database on same host the it must be Oracle 11g Environment in order to complete the process.
1 - This issue happens when we have installed multiple Oracle Homes in a single system.
2 - We need to make sure that we are in the right environment when we are restoring it.

SOLUTION

You need to set all the required Environment Variables first as per your need like ORACLE_SID, ORACLE_BASE, ORACLE_HOME, TNS_ADMIN, PATH with proper values
(OR)
Simply work by going to the bin directory of your required ORACLE_HOME
SET ORACLE_HOME=Your_Oracle_Home
CD ORACLE_HOME\bin
Even if you set all the environment parameter properly, then need to investigate further to verify the rman backup set which used to restore or verify the upgrade logs, component, dba_registry etc.
Provide the details requested in below Notes based on the post restore or post upgrade
Note 1905616.1  SRDC - Startup Issues: Checklist of Evidence to Supply (Doc ID 1905616.1)
Note 1906468.1  SRDC - Startup Shutdown - Oracle Binary and OS Resources: Checklist of Evidence to Supply (Doc ID 1906468.1)
Note:1672387.1  SRDC - Data Collection for Upgrade Issues
Note 753041.1 How to Diagnose Components with NON VALID Status in DBA_REGISTRY after an Upgrade (Doc ID 753041.1)
Note 1965956.1  SRDC - Data Collection for Datapatch issues (Doc ID 1965956.1)
Note 1671416.1  SRDC - Required diagnostic data collection for RMAN Restore and Recover Using TFA Collector (Recommended) or Manual Steps (Doc ID 1671416.1)

标签:00904,opt,00604,数据库,Oracle,ORACLE,ID,ORA
From: https://www.cnblogs.com/kerrycode/p/17316483.html

相关文章

  • Aws Aurora构建高级冗余和服务集成总结
    本文通过把存储在S3中的csv文件导入到Aurora数据库实例中,同时订阅一个AmazonSimpleNotificationService(SNS)来通知到指定邮箱。资源清单一个MyDBPostgresql数据库,一张表venues一个可以连接到数据库的EC2一个SNS主题myUpdatedSNS一个Lambda函数myNotifyUpdate一个S3桶mys3-pg-tes......
  • cookies、sessionStorage与localStorage在Vue中的使用
    目录简介localStorage的使用语法示例sessionStorage的操作语法示例cookie的操作vue-cookie语法示例vue-cookies语法示例js-cookie的使用简介cookies临时存储在客户端中,并且有过期事件,到过期时间会被自动清理。sessionStorage临时存储在客户端中,关闭浏览器后......
  • oracle中case when 和 decode的区别
    1、decode简洁、casewhen复杂(但能实现的功能更多)2、返回值类型,casewhen的返回值类型必须一致如:SELECTCASEWHEN1=1THEN1ELSE'0'ENDFROMDUAL;--这样会报错:ORA-00932:数据类型不一致:应为NUMBER,但却获得CHAR   而decode的返回值类型需跟第一个返回值的类型一......
  • oracle递归查询法
    select*from表名startwith查询的条件connectbyprior等值条件(一个表中两个值相等的字段)查询的结果集:满足连接的值=查询条件,startwith子句:遍历起始条件,有个小技巧,如果要查父结点,这里可以用子结点的列,反之亦然。connectby子句:连接条件。......
  • Android开发startActivityForResult()弃用,推荐使用registerForActivityResult()方法
    SecondActivity中publicclassSecondActivityextendsAppCompatActivity{privatestaticfinalStringTAG="SecondActivity";@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);......
  • Oracle触发器
    触发器Oracle数据库对象,类似于存储过程和函数;存储过程和函数需要用户显示调用才可执行;触发器是由一个事件触发运行,当某个事件发生时会自动隐式的运行,不能被显示调用;触发器的本质是存储过程1.触发器执行的条件,即触发事件;2.执行触发器的时间,即发生事件之前before还是发生事......
  • FINS5516 Corporate Finance
    MohamadMOURAD–Term1,2023UNSWSydneyFINS5516–InternationalCorporateFinanceTerm1,2023,UNSWSydneyDataExerciseAssignmentDUE:Sunday16April2023,11:59pm(Sydney,Australiatime)WeightingThisassessmentisworth15%ofyourfinalgradeforFI......
  • RocksBD+ZenFS的安装及测试(Fedora 37)
    安装安装libzbd依赖库及libzbd://依赖yuminstallm4yuminstallautoconfyuminstalllibtoolyuminstallautomake//下载libzbd库gitclonehttps://github.com/westerndigitalcorporation/libzbd.git//编译sh./autogen.sh./configuremake//安装sudomakein......
  • oracle中if/else的三种实现方式详解
    oracle中if/else的三种实现方式详解1、标准sql规范1、单个IFIFv=...THENENDIF;2、IF...ELSEIFv=...THENELSEt....;ENDIF;3、多个IFIFv=...THENELSIFv=...THENt...;ENDIFL注意:多个IF的是'ELSIF'不是'ELSEIF'2、decode函数DECODE(VALUE,IF......
  • Oracle创建序列
    创建序列语法:CREATESEQUENCE序列名;--示例createsequenceSEQ_CX_TEXT_SEQ;----CreatesequencecreatesequenceSEQ_CX_TEXT_SEQminvalue1maxvalue9999999999999999999999999999startwith1incrementby1cache20;--如果指定cache,oracle预先在内存中放置......