oracle数据库00900,ORA-00900 – 提供7*24专业数据库(Oracle,SQL Server,MySQL等)恢复和Oracle技术服务@Tel:+86 13429648788 - ...-程序员宅基地

技术标签: oracle数据库00900  

今天一朋友和我说他的数据库不能open,open过程提示ORA-00900错误,通过分析alert日志和props$表,发现他们修改了一个无效的NLS_CHARACTERSET值,导致数据库无法正常启动(准确的说,因为数据库里面该值无效,当数据库open的过程中,检测到控制文件指定的编码和该值不一致,然后修改控制文件的编码,修改之后,数据库一到mount状态执行任何语句都报ORA-00900错误),通过一些工具修改NLS_CHARACTERSET为正确值该故障解决

重现ORA-00900故障

SQL> select * from v$version;

BANNER

--------------------------------------------------------------------------------

Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production

PL/SQL Release 11.2.0.3.0 - Production

CORE 11.2.0.3.0 Production

TNS for Linux: Version 11.2.0.3.0 - Production

NLSRTL Version 11.2.0.3.0 - Production

SQL> select value$ from props$ where name='NLS_CHARACTERSET';

VALUE$

-------------------------------------------------------

ZHS16GBK

SQL> update props$ set value$='AL16UTF16' where name='NLS_CHARACTERSET';

1 row updated.

SQL> commit;

Commit complete.

SQL> alter database backup controlfile to trace as '/tmp/ora11g.ctl';

Database altered.

SQL> shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup

ORACLE instance started.

Total System Global Area 175775744 bytes

Fixed Size 1343668 bytes

Variable Size 117444428 bytes

Database Buffers 50331648 bytes

Redo Buffers 6656000 bytes

Database mounted.

ORA-01092: ORACLE instance terminated. Disconnection forced

ORA-00604: error occurred at recursive SQL level 1

ORA-00900: invalid SQL statement

Process ID: 5277

Session ID: 125 Serial number: 5

SQL> startup nomount;

ORACLE instance started.

Total System Global Area 175775744 bytes

Fixed Size 1343668 bytes

Variable Size 117444428 bytes

Database Buffers 50331648 bytes

Redo Buffers 6656000 bytes

SQL> alter database mount;

Database altered.

SQL> alter database open;

alter database open

*

ERROR at line 1:

ORA-00900: invalid SQL statement

SQL>select * from dual;

select * from dual

*

ERROR at line 1:

ORA-00900: invalid SQL statement

SQL> shutdown abort

ORACLE instance shut down.

第一次startup(open)过程报错

SMON: enabling tx recovery

Updating character set in controlfile to AL16UTF16

Errors in file /u01/oracle/diag/rdbms/ora11g/ora11g/trace/ora11g_ora_5277.trc:

ORA-00604: error occurred at recursive SQL level %s

ORA-00900: invalid SQL statementursive SQL level %s

Errors in file /u01/oracle/diag/rdbms/ora11g/ora11g/trace/ora11g_ora_5277.trc:

ORA-00604: error occurred at recursive SQL level %s

ORA-00900: invalid SQL statementursive SQL level %s

Error 604 happened during db open, shutting down database

USER (ospid: 5277): terminating the instance due to error 604

Errors in file /u01/oracle/diag/rdbms/ora11g/ora11g/trace/ora11g_smon_5243.trc:

ORA-00604: error occurred at recursive SQL level %s

ORA-00900: invalid SQL statementursive SQL level %s

Instance terminated by USER, pid = 5277

ORA-1092 signalled during: ALTER DATABASE OPEN...

opiodr aborting process unknown ospid (5277) as a result of ORA-1092

Sat May 18 00:44:27 2013

ORA-1092 : opitsk aborting process

这里比较明显的看到有一条(Updating character set in controlfile to AL16UTF16),正是由于这个操作,更新控制文件的编码为一个无效的编码,从而导致在后面数据库mount(加载控制文件)之后,就不能再进行其他任何操作

解决思路

使用odu找出来block位置,或者在同版本库中查询

使用dul或者bbed修改props$的NLS_CHARACTERSET值

重建控制文件(noresetlogs方式)

处理过程

SQL> shutdown abort

ORACLE instance shut down.

odu找出来block位置

dul或者bbed修改block值

重建控制文件(noresetlogs方式)

SQL> startup

ORACLE instance started.

Total System Global Area 175775744 bytes

Fixed Size 1343668 bytes

Variable Size 117444428 bytes

Database Buffers 50331648 bytes

Redo Buffers 6656000 bytes

Database mounted.

ORA-01113: file 1 needs media recovery

ORA-01110: data file 1: '/u01/oracle/oradata/ora11g/system01.dbf'

SQL> recover database;

Media recovery complete.

SQL> alter database open;

Database altered.

从oracle 9i开始,修改数据库的编码,直接使用alter database character set internal_use方式进行,而不要使用直接修改props$基表,更不能修改一个实际中不存在的编码值(本文中数据库编码和国家编码搞混淆从而出现该故障)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_32479897/article/details/116395561

智能推荐

STM32单片机实现DMA+ADC+UART功能_adc dma uart-程序员宅基地

文章浏览阅读3.8k次,点赞10次,收藏76次。突然想测试一下STM32单片机ADC采样速率问题,按照常规方法,可以通过ADC采样,然后将采样值打印出来。但是这种方法在处理和打印数据的时候会占用很多时间,导致处理数据的时间超过了ADC的采样时间。于是想到了ADC采样的数据用DMA功能存储,并通过串口打印。但是串口打印依然要占用单片机时间,那能不能串口数据的输出也采用 DMA功能呢?这样ADC采样的数据通过DMA直接存储,然后串口通过DMA功能直接输出采样到的数据。这样速度程序执行速度不就极大的提升了吗?说干就干,使用STM32F103C8..._adc dma uart

hdu 5976 a1*a2*a3..._a1+a2+...+an=s,并且使得a1*a2*...*an最大。-程序员宅基地

文章浏览阅读565次。传送门题意:给你一个x=a1+a2+a3+...+an让你求一个s=a1*a2*a3*...*an最大。(ai!=aj 当且仅当i!=j)ans%1e9+7思路:经过分析得到要使s最大,那么a1*a2*a3*..一定要是连续的一串数的乘积,比如9就是 2*3*4 14就是2*3*4*5 如果这个数刚好在9-14中间怎么办呢,经过一阵观察,可发现x-9剩下的可以_a1+a2+...+an=s,并且使得a1*a2*...*an最大。

linux下C语言实现静态IP地址,网关的设置_linux ioctl(siocaddrt) error in set_defatu-程序员宅基地

文章浏览阅读4.2k次。linux下C语言实现静态IP地址,网关的设置#include #include #include #include #include #include #include #include int SetIfAddr(char *ifname, char *Ipaddr, char *mask,ch_linux ioctl(siocaddrt) error in set_defatu

Java线程里的14种锁_java 线程安全 锁-程序员宅基地

文章浏览阅读831次。一. 线程是否同步资源?1. 悲观锁 :同步每次拿数据都按照 最坏 的情况来定, 认为一定会有别的线程过来修改, 所以每次拿数据之前都会先上锁, 这样别的线程要想来拿这个数据的时候就会被阻塞, 直到这个线程解锁.部分锁实现:synchronized的实现就是悲观锁, 主要用于多写的场景, 可以确保数据同步正确存在的部分问题:线程持有该锁会导致其他需要此锁的线程阻塞 竞争强烈的情况下, 不断的加锁和解锁都会影响cpu的调度从而出现性能问题 如果一个优先级高的线程等待一个优..._java 线程安全 锁

倍福PLC控制台达EtherCAT伺服案例分析_台达伺服ethercat设置-程序员宅基地

文章浏览阅读3.1k次。软件 :Twincat V2.11.2249(最新 Twincat2 安装包下载路径ftp://ftp.beckhoff.com.cn/TwinCAT2/install/2.11%20R3/)硬件 :C6640‐0030 工控机 、ASDA A2‐E (台达 Ethercat 伺服驱动器)XML 文件 :ASDA2‐E rev3.33.xml配置文件 :DELTA.tsmPLC 文件 :DELTA_PLC.proXML 文件下载XML 文件可以在台达官网下载;XML 文_台达伺服ethercat设置

1043:整数大小比较_问题 2503: 整数大小比较-程序员宅基地

文章浏览阅读1.5k次。#include <stdio.h>int main (){ long long int a,b; scanf("%lld %lld",&a,&b); if(a>b) { printf(">"); } el_问题 2503: 整数大小比较

随便推点

线程池 ThreadPool_hipe threadpool-程序员宅基地

文章浏览阅读193次。线程池 TreadPool项目描述: 使用多线程技术,实现了 treadpool 管理多个线程并提供任务队列的接口。在线程池初始化后,将等候在条件变量上的一个线程唤醒并从该任务队列中取出第一个任务给该线程执行,等待任务队列中所有任务执行完成。treadpool 提高了响应的速度和多线程的可管理性,降低了资源的消耗。代码如下:#include <iostream>#include <queue>#include <pthread.h>#include <u_hipe threadpool

R Markdown 设置和使用-程序员宅基地

文章浏览阅读952次。1 简介R MarkdownR Markdown的基本语法与 Markdown 基本一致 [使用方法],最核心的区别是:写入代码区域的代码能在编译的时候同时生成相应的图、表和运算结果,省去了保存和插入的过程。能保存为 HTML、 WORD和PDF等格式。 PDF需要LaTex的支持。本文关于在 Windows 10 系统下配置 R Studio 的 R Markown,..._rmarkdown 设置英文 导入kin

liunx 中 ll命令显示详解 ,其中 drwxrwxrwx 代表什么意思-程序员宅基地

文章浏览阅读4.5k次,点赞4次,收藏21次。- r=4,w=2,x=1- 若要 rwx 属性则 4+2+1=7;- 若要 rw - 属性则 4+2=6;- 若要 r-x 属性则 4+1=7。- drwxrwxr-x- 第一位表示文件类型。d 是目录文件,l 是链接文件,- 是普通文件,p 是管道- 第 2-4 位表示这个文件的属主拥有的权限,r 是读,w 是写,x 是执行。- 第 5-7 位表示和这个文件属主所在同一个组的用户..._drwxrwxrwx

飞凌iMX8MM扩展HDMI和LVDS显示 硬件设计原理图_飞凌内核加载lvds-程序员宅基地

文章浏览阅读611次。FETMX8MM-C核心板基于NXP公司iMX8MMini 四核64位处理器设计,主频最高1.8GHz,Cortex-A53架构;2GB DDR4 RAM,支持一个通用型Cortex-M4400MHz内核处理器。可提供多种音频接口,包括I2S、AC97、TDM、PDM和SPDIF。提供多种外设接口,如MIPI-CSI、MIPI-DSI、USB、PCIe、UART、eCSPI、IIC和千兆以太网。飞凌iMX8MM核心板具备1080p 60Hz的H.265和VP9解码器; 相比传统的H.264编码,平均解.._飞凌内核加载lvds

G1GC技术资料_attempting to trigger g1gc due to high heap usage-程序员宅基地

文章浏览阅读203次。网址1:https://www.oracle.com/technical-resources/articles/java/g1gc.htmlLearn about how to adapt and tune the G1 GC for evaluation, analysis and performance.TheGarbage First Garbage Collector (G1 G..._attempting to trigger g1gc due to high heap usage

Android之Fragment与Activity的那些事儿_activity fragment onsaveinstance-程序员宅基地

文章浏览阅读564次。一:Fragment我们需要知道的一点: 所有的Fragment子类都必须包含一个公共的空的构造器。因为在需要的时候,Framework会经常重新实例化Fragment类,在特殊的状态恢复期间,需要能够找到这个构造器来实例化Fragment类。如果空的构造器无效,那么在状态恢复期间会导致运行时异常发生。所以对于Fragment创建实例的传参操作,官方推荐用setArguments来传递参数,而不要_activity fragment onsaveinstance

推荐文章

热门文章

相关标签