ora-07445错误总结
- 格式:pdf
- 大小:250.14 KB
- 文档页数:7
Oracle数据库常见问题处理一、解决Oracle 版本数据库于ORA-07445宕机问题故障现象: XX网数据库宕机,查看日志发现以下内容: Wed Jun 8 20:24:17 2005 Errors in file /u02/app/oracle/admin/unicom/udump/unicom_ora_:ORA-07445: \\263\\366\\317\\326\\322\\354\\263\\243: \\272\\313\\320\\304\\327\\252\\264\\242 [00000 00101C3089C] [SIGSEGV] [Address not mappe d to object] [0x000000000] Wed Jun 8 20:24:22 2005 Errors in file /u02/app/oracle/admin/unicom/bdump/unicom_pmon_: ORA-07445: exception encountered: core dump [0000000101C399A0] [SIGSEGV] [Address no t mapped to object] [0x000000000] Wed Jun 8 20:24:23 2005 Errors in file /u02/app/oracle/admin/unicom/bdump/unicom_pmon_: ORA-07445: exception encountered: core dump [0000000101C399A0] [SIGSEGV] [Address no t mapped to object] [0x000000000] ORA-00602: internal programming exception ORA-07445: exception encountered: core dump [0000000101C399A0] [SIGSEGV] [Address no t mapped to object] [0x000000000] Wed Jun8 20:24:33 2005 CKPT: terminating instance due to error 472 Instance terminated by CKPT, pid = 11604 Wed Jun 8 21:04:47 2005 Starting ORACLE instance (normal) 解决办法:Oracle工程师建议安装Oracle补丁p3949307_9206_SOLARIS64,经过测试,安装步骤如下: 1.解压补丁文件: unzip p3949307_9206_ 解开后的目录是:4060756 。
Oracle 11g 数据库常见故障处理TSD配套产品服务部2009年6月27日目标通过本课程的学习,您将了解以下内容:Oracle 11g数据库常见故障及处理安装和配置类问题实例管理类问题数据管理类管理数据库恢复类问题管理工具类问题ORA-00600介绍和案例分析ORA-07445介绍和案例分析目录安装配置类实例管理类数据管理类数据恢复类管理工具类ORA-00600ORA-07445目标通过本章节的学习,您将了解以下内容:ORACLE 11g常见的安装类问题这些问题的分析和解决如何在客户端启动图形界面问题用客户端连接到Unix或者Linux平台上安装数据库软件时,常常无法启动图形界面,因此无法进行安装解决以root用户执行:xhost +客户端需要安装xmanager,并且通过Xbrowser登陆到主机以oracle用户执行:export DISPLAY=客户端IP:0.0xclock (测试能否显示图形界面)如果图形界面还出不来,可以尝试export DISPLAY=客户端IP:1.0如何在服务器端启动图形界面问题如果直接在服务器上安装数据库软件时,有时也会碰到不能启动图形界面的问题解决以root用户执行:xhost +以oracle用户执行:export DISPLAY=:0.0xclock (测试能否显示图形界面)安装CRS时,无法添加节点故障现象AIX或HPUX上安装CRS的过程中,有一步是添加节点,正常情况下,应该可以添加本地节点和远程节点,但添加远程节点时失败。
解决方法如果要安装的CRS需要依赖操作系统双机管理共享文件,那么安装CRS时,必须保证操作系统双机服务启动如果不需要操作系统双机软件,而只需要ASM管理共享存储,那么必须在操作系统上删除双机软件,对于HACMP,要保证没有安装rsct.basic.hacmp包,对于HPUX,要保证没有安装Serviceguard包AIX上安装CRS时提示bos.cifs_fs.rte检查不通过故障现象在AIX5L上安装CRS时,当安装程序自动检查操作系统补丁时,提示bos.cifs_fs_rte未安装解决办法安装所需AIX程序包smitty installp重启操作系统shutdown -FrCRS安装最后阶段在第二个节点运行root.sh报错故障现象安装CRS最后阶段,在第二个节点执行root.sh时,报错:The given interface(s), "eth2" is not public.Public interfaces should be used to configure virtual IPs解决办法以root身份手工在第二个节点执行vipcacd /<CRS安装目录>/bin./vipca安装RAC时报ORA-00603,ORA-29702故障现象在安装RAC时,出现下列错误:ORA-00603:ORACLE server session terminated by fatal error或ORA-29702:error occurred in Cluster Group Service operation原因分析RAC的节点名出现在了/etc/hosts文件中的回送地址中xxxx解决方法如果机器名出现在回送地址条目中,如下所示:127.0.0.1 rac1 localhost.localdomain localhost需要灾回送地址中删除掉机器名,如下:127.0.0.1 localhost.localdomain localhost无法连接数据库ORA-12521,ORA-12505故障现象连接数据库时报错:原因分析客户端tnsnames.ora配置的连接串中,关于instance_name的设置不正确,这个错误类似ORA-12505: TNS:listener could not resolve SID given in connectdescriptor解决方法检查数据库的instance_name:select instance_name from v$instance;修改客户端tnsnames.ora文件,设置正确的instance_name或SID无法连接数据库ORA-12541故障现象连接数据库时报错:ERROR:ORA-12541: TNS:no listener原因分析可能原因一:客户端tnsnames.ora配置的连接串中,监听端口号设置不正确可能原因二:数据库服务器监听没有启动解决方法检查客户端tnsnames.ora文件,设置正确的监听端口号检查服务器上的监听是否正常启动无法连接数据库ORA-12535故障现象连接数据库时报错:ERROR:ORA-12535: TNS:operation timed out原因分析可能原因:客户端tnsnames.ora中,服务器IP地址设置错误可能原因:防火墙阻断了连接解决方法正确配置tnsnames.ora中的服务器IP地址利用Tnsping connectstring,测试配置是否正确,如果不通,检查网络。
常见错误:ORA-00001:违反唯一约束条件(主键错误)ORA—00028:无法连接数据库进程ORA—00900:无效sql语句ORA—00904:字段名写错或是建表时最后一个字段有逗号ORA-00907:缺少右括号ORA—00911:无效字符ORA—00917:缺少逗号ORA-00918:未明确定义列ORA-00922:丢失或无效的选项(表名等可能有空格)ORA—00923:未找到FROM关键字ORA—00926:缺少valueORA—00933: SQL命令未正确结束ORA—00936:缺少表达式ORA—00937:不是单组分组函数ORA—00942:表或视图不存在ORA-00947:没有足够的值(一般是插入语句出现的错,插入值的数量与字段不符)ORA-00979:不是group by的表达式ORA—01009:缺少法定参数(eg:sql做参数时,且sql语句为空时,报错)ORA-01098:数据库无法关闭及启动ORA—01400:无法将null值插入ORA—01401:插入的值对于列过大ORA-01476:sql中存在除数为零ORA—01579: 恢复过程中出现写错误ORA—01580: 创建控制备份文件时出错ORA-01581: 尝试使用已分配的回退段() 新区()ORA-01582:无法打开要备份的控制文件ORA—01583: 无法获得要备份的控制文件的块大小ORA-01584:无法获得要备份的控制文件的文件大小ORA-01585: 标识备份文件时出错ORA-01586: 无法打开要备份的目标文件ORA-01587: 复制控制文件的备份文件时出错ORA-01588:要打开数据库则必须使用RESETLOGS 选项ORA-01589: 要打开数据库则必须使用RESETLOGS 或NORESETLOGS 选项ORA-01590:段可用列表数()超出最大数ORA—01591:锁定已被有问题的分配事务处理挂起ORA—01592:将第7 版回退段() 转换为Oracle 8 版格式时出错ORA—01593: 回退段最佳大小(blks) 小于计算的初始大小( blks)ORA—01594: 尝试放回已释放的回退段()区()ORA-01595:释放区() 回退段()时出错ORA—01596: 无法在参数中指定系统ORA-01597:无法改变联机或脱机系统回退段ORA-01598: 回退段''未联机ORA-01599: 无法获得回退段(), 高速缓存空间已满ORA—01600: 至多只有一个””在子句""()中ORA-01601: 子句””()中的存储桶大小非法ORA-01603:子句"”()中的分组大小非法ORA—01604: 子句”"()中的编号范围非法ORA—01605: 子句”"()中缺少编号ORA—01606: gc_files_to_locks 不同于另一已安装例程的参数ORA-01608:无法将回退段’'联机,其状态为()ORA-01609:日志是线程的当前日志—无法删除成员ORA—01610: 使用BACKUP CONTROLFILE 选项的恢复必须已完成ORA-01611: 线程编号无效- 必须介于1 和之间ORA-01612: 线程已经启用ORA—01613:线程只有日志- 要求至少启用2 个日志ORA-01614:线程正忙- 无法启用ORA—01615: 线程已安装—无法禁用ORA-01616: 线程已打开—无法禁用ORA-01617: 无法安装: 不是有效的线程编号ORA-01618: 线程未启用- 无法安装ORA—01619:线程已由另一例程安装ORA-01620: 没有可用于安装的公用线程ORA-01621:数据库打开时无法重命名当前日志的成员ORA—01622: 必须指定线程编号- 没有特定默认值ORA-01623: 日志是线程的当前日志- 无法删除ORA—01624: 线程的紧急恢复需要日志ORA-01625:回退段'’不属于此例程ORA—01626:回退段号''无法处理更多事务处理ORA—01627: 回退段号''未联机ORA—01628: 已达到max # extents ()(回退段)ORA-01629: 已达到max #extents (),此时正在保存表空间的撤消ORA—01630: 表空间中的temp 段达到max #extents()ORA-01631:表。
ORA-02201: 此处不允许序列(号)ORA-02202: 此群集中不允许添加其它表ORA-02203: 不允许的INITIAL 存储选项ORA-02204: 不允许ALTER, INDEX 和EXECUTE 用于视图ORA-02205: 只有SELECT 和ALTER 权限对序列有效ORA-02206: 重复的INITRANG 选项说明ORA-02207: 无效的INITRANS 选项值ORA-02208: 重复的MAXTRANS 选项说明ORA-02209: 无效的MAXTRANS 选项值ORA-02210: 未指定ALTER TABLE 的选项ORA-02211: 无效的PCTFREE 或PCTUSED 值ORA-02212: 重复的PCTFREE 选项说明ORA-02213: 重复的PCTUSED 选项说明ORA-02214: 重复的BACKUP 选项说明ORA-02215: 重复的表空间名子句ORA-02216: 需要表空间名ORA-02217: 重复的存储选项说明ORA-02218: 无效的INITIAL 存储选项值ORA-02219: 无效的NEXT 存储选项值ORA-02220: 无效的MINEXTENTS 存储选项值ORA-02221: 无效的MAXEXTENTS 存储选项值ORA-02222: 无效的PCTINCREASE 存储选项值ORA-02223: 无效的OPTIMAL 存储选项值ORA-02224: EXECUTE 权限对于表不允许ORA-02225: 只有EXECUTE 和DEBUG 权限对过程有效ORA-02226: 无效的MAXEXTENTS 值(最大允许为: )ORA-02227: 无效的群集名ORA-02228: 重复的SIZE 说明ORA-02229: 无效的SIZE 选项值ORA-02230: 无效的ALTER CLUSTER 选项ORA-02231: 缺少或无效的ALTER DA TABASE 选项ORA-02232: 无效的MOUNT 模式ORA-02233: 无效的CLOSE 模式ORA-02234: 已经记录对此表的更改ORA-02235: 此表已将更改记录在另一表中ORA-02236: 无效的文件名ORA-02237: 无效的文件大小ORA-02238: 文件名列表具有不同的文件数ORA-02239: 存在引用此序列的对象ORA-02240: 无效的OBJNO 或TABNO 值ORA-02241: 必须是EXTENTS (FILE <n> BLOCK <n> SIZE <n>,...) 格式ORA-02242: 未指定ALTER INDEX 的选项ORA-02243: ALTER INDEX 或ALTER MATERIALIZED VIEW 选项无效ORA-02244: 无效的ALTER ROLLBACK SEGMENT 选项ORA-02245: 无效的ROLLBACK SEGMENT 名ORA-02246: 缺少EVENTS 文本ORA-02247: 未指定ALTER SESSION 的选项ORA-02248: 无效的ALTER SESSION 选项ORA-02249: 缺少或无效的MAXLOGMEMBERS 值ORA-02250: 缺少或无效的约束条件名ORA-02251: 此处不允许子查询ORA-02252: 检查未正确结束的约束条件ORA-02253: 此处不允许约束条件说明ORA-02254: 此处不允许DEFAULT <表达式>ORA-02255: obsolete 7.1.5ORA-02256: 要引用的列数必须与已引用道感数匹配ORA-02257: 超出最大列数ORA-02258: 重复或冲突的NULL 和(或)NOT NULL 说明ORA-02259: 重复的UNIQUE/PRIMARY KEY 说明ORA-02260: 表只能具有一个主键ORA-02261: 表中已存在这样的唯一关键字或主键ORA-02262: 对列默认值表达式进行类型检查时, 出现ORA- ORA-02263: 需要指定此列的数据类型ORA-02264: 名称已被一现有约束条件占用ORA-02265: 无法推导引用列的数据类型ORA-02266: 表中的唯一/主键被启用的外部关键字引用ORA-02267: 列类型与引用的列类型不兼容ORA-02268: 引用的表不具有主键ORA-02269: 关键字列不能是LONG 数据类型ORA-02270: 此列列表的唯一或主键不匹配ORA-02271: 表没有这样的约束条件ORA-02272: 约束条件列不能是LONG 数据类型ORA-02273: 此唯一/主键已被某些外部关键字引用ORA-02274: 重复的引用约束条件说明ORA-02275: 此表中已经存在这样的引用约束条件ORA-02276: 默认值类型与列类型不兼容ORA-02277: 无效的序列名ORA-02278: 重复或冲突的ORDER/NOORDER 说明ORA-02279: 重复或冲突的ORDER/NOORDER 说明ORA-02280: 重复或冲突的ORDER/NOORDER 说明ORA-02281: 重复或冲突的ORDER/NOORDER 说明ORA-02282: 重复或冲突的ORDER/NOORDER 说明ORA-02283: 无法改变起始序号ORA-02284: 重复的INCREMENT BY 说明ORA-02285: 重复的START WITH 说明ORA-02286: 未指定ALTER SEQUENCE 的选项ORA-02287: 此处不允许序号ORA-02288: 无效的OPEN 模式ORA-02289: 序列(号)不存在ORA-02290: 违反检查约束条件(.)ORA-02291: 违反完整约束条件(.) - 未找到父项关键字ORA-02292: 违反完整约束条件(.) - 已找到子记录日志ORA-02293: 无法验证(.) - 违反检查约束条件ORA-02294: 无法启用(.) - 约束条件在验证过程中更改ORA-02295: 找到约束条件的多个启用/禁用子句ORA-02296: 无法启用(.) - 找到空值ORA-02297: 无法禁用约束条件(.) - 存在依赖关系ORA-02298: 无法验证(.) - 未找到父项关键字ORA-02299: 无法验证(.) - 未找到重复关键字ORA-02300: 无效的OIDGENERA TORS 值ORA-02301: OIDGENERA TORS 的最大数为255ORA-02302: 无效或缺少类型名ORA-02303: 无法使用类型或表的相关性来删除或取代一个类型ORA-02304: 无效的对象标识文字ORA-02305: 只有EXECUTE, DEBUG 和UNDER权限对类型有效ORA-02306: 无法创建已具有有效相关性的类型ORA-02307: 无法使用REPLACE 选项改变无效类型ORA-02308: 无效的对象类型列选项ORA-02309: 违反原子NULLORA-02310: 超出表中允许的最大列数ORA-02311: 无法使用COMPILE 选项改变具有类型或表相关性的有效类型ORA-02313: 对象类型包含不可查询的类型属性ORA-02315: 默认构造符的参数个数错误ORA-02320: 无法创建嵌套表列的存储表ORA-02322: 无法访问嵌套表列的访问表ORA-02324: THE 子查询的SELECT 列表中存在多列ORA-02327: 无法以数据类型的表达式创建索引ORA-02329: 数据类型的列不能是唯一关键字或主键ORA-02330: 不允许的数据类型说明ORA-02331: 无法创建数据类型为的列的约束条件ORA-02332: 无法对此列的属性创建索引ORA-02333: 无法对此列的属性创建约束条件ORA-02334: 无法推断列类型ORA-02335: 无效的群集列数据类型ORA-02336: 无法访问列属性ORA-02337: 不是对象类型列ORA-02338: 缺少或无效的列约束条件说明ORA-02339: 无效的列说明ORA-02340: 无效的列说明ORA-02342: 取代类型具有编译错误ORA-02344: 无法撤消执行具有表相关性的类型ORA-02345: 无法创建具有基于CURSOR 运算符的列的视图ORA-02347: 无法授权给对象表列ORA-02348: 无法创建具有嵌入LOB 的VARRAY 列ORA-02349: 无效的用户自定义类型- 类型不完整ORA-02351: 记录: 被拒绝- 表, 列上出错ORA-02352: 直接路径连接必须在同类间进行ORA-02353: 多字节字符错误ORA-02354: 字段中出现转换初始化错误ORA-02355: CONSTANT 字段中出现转换错误ORA-02356: 数据库空间耗尽。
ORA-09751: pw_attachPorts: 服务器调用pws_attach 失败ORA-09752: pw_attachPorts: port_allocate 失败ORA-09753: spwat: 无效的进程号ORA-09754: sppst: 传送给sppst 的进程号无效ORA-09755: osngpn: 端口配置失败ORA-09756: osnpns: 名服务器中没有端口ORA-09757: osnipn: 端口配置失败ORA-09758: osnipn: 无法检查名服务器中的端口ORA-09759: osnsbt: 收到的信息错误ORA-09760: osnpui: 无法发送中断信息ORA-09761: pw_destroyPorts: 服务器调用pws_stop_instance 失败ORA-09762: sNeXT_instanceName: 转换错误ORA-09763: osnmpx: 交换Mach 端口时出现发送/接收错误ORA-09764: osnmop: oracle 可执行(代码)访问错误ORA-09765: osnmop: 分叉失败ORA-09766: osnmop: 缓冲区分配失败ORA-09767: osnmfs: msg_send 的返回代码错误ORA-09768: osnmgetmsg: 无法读信息ORA-09769: osnmbr: 无法发送中断信息ORA-09770: pws_look_up: 转换失败ORA-09771: osnmwrtbrkmsg: msg_send 的返回代码错误ORA-09772: osnpmetbrkmsg: 来自主机的信息类型错误ORA-09773: osnmgetdatmsg: 来自主机的信息类型错误ORA-09774: osnmui: 无法发送中断信息ORA-09775: osnmrs: 重置协议错误ORA-09776: pws_look_up: (Oracle 帮助程序) 可执行(代码) 访问错误ORA-09777: osnpbr: 无法发送中断信息ORA-09778: snynfyport: 无法配置通知端口ORA-09779: snyGetPort: 无法分配端口ORA-09786: sllfop: 打开错误,无法打开文件ORA-09787: sllfop: 不可识别的处理选项,格式错误ORA-09788: sllfrb: 无法读文件ORA-09789: sllfsk: 无法读文件ORA-09790: sllfcf: 无法关闭文件ORA-09791: slembdf: 转换错误,无法转换错误文件名ORA-09792: sllfop: 无法分配读缓冲区ORA-09793: szguns: 用户名的长度大于缓冲区的长度ORA-09794: szrbuild: 角色名的长度大于缓冲区的长度ORA-09795: szrbuild: 无法malloc 角色结构ORA-09796: szrbuild: 无法malloc 角色名ORA-09797: 无法获得O/S MAC 权限ORA-09798: 标记比较失败ORA-09799: 文件标记检索失败ORA-09800: 进程阅读权限标记检索失败。
一、EXP-00056遇到Oracle错误1455问题解决办法: 2016-5-10 17:01. 正在导出同义词. 正在导出视图. 正在导出存储过程. 正在导出运算符. 正在导出引用完整性约束条件. 正在导出触发器EXP-00056: 遇到ORACLE 错误1455ORA-01455: 转换列溢出整数数据类型EXP-00000: 导出终止失败解决方法:在exp 后加TRIGGERS=n,例如:exp file=d:\data\tj_data.dmp log=d:\log\tj_log.log TRIGGERS=n2、正在导出运算符. 正在导出引用完整性约束条件. 正在导出触发器. 正在导出索引类型. 正在导出位图, 功能性索引和可扩展索引. 正在导出后期表活动. 正在导出实体化视图. 正在导出快照日志EXP-00008: 遇到ORACLE 错误1455ORA-01455: 转换列溢出整数数据类型EXP-00000: 导出终止失败ORA-01455: 转换列溢出整数数据类型,Export 命令会将表的statistics 值转成成整形。
当这个statistics值超过2^31-1时,就会报这个错误。
最后在exp命令后加“INDEXES=n STATISTICS=none”这两个参数,exp就可以成功导出了。
下面是一个完整的脚本:可以同时导出tjris和tjpacs@echo offecho ================================================echo Windows环境下Oracle数据库的自动备份脚本echo 1.使用当前日期命名备份文件。
echo 2.自动删除7天前的备份。
echo ================================================set V_DATE=%date:~0,4%%date:~5,2%%date:~8,2%set V_HOUR=%time:~0,2%if "%time:~0,1%" == " " set V_HOUR=0%time:~1,1%set DATETIME=%V_DATE%%V_HOUR%%time:~3,2%%time:~6,2%::设置用户名、密码和要备份的数据库。
oracle遇到的问题及答案问题⼀:Oracle 11G⽤EXP时,空表不能导出解决⽅法第⼀查询空表到底有多少张,也就是查询为分配分配segment的表有多少张SQL> select table_name from user_tables where NUM_ROWS=0;TABLE_NAME------------------------------DATA_BACKUPEQUIPMENTFEEDBACK_ACCESSORIESSPECIALPICTASK_THIRDTASK_THIRDBATCHTASK_THIRD_DATATASK_THIRD_FEEDBACKTESTDATA_THIRDTHIRD_ACCESSORIES已选择10⾏。
第⼆查询在当前⽤户下有总的有多少张表SQL> select count(*) FROM USER_TABLES;COUNT(*)----------32第三导出当前⽤户下的数据C:\Users\Administrator>exp lcpt/lcpt file=E:\0702bj\lcpt.dmp wner=lcpt log=E 702bj\lcpt.logExport: Release 11.2.0.1.0 - Production on 星期⼀ 7⽉ 2 10:42:07 2012 Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. 连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Productio With the Partitioning, OLAP, Data Mining and Real Application Testing options 已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集即将导出指定的⽤户.... 正在导出 pre-schema 过程对象和操作. 正在导出⽤户 LCPT 的外部函数库名. 导出 PUBLIC 类型同义词. 正在导出专⽤类型同义词. 正在导出⽤户 LCPT 的对象类型定义即将导出 LCPT 的对象.... 正在导出数据库链接. 正在导出序号. 正在导出簇定义. 即将导出 LCPT 的表通过常规路径.... . 正在导出表 ACCESSORIES导出了 18 ⾏. . 正在导出表 AUTH导出了 240 ⾏. . 正在导出表 DATA_TEMP导出了 1 ⾏. . 正在导出表 FEEDBACK导出了 1 ⾏. . 正在导出表 FUNCTION导出了 112 ⾏. . 正在导出表 LIMIT导出了 1 ⾏. . 正在导出表MODULE导出了 37 ⾏. . 正在导出表 READ_ACCESSORIES导出了 2 ⾏. . 正在导出表 REGIONINFO导出了 19 ⾏. . 正在导出表 REPORT_EVENT导出了 8 ⾏. . 正在导出表 ROLE导出了 5 ⾏. . 正在导出表 ROLEAUTH导出了 606 ⾏. . 正在导出表STAFFLOG导出了 512 ⾏. . 正在导出表 STAFFROLE导出了 56 ⾏. . 正在导出表 STAFFS导出了 7 ⾏. . 正在导出表TASKINFO导出了 51 ⾏. . 正在导出表 TASK_FILIALE导出了 2 ⾏. . 正在导出表 TASK_FILIALE_FEEDBACK导出了 2 ⾏. . 正在导出表 TASK_SWARAJ_READ导出了 49 ⾏. . 正在导出表 TESTDATA导出了 407 ⾏. . 正在导出表 THIRDFACTURER导出了 3 ⾏. . 正在导出表 USESSION导出了 1 ⾏. 正在导出同义词. 正在导出视图. 正在导出存储过程. 正在导出运算符. 正在导出引⽤完整性约束条件. 正在导出触发器. 正在导出索引类型. 正在导出位图, 功能性索引和可扩展索引. 正在导出后期表活动. 正在导出实体化视图. 正在导出快照⽇志. 正在导出作业队列. 正在导出刷新组和⼦组. 正在导出维. 正在导出 post-schema 过程对象和操作. 正在导出统计信息成功终⽌导出, 没有出现警告。
目的本文档主要介绍ora-07445错误相关内容,并给出了对这个错误的进一步诊断建议,文档主要基于unix系统编写,但原理通用。
文档适用范围主要为DBA处理系统的ora-07445错误时使用。
0ra-07445错误的定义当oracle服务器进程从操作系统收到一个致命的错误信息时会抛出ora-07445错误,这个错误可以被oracle后台进程或者用户进程激发。
当错误被抛出时,系统会首先写一个错误日志到alert.log文件中,然后会写跟踪文件到user_dump_dest或background_dump_dest 中;最后会将主存信息转储到core_dump_dest中。
操作系统有很多的非法操作设计,一个经常会碰到的情况就是,当一个进程访问一个非法地址(比如系统预留地址)时致命错误将会产生。
Ora-07445错误是一个非常普通的错误,可能在oracle的任何代码中产生,该错误代码更详细的描述需要进一步跟踪其跟踪文件。
Ora-07445的表现方式在不同的平台上,ora-07445可能出现的情况有所不同,两种比较经常出现的方式如下所示:实例1ORA-07445: exception encountered: core dump[run_some_SQL()+268] [SIGBUS] [Invalid address alignment] [] [] []实例2ORA-07445: exception encountered: core dump [10] [2122262800] [261978112] [] [] []实例1说明:错误发生在函数run_some_sql()中进程收到的信号是SIGBUS一些其他相关信息。
实例2给定的信息相对较少没有给出导致错误的函数名称进程收到的信息是signal 10一些在本次错误中无用的信息错误发生时需要搜集哪些信息1,alert.log文件,这个文件至少可以查出ora-07445错误发生前后的其他相关错误,确认init.ora文件信息也包含在里边。
2,自实例上次启动以来所有的ora-07445和ora-00600错误及其跟踪文件。
Trace file文件中信息的相关说明*** 2002-05-08 23:35:18.224 <---timestamp*** SESSION ID:(194.14075) 2002-05-08 23:35:18.202Exception signal: 10 (SIGBUS), code: 1 (Invalid address alignment),addr: 0x41e7, PC: kjrfnd()+44*** 2002-05-08 23:35:19.404ksedmp: internal or fatal errorORA-07445: exception encountered: core dump [kjrfnd()+44] [SIGBUS] [Invalidaddress alignment] [16871] [] [] <----the errrorCurrent SQL statement for this session: <---the current SQL statementDELETE FROM MY_TABLE WHERE COL1 < :b1----- PL/SQL Call Stack -----object line objecthandle number namee560c680 35 anonymous blocke560c680 290 anonymous block----- Call Stack Trace ----- <----Stack trace starts herecalling call entry argument values in hexlocation type point (? means dubious value)-------------------- -------- -------------------- ----------------------------ksedmp()+168 CALL ksedst()+0 540 ? 0 ? FFBE4F98 ?FFBE4A3C ? FFBE4A20 ? 0 ?ssexhd()+380 CALL ksedmp()+0 3 ? 0 ?1 ? FFBE56B8 ? 1 ?6 ?sigacthandler()+40 PTR_CALL 00000000 A ? FFBE5F10 ? 19FE000 ?19FE000 ? 0 ? 0 ?kjrfnd()+44 PTR_CALL 00000000 A ? FFBE5F10 ? FFBE5C58 ?kjrref()+176 CALL kjrfnd()+0 4177 ? F6A7F020 ? 0 ? 41DF ?kjuocl()+732 CALL kjrref()+0 FFBE63AC ? 19FA400 ?kjusuc()+1260 CALL kjuocl()+0 FFBE6218 ? EB5FB9A8 ?EB5FB9A8 ? 5 ? 5 ? 0 ?ksipget()+832 CALL kjusuc()+019FA400 ? FFBE63AC ? 0 ?E2A2ED40 ? 19FA400 ? 8 ?ksqcmi()+3356 CALL ksipget()+0 10020 ?FFBE6648 ? EE15430C ?0 ? 0 ? 0 ?ksqgtl()+944 CALL ksqcmi()+0FFBE65A8 ? 1 ? EDEB4C90 ?EE1542D4 ? 1 ? 0 ?<... lots of stuff deleted here ...>sou2o()+20 CALL opidrv()+0 3C ?FFBEF784 ? 19F8000 ?2F6C6F67 ? 0 ? 0 ?main()+160 CALL sou2o()+0FFBEFA80 ? 3C ? 4 ?FFBEFA70 ? 1746CF4 ?1A06318 ?_start()+220 CALL main()+0 0? FFBEFC2C ? 1A1D478 ?19F8000 ? 0 ? 0 ?<----Stack trace ends here----- Argument/Register Address Dump -----重现错误如果客户可以随意的重现ora-07445错误,那么诊断并解决问题的时间将会被缩短。
重现错误的第一步当然是找出造成错误的current sql。
文档Note 154170.1中主要描述了怎么查找当前错误的执行语句。
但我们需要注意的是,当前问题可能是由于前面几个相关的其他语句执行时的上下文环境决定是否能出问题,所以有可能找到当前语句但无法重现问题。
在找到系统出错时执行的语句后我们需要确认下面的问题:是不是只有在当前参数时系统才会报错是否在每天的固定时间点出错出错跟哪些系统操作有主要关联,比如数据库的备份或者其他高消耗操作是在特定的应用程序和用户下出错还是所有的程序和用户都出错第一次报错是什么时间,当时对系统做了什么改变系统出错时有没有伴随其他的错误产生如何找出错误ora-07445发生时系统执行的语句在trace file中查找错误出现时的语句主要分两个步骤:首先找到错误发生时的执行语句,然后需要找到语句中绑定变量的值。
Step 1:Find the SQL在跟踪文件中查找字符串“Current cursor”(一般在cursor dump段的起始部分),使用current cursor后面的数字定位出错时系统的执行语句。
如果找到的这个数字为0说明没有dump出有效的执行语句。
如果找到的这个数字n不为0,接着往下查找,定位到字符串“cursor n”其中n为刚找到的数字。
从10.2版本后,你可能需要定位到字符串“cursor #n”,这里cursor name后面跟随的语句就是我们需要的sql。
另外我们也可以通过查找字符串“Current SQL statement for this session”来定位我们需要查找的sql语句,通常情况下,这个语句出现在trace file文件的开始部分。
如果定位到的sql语句中引用了变量(:a1…)那么我们需要通过下面步骤2找出绑定的变量值。
Step 2:find values of the bind variables 如果定位得到的sql语句中出现了绑定变量,那么我们将会在cursor name后面发现”bind *”之类的字符串,其中×为0到n-1的值,n为sql语句中绑定变量的个数。
对每个绑定变量都有一系列的属性说明列表,下面简单描述列表后面的属性。
Dty : databype 1 varchar2 or nvarchar22 number8 long11 rowid12 date23 raw24 long raw96 char112 clob or nclob113 blob114 bfileMxl: the maximum lenthScl: the scale(for number columns)Pre: the precision(for number columns)Value: 绑定变量的值通过解析上面的内容,你可以得到绑定变量的类型及其数据值,也有一些情况(非常少),你在bind *后面找不到values字节,那么我们就不能通过这种方式得到绑定变量的值。
ExamplesIn the following we will work through some examples of how to extract the SQL statement from trace files.IMPORTANT: Replacing bind variables with literals can result in the optimizer choosing a different query path and thus the problem may not reproduce!Example 1:You should now be able to find the datatype of the bind variable (including length, scale, and precision if applicable) and the value. The cursor dump starts with:******************** Cursor Dump ************************Current cursor: 2, pgadep: 1Cursor Dump:----------------------------------------so we are looking for cursor 2:----------------------------------------Cursor 2 (20139ad0): CURFETCH curiob: 2013bca4curflg: 7 curpar: 20139ab0curusr: 0 curses 587a250ccursor name: select text from view$ where rowid=:1child pin: 50a5b650, child lock: 50a5a628,parent lock: 50a5a844xscflg: 20141466, parent handle: 4f348490, xscfl2: 400nxt: 2.0x0000006c nxt: 1.0x000001d8Cursorframe allocation dump:frm: -------- Comment -------- Size Seg Offbhp size: 52/560bind 0: dty=11 mxl=16(16) mal=00scl=00 pre=00 oacflg=18 oacfl2=1 size=16offset=0bfp=2013e9f4 bln=16 avl=16 flg=05value=0000138C.0046.0004The current SQL is:select text from view$ where rowid=:1and the bind variable translates into::1 ~ bind 0 - ROWID (dty=11), value = 0000138C.0046.0004so we can eg. reconstruct the original SQL statement as:SQL> variable a1 varchar2(20)SQL> exec :a1 := '0000138C.0046.0004';SQL> select text from view$ where rowid=:a1;Note that we construct the statement using a SQL*Plus bind variable in order to prevent the optimizer from choosing a different plan (not that it would make any difference for this particular example).Example 2:The cursor dump starts with:******************** Cursor Dump ************************ Current cursor: 11, pgadep: 1Cursor Dump:----------------------------------------ie. we should look for cursor 11:----------------------------------------Cursor 11 (202cb9f0): CURBOUND curiob: 202f8b04curflg: dd curpar:0 curusr: 0 curses 30047c7ccursor name: SELECT LOCKID FROM DBMS_LOCK_ALLOCATED WHERE NAME =:b1 FOR UPDATEchild pin:0, child lock: 300dc9b4, parent lock: 301730b8xscflg: 1151421, parent handle: 3025b4dcbind 0: dty=1 mxl=32(00) mal=00 scl=00 pre=00 oacflg=01No bind buffers allocated----------------------------------------The current SQL statement is then:SELECT LOCKID FROM DBMS_LOCK_ALLOCATED WHERE NAME = :b1 FOR UPDATEThe bind variable :b1 is of type VARCHAR2(32) (dty=1, mxl=32), but no value has been assigned to it at the time of the dump ("No bind buffers allocated").Example 3:******************** Cursor Dump ************************ Current cursor: 2, pgadep: 0Cursor Dump:----------------------------------------...----------------------------------------Cursor 2 (20140444): CURNULL curiob: 0curflg: 44 curpar: 0 curusr: 0 curses 701dc94c----------------------------------------In this case there is no SQL being executed at the time of the dump. Example 4:******************** Cursor Dump ************************ Current cursor: 1, pgadep: 0pgactx: ccf361c0ctxcbk: 0 ctxqbc: 0 ctxrws: 0Cursor Dump:----------------------------------------Cursor 1 (400d9478): CURBOUND curiob:400e43d8curflg: 4c curpar: 0 curusr: 0 curses d5348f80cursor name: BEGINmyparser.convert('/tmp','workflow000_2.log',2);END;child pin: d14a4d70, child lock: d1589968, parent lock:d14c64a0xscflg: 100064, parent handle: d083f1c0, xscfl2: 4040408 nxt: 1.0x000000a8Cursor frame allocation dump:frm: -------- Comment -------- Size Seg Off----------------------------------------No binds included, so the SQL statement is the PL/SQL block: BEGIN myparser.convert('/tmp','workflow000_2.log',2); END;。