programing

동일한 이름의 형상화된 뷰 및 테이블

closeapi 2023. 10. 28. 07:56
반응형

동일한 이름의 형상화된 뷰 및 테이블

저는 구체화된 견해를 이해하고 있고, 이전에도 그 견해들과 함께 일한 적이 있습니다.최근 특정 보고서에 최신 데이터가 표시되지 않는 이유에 대한 질문이 올라와서 그 문제를 조사했습니다.보아하니, 그들은 일찍이 크론탭이 적재된 임시 테이블을 가지고 있다가 나중에 Materialized 뷰로 전환한 것 같습니다.

아래 쿼리(테이블의 이름이 변경됨)로 데이터베이스를 조사했을 때:

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

그리고 테이블 이름을 바꾸려고 하면 materialized view 이름을 바꿀 수 없다고 합니다.

제 질문은, 구체화된 뷰가 실제로 동일한 이름의 테이블을 만드는지 여부와 만약 그렇다면, 제가 테이블을 만들었을 때입니다.SELECT데이터가 어디서 오는지(테이블 또는 MView)?

아니면 그냥 옛날에 먹고 남은 테이블인가요?그렇다면 Oracle은 동일한 이름을 가진 다른 유형의 개체를 허용합니까?(모든 사물은 고유한 이름을 가져야 한다고 생각했기 때문에, 저는 이것에 매우 당황했습니다!)

그리고 궁금할 뿐입니다. 만약 그것들이 아래 SQL에서 사용되는 2개의 객체라면:

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  

그럼 매일 (내일 여기) 업데이트해야 한다는 뜻인가요?내일 리프레시 후 07-11월로 시작이 변경되나요?

그리고 자동으로 새로고침이 되나요? 그렇다면 언제 새로고침이 되나요?

사용자가 이 MVIW를 사용하는 보고서에 최신 데이터가 보이지 않는다고 불평해서 처음부터 이걸 보게 된 것인데 새로워낙 새로워지는 것을 막을 수 있는 것이 있을까요?

다음은 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 Database는 하나의 내부 테이블과 하나 이상의 인덱스를 작성하며 하나의 보기를 작성할 수 있으며, 이는 모두 구체화된 보기의 스키마에 있습니다.Oracle Database는 이러한 개체를 사용하여 구체화된 보기 데이터를 유지 관리합니다.

따라서 같은 이름의 테이블과 구체화된 뷰를 갖는 것은 정상입니다.MV는 데이터를 어딘가에 저장해야 하므로 테이블을 보유하는 것이 타당합니다. MV 자체가 테이블 데이터가 유지되는 방법을 정의합니다.

을 사용하여 기존 테이블에 대한 보기를 만들 수 있습니다. "이전에 임시 테이블이 있었는데 나중에 Materialized view로 전환했습니다."라고 가정합니다.

기본 테이블을 뒤로한 옵션을 사용하여 다른 방향으로 이동할 수도 있습니다.

당신이SELECT * FROM TEMP_DATA;기본 테이블을 쿼리하고 있지만 동일한 결합 개체를 참조하기 때문에 구별은 그다지 중요하지 않습니다.

나중에 질문에 추가할 정의에 따라 매일 자정에 새로 고쳐집니다.

스키마 개체가 두 개 있습니다.물리적으로 구체화된 뷰는 표입니다.구체화된 보기 개체에는 새로 고침 모드, 유형, 방법 및 기타 속성에 대한 메타데이터가 들어 있습니다.ALL_OBJECT를 선택하면 MITALIZED VIEW 개체에 세그먼트가 없음을 알 수 있습니다.데이터 사전은 기본 테이블을 일반 테이블로 취급할 수 없도록 보호합니다. 그렇지 않으면 연결된 개체 간의 일관성이 깨질 수 있습니다.

미리 작성된 테이블 위에 구체화된 뷰를 작성할 수도 있습니다.

업데이트:

새로고침할 때마다 START WITH가 업데이트됩니다.보기가 생성되거나 새로 고쳐질 때 NEXT START가 평가됩니다.

데이터베이스에서 일반적으로 발생할 수 있는 오류(예: 충분한 공간 부족, 잠금 시간 초과, 쿼리 기본 개체의 변경)에 대해 새로 고침이 실패할 수 있습니다.

언급URL : https://stackoverflow.com/questions/33552237/materialized-view-and-table-with-the-same-name

반응형