2

我有一个关于 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

我确信我之前的程序员做得很好,但我不明白他们为什么这样做!有人可以解释一下吗?

问候

4

2 回答 2

1

您的原始脚本可能只是由“老派”开发人员编写的。大多数人习惯于在重新创建对象之前立即删除它们。正如您所注意到的,顺序并不重要。

现在大多数人使用CREATE OR REPLACE语法而不是首先删除对象。 这是对该概念的一个很好的解释

于 2013-01-23T18:42:29.487 回答
1

可能不需要触及脚本中的任何同义词。

同义词只是一个指针。不要求同义词指向的对象根本存在。如果您只是删除并重新创建物化视图,同义词将自动指向新创建的物化视图。当然,在物化视图被删除之后重新创建之前,如果会话尝试使用同义词查询物化视图,该会话将得到对象不存在的错误。但是,大概,您正在等待删除并重新创建物化视图,直到没有人使用它,所以这通常不是主要问题。

于 2013-01-23T18:51:11.093 回答