2017-04-06 111 views
0

我的Oracle數據庫IM的遷移越來越以下錯誤後:

ORA-00904: "from$_subquery$_014"."TRN_TERMINAL_SOFTWARE_VERSION": invalid identifier 
下面

是我的查詢:

SELECT 
    * 
FROM 
    (
    SELECT 
     SUM(trn_amt) AS amount, 
     SUM(trn_count) AS COUNT , 
     timetype  AS period , 
     seq , 
     ROW_NUMBER() OVER (ORDER BY vw.seq DESC) AS RowNumber 
    FROM 
     YSD_STORE_FORWARD_V vw 
    INNER JOIN store_dimension std     ON vw.stm_id=std.std_id 
    INNER JOIN card_type_dimension ctd    ON vw.CTD_CARD_ABBV=ctd.CTD_CARD_ABBV 
    INNER JOIN STPLDBTEMP.store_group_relation sgr ON std.STD_ID= sgr.sgr_store_id 
    INNER JOIN location_dimension ld    ON ld.lod_id=std.std_location_id 
WHERE 
    start_date BETWEEN 20170405 AND 20170405 
AND std.std_corp_id ='1939' 
AND sgr.sgr_sgm_id  ='2160' 
AND ctd.CTD_CARD_ABBV IN ('VE','VI','VS','VD','AX','AE','MD','MC','MF','XX' 
    ,'DB','JB','NV','DS','EB','EBC','EBF','EBW','VF','VG','WX','DC','GF','PL' 
    ,'PW','NM','BG','GC','FL','FO','FT','FW','INV','IV','IN','CP') 
AND LD.LOD_COUNTRY_ID = 1 
GROUP BY 
    timetype , 
    seq 
ORDER BY 
    4 

);

我沒有在我的查詢中使用列仍然出現此錯誤請幫助我YSD_STORE_FORWARD_V它的一個視圖使用物化視圖包含TRN_TERMINAL_SOFTWARE_VERSION列但我的工作很好。

+0

,如果你會發生什麼運行'SELECT * FROM YSD_STORE_FORWARD_V'?這些列是否與您在上述查詢中使用的列匹配? – MT0

+0

幾個問題 - > 1.該對象是否存在:'TRN_TERMINAL_SOFTWARE_VERSION'? (嘗試desc'TRN_TERMINAL_SOFTWARE_VERSION')2.你的用戶(運行上面的查詢)是否具有READ權限? 3.它駐留在相同的模式和相同的數據庫上嗎? – g00dy

+0

刪除冗餘子查詢是否有所作爲?或者至少在外面移動'order by'?執行計劃可能有助於確定Oracle生成的子查詢名稱適用於整個查詢的位置。聽起來像它*可能*是一個解析器錯誤,雖然....這是哪個版本,你從哪個版本遷移,以及如何? –

回答

1

這是Oracle 11.2.0.4中的一個錯誤,它在使用子查詢或ansi連接的查詢中隨機出現。

在我的情況下,我找到了根本原因:這是我在從11.2.0.4開始執行expdp並且模式具有MATERIALIZED VIEWS時導致的。然後我在其他DataBase(10g,11g甚至12c)中做了impdp。某種類型的口令問題會導致錯誤。

我解決這樣做:

  1. EXPDP排除MATERIALIZED_VIEWS

  2. IMPDP。有一些與MATERIALIZED_VIEW對象有關的錯誤,被忽略。

  3. 手動創建所有MATERIALIZED_VIEW對象。

  4. 重新編譯數據庫中的所有對象,用「$ ORACLE_HOME/RDBMS /管理/ utlrp.sql」

這是錯誤文件的摘錄:

Bug 17551261 ORA-904 "from$_subquery$_003". with query rewrite

This note gives a brief overview of bug 17551261. The content was last updated on: 21-FEB-2014

Affects:

Product (Component) Oracle Server (Rdbms)

Range of versions believed to be affected Versions BELOW 12.1

Versions confirmed as being affected 11.2.0.4

Platforms affected Generic (all/most platforms affected)

It is believed to be a regression in default behaviour thus:
Regression introduced in 11.2.0.4

Fixed: The fix for 17551261 is first included in • 12.1.0.1 (Base Release)

Description This problem is introduced in 11.2.0.4 by the fix for bug 14049796 .

If an ORA-904 similar to the following is raised:
ORA-00904: "from$_subquery$_003"."SUBSCRIBER_SID": invalid identifier from a SQL statement using ANSI joins, then it may be a case of this bug if all of the following are true:

1) Summary rewrite is used

2) fix to bug:14049796 present (this fix is included in 11.2.0.4)

3) The errorstack includes kkogvcd() and kkqsgen()

Workaround Disable query rewrite

+0

但我在正常查詢中也得到這個錯誤,哪一個在舊版本中運行正常,例如11.2.0.1,但在新版本中出錯11.2.0.4 –

+0

您是否嘗試再次導入除實例化視圖之外的所有架構?之後,您必須在分隔腳本中創建實體化視圖,並編譯所有對象。 –