【发布时间】:2016-02-06 17:46:57
【问题描述】:
我有点理解物化视图,并且以前使用过它们。最近出现了一个关于为什么特定报告没有显示最新数据的问题,我调查了这个问题。显然,他们之前有一个用 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;
对它的任何见解,非常感谢。
UPDATE 基于@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 会在明天刷新后更改为 07-Nov 吗?
而且,它会自动刷新吗?如果是,它什么时候刷新?
有什么会阻止它刷新,因为用户抱怨他们没有在使用此 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;
【问题讨论】: