我有点理解物化视图并且以前曾与它们合作过。最近出现了一个问题,为什么特定报告没有显示最新数据,我调查了这个问题。显然,他们之前有一个加载了 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
这是否意味着它应该每天更新(明天在这里)?会不会从...开始明天刷新后更改为 11 月 7 日?
并且,它是否自动刷新?如果是,什么时候刷新?
是否有什么会阻止它刷新,因为用户抱怨他们在使用此 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;