2013-01-23 27 views
2

我有一個關於Oracle腳本的問題!Oracle腳本 - 物化視圖和同義詞

我有一個預先建立的表物化視圖,在我BBDD,(這個MV是用戶DAT_OWN,其他2用戶的(APP & BO)對這個MV同義詞) 我必須要改變的MV,並添加一列。我知道我需要放棄這個MV並創建另一個,但是什麼是附加的同義詞?

我有一個像以前的腳本:

DROP SYNONYM APP.STAT_VOZ; 
CREATE SYNONYM APP.STAT_VOZ FOR DAT_OWN.STAT_VOZ; 

DROP SYNONYM BO.STAT_VOZ; 
CREATE SYNONYM BO.STAT_VOZ FOR DAT_OWN.STAT_VOZ; 

DROP MATERIALIZED VIEW DAT_OWN.STAT_VOZ; 
CREATE MATERIALIZED VIEW DAT_OWN.STAT_VOZ 
ON PREBUILT TABLE WITH REDUCED PRECISION 
REFRESH COMPLETE 
START WITH TO_DATE('21-ene-2013 19:20:00','dd-mon-yyyy hh24:mi:ss') 
NEXT (trunc(SYSDATE,'HH')+19/72) 
WITH PRIMARY KEY 
AS 
    SELECT   TO_CHAR (SUM (COUNT)) AS sum_count, 
     start_date AS date_hour, 
     input_type AS input_type 
    FROM DAT_OWN.another_table 
    WHERE start_date > TO_CHAR (SYSDATE - 60, 'yyyymmdd') 
GROUP BY start_date 

爲什麼有人做了降代名詞APP和創建同義詞APP下降代名詞BO和創建同義詞BO前的物化視圖的下降?在我看來,我所要做的

drop synonym1 
drop synonym2 
drop Mview 
create Mview 
create Synonym1 
Create Synonym2 

我敢肯定,我之前程序員的工作做得很好,但我不明白他們爲什麼這樣的說法!有人可以解釋我嗎?

問候

回答

1

你的劇本當初可能只是一個「老派」的開發人員編寫的。大多數人習慣於在重新創建它們之前立即丟棄物體。正如你所注意到的,序列並不重要。

現在大多數人使用CREATE OR REPLACE語法,而不是先刪除對象。該概念的Here is a good explanation

1

可能不需要觸摸腳本中的任一同義詞。

同義詞只是一個指針。沒有要求同義詞指向的對象完全存在。如果您只是簡單地刪除並重新創建實體化視圖,則同義詞將自動指向新創建的實體化視圖。當然,在物化視圖被刪除之後,在重新創建之前,如果會話嘗試使用同義詞來查詢物化視圖,那麼會話將會收到對象不存在的錯誤。但是,據推測,您正在等待放棄並重新創建物化視圖,直到沒有人會使用它,因此通常不是主要關心的問題。