oracle max相同,关于oracle:具有相同名称的材料化视图和表

我有点理解物化视图,并且之前曾与他们合作过。最近出现了一个问题,即为什么特定报告没有显示最新数据,所以我调查了这个问题。显然,他们之前有一个临时表,其中装有crontab,后来又切换到了物化视图。

当我使用以下查询查询数据库时(表名已更改):

SELECT * FROM all_objects WHERE object_name = 'TEMP_DATA';

这实际上在同一模式中显示了两个对象:一个表和另一个物化视图

OWNER   OBJECT_NAME  OBJECT_TYPE        DATA_OBJECT_ID  LAST_DDL_TIME     TIMESTAMP

SCHEMA  TEMP_DATA    TABLE                      110623  08/06/2013 15:38  2013-08-06:14:53:01

SCHEMA  TEMP_DATA    MATERIALIZED VIEW                  10/30/2015 00:00  2013-08-06:14:56:33

而且,当我尝试更改表以重命名它时,它表示无法重命名实例化视图。

我的问题是,物化视图是否实际上创建了具有相同名称的表,如果是,当我执行SELECT时,数据从何处来(表或MView)?

还是仅仅是早期的剩余表?如果是这样,Oracle是否允许使用相同名称的不同类型的对象? (我真的为此感到难过,因为我认为每个对象都必须有一个唯一的名称!)。

奇怪的是,如果它们是2个对象,则在下面的SQL中使用哪个对象:

SELECT * FROM TEMP_DATA;

任何对此的见解,深表感谢。

根据@Alex和@Husqvik的响应进行更新:

在Mview定义中,我看到以下内容:

BUILD IMMEDIATE

REFRESH COMPLETE

START WITH TO_DATE('06-Nov-2015','dd-mon-yyyy')

NEXT trunc(sysdate) + 1

WITH PRIMARY KEY

这是否意味着它应该每天(明天在此更新)?明天刷新后,START WITH会更改为11月11日吗?

而且,它会自动刷新吗?如果是,何时刷新?

是否有任何事情会阻止它刷新,因为用户抱怨使用此MView在报表中看不到最新数据,所以这就是为什么我首先要看它的原因?

这是MView的完整DDL:

DROP MATERIALIZED VIEW SCHEMA.TEMP_DATA;

CREATE MATERIALIZED VIEW SCHEMA.TEMP_DATA

TABLESPACE ITS_DATASPACE

PCTUSED    0

PCTFREE    10

INITRANS   2

MAXTRANS   255

STORAGE    (

INITIAL          64K

NEXT             1M

MINEXTENTS       1

MAXEXTENTS       UNLIMITED

PCTINCREASE      0

BUFFER_POOL      DEFAULT

)

NOCACHE

LOGGING

NOCOMPRESS

NOPARALLEL

BUILD IMMEDIATE

REFRESH COMPLETE

START WITH TO_DATE('06-Nov-2015','dd-mon-yyyy')

NEXT trunc(sysdate) + 1

WITH PRIMARY KEY

AS

/* Formatted on 2015/11/05 09:35 (Formatter Plus v4.8.8) */

SELECT *

FROM SCHEMA.h_case_data

WHERE status LIKE 'M%';

COMMENT ON MATERIALIZED VIEW SCHEMA.TEMP_DATA IS 'snapshot table for snapshot SCHEMA.TEMP_DATA';

CREATE INDEX SCHEMA.CASE_ID_IDX ON SCHEMA.TEMP_DATA

(CASE_ID)

LOGGING

TABLESPACE ITS_DATASPACE

PCTFREE    10

INITRANS   2

MAXTRANS   255

STORAGE    (

INITIAL          64K

NEXT             1M

MINEXTENTS       1

MAXEXTENTS       UNLIMITED

PCTINCREASE      0

BUFFER_POOL      DEFAULT

)

NOPARALLEL;

CREATE INDEX SCHEMA.STATUS_IDX ON SCHEMA.TEMP_DATA

(STATUS)

LOGGING

TABLESPACE ITS_DATASPACE

PCTFREE    10

INITRANS   2

MAXTRANS   255

STORAGE    (

INITIAL          64K

NEXT             1M

MINEXTENTS       1

MAXEXTENTS       UNLIMITED

PCTINCREASE      0

BUFFER_POOL      DEFAULT

)

NOPARALLEL;

从文档中:

When you create a materialized view, Oracle Database creates one internal table and at least one index, and may create one view, all in the schema of the materialized view. Oracle Database uses these objects to maintain the materialized view data.

因此,具有相同名称的表和实例化视图是正常的。 MV需要将数据存储在某个地方,因此拥有一个表是有意义的。然后,MV本身定义如何维护表数据。

您可以使用ON PREBUILT TABLE子句在现有表上创建视图,我假设这是"它们之前有一个临时表...并在以后切换到实体化视图"的意思。

您还可以使用DROP MATERIALIZED VIEW ... PRESERVE TABLE选项进行另一种选择,该选项将基础表留在后面。

当您SELECT * FROM TEMP_DATA;时,您正在查询基础表,但是区别并不重要,因为它们是指相同的组合对象。

根据稍后要添加到问题中的定义,它将在每天午夜刷新。

Oracle不会仅由于实例化视图而创建任何索引。

@Husqvik-我只是引用文档* 8-)12c版本仍然说同样的话。但是,并非总是如此。如果您指定refresh with rowid,我认为。

感谢Alex和Husqvik的快速响应。在Mview定义中,我看到以下内容:

现在,我对MView有所了解,还有其他一些问题。如果可以的话,能否请您多一点帮助?抱歉,我的评论过长,因此我更新了原来的问题。谢谢你俩!

@SamV-它将每天在午夜刷新。您是今天重新创建的吗?如果是,您是否有以前的定义?可能已经[更改]()进行了手动刷新吗?否则,您是否可以在视图中查看样本数据以与报表进行比较-可能是旧报表,而报表本身的创建存在问题。只是一个想法。

@AlexPoole,您是对的,可能是报告。我检查了数据和工作,MV似乎正确刷新了。我把它交给细节工作的人。 (我只是被拖进去做挖掘)。让我们离开的是曾经有一个具有相同名称和加载脚本的真实表的东西,但是有人(无声地)切换到MV并忘记了!今天早上我有一个旧的Shell脚本和一个crontab问题,最后以MV结尾!那个all_objects查询真是太棒了!现在是他们的问题!但是,一定要在这里学到一些!谢谢!

有两个架构对象。实体化视图实际上是一个表。物化视图对象包含有关刷新模式,类型,方法和其他属性的元数据。如果检查ALL_OBJECTS,您会看到MATERIALIZED VIEW对象没有其段。数据字典确保您不能将基础表视为普通表,否则它可能破坏这些耦合对象之间的一致性。

您还可以在预建表的顶部创建实例化视图。

更新:

START WITH将在每次刷新时更新。创建或刷新视图时,将评估NEXT START。

如果数据库中通常会发生任何错误,则刷新可能会失败。 g,空间不足,锁定超时,查询基础对象的更改。

谢谢!我仍然对如何开始刷新感到the恼。我现在看到了。 SELECT log_user,last_date,next_date,INTERVAL,从dba_jobs那里取什么schema_user = SCHEMA; LOG_USER LAST_DATE NEXT_DATE间隔SCHEMA 11/05/2015 00:00:03 11/06/2015 00:00:00 trunc(sysdate)+ 1 dbms_refresh.refresh(" SCHEMA"。" TEMP_DATA");再次非常感谢。我今天学到了一些东西!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值