2016-11-14 13 views
1

Oracle 11Gで作業しています。
マテリアライズド・ビューの1つがUNKNOWN(MY_MAT_VW1)になっています。以下のALL_MVIEWSの出力を確認することができます。UNKNOWN stalenessを持つマテリアライズド・ビュー - Oracle 11G

OWNER | MVIEW_NAME | CONTAINER_NAME | QUERY | QUERY_LEN | UPDATABLE | UPDATE_LOG | MASTER_ROLLBACK_SEG | MASTER_LINK | REWRITE_ENABLED | REWRITE_CAPABILITY | REFRESH_MODE  | REFRESH_METHOD  | BUILD_MODE | FAST_REFRESHABLE | LAST_REFRESH_TYPE | LAST_REFRESH_DATE | STALENESS  | AFTER_FAST_REFRESH | UNKNOWN_PREBUILT | UNKNOWN_PLSQL_FUNC | UNKNOWN_EXTERNAL_TABLE | UNKNOWN_CONSIDER_FRESH | UNKNOWN_IMPORT | UNKNOWN_TRUSTED_FD | COMPILE_STATE | USE_NO_INDEX | STALE_SINCE | NUM_PCT_TABLES | NUM_FRESH_PCT_REGIONS | NUM_STALE_PCT_REGIONS 
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
MY_DB | MY_MAT_VW1 | MY_MAT_VW1  | select.. | 6728  | N   |   |      |    | N    | GENERAL   | DEMAND   | COMPLETE   | IMMEDIATE | NO    | COMPLETE   | 14-Nov-16   | UNKNOWN   | NA     | N     | Y     | N      | N      | N    | N     | VALID   | N    | 0   |    |      | 
MY_DB | MY_MAT_VW2 | MY_MAT_VW2  | select.. | 7074  | N   |   |      |    | N    | TEXTMATCH   | DEMAND   | COMPLETE   | IMMEDIATE | NO    | COMPLETE   | 13-Nov-16   | FRESH   | NA     | N     | N     | N      | N      | N    | N     | FRESH   | N    | 0   | 0    |      | 

マテリアライズド・ビューの問合せには、複数の表、インライン・ビューおよび共用体の複合結合が含まれます。
私の理解(UNKNOWN_PLSQL_FUNC列)によると、陳腐化がUNKNOWNになるPLSQL関数があると思います。しかし、私はどちらがどちらか分かりません。
私は再コンパイルとそれをリフレッシュしようとしましたが、運はありませんでした。
根本的な原因を検出し、再度UNKNOWNにならないようにする方法について、誰かに私にいくつかの情報を提供できますか?
また、その中に格納されているデータには何か意味がありますか?
以下は、シナリオを複製するために作成したサンプルです。

SELECT * FROM ENTITY_T; 

ID | ENTITY_TYPE | FIRST_NAME | LAST_NAME | LEGAL_NAME 
-------------------------------------------------- 
1 | INDIVIDUAL | JOHN  | LESSEN | 
2 | INDIVIDUAL | ROSAN  | MEL  | 
3 | CORP  | SIGMA  |   | SIGMA CORPORATION 


--Function to get name base upon type 
CREATE OR REPLACE FUNCTION GET_NAME (P_ID IN NUMBER) 
RETURN VARCHAR2 
DETERMINISTIC 
AS 
LV_NAME VARCHAR2(200); 
BEGIN 
SELECT CASE ENTITY_TYPE WHEN 'INDIVIDUAL' THEN FIRST_NAME ||' '|| LAST_NAME 
         WHEN 'CORP' THEN LEGAL_NAME 
         ELSE 'NONE' 
     END INTO LV_NAME 
FROM ENTITY_T 
WHERE ID=P_ID; 
RETURN LV_NAME; 
EXCEPTION 
WHEN NO_DATA_FOUND THEN 
    RETURN 'NO ID FOUND'; 
WHEN OTHERS THEN 
    RETURN 'OTHER ERROR'; 
END; 

--Materialized view creation 
CREATE MATERIALIZED VIEW TEST_MV 
AS 
SELECT ID,ENTITY_TYPE,GET_NAME(ID) NAME 
FROM ENTITY_T; 


SELECT MVIEW_NAME,STALENESS,AFTER_FAST_REFRESH,UNKNOWN_PLSQL_FUNC,COMPILE_STATE,STALE_SINCE 
FROM ALL_MVIEWS WHERE MVIEW_NAME='TEST_MV'; 

MVIEW_NAME | STALENESS | AFTER_FAST_REFRESH | UNKNOWN_PLSQL_FUNC | COMPILE_STATE | STALE_SINCE 
---------------------------------------------------------------------------------------------- 
TEST_MV | UNKNOWN | NA     | Y     | VALID   | 

答えて

1

これはバグではありませんが、正しい/期待される動作することを、状態明確JSapkotaで述べたオラクルIssue/Doc ID 757537.1:PLに参照のうえ、MVIEWの

STALENESS/PL/SQL関数の変更を判別できないため、SQL関数はUNKOWN に設定されています。現在の動作は、&コードのとおり、 が正しいです。

DETERMINISTICの機能を使用すると、デフォルトのスコープの代わりにその機能が妨げられる可能性があります。

+0

私は関数DETERMINISTICを作成して確認し、結果をお知らせします。 – hemalp108

+0

現在、いくつかのカスケード・ビューがありますが、( 'wm_concat'、' nvl'、 'coalesce'以外の)カスタムPL/SQL関数を見つけることができませんでした。 'UNKNOWN'状態の問題は他のどこかにある可能性があります。 –

+0

' STALE_SINCE'は、 'COMPLETE'の後にヌルであるため、データベース内のテーブル(または構造体)に変更が加えられると直ちにそのmatviewsに設定されているようです。リフレッシュ –

1

My Oracleサポートに従って、これはバグである可能性があります(7582462)。

このバグの解決方法はありません。そのため、陳腐化にはunknownが表示されるか、マテリアライズドビューの定義に関数が使用されません。

参考:DBA_MVIEWS Shows STALENESS Value of UNKNOWN After Refresh (Doc ID 757537.1)

+0

UNKNOWN stalenessに対してデータの相違がありますか? – hemalp108

+0

Mview amyは正常に動作し、リフレッシュによって問題は発生しませんが、失効状態は「UNKNOWN」ステータスを示します。 – JSapkota

+0

Oracleがクエリ出力を信頼しないようにし、より安全な側になるようにStalenessをUNKNOWNとして更新しますか? – hemalp108