我有点理解物化视图,并与之合作过。最近出现了一个问题,为什么一个特定的报告没有显示最新的数据,我研究了这个问题。显然,他们有一个临时表加载了crontab,稍后切换到物化视图。实体化视图和具有相同名称的表
当我看着数据库与下面的查询(表的名称更改):
SELECT * FROM all_objects WHERE object_name = 'TEMP_DATA';
这实际上表明在相同的架构2个对象:一个表与另一个物化视图
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的反应
UPDATE: 在MView的定义,我见下文:
BUILD IMMEDIATE
REFRESH COMPLETE
START WITH TO_DATE('06-Nov-2015','dd-mon-yyyy')
NEXT trunc(sysdate) + 1
WITH PRIMARY KEY
这是否意味着它应该每天更新(在这里明天)?明天更新后,将开始于更改为07年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;
Oracle不会仅仅因为物化视图而创建任何索引。 – Husqvik
@Husqvik - 我只是在引用文档* 8-)12c版本仍然说同样的事情。但不,它并不总是;它会如果你指定'刷新rowid'我想。 –
感谢Alex和Husqvik的快速反应。在Mview的定义中,我看到如下: – SamV