資料庫升級導致ORA-918錯誤
客戶的資料庫從10.2.0.1升級到10.2.0.5後,出現了ORA-918錯誤,不過導致錯誤出現的原因並不是升級碰到了BUG,而是升級解決了BUG。
在Oracle 10.2.0.5中,解決了一個Bug 5368296 ANSI join SQL may not report ORA-918 for ambiguous column,結果原本客戶受這個bug影響而沒有報錯的SQL語句,在升級之後開始大面積報錯。
而解決辦法除了修改SQL語句外,只有回退一個辦法,Oracle顯然不會為了重現一個bug而提供什麼解決方案。當然這個問題的避免應該透過前期的測試來避免,不過這裡還是關注一下這個bug。
在如果使用標準查詢寫法,當關聯表的個數超過2個,且表都包含相同的列名,那麼在查詢的時候如果不指定這個列名的屬主,是不會報錯的。
SQL*Plus: Release 10.2.0.3.0 - Production on Tue Nov 8 15:51:41 2011
Copyright (c) 1982, 2006, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> create user u1 identified by u1 default tablespace users;
User created.
SQL> grant connect, resource to u1;
Grant succeeded.
SQL> conn u1/u1
Connected.
SQL> create table t1 (id number);
Table created.
SQL> create table t2 (id number);
Table created.
SQL> create table t3 (id
number);
Table created.
SQL> select id from t1, t2, t3
where t1.id = t2.id and t1.id = t3.id;
select id from t1, t2, t3 where t1.id = t2.id and t1.id = t3.id
*
ERROR at line 1:
ORA-00918: column ambiguously defined
SQL> select id from t1 join t2 on t1.id = t2.id join t3 on t1.id = t3.id;
no rows selected
SQL> select id from t1 join t2
on t1.id = t2.id;
select id from t1 join t2 on t1.id = t2.id
*
ERROR at line 1:
ORA-00918: column ambiguously defined
可以看到,Oracle的寫法不存在這個問題,而如果使用標準SQL寫法,在表連線數超過2張的時候,就會引發bug,Oracle會忽略列重名問題。
SQL> alter table t3 add (id1 number);
Table altered.
SQL> select id from t1 join t2 on t1.id = t2.id join t3 on t1.id = t3.id1;
no rows selected
SQL> alter table t3 drop (id);
Table altered.
SQL> select id from t1 join t2
on t1.id = t2.id join t3 on t1.id = t3.id1;
select id from t1 join t2 on t1.id = t2.id join t3 on t1.id = t3.id1
*
ERROR at line 1:
ORA-00918: column ambiguously defined
測試還發現,導致問題的原因只和表中是否存在列有關,而與是否是連線列沒有關係,因此必須三張或以上的表擁有相同的列名,才會引發這個bug。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-710784/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 升級可能導致資料庫不可用(二)資料庫
- 升級可能導致資料庫不可用(一)資料庫
- 升級Xcode10導致的編譯錯誤XCode編譯
- 資料庫升級報錯資料庫
- DBCA建庫導致已有資料庫出現ORA-27140錯誤資料庫
- 資料庫增加SGA,導致ORA-27102: out of memory錯誤資料庫
- ORA-39700錯誤(一般升級資料庫容易遇到)資料庫
- 解決升級資料庫時遇到的Text file busy錯誤資料庫
- rac 升級crs 升級資料庫軟體,升級資料庫資料庫
- SPFILE 錯誤導致資料庫無法啟動(ORA-01565)資料庫
- 【資料庫資料恢復】磁碟空間不足導致sql server錯誤的資料恢復資料庫資料恢復SQLServer
- 誤升級GLIBC導致系統崩潰之後
- 資料庫升級資料庫
- ♀♀資料庫升級♀♀資料庫
- 資料庫主機名錯誤導致客戶端TNS-12541資料庫客戶端
- 又一例SPFILE設定錯誤導致資料庫無法啟動資料庫
- 客戶資料庫升級後出現ORA-30004錯誤資料庫
- 【oracle資料庫資料恢復】誤操作導致的資料庫誤刪除的資料恢復案例Oracle資料庫資料恢復
- Oracle 資料庫升級Oracle資料庫
- 誤修改ORACLE_HOME導致無法登陸資料庫Oracle資料庫
- INTERVAL分割槽插入大量資料導致ORA-4031錯誤
- 資料庫升級之-Dataguard滾動升級資料庫
- 升級informix資料庫到10.0出現KAIO錯誤的解決辦法ORM資料庫AI
- 資料庫升級後匯出報EXP-00056錯誤解決辦法資料庫
- 多餘索引導致explain錯誤索引AI
- 【北亞資料恢復】輸入錯誤命令導致MySQL資料庫資料被刪除的資料恢復案例資料恢復MySql資料庫
- 解決 PBootCMS 中因資料庫名稱錯誤導致的“執行 SQL 發生錯誤!錯誤:no such table: ay_config”問題boot資料庫SQL
- 資料庫升級之-資料泵資料庫
- 錯誤的使用者名稱密碼登入導致的資料庫效能問題密碼資料庫
- 【故障恢復】因spfile修改錯誤導致資料庫無法啟動的恢復方法資料庫
- 資料庫升級和工具資料庫
- 資料庫升級之-XTTS資料庫TTS
- impdp 匯入資料導致ora-600,arguments: [klaprs_11]錯誤
- 資料庫升級後goldengate報錯,ORA-04045資料庫Go
- impdp時parallel=4導致的錯誤Parallel
- MySQL半一致性讀導致語句級Binlog複製錯誤MySql
- 使用錯誤的作業系統使用者exp資料導致ORA-15186錯誤作業系統
- 11.2.0.3 ASM例項出現ORA-4031錯誤導致資料庫歸檔失敗ASM資料庫