天萃荷净

运维DBA反映生产数据库10.2.0.1存在BUG导致SQL无法使用,在升级到10.2.0.5后执行SQL报错ORA-00918,分析原因为BUG修复后要修改SQL语句,升级数据库到10.2.0.5遭遇ORA-00918: column ambiguously defined

一个数据库从10201升级到10205之后,出现ORA-00918错误,查询mos发现在以前版本中是bug,Oracle好像在10205中把它修复了,结果就是以前应用的sql无法正常执行.这次升级的结果就是客户晚上3点联系开发商紧急修改程序。再次提醒:再小的系统数据库升级都需要做,功能测试,SPA测试,确保升级后功能和性能都正常.

SQL> select * from v$version;

BANNER

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

Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bi

PL/SQL Release 10.2.0.5.0 - Production

CORE 10.2.0.5.0 Production

TNS for 64-bit Windows: Version 10.2.0.5.0 - Production

NLSRTL Version 10.2.0.5.0 - Production

1.执行报错ORA-00918

多个表JOIN连接,由于在select中的列未指定表名,而且该列在多个表中有,因此在10205中报ORA-00918错误,Oracle认为在以前的版本中是 Bug 5368296: SQL NOT GENERATING ORA-918 WHEN USING JOIN. 升级到10.2.0.5, 11.1.0.7 and 11.2.0.2版本,需要注意此类问题。修复bug没事,但是修复了之后导致系统需要修改sql才能够运行,确实让人很无语

SQL> set autot trace

SQL> set lines 100

SQL> SELECT yz_id, item_code, DECODE (yzlx, 0, '长期医嘱', '临时医嘱') yzlx,

2 item_name, gg, sl || sldw sl, zyjs, yf, a.pc, zbj, zbh,

3 TO_CHAR (dcl, 'fm9999990.009') || dcldw dcl, a.bz, lb, zyh,ch,xm,

4 bq, cfh, lrysdm, lrysxm, lrrq, hdrdm, hdrxm, hdrq, sender_code,

5 sender_name, send_date, tzysdm, tzysxm, tzrq, ksrq, zxfy,

6 lb_yp_yl, zsq_code

7 FROM op.yz a LEFT OUTER JOIN op.pc b

8 ON NVL (TRIM (UPPER (a.pc)), ' ') = NVL (TRIM (UPPER (b.pc)), ' ')

9 LEFT JOIN op.zy p ON a.zyh = p.zyh

10 WHERE p.cy='在院' AND p.new_patient='1'

11 AND upper(nvl(p.bj,1))<> 'Y'

12 AND (state = '已核对')

13 AND is_in_bill IS NULL

14 ORDER BY ksrq, yz_id ;

bq, cfh, lrysdm, lrysxm, lrrq, hdrdm, hdrxm, hdrq, sender_code,

*

ERROR at line 4:

ORA-00918: column ambiguously defined

SQL> select COLUMN_NAME,TABLE_NAME from DBA_tab_columns where column_name='BQ'

2 AND TABLE_NAME IN('YZ','ZY','PC');

COLUMN_NAME TABLE_NAME

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

BQ ZY

BQ YZ

10.2.0.1中执行正常

E:\>sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on 星期六 1月 3 14:09:51 2015

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

连接到:

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production

With the Partitioning, OLAP and Data Mining options

SQL> set autot trace

SQL> set lines 100

SQL> SELECT yz_id, item_code, DECODE (yzlx, 0, '长期医嘱', '临时医嘱') yzlx,

2 item_name, gg, sl || sldw sl, zyjs, yf, a.pc, zbj, zbh,

3 TO_CHAR (dcl, 'fm9999990.009') || dcldw dcl, a.bz, lb, zyh,ch,xm

,

4 bq, cfh, lrysdm, lrysxm, lrrq, hdrdm, hdrxm, hdrq, sender_code,

5 sender_name, send_date, tzysdm, tzysxm, tzrq, ksrq, zxfy,

6 lb_yp_yl, zsq_code

7 FROM op.yz a LEFT OUTER JOIN op.pc b

8 ON NVL (TRIM (UPPER (a.pc)), ' ') = NVL (TRIM (UPPER (b.pc)), '

')

9 LEFT JOIN op.zy p ON a.zyh = p.zyh

10 WHERE p.cy='在院' AND p.new_patient='1'

11 AND upper(nvl(p.bj,1))<> 'Y'

12 AND (state = '已核对')

13 AND is_in_bill IS NULL

14 ORDER BY ksrq, yz_id ;

已选择19804行。

执行计划

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

ERROR:

ORA-00604: 递归 SQL 级别 2 出现错误

ORA-16000: 打开数据库以进行只读访问

SP2-0612: 生成 AUTOTRACE EXPLAIN 报告时出错

统计信息

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

1 recursive calls

0 db block gets

41945 consistent gets

0 physical reads

0 redo size

2075973 bytes sent via SQL*Net to client

14989 bytes received via SQL*Net from client

1322 SQL*Net roundtrips to/from client

1 sorts (memory)

0 sorts (disk)

19804 rows processed

10.2.0.5库中同名列增加表名前缀执行OK

1

SQL> set autot trace

SQL> set lines 100

SQL> SELECT yz_id, item_code, DECODE (yzlx, 0, '长期医嘱', '临时医嘱') yzlx,

2 item_name, gg, sl || sldw sl, zyjs, yf, a.pc, zbj, zbh,

3 TO_CHAR (dcl, 'fm9999990.009') || dcldw dcl, a.bz, lb,zyh,ch,xm,

4 a.bq, cfh, lrysdm, lrysxm, lrrq, hdrdm, hdrxm, hdrq, sender_code,

5 sender_name, send_date, tzysdm, tzysxm, tzrq, ksrq, zxfy,

6 lb_yp_yl, zsq_code

7 FROM op.yz a LEFT OUTER JOIN op.pc b

8 ON NVL (TRIM (UPPER (a.pc)), ' ') = NVL (TRIM (UPPER (b.pc)), ' ')

9 LEFT JOIN op.zy p ON a.zyh = p.zyh

10 WHERE p.cy='在院' AND p.new_patient='1'

11 AND upper(nvl(p.bj,1))<> 'Y'

12 AND (state = '已核对')

13 AND is_in_bill IS NULL

14 ORDER BY ksrq, yz_id ;

20629 rows selected.

Execution Plan

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

Plan hash value: 3468887510

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

| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |

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

| 0 | SELECT STATEMENT | | 10 | 2580 | 2968 (2)| 00:00:36 |

| 1 | SORT ORDER BY | | 10 | 2580 | 2968 (2)| 00:00:36 |

|* 2 | HASH JOIN OUTER | | 10 | 2580 | 2967 (2)| 00:00:36 |

|* 3 | TABLE ACCESS BY INDEX ROWID| YZ | 3 | 672 | 42 (0)| 00:00:01 |

| 4 | NESTED LOOPS | | 10 | 2390 | 2963 (2)| 00:00:36 |

|* 5 | TABLE ACCESS FULL | ZY | 3 | 45 | 2917 (2)| 00:00:36 |

|* 6 | INDEX RANGE SCAN | DZBLYZ_ZYH | 118 | | 2 (0)| 00:00:01 |

| 7 | TABLE ACCESS FULL | PC | 33 | 627 | 3 (0)| 00:00:01 |

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

Predicate Information (identified by operation id):

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

2 - access(NVL(TRIM(UPPER("A"."PC")),' ')=NVL(TRIM(UPPER("B"."PC"(+))),' '))

3 - filter("A"."STATE"='已核对' AND "A"."IS_IN_BILL" IS NULL)

5 - filter("P"."CY"='在院' AND UPPER(NVL("P"."BJ",'1'))<>'Y' AND

"P"."NEW_PATIENT"='1')

6 - access("A"."ZYH"="P"."ZYH")

Statistics

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

0 recursive calls

0 db block gets

42121 consistent gets

0 physical reads

0 redo size

2181383 bytes sent via SQL*Net to client

15617 bytes received via SQL*Net from client

1377 SQL*Net roundtrips to/from client

1 sorts (memory)

0 sorts (disk)

20629 rows processed

Bug 5368296: SQL NOT GENERATING ORA-918 WHEN USING JOIN

Bug 12388159 : SQL REPORTING ORA00918 AFTER UPGRADE TO 10.2.0.5.0

再次提醒:再小的系统数据库升级都需要做,功能测试,SPA测试,确保升级后功能和性能都正常.

--------------------------------------ORACLE-DBA----------------------------------------

最权威、专业的Oracle案例资源汇总之【案例】Oracle报错ORA-00918 数据库升级后遇到SQL BUG 5368296

oracle数据库升级失败怎么办,【案例】Oracle报错ORA-00918 数据库升级后遇到SQL BUG 5368296...相关推荐

  1. linux ora 01157,案例:Oracle报错ORA-01157 ORA-01110 数据启动报错RMAN恢复数据库思路

    天萃荷净 rman从多份备份中还原操作,运维DBA工程师反映数据库在进行恢复时报错ORA-01157 ORA-01110,分析原因为11号数据文件需要recover 1.数据恢复ORA错误 RMAN& ...

  2. oracle 未明确列义,案例:Oracle缺少同义词DDL语句无法执行 ORA-00604 ORA-00942

    天萃荷净 在执行DDL语句时无法执行,报错ORA 00604 ORA 00942,通过隐含参数来解决同义词问题 在最近的一个客户案例中,因为缺少dual同义词,导致ddl语句无法执行.这里_syste ...

  3. oracle加as报错,【Oracle】-【sqlplus / as sysdba登录报错问题】-新用

    [Oracle]-[sqlplus / as sysdba登录报错问题]-新用户使用sqlplus / as sysdba登录报错解决 [Oracle]-[sqlplus / as sysdba登录报 ...

  4. linux还原数据库报错,RMAN还原数据库报错问题解决案例

    报错1.数据库开启block change tracking ,恢复完成后打开因文件不存在报错. RMAN> alter database open resetlogs; RMAN-00571: ...

  5. linux oracle 11g x86,Oracle 11g在Linux6下安装及报错 C [ld-linux-x86-64.so.2+0x14d70]的解决方...

    Oracle 11g在Linux6下安装及报错 C [ld-linux-x86-64.so.2+0x14d70]的解决方法 首页 → 数据库技术 背景: 阅读新闻 Oracle 11g在Linux6下 ...

  6. oracle 监听服务正常,连接报错 ora 12541

    问题描述: 数据库监听服务正常运行,使用sql plus 连接数据库超级慢或无法连接,时不时报错 ORA 12541 问题原因: oracle 数据库监听服务日志过大 解决办法 将监听停止掉 删除 $ ...

  7. 【数据库】报错ora 12154 解决方法

    Oracle报错 ora 12154 解决办法: 1.确认服务器监听正确打开: 2.确认别名前无空格.

  8. mysql远程一会不用卡住_连接远程MySQL数据库项目启动时,不报错但是卡住不继续启动的,...

    连接远程MySQL数据库项目启动时,不报错但是卡住不继续启动的, 2018-03-12 17:08:52.532DEBUG[localhost-startStop-1]o.s.beans.factor ...

  9. 解决金仓数据库安装时安装VC++2013报错问题:不受信任提供程序信任的根证书中终止

    解决金仓数据库安装时安装VC++2013报错问题:不受信任提供程序信任的根证书中终止 安装微软的信任证书: 1.点击链接下载微软证书:http://download.microsoft.com/dow ...

最新文章

  1. 阿里centos7 yum源
  2. conn.execute参数
  3. 2018年python薪资_2018年国内就业薪资高的7大编程语言排行
  4. python读取日期_从文件中读取日期和数据(Python)
  5. LINUX查看文件系统
  6. 实时时钟DS1302
  7. 极简网页设计技巧,打造简约之美
  8. 跟二项分布相关的统计检验方法
  9. b51显微镜_1112-揭开微观世界的奥秘--显微镜发明的科学历程
  10. 计算机底层是如何访问显卡的?
  11. 加州房价模型(住房价格中位数)
  12. 百度文件下载慢怎么办?~教你百度网盘无需VIP离线下载大文件
  13. CTFlearn-misc(fore/prog)-wp(3)
  14. python 括号 中 不需要 反斜杠_如何消除反斜杠后的空白(Python3.4)
  15. 鸿蒙系统碰一碰,华为正式发布鸿蒙手机操作系统 “碰一碰”就可实现设备互联...
  16. ARM工控主板在驾考驾培智能终端的使用
  17. 【python】实现SIMM算法
  18. Muti-bin的一些相关函数和设置
  19. python进阶练习题:馏分类【难度:2级】--景越Python编程实例训练营,不同难度Python习题,适合自学Python的新手进阶
  20. 网络私有制行得通吗?

热门文章

  1. 交换机的背板带宽计算方式
  2. 苹果已无敌手:华为留下的高端市场被iPhone吃下,国产旗舰机难撼地位
  3. 【C++】string转为TCHAR
  4. oracle 18c 18.3 学习之五 unplug drop plug pdb
  5. mysql mvcc_MySQL MVCC介绍
  6. device(device)
  7. seo揭秘:关键词如何批量优化
  8. pickle使用方法
  9. Spring查找方法注入(Lookup method injection)的底层实现原理
  10. oracle小型机叹号灯亮,一个黄圆圈加一个感叹号 汽车叹号故障灯图解