Oracle常见错误汇总
Oracle的常见错误及解决办法

Oracle的常见错误及解决办法ORA-12528:TNS:listener: all appropriate instances are blocking new connectionsORA-12528问题是因为监听中的服务使⽤了动态服务,实例虽然启动,但没有注册到监听。
实例是通过PMON进程注册到监听上的,⽽PMON进程需要在MOUNT状态下才会启动。
所以造成了上⾯的错误。
解决这个问题,有三种⽅法:1、把监听设置为静态;2、在tnsnames.ora中追加(UR=A);3、重新启动服务;⽅法1、通过修改listener.ora的参数,把listener.ora动态注册设置为静态注册,然后重新启动监听# listener.ora Network Configuration File: $ORACLE_HOME\network\admin\listener.ora# Generated by Oracle configuration tools.LISTENER =(DESCRIPTION_LIST =(DESCRIPTION =(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))(ADDRESS = (PROTOCOL = TCP)(HOST = [IP])(PORT = 1521))))SID_LIST_LISTENER =(SID_LIST =(SID_DESC =(GLOBAL_DBNAME = [DBNAME])(ORACLE_HOME = [$ORACLE_HOME])(SID_NAME = [SID])))静态注册的风险:如果在instance运⾏中,lisener重新启动,就找不到instance了。
静态注册需要先启动lisener,再启动instance。
且静态模式下,lisener status显⽰的是unknown⽅法2、启动到nomount状态,通过修改tnsnames.ora的参数# tnsnames.ora Network Configuration File: $ORACLE_HOME\network\admin\tnsnames.ora# Generated by Oracle configuration tools.SYK =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = [IP])(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = SYK)(UR=A)))然后连接上数据库SQL>alter database mount;SQL>alter database open;⽅法3、重启ORACLE或者重启ORACLE服务在oracle帐户下依序执⾏如下命令:sqlplus / as sysdba;//在其它帐户(如root)下执⾏可能会报错(ORA-01031)因为这些帐户没有在dba组中shutdown immediate;startup;/s/blog_636415010100x3lc.htmloracle实例名: error while loading shared libraries: libskgxp10.so: cannot open shared object file: No such file or directory是环境变量LD_LIBRARY_PATH的问题。
oracle常见故障处理手册

oracle常见故障处理手册一、数据库启动与关闭故障1.数据库启动失败原因:可能是由于Oracle数据库配置不正确、系统环境变量设置不正确、初始化参数设置不正确等原因导致。
解决方法:检查数据库日志文件,查看错误信息,根据错误信息进行相应的修复。
2.数据库关闭失败原因:可能是由于数据库事务未完成、数据库锁未释放等原因导致。
解决方法:检查数据库日志文件,查看错误信息,根据错误信息进行相应的修复。
二、连接故障1.连接不成功原因:可能是由于网络连接问题、数据库用户名或密码错误、数据库实例名错误等原因导致。
解决方法:检查网络连接是否正常,检查数据库用户名和密码是否正确,检查数据库实例名是否正确。
2.连接断开原因:可能是由于网络不稳定、数据库服务器异常等原因导致。
解决方法:检查网络连接是否正常,检查数据库服务器是否正常。
三、数据恢复故障1.数据丢失原因:可能是由于数据库损坏、磁盘故障等原因导致。
解决方法:根据数据丢失的原因,选择相应的恢复方法,如使用备份恢复数据或使用日志文件恢复数据。
2.数据不一致原因:可能是由于数据修改不一致、数据复制不一致等原因导致。
解决方法:检查数据修改和复制的日志文件,找到不一致的数据并修复。
四、性能优化故障1.性能下降原因:可能是由于CPU占用过高、内存占用过高、磁盘IO过大等原因导致。
解决方法:优化数据库配置参数,如增加内存、优化磁盘IO等。
2.查询速度慢原因:可能是由于查询语句不优化、表没有建立索引等原因导致。
解决方法:优化查询语句,为表建立索引等。
五、存储管理故障1.存储空间不足原因:可能是由于磁盘空间不足、表空间不足等原因导致。
解决方法:清理磁盘空间,增加磁盘空间,调整表空间大小等。
2.数据文件丢失或损坏原因:可能是由于磁盘故障、人为误删除或修改等原因导致。
解决方法:使用备份恢复数据文件或修复损坏的数据文件。
六、网络连接故障1.网络连接中断原因:可能是由于网络设备故障、网络连接线故障等原因导致。
oracle操作常见错误

1.[Err] ORA-02438: Column check constraint cannot reference other columnsORA-02438: 列检查约束条件无法引用其它列--通常可能是constraint 拼写错误2. [Err] ORA-02250: missing or invalid constraint name约束条件名缺失或者无效。
比如:alter table tbl_schooladd s_level number(7) constraint unique; //错误的====add s_level number(7) unique; 正确的4. [Err] ORA-01861: literal does not match format stringORA-01861: 文字与格式字符串不匹配比如:insert into tbl_school(id,s_name,address,establish_time,style)values(1,'清华','北京','1976-05-05','理');日期的输入,要有固定的格式=====values(1,'清华','北京',to_date('1976-05-01','rrrr-mm-dd'),'理');5:select index_name,table_name from user_indexesWhere table_name=’s_emp’;提示错误:为选定行。
‘’里面的就变成了字符串,是区分大小写的,select index_name,table_name from user_indexesWhere table_name=’S_EMP’;6:Ora-02290【】违反检查约束条件可能原因:check里面出错,在传值的时候,出现乱码了,只能重建表7.A.number类型如果是后面带小数点的呢,最好在实体类里面做一下转化。
Oracle常见错误及解决方案

O r a c l e常见错误及解决方案问题1:Oracle服务器进入PL/SQL Developer时报ora-01033:oracle initialization or shutdown in progress 错误提示,应用系统无法连接Oracle服务。
解决方法如下:⑴进入CMD,执行set ORACLE_SID=fbms,确保连接到正确的SID;⑵运行sqlplus "/as sysdba"SQL>shutdown immediate停止服务SQL>startup启动服务,观察启动时有无数据文件加载报错,并记住出错数据文件标号SQL>shutdown immediate再次停止服务SQL>startup mountSQL> recover datafile 2恢复出错的数据文件SQL>shutdown immediate再次停止服务SQL>startup启动服务,此次正常。
⑶进入PL/SQL Developer检查,没有再提示错误。
问题2:Oracle密码忘记了怎么办?解决方法有很多种,这里讲述以下三种:⑴打开cmd,输入sqlplus /nolog,回车;输入“conn / as sysdba”;输入“alter user sys identified by 新密码”。
注意:新密码最好以字母开头,否则可能出现错误Ora-00988。
有了这个方法后,只要自己对oracle 服务器有管理员权限,Oracle密码忘记了也不用着急,可以随意修改密码。
⑵在命令行执行如下命令:sqlplus "/@服务名as sysdba"然后在sqlplus中运行以上命令即可修改密码:alter user sys identified by 新密码;alter user system identified by 新密码;⑶运行到C盘根目录输入:SET ORACLE_SID = 你的SID名称输入:sqlplus/nolog输入:connect/as sysdba输入:alert user sys identified by sys输入:alert user system identified by system完成以上5步,则密码更改完成,密码是Oracle数据库的初始密码。
oracle报错处理 案例

oracle报错处理案例Oracle数据库在运行过程中可能会遇到各种错误,下面列举几个报错案例以及相应的解决思路:1、ORA-00701: 这个错误通常与内部错误或者核心对象有关。
根据2021年的信息,处理ORA-00701的一个解决方案是将数据库启动到升级模式(upgrade mode)进行修复,或者配置特定的事件(如event 38003),以便让Oracle跳过某些验证步骤。
在某些情况下,可能需要重建受影响的核心对象。
2、数据库无法打开并开始crash recovery:当数据库因异常关闭(如服务器断电)后,重启时可能会出现类似"alter database open... crash recovery"的情况。
此时,Oracle会自动尝试执行恢复过程来确保数据一致性。
DBA需要监控redo日志应用情况和归档日志状态,确保所有必需的redo已成功应用,以完成数据库的正常恢复开放。
3、ORA-00235:这个错误在官方文档中没有明确记录,但根据历史资料中的案例,它可能与备份或RMAN操作期间的同步恢复目录有关。
解决方案可能涉及检查并协调任何冲突的RMAN任务、确保恢复目录的一致性,或者重新同步恢复目录信息。
4、服务器断电导致的数据恢复:在服务器意外断电后,Oracle数据库可能无法正常启动。
在这种情况下,数据恢复工作包括检查物理文件的完整性、评估控制文件、联机重做日志文件和数据文件的状态,并使用RMAN或其他工具进行介质恢复或不完全恢复操作。
如果数据文件损坏严重,可能还需要从最近的有效备份和归档日志中恢复。
在实际处理Oracle数据库错误时,关键在于理解错误的具体含义、分析错误产生的上下文环境,并按照Oracle官方提供的最佳实践和建议步骤进行操作。
同时,维护详细的日志记录和定期备份也是避免数据丢失和快速恢复服务的关键措施。
Oracle常见错误及解决方法

Oracle常见错误及解决⽅法1、ORA-12541:TNS:没有监听器原因:没有启动监听器或者监听器损坏。
如果是前者,使⽤命令net start OracleOraHome81TNSListener(名字可能有出⼊)即可;如果是后者,则使⽤“Net8 Configuration Assistant”⼯具向导之“监听程序配置”增加⼀个监听器即可(基本不⽤写任何信息,⼀路OK。
在添加之前可能需要把所有的监听器先删除!)2、ORA-12500:TNS:监听程序⽆法启动专⽤服务器进程或 ORA-12560:TNS:协议适配器错误原因:ORACLE的数据库服务没有启动。
使⽤命令net start ORACLESERVICEORADB(ORADB为数据库名字)即可。
如果仍没有解决,请继续向下看。
3、如果数据库服务启动失败,则很有可能是其注册表项值损坏,最好的做法是以下两步:1)ORADIM -DELETE -SID oradb 删除数据库服务项2)ORADIM -NEW -SID oradb 新增数据库服务项注:这个过程中如果出错,就重启计算机!4、ORA-12154:TNS:能解析服务名原因:ORACLE的⽹络服务名没有正确配置。
请使⽤“Net8 Configuration Assistant”⼯具向导之“本地⽹络服务名配置”配置TNS即可。
如果仍没有解决,请继续向下看。
5、ORA-1034 :TNS:ORACLE不可⽤原因:ORACLE的数据库服务正确启动,但是数据库没有打开!使⽤命令:1)svrmgrl 启动服务管理器2)connect internal 以internal⾝份登陆3)startup 打开数据库6、ORA-12560:TNS:协议适配器错误(顽固性的)原因:未知。
解决:必杀技--打开“Windows任务管理器”,杀死ORACLE.exe及ORADIM.exe进程,书写⾃⼰的ora_startup.bat,执⾏之!7、ORA-12638:⾝份证明检索失败原因:服务端开了防⽕墙,且使⽤了本地操作系统认证解决:修改sqlnet.ora⽂件,1)NTS改为NONE,oracle将采⽤⼝令⽂件认证(此时 remote_login_passwordfile=exclusive)如connect /as sysdba 登录,后报错RA-01031: insufficient privileges,实际上是要求你输⼊sysdba的⽤户名和密码SQLNET.AUTHENTICATION_SERVICES= (NONE)2)修改查找连接的字符串顺序:tnsnames.ora,直接使⽤简单连接字符串,使⽤计算机名称NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT, HOSTNAME)8、ArcSDE数据被锁定后的解锁⽅法描述:(1)删除所选对象失败锁定请求与已有锁定冲突。
Oracle 错误一览表

Oracle 错误一览表RA-00001: 违抗独一束缚前提(.)orA-00017: 要求会话以设置跟踪事宜orA-00018: 超出最大年夜会话数orA-00019: 超出最大年夜会话许可数orA-00020: 超出最大年夜过程数()orA- 00021: 会话从属于其它某些过程;无法转换会话orA-00022: 无效的会话ID;拜望被拒绝orA-00023: 会话引用过程私用内存;无法分别会话orA-00024: 单一过程模式下不许可从多个过程注册orA-00025: 无法分派orA-00026: 损掉或无效的会话IDorA-00027: 无法删去当前会话orA-00028: 您的会话己被删去orA-00029: 会话不是用户会话orA-00030: 用户会话ID 不存在。
orA-00031: 标记要删去的会话orA-00032: 无效的会话移植口令orA-00033: 当前的会话具有空的移植口令orA-00034: 无法在当前PL/SQL 会话中orA-00035: LICENSE_MAX_USERS 不克不及小于当前用户数orA-00036: 跨过递归SQL () 级的最大年夜值orA-00037: 无法转换到属于不合办事器组的会话orA-00038: 无法创建会话: 办事器组属于其它用户orA-00050: 猎取入队时操作体系掉足orA-00051: 等待资本超时orA-00052: 超出最大年夜入队资本数()orA-00053: 超出最大年夜入队数orA-00054: 资本正忙,要求指定NOWAITorA-00055: 超出DML 锁的最大年夜数orA-00056: 对象'.' 上的DDL 锁以不兼容模式挂起orA-00057: 超出临时表锁的最大年夜数orA-00058: DB_BLOCK_SIZE 必须为才可安装此数据库(非) orA-00059: 超出DB_FILES 的最大年夜值orA-00060: 等待资本时检测到逝世锁orA-00061: 另一个例程设置了不合的DML_LOCKSorA-00062: 无法获得DML 全表锁定;DML_LOCKS 为0 orA-00063: 超出LOG_FILES 的最大年夜数orA-00064: 对象过大年夜以至无法分派在此O/S (,)orA-00065: FIXED_DATE 的初始化掉败orA-00066: LOG_FILES 为但须要成为才可兼容orA-00067: 值对参数无效;至少必须为orA-00068: 值对参数无效,必须在和之间orA-00069: 无法获得锁定-- 禁用了表锁定orA-00070: 敕令无效orA-00071: 过程号必须介于1 和之间orA-00072: 过程""不活动orA- 00073: 敕令介于和个参数之间时应用orA-00074: 未指定过程orA-00075: 在此例程未找到过程""orA-00076: 未找到转储orA-00077: 转储无效orA-00078: 无法按名称转储变量orA-00079: 未找到变量orA-00080: 层次指定的全局区域无效orA-00081: 地址范畴[,) 弗成读orA-00082: 的内存大年夜小不在有效集合[1], [2], [4] 之内orA-00083: 警告: 可能破坏映射的SGAorA-00084: 全局区域必须为PGA, SGA 或UGAorA-00085: 当前调用不存在orA-00086: 用户调用不存在orA-00087: 敕令无法在长途例程上履行orA- 00088: 共享办事器无法履行敕令orA-00089: orADEBUG 敕令中无效的例程号orA-00090: 未能将内存分派给群集数据库orADEBUG 敕令orA-00091: LARGE_POOL_SIZE 至少必须为orA-00092: LARGE_POOL_SIZE 必须大年夜于LARGE_POOL_MIN_ALLOC orA-00093: 必须介于和之间orA-00094: 要求整数值orA-00096: 值对参数无效,它必须来自之间orA-00097: 应用oracle SQL 特点不在SQL92 级中orA-00099: 等待资本时产生超时,可能是PDML 逝世锁所致orA-00100: 未找到数据orA-00101: 体系参数DISPATCHERS 的说明无效orA-00102: 调剂法度榜样无法应用收集协定orA-00103: 无效的收集协定;供调剂法度榜样备用orA-00104: 检测到逝世锁;全部公用办事器已锁按等待资本orA-00105: 未设备收集协定的调剂机制orA-00106: 无法在连接到调剂法度榜样时启动/封闭数据库orA-00107: 无法连接到orACLE 监听器过程orA-00108: 无法设置调剂法度榜样以同步进行连接orA-00111: 因为办事器数量限制在, 因此没有启动所有办事器orA-00112: 仅能创建多达 (最多指定) 个调剂法度榜样orA-00113: 协定名过长orA-00114: 缺乏体系参数SERVICE_NAMES 的值orA-00115: 连接被拒绝;调剂法度榜样连接表已满orA-00116: SERVICE_NAMES 名过长orA-00117: 体系参数SERVICE_NAMES 的值超出范畴orA- 00118: 体系参数DISPATCHERS 的值超出范畴orA-00119: 体系参数的说明无效orA-00120: 未启用或安装调剂机制orA-00121: 在缺乏DISPATCHERS 的情形下指定了SHARED_SERVERSorA-00122: 无法初始化收集设备orA-00123: 余暇公用办事器终止orA-00124: 在缺乏MAX_SHARED_SERVERS 的情形下指定了DISPATCHERS orA-00125: 连接被拒绝;无效的演示文稿orA-00126: 连接被拒绝;无效的反复orA-00127: 调剂过程不存在orA-00128: 此敕令须要调剂过程名orA-00129: 监听法度榜样地址验证掉败''orA-00130: 监听法度榜样地址'' 无效orA-00131: 收集协定不支撑注册''orA-00132: 语法缺点或无法解析的收集名称''orA-00150: 反复的事务处理IDorA-00151: 无效的事务处理IDorA-00152: 当前会话与要求的会话不匹配orA-00153: XA 库中的内部缺点orA-00154: 事务处理监督器中的协定缺点orA-00155: 无法在全局事务处理之外履行工作orA-00160: 全局事务处理长度超出了最大年夜值()orA-00161: 事务处理的分支长度不法(许可的最大年夜长度为)orA-00162: 外部dbid 的长度超出了最大年夜值()orA-00163: 内部数据库名长度超出了最大年夜值()orA-00164: 在分布式事务处理中不许可自力的事务处理orA-00165: 不许可对长途操作进行可移植分布式自治转换ORACLE缺点一览表(2)作者ORA-00200: 无法创建操纵文件orA-00201: 操纵文件版本与orACLE 版本不兼容orA-00202: 操纵文件: ''orA-00203: 应用缺点的操纵文件orA-00204: 读操纵文件时掉足(块,# 块)orA-00205: 标识操纵文件掉足,有关详情,请检查警告日记orA-00206: 写操纵文件时掉足(块,# 块)orA-00207: 操纵文件不克不及用于同一数据库orA-00208: 操纵文件的名称数超出限制orA-00209: 操纵文件块大年夜小不匹配,有关详情,请检查警告日记orA-00210: 无法打开指定的操纵文件orA-00211: 操纵文件与先前的操纵文件不匹配orA-00212: 块大年夜小低于要求的最小大年夜小( 字节)orA-00213: 不克不及从新应用操纵文件;原文件大年夜小为,还需orA-00214: 操纵文件'' 版本与文件'' 版本不一致orA-00215: 必须至少存在一个操纵文件orA-00216: 无法从新调剂从8.0.2 移植的操纵文件大年夜小orA-00217: 从9.0.1 进行移植无法从新调剂操纵文件的大年夜小orA-00218: 操纵文件的块大年夜小与DB_BLOCK_SIZE () 不匹配orA-00219: 要求的操纵文件大年夜小超出了许可的最大年夜值orA-00220: 第一个例程未安装操纵文件,有关详情,请检查警告日记orA-00221: 写入操纵文件掉足orA-00222: 操作将从新应用当前已安装操纵文件的名称orA-00223: 转换文件无效或版本不精确orA-00224: 操纵文件重设大年夜小测验测验应用不法记录类型() orA-00225: 操纵文件的预期大年夜小与实际大年夜小不合orA-00226: 备用操纵文件打开时不许可进行操作orA-00227: 操纵文件中检测到破坏的块: (块,# 块)orA-00228: 备用操纵文件名长度超出了最大年夜长度orA-00229: 操作不许可: 已挂起快照操纵文件入队orA-00230: 操作不许可: 无法应用快照操纵文件入队orA-00231: 快照操纵文件不决名orA-00232: 快照操纵文件不存在, 已破坏或无法读取orA-00233: 操纵文件副本已破坏或无法读取orA-00234: 标识或打开快照或复制操纵文件时掉足orA-00235: 操纵文件固定表因并发更新而不一致orA-00236: 快照操作不许可: 挂上的操纵文件为备份文件orA-00237: 快照操作不许可: 操纵文件新近创建orA-00238: 操作将重用属于数据库一部分的文件名orA-00250: 未启动存档器orA-00251: LOG_ARCHIVE_DUPLEX_DEST 不克不及是与字符串雷同的目标地orA-00252: 日记在线程上为空,无法存档orA-00253: 字符限制在以内,归档目标字符串超出此限制orA-00254: 存档操纵字符串'' 时掉足orA-00255: 存档日记 (线程, 序列# ) 时掉足orA-00256: 无法翻译归档目标字符串orA-00257: 存档器缺点。
Oracle常见错误及解决办法

Oracle常见错误及解决办法Ø简介本⽂主要记录 Oracle 常见错误及解决办法,包括以下内容:1.ORA-00054: 资源正忙, 但指定以 NOWAIT ⽅式获取资源, 或者超时失效2.ORA-01034: ORACLE not available3.ORA-01261: Parameter db_recovery_file_dest destination string cannot be translated(启动数据库报错)4.ORA-12154: TNS: ⽆法解析指定的连接标识符5.ORA-12514: TNS:listener does not currently know of service requested in connect descriptor6.ORA-12541: TNS:no listener7.ORA-12560: TNS: 协议适配器错误8.ORA-27125: unable to create shared memory segment(启动数据库报错)9.ORA-28040: 没有匹配的验证协议((11g dblink 连接 12c 时)1.ORA-00054: 资源正忙, 但指定以 NOWAIT ⽅式获取资源, 或者超时失效n错误原因由于其他 Session 已经对⽬标表做了操作,并且已经有排他锁在表上了,所以新的 Session ⽆法再对表进⾏DDL操作。
n解决办法以 system ⽤户登录:1)查询被锁的会话IDselect session_id from v$locked_object;2)查询 sid, serial# 字段SELECT sid, serial#, username, osuser FROM v$session where sid = 9;3)将锁定的会话关闭ALTER SYSTEM KILL SESSION '9,99';2.ORA-01034: ORACLE not available1)检查当前数据库实例是否启动3.ORA-01261: Parameter db_recovery_file_dest destination string cannot be translated(启动数据库报错)n错误描述SQL> startupORA-01261: Parameter db_recovery_file_dest destination string cannot be translatedORA-01262: Stat failed on a file destination directoryLinux-x86_64 Error: 2: No such file or directoryn解决办法(没有效果)不知道是什么原因,导致 $ORACLE_BASE/fast_recovery_area 少了这个⽬录,⽽导致了这个错误。
ORACLE 错误大全

ORA-00001: 违反唯一约束条件 (.)ORA-00017: 请求会话以设置跟踪事件ORA-00018: 超出最大会话数ORA-00019: 超出最大会话许可数ORA-00020: 超出最大进程数 ()ORA-00021: 会话附属于其它某些进程;无法转换会话ORA-00022: 无效的会话 ID;访问被拒绝ORA-00023: 会话引用进程私用内存;无法分离会话ORA-00024: 单一进程模式下不允许从多个进程注册ORA-00025: 无法分配ORA-00026: 丢失或无效的会话 IDORA-00027: 无法删去当前会话ORA-00028: 您的会话己被删去ORA-00029: 会话不是用户会话ORA-00030: 用户会话 ID 不存在。
ORA-00031: 标记要删去的会话ORA-00032: 无效的会话移植口令ORA- 00033: 当前的会话具有空的移植口令ORA-00034: 无法在当前 PL/SQL 会话中ORA-00035: LICENSE_MAX_USERS 不能小于当前用户数ORA-00036: 超过递归SQL() 级的最大值ORA-00037: 无法转换到属于不同服务器组的会话ORA-00038: 无法创建会话: 服务器组属于其它用户ORA-00050: 获取入队时操作系统出错ORA-00051: 等待资源超时ORA-00052: 超出最大入队资源数 ()ORA-00053: 超出最大入队数ORA-00054: 资源正忙,要求指定 NOWAITORA-00055: 超出 DML 锁的最大数ORA-00056: 对象 '.' 上的 DDL 锁以不兼容模式挂起ORA-00057: 超出临时表锁的最大数ORA-00058: DB_BLOCK_SIZE 必须为才可安装此数据库(非 ) ORA-00059: 超出 DB_FILES 的最大值ORA-00060: 等待资源时检测到死锁ORA-00061: 另一个例程设置了不同的 DML_LOCKSORA-00062: 无法获得 DML 全表锁定;DML_LOCKS 为 0 ORA-00063: 超出 LOG_FILES 的最大数ORA-00064: 对象过大以至无法分配在此 O/S (,)ORA-00065: FIXED_DATE 的初始化失败ORA-00066: LOG_FILES 为 但需要成为 才可兼容ORA-00067: 值对参数 无效;至少必须为ORA-00068: 值对参数 无效,必须在 和 之间ORA-00069: 无法获得锁定 -- 禁用了表锁定ORA-00070: 命令无效ORA-00071: 进程号必须介于 1 和 之间ORA-00072: 进程""不活动ORA-00073: 命令 介于 和 个参数之间时使用ORA-00074: 未指定进程ORA-00075: 在此例程未找到进程 ""ORA-00076: 未找到转储ORA-00077: 转储 无效ORA-00078: 无法按名称转储变量ORA-00079: 未找到变量ORA-00080: 层次 指定的全局区域无效ORA-00081: 地址范围 [,) 不可读ORA-00082: 的内存大小不在有效集合 [1], [2], [4] 之内ORA-00083: 警告: 可能损坏映射的 SGAORA-00084: 全局区域必须为 PGA, SGA 或 UGAORA-00085: 当前调用不存在ORA-00086: 用户调用不存在ORA-00087: 命令无法在远程例程上执行ORA-00088: 共享服务器无法执行命令ORA-00089: ORADEBUG 命令中无效的例程号ORA-00090: 未能将内存分配给群集数据库 ORADEBUG 命令ORA-00091: LARGE_POOL_SIZE 至少必须为ORA-00092: LARGE_POOL_SIZE 必须大于 LARGE_POOL_MIN_ALLOCORA-00093: 必须介于 和 之间ORA-00094: 要求整数值ORA-00096: 值对参数 无效,它必须来自 之间ORA-00097: 使用 Oracle SQL 特性不在 SQL92 级中ORA-00099: 等待资源时发生超时,可能是 PDML 死锁所致ORA-00100: 未找到数据ORA-00101: 系统参数 DISPATCHERS 的说明无效ORA-00102: 调度程序无法使用网络协议ORA-00103: 无效的网络协议;供调度程序备用ORA-00104: 检测到死锁;全部公用服务器已锁定等待资源ORA-00105: 未配置网络协议 的调度机制ORA-00106: 无法在连接到调度程序时启动/关闭数据库ORA-00107: 无法连接到 ORACLE 监听器进程ORA-00108: 无法设置调度程序以同步进行连接ORA-00111: 由于服务器数目限制在 , 所以没有启动所有服务器ORA-00112: 仅能创建多达 (最多指定) 个调度程序ORA-00113: 协议名 过长ORA-00114: 缺少系统参数 SERVICE_NAMES 的值ORA-00115: 连接被拒绝;调度程序连接表已满ORA-00116: SERVICE_NAMES 名过长ORA-00117: 系统参数 SERVICE_NAMES 的值超出范围ORA-00118: 系统参数 DISPATCHERS 的值超出范围ORA-00119: 系统参数 的说明无效ORA-00120: 未启用或安装调度机制ORA-00121: 在缺少 DISPATCHERS 的情况下指定了 SHARED_SERVERS ORA-00122: 无法初始化网络配置ORA-00123: 空闲公用服务器终止ORA-00124: 在缺少 MAX_SHARED_SERVERS 的情况下指定了 DISPATCHERS ORA-00125: 连接被拒绝;无效的演示文稿ORA-00126: 连接被拒绝;无效的重复ORA-00127: 调度进程 不存在ORA-00128: 此命令需要调度进程名ORA-00129: 监听程序地址验证失败 ''ORA-00130: 监听程序地址 '' 无效ORA-00131: 网络协议不支持注册 ''ORA-00132: 语法错误或无法解析的网络名称 ''ORA-00150: 重复的事务处理 IDORA-00151: 无效的事务处理 IDORA-00152: 当前会话与请求的会话不匹配ORA-00153: XA 库中的内部错误ORA-00154: 事务处理监视器中的协议错误ORA-00155: 无法在全局事务处理之外执行工作ORA-00160: 全局事务处理长度 超出了最大值 ()ORA-00161: 事务处理的分支长度 非法 (允许的最大长度为 )ORA-00162: 外部 dbid 的长度 超出了最大值 ()ORA-00163: 内部数据库名长度 超出了最大值 ()ORA-00164: 在分布式事务处理中不允许独立的事务处理ORA-00165: 不允许对远程操作进行可移植分布式自治转换ORA-00200: 无法创建控制文件ORA-00201: 控制文件版本 与 ORACLE 版本 不兼容ORA-00202: 控制文件: ''ORA-00203: 使用错误的控制文件ORA-00204: 读控制文件时出错 (块 ,# 块 )ORA-00205: 标识控制文件出错,有关详情,请检查警告日志ORA-00206: 写控制文件时出错 (块 ,# 块 )ORA-00207: 控制文件不能用于同一数据库ORA-00208: 控制文件的名称数超出限制ORA-00209: 控制文件块大小不匹配,有关详情,请检查警告日志ORA-00210: 无法打开指定的控制文件ORA-00211: 控制文件与先前的控制文件不匹配ORA-00212: 块大小 低于要求的最小大小 ( 字节)ORA-00213: 不能重新使用控制文件;原文件大小为 ,还需ORA-00214: 控制文件 '' 版本 与文件 '' 版本 不一致ORA-00215: 必须至少存在一个控制文件ORA-00216: 无法重新调整从 8.0.2 移植的控制文件大小ORA-00217: 从 9.0.1 进行移植无法重新调整控制文件的大小ORA-00218: 控制文件的块大小 与 DB_BLOCK_SIZE () 不匹配ORA-00219: 要求的控制文件大小 超出了允许的最大值ORA-00220: 第一个例程未安装控制文件,有关详情,请检查警告日志ORA-00221: 写入控制文件出错ORA-00222: 操作将重新使用当前已安装控制文件的名称ORA-00223: 转换文件无效或版本不正确ORA-00224: 控制文件重设大小尝试使用非法记录类型 ()ORA-00225: 控制文件的预期大小 与实际大小 不同ORA-00226: 备用控制文件打开时不允许进行操作ORA-00227: 控制文件中检测到损坏的块: (块 ,# 块 )ORA-00228: 备用控制文件名长度超出了最大长度ORA-00229: 操作不允许: 已挂起快照控制文件入队ORA-00230: 操作不允许: 无法使用快照控制文件入队ORA-00231: 快照控制文件未命名ORA-00232: 快照控制文件不存在, 已损坏或无法读取ORA-00233: 控制文件副本已损坏或无法读取ORA-00234: 标识或打开快照或复制控制文件时出错ORA-00235: 控制文件固定表因并发更新而不一致ORA-00236: 快照操作不允许: 挂上的控制文件为备份文件ORA-00237: 快照操作不允许: 控制文件新近创建ORA-00238: 操作将重用属于数据库一部分的文件名ORA-00250: 未启动存档器ORA-00251: LOG_ARCHIVE_DUPLEX_DEST 不能是与字符串 相同的目的地ORA-00252: 日志 在线程 上为空,无法存档ORA-00253: 字符限制在 以内,归档目的字符串 超出此限制ORA-00254: 存档控制字符串 '' 时出错ORA-00255: 存档日志 (线程 , 序列 # ) 时出错ORA-00256: 无法翻译归档目的字符串ORA-00257: 存档器错误。
Oracle经验分享-常用报错及解决办法

问题一、监听器未能启动专用的服务器进程今天通信频道,在更新代码后,出现WEB或PLSQL客户端连接数据库连接不上。
重启下数据库和TOMCA T后正常一段后又出现此故障。
监听器日志后面都提示:08-1月 -2010 14:10:59 *(CONNECT_DATA=(SID=vnet)(CID=(PROGRAM=)(HOST=__jdbc__)(USER=))) *(ADDRESS=(PROTOCOL=tcp)(HOST=某IP)(PORT=3947)) * establish * fjroom * 12500 TNS-12500: TNS:监听器未能启动专用的服务器进程TNS-12560: TNS: 协议适配器错误TNS-00530: 协议适配器错误PLSQL客户端连接的时候提示:监听器未能启动专用的服务器进程原因:ORACLE数据库所在服务器的防火墙被启动,之前是关着(不知被谁启起来的)。
而且防火墙仅开放1521端口。
分析:服务器A安装有:ORACLE数据库和运行WEB程序(连接本台数据库)。
同样的WEB 程序在服务器B运行并连接服务器A的数据库。
问题出现在12月31号,应该是防火墙被启起来时候。
由于防火墙只开放1521监听器端口。
由于ORACLE用到不止一个端口(还有一个随机端口),所有服务器B程序虽然可以监听到ORACLE可就是获取不上数据库的连接!(之前,我查看ORACLE监听日志有从服务器B过来的记录,我错以为服务器B有连接上数据库。
另外,服务器B程序访问少,所以我没去在意他是否连接程序)这样服务器B程序可以监听到但获取不到数据库连接,故导致死循环:监听->获取不到连接->再监听->获取不到连接。
在监听日志有大量这样连接记录:08-1月 -2010 12:14:02 *(CONNECT_DATA=(SID=vnet)(CID=(PROGRAM=)(HOST=__jdbc__)(USER=))) *(ADDRESS=(PROTOCOL=tcp)(HOST=某IP)(PORT=4280)) * establish * fjroom * 0 时间过去几个小时候后,便会出现上面所说的故障。
Oracle数据库操作常见错误及解决方案

Oracle数据库操作常见错误及解决方案这个错误通常发生在尝试查询一个表或视图但该表或视图不存在时。
解决方案是确保表或视图存在,并且用正确的名称引用它们。
使用DESCRIBE命令或查询SYS.ALL_TABLES视图来验证表或视图是否存在。
另外,确保用户有足够的权限来访问表或视图。
这个错误发生在使用无效的用户名或密码来连接到Oracle数据库时。
解决方案是确保提供了正确的用户名和密码,并且用户在数据库中存在且密码正确。
可以通过使用SQL*Plus或Oracle SQL Developer来验证用户名和密码是否正确。
这个错误通常发生在尝试使用无效的数字进行数值计算时,例如将一个字符串转换为数字时。
解决方案是确保提供的值是有效的数字。
可以使用TO_NUMBER函数将字符串转换为数字,并使用TO_CHAR函数将数字转换为字符串。
这个错误通常发生在尝试向一个非空列插入NULL值时。
解决方案是确保插入的值不为NULL,并与列的数据类型匹配。
如果希望列允许NULL 值,可以修改表定义以允许NULL值。
这个错误通常发生在使用无效的列名或对象名称时。
解决方案是确保引用的列名或对象名称存在且正确。
可以使用DESCRIBE命令或查询SYS.ALL_TAB_COLUMNS视图来验证列名或对象名称是否正确。
这个错误通常发生在使用不存在的函数、过程或包体时。
解决方案是确保引用的函数、过程或包体存在且正确。
可以使用DESCRIBE命令或查询SYS.ALL_PROCEDURES和SYS.ALL_PACKAGES视图来验证对象是否存在。
这个错误通常发生在无法解析TNS服务名称时。
解决方案是确保TNS 服务名称正确,并且TNS配置文件(tnsnames.ora)中包含了正确的服务定义。
可以使用lsnrctl命令来验证TNS服务是否可用。
这个错误通常发生在无法连接到Oracle数据库时。
解决方案是确保Oracle数据库监听程序正在运行,并且可以通过网络访问。
oracle常见错误号

rman target/
rman>crosscheck archivelog all;
rman>crosscheck backup ;
7、删除重复的备份集和归档日志
rman>delete expired archivelog all;
rman>delete expired backup;
原因磁盘空间不足
解决方法:
1、查询表空间 把不要的表空间删了
2、把要备份的表空间的大小设置小一点 不要设置太大了
3.、将归档设置到其他目录,修改alter system set log_archive_dest = 其他路径
4、.转移或者删除闪回恢复区里的归档日志。
违反完整约束条件(orauser.FK_KNO_EVENTTYPE1)--已找到子记录
14,ORA-00936: missing expression 缺失表达式
15,ORA-00001: unique constraint (BUSHR.PK_T_DIC_BMFL) violated 违反唯一约束条件(主键值重复)
18,ORA-28001 口令已经失效
19,ORA-28000 帐户已被锁定
20,ORA-27072:ORA-19502: 磁盘空间不足 错误处理
RMAN-03002: failure of backup02:38:38
5,ORA-00904: "OBJECTID": invalid identifier 无效标识符
6,ORA-00904 invalid column name 列名无效
7,ORA-01406: fetched column value was truncated 读取的列值被截断
Oracle错误代码案例总结及解决方案

Oracle错误代码案例总结及解决方案随着Oracle数据库的使用,难免会遇到一些错误代码。
本文将介绍一些常见的Oracle错误代码以及解决方案。
这个错误通常是由于输入的用户名或密码不正确造成的。
解决办法是验证用户名和密码是否正确,并确保数据库实例启动。
这个错误通常是由于在SQL查询中引用了一个不存在的列或表名造成的。
解决办法是检查查询中的列名或表名是否正确,如果需要,可以使用引号将其括起来。
这个错误通常是由于连接描述符无法被解析造成的。
解决办法是检查tnsnames.ora文件中的连接描述符是否正确,并确保listener服务正在运行。
这个错误通常是由于在数值比较中使用了无效的字符造成的。
解决办法是检查数据类型是否正确,并确保传入的值是有效的数字。
这个错误通常是由于SQL语句缺少了必要的结束符号造成的。
解决办法是确保每条SQL语句以分号结尾,并检查语法是否正确。
这个错误通常是由于插入或更新操作违反了表的完整性约束条件造成的。
解决办法是确保插入或更新的值符合表的约束条件,并确保触发器、外键等相关对象正确配置。
这个错误通常是由于在更新语句的THEN子句中没有包含所有列造成的。
解决办法是确保更新语句中的THEN子句包含所有需要更新的列。
这个错误通常是由于在SQL语句中缺少需要的表达式造成的。
解决办法是确保SQL语句中的所有操作数都是有效的,并检查语法是否正确。
这个错误通常是由于插入或更新操作违反了UNIQUE约束条件造成的。
解决办法是确保插入或更新的值不会违反UNIQUE约束条件,并确保索引、触发器等相关对象正确配置。
这个错误通常是由于读取的数据已被其他会话修改或删除造成的。
解决办法是增加undo表空间的大小,或调整事务隔离级别以减少读取之间的时间差。
总结:本文介绍了一些常见的Oracle错误代码以及解决方案,包括无效的用户名/密码、无效的标识符、无法解析指定的连接标识符、无效数字、SQL命令未正确结束、违反完整性约束条件、缺失表达式、UNIQUE约束条件违背和快照过旧等。
Oracle错误代码大全

Oracle错误代码大全•Introduction•ORA-00001: Unique Constraint Violated•ORA-00904: Invalid Identifier•ORA-01017: Invalid Username/Password•ORA-12154: TNS:could not resolve the connect identifier specified•ConclusionIntroduction在使用 Oracle 数据库时,用户可能会遇到各种各样的错误代码。
错误代码是 Oracle 数据库用于通知用户发生了什么问题的一种标准化方式。
本文档旨在向用户提供一个 Oracle 错误代码的大全,以帮助用户更好地理解和解决这些错误。
ORA-00001: Unique Constraint ViolatedORA-00001 错误通常表示在插入或更新操作中违反了唯一约束。
这意味着在插入或更新数据时,新数据中的一个或多个列的值与已存在的数据中的某个列的值冲突。
要解决此错误,可以采取以下措施: - 检查数据库中是否存在重复的唯一约束。
- 检查插入或更新数据的值是否与表中现有数据的值冲突。
- 检查是否有其他进程正在访问或修改正在插入或更新的数据。
ORA-00904: Invalid IdentifierORA-00904 错误表示在 SQL 语句中使用了无效的标识符。
这可能是由于以下原因导致的: - SQL 语句中引用了不存在的列名。
- SQL 语句中引用了不存在的表名。
- SQL 语句中引用了不存在的别名。
- SQL 语句中引用了无效的变量名。
要解决此错误,可以采取以下措施: - 检查 SQL 语句中的所有列名、表名、别名和变量名的拼写是否正确。
-确保所引用的对象〔表、列等〕存在于数据库中。
- 使用适宜的引用标记,例如双引号或方括号,以确保正确解析标识符。
Oracle_ORA一些错误整理

1、ORA-12560: TNS: 协议适配器错误场景:在cmd窗口输入:sqlplus "/as sysdba"想打开数据库时报的错;原因:没有启动Oracle服务器;解决:WIN+R,跳出运行窗口,输入"services.msc",打开服务窗口;找到OracleServiceORACLE服务,查看是否为启动,右键启动即可。
2、ORA-12541:TNS:no listener场景:用pl/sql developer客户端连接数据库;原因:监听器没有启动;解决:打开服务,启动OracleOraDB12Home1TNSListener。
3、ORA-28547:connection to server failed,probable Oracle Net admin error 场景:将监听器配置文件:listener.ora中的SID_NAME 更改后导致的;原因:多数是因为navicat本地的OCI版本与Oracle服务器器不符造成的;解决:将SID_NAME修改为原来的名称。
4、ORA-01438因为插入的数值大于所在的列的最大允许精度。
5、ORA-12899字符值大于此列指定的允许精度6、ORA-00942:表或视图不存在表或试图不存在7、ORA-01400: 无法将NULL 插入("SCOTT"."ITEMS"."ITEMNAME")因向表中插入数据时,主键/约束的列为空。
8、ORA-00001: 违反唯一约束条件(SCOTT.PK_ITEMS)因想表中插入数据时,某列设置了唯一约束,插入的值,表中已经存在了。
9、ORA-01017: 用户名/口令无效; 登录被拒绝有可能用户名或者密码错误10、ORA-01507有可能是关系数据库后,启动的时候没有加载数据库,如:startup nomount就是启动实例不加载数据库的11、ORA-01034: ORACLE not available数据库处于关闭状态。
Oracle 错误大全

Oracle 错误大全ORA-00001: 违反唯一约束条件(.)ORA-00017: 请求会话以设置跟踪事件ORA-00018: 超出最大会话数ORA-00019: 超出最大会话许可数ORA-00020: 超出最大进程数()ORA-00021: 会话附属于其它某些进程;无法转换会话ORA-00022: 无效的会话ID;访问被拒绝ORA-00023: 会话引用进程私用内存;无法分离会话ORA-00024: 单一进程模式下不允许从多个进程注册ORA-00025: 无法分配ORA-00026: 丢失或无效的会话IDORA-00027: 无法删去当前会话ORA-00028: 您的会话己被删去ORA-00029: 会话不是用户会话ORA-00030: 用户会话ID 不存在。
ORA-00031: 标记要删去的会话ORA-00032: 无效的会话移植口令ORA-00033: 当前的会话具有空的移植口令ORA-00034: 无法在当前PL/SQL 会话中ORA-00035: LICENSE_MAX_USERS 不能小于当前用户数ORA-00036: 超过递归SQL () 级的最大值ORA-00037: 无法转换到属于不同服务器组的会话ORA-00038: 无法创建会话: 服务器组属于其它用户ORA-00050: 获取入队时操作系统出错ORA-00051: 等待资源超时ORA-00052: 超出最大入队资源数()ORA-00053: 超出最大入队数ORA-00054: 资源正忙,要求指定NOWAIT英文解析:resource busy and acquire with NOWAIT specified错误解析:表被锁住了,要不等待表解锁,要不就去kill了它。
ORA-00055: 超出DML 锁的最大数ORA-00056: 对象'.' 上的DDL 锁以不兼容模式挂起ORA-00057: 超出临时表锁的最大数ORA-00058: DB_BLOCK_SIZE 必须为才可安装此数据库(非)ORA-00059: 超出DB_FILES 的最大值ORA-00060: 等待资源时检测到死锁ORA-00061: 另一个例程设置了不同的DML_LOCKS,由于死锁使事务回退。
Oracle数据库报错信息大全

Oracle数据库错误消息导出错误消息l EXP-00000导出终止失败原因:导出时产生Oracle错误。
操作:检查相应的Oracle错误消息。
l EXP-00001数据域被截断-列长度=数字,缓冲区大小=数字,实际大小=数字原因:数据缓冲区中列不适合。
操作:记录错误参数和消息,作为输出内部错误发送到Oracle Support Services (如果一个表不能完全导出,则导出不能继续)。
l EXP-00002写导出文件错误原因:不能导入导出文件,可能由设备错误引起,通常伴随有操作系统引起的设备错误。
操作:采取适当措施恢复该设备。
l EXP-00003未发现段(数字,数字)的存储定义原因:导出不能为簇、索引或者表查找存储定义。
操作:记录伴随的消息并作为导出内部错误报告Oracle Support Services。
l EXP-00004无效用户名或口令原因:指定了无效的用户名或口令。
操作:使用有效的用户名和口令重试。
l EXP-00005 所有的许可的登录尝试失败原因:试图再三以一无效的用户名或口令登录。
操作:关闭并重启实用程序,然后以一有效的用户名和口令重试。
l EXP-00006内部矛盾错误原因:导出的数据结构被破坏了。
操作:记录伴随的消息并作为导出内部错误报告Oracle Support Services。
l EXP-00007字典显示没有string.string列原因:导出没能从数据字典搜集列信息,表可能被删除。
操作:重试导出,如果再次发生这个错误,则作为导出内部错误报告Oracle Support Services。
l EXP-00008遇到ORACLE错误号原因:导出遇见已引用的Oracle错误。
操作:查阅Oracle错误,采取适当的方式。
l EXP-00009没有权限导出字符串表格的字符串原因:试图导出其他用户的表格,只有数据库管理员能导出其他的用户的表格。
操作:要求你的数据库管理员执行导出。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.Oracle ORA-01555快照过旧的错误首先了解Oracle在什么情况下会产生ORA-01555错误:假设有一张6000万行数据的testdb表,预计testdb全表扫描1次需要2个小时,参考过程如下:1、在1点钟,用户A发出了select * from testdb;此时不管将来testdb怎么变化,正确的结果应该是用户A会看到在1点钟这个时刻的内容。
2、在1点30分,用户B执行了update命令,更新了testdb表中的第4100万行的这条记录,这时,用户A的全表扫描还没有到达第4100万条。
毫无疑问,这个时候,第4100万行的这条记录是被写入了回滚段,假设是回滚段UNDOTS1,如果用户A的全表扫描到达了第4100万行,是应该会正确的从回滚段UNDOTS1中读取出1点钟时刻的内容的。
3、这时,用户B将他刚才做的操作提交了,但是这时,系统仍然可以给用户A提供正确的数据,因为那第4100万行记录的内容仍然还在回滚段UNDOTS1里,系统可以根据SCN到回滚段里找到正确的数据,但要注意到,这时记录在UNDOTS1里的第4100万行记录已经发生了重大的改变:就是第4100万行在回滚段UNDOTS1里的数据有可能随时被覆盖掉,因为这条记录已经被提交了!4、由于用户A的查询时间漫长,而业务在一直不断的进行,UNDOTS1回滚段在被多个不同的transaction使用着,这个回滚段里的extent循环到了第4100万行数据所在的extent,由于这条记录已经被标记提交了,所以这个extent是可以被其他transaction覆盖掉的!5、到了1点45分,用户A的查询终于到了第4100万行,而这时已经出现了第4条说的情况,需要到回滚段UNDOTS1去找数据,但是已经被覆盖掉了,这时就出现了ORA-01555错误。
原因分析:"报表"程序执行时间漫长,在程序查询的过程中其他用户对"报表"进行了更新,被更新的数据写入了回滚段,当程序到回滚段找数据时,发现数据已经被覆盖掉,于是就出现了ORA-01555错误。
另外"报表"程序执行效率不高也会造成ORA-01555错误。
解决办法:1、扩大回滚段,因为回滚段是循环使用的,如果回滚段足够大,那么那些被提交的数据就能保存足够长的时间,使那些大事务完成一致性读取。
之前EBS系统UNDO表空间为9GB,目前为10GB。
见下图:2、增加undo_retention时间,因为UNDO回滚段是循环使用,里面的数据可能随时被循环覆盖掉,如果设置undo_retention时间更长,那么在retention规定的时间内,任何其他事务都不能覆盖这些数据。
目前EBS系统undo_retention为10800秒(3个小时)。
见下图:3、最重要的一点就是优化程序相关查询语句,减少查询语句的一致性读,降低读取不到回滚段数据的风险。
所有的出错信息都会纪录到数据库日志alert_PROD.log文件中,下图红线部分是一条SQL查询词句,ORA-01555很有可能是这条语句造成,把这条语句提供给开发人员来分析和优化程序代码。
ORA-01578racle的坏块即ORA-01578错,同时还可能伴随ORA-01110错,这种错误对于初学者或是那些没有实践经验的dba来说无疑是很棘手的。
我当初就深受其害,写下这篇文章则是希望对大家有所帮助。
一、出问题时的情景1、我的一个计费的入库的进程停掉,报的便是ORA-01578错,对应用相关的表tg_bill03做SQL>select from tg_cdr03 where rownum<10;这样是可以的,但做SQL>select count(*) from tg_bill03;时则报ORA-01578错。
2、检查alter<sid>.log中看到一几条报错信息:Errors in file /oracle816/app/admin/billing/udump/ora_7281_billing.trc:ORA-01578: ORACLE data block corrupted (file # 126, block # 88490)ORA-01110: data file 126: '/dev/vgjf7/rdata471'二、事后分析产生这种问题的原因1、十之八九这个Oracle的数据库server打开了异步I/O(async io)或增加了写进程。
2、硬件的I/O出现了错误。
3、操作系统的I/O或缓存出现我问题,比如操作系统对于异步I/O的补丁没有打。
4、手动的修改了数据文件中的数据,我模拟这个错误用的便是这种方式。
三、解决方法这种问题的解决方法是很多的,假如你用的是归档方式,则可以基于时间点恢复来解决。
不过这里介绍一种比较方便的解决方式,因为我的库没有开归档。
Metaline关于ORA-01578的文字也很多,不过我看过后总觉得都不那么实用,不能解决实际的问题。
1、解决这种问题的第一步是首先你要确定是什么段、哪个段坏了,是索引还是表?A、打开alter<sid>.log,找到ORA-01578的报错信息,并记录下file#及block的值,我这里是126和88490。
B、执行以下语句看哪个段坏了SQL>Select * from dba_extents2 where file_id=<F>3 and <B> between block_id and block_id+blocks-1;这里的F指的是file#,B指的是block#我的显示结果指出是tg_bill03出现了坏块。
2、假如确定下来坏的是索引段,这时你就可以轻舒一口气了,只要把这个索相删除然后重建一下就可以了,假如出现坏的是表段,则应往下走了。
3、记录下这个表的建表语句为我方便,建议使用PL/SQL Developer来完成,假如你没有可以在/plsqldev.Html去下载一个,操作步骤是这样的。
A、以表的owner用pl/sql developer连入oracleB、在左面的树状栏中找到这个表tg_bill03,右击该表->view->View SQL,记录下sql,以备以下步骤中重建索引。
4、实际处理了,以我的那个表为例A、以tg_bill03的owner连入oracleB、使用诊断事件10231SQL> ALTER SYSTEM SET EVENTS ‘10231 trace name context forever,level 10’;C、创建一个临时表tg_bill_tmp的表中除坏块的数据都检索出来SQL>CREATE TABLE tg_bill03_tmp as select * from tg_bill03;C、更名原表,并把tg_bill03_tmp为tg_bill03SQL>alter table tg_bill03 rename to tg_bill03_bak;SQL>alter table tg_bill03_tmp to tg_bill03;D、在tg_bill03上重新创建索引、约束、授权、trigger等对象E、利用表之间的业务关系,把坏块中的数据补足。
四、如何尽量减少问题及问题的损失呢分析了产生问题的原因,我认为可以采取以下几个措施1、在为提高性能为操作系统打开异步I/O时,一定要与oracle及操作系统技术支持联系把操作系统与异步I/O相关的补丁要打全。
2、制定一个良好的备份恢复策略,最好有表的eXP备份3、要及时的检查硬件的状态,及时更换驱动器部件。
ORA-01548: 已找到活动回退段'_SYSSMU1$',终止删除表空间的解决办法出现原因:在oracle的服务期控制台直接进行了数据文件的脱离的操作,提示如下:ORA-01145:除非启用了介质恢复,否则不允许紧急脱机ALTER DATABASEDATAFILE 'E:\ORACLE\ORADATA\SHAOMF\UNDOTBS01.DBF' OFFLINE DROP;症状:删除回滚段表空间(drop tablespace undotbs1 including contents)的时候报下面的错ORA-01548: 已找到活动回退段'_SYSSMU1$',终止删除表空间处理过程:1 create undo tablespace undotBS2 datafile'E:\oracle\oradata\shaomf\UNDOTBS2.DBF' size 100m;alter system set undo_tablespace=undotBS2;drop tablespace undotbs1 including contents;(进行这部操作的时候会报下面的错):ORA-01548: 已找到活动回退段'_SYSSMU1$',终止删除表空间2 修改文件E:\oracle\admin\shaomf\pfile\init.ora.162007221035,如下:undo_management=manualundo_retention=10800undo_tablespace=undotBS2_CORRUPTED_ROLLBACK_SEGMENTS=(_SYSSMU1$,_SYSSMU2$,_SYSSMU3$,_SYSSMU3$,_SYSSMU4$,_SYSSMU5$,_SYSSMU 6$,_SYSSMU7$,_SYSSMU8$,_SYSSMU9$,_SYSSMU10$)3 启动服务startup pfile=E:\oracle\admin\shaomf\pfile\init.ora.1620072210354 删除表空间drop tablespace undotbs1 including contents;create undo tablespace undotBS1 datafile'E:\oracle\oradata\shaomf\UNDOTBS01.DBF' size 200m;drop tablespace undotBS2 including contents;5 修改init.ora.162007221035,如下:undo_management=autoundo_retention=10800undo_tablespace=undotBS1#_CORRUPTED_ROLLBACK_SEGMENTS=(_SYSSMU1$,_SYSSMU2$,_SYSSMU3$,_SYSSMU3$,_SYSSMU4$,_SYSSMU5$,_SYSSMU 6$,_SYSSMU7$,_SYSSMU8$,_SYSSMU9$,_SYSSMU10$)6 关闭服务,并且用下面的命令重新启动服务startup pfile=E:\oracle\admin\shaomf\pfile\init.ora.1620072210357 拷贝spfile文件,原先的spfile文件做好备份create spfile='E:\oracle\ora92\database\SPFILESHAOMF.ORA' FROMpfile='E:\oracle\admin\shaomf\pfile\init.ora.162007221035';8 关闭服务器,重新启动服务器,即可。