Oracle 구체화 보기 오류: 코드 포함
Oracle 10g에서 다음 코드를 실행할 때:
drop materialized view test4;
drop materialized view test3;
drop table test2;
drop table test1;
create table test1
(
x1 varchar2(1000),
constraint test1_pk primary key (x1)
);
create materialized view log on test1 with sequence;
create table test2
(
x2 varchar2(1000),
constraint test2_pk primary key (x2)
);
create materialized view log on test2 with sequence;
create materialized view test3
refresh complete on demand
as
(
select x1 from test1
union all
select null from dual where 0 = 1
);
alter table test3 add constraint test3_pk primary key (x1);
create materialized view log on test3 with sequence;
create materialized view test4
refresh fast on commit
as
(
select t1.rowid as rid1, t2.rowid as rid2, t1.x1 u1, t2.x2
from test3 t1, test2 t2
where t1.x1 = t2.x2
);
구체화된 뷰를 생성하려고 할 때 이 오류가 발생합니다.test4
:
SQL Error: ORA-12053: this is not a valid nested materialized view
12053. 00000 - "this is not a valid nested materialized view"
*Cause: The list of objects in the FROM clause of the definition of this
materialized view had some dependencies upon each other.
*Action: Refer to the documentation to see which types of nesting are valid.
저는 "FROM 절"에 있는 어떤 개체도 어떻게 서로 의존하는지 이해할 수 없습니다.
이걸 어떻게 작동시키죠?현재 제가 생각할 수 있는 유일한 작업은 교체하는 것입니다.test3
수동으로 데이터를 삭제하고 새로 고칩니다.이 접근법은 효과가 있지만, 약간 해킹처럼 보입니다.
또는 두 개의 테이블을 가지고 기본 테이블 중 하나는 대량 업데이트되지만(구체화된 보기에 반영될 필요가 없음) 다른 업데이트는 구체화된 보기(즉, "반")에 반영되어야 하는 예제를 보고 싶습니다.fast refresh on commit
반반씩complete refresh on demand
) 를 사용해 보았습니다.refresh force
하지만 사용할 때는EXECUTE DBMS_MVIEW.EXPLAIN_MVIEW()
커밋에서 패션 리프레시를 사용할 수 있다는 증거를 찾지 못했습니다.저는 이것도 함께 하고 싶습니다.union all
마찬가지로
다음과 같이 test4 구체화된 보기를 빠르게 새로 고칠 수 있습니다.
SQL> create table test1
2 ( x1 varchar2(1000)
3 , constraint test1_pk primary key (x1)
4 )
5 /
Table created.
SQL> create materialized view log on test1 with rowid
2 /
Materialized view log created.
SQL> create table test2
2 ( x2 varchar2(1000)
3 , constraint test2_pk primary key (x2)
4 )
5 /
Table created.
SQL> create materialized view log on test2 with rowid
2 /
Materialized view log created.
SQL> create materialized view test4
2 refresh fast on commit
3 as
4 select t1.rowid as rid1
5 , t2.rowid as rid2
6 , t1.x1 u1
7 , t2.x2
8 from test1 t1
9 , test2 t2
10 where t1.x1 = t2.x2
11 /
Materialized view created.
SQL> insert into test1 values ('hello')
2 /
1 row created.
SQL> insert into test2 values ('hello')
2 /
1 row created.
SQL> commit
2 /
Commit complete.
SQL> select * from test4
2 /
RID1 RID2
------------------ ------------------
U1
---------------------------------------------
X2
---------------------------------------------
AAATU5AAEAAAssfAAA AAATU8AAEAAAssvAAA
hello
hello
1 row selected.
중첩된 MV가 작동하려면 기본 MV가 될 수 없기 때문에 사례가 작동하지 않습니다. 처음에는 이상하게 들리지만 test3에서 했던 것과 같은 트릭이 있어야 작동합니다.또한 조인 MV가 작동하려면 기본 테이블의 구체화된 보기 로그를 ROWID로 만들어야 합니다.
빠르게 새로 고칠 수 있는 구체화된 보기 오류에 대해 제가 쓴 일련의 블로그 게시물을 보면 좋을 것입니다.여기에는 거의 모든 제한 사항이 설명되어 있습니다.
기본 MV
MV 가입
집계 MV
모든 MV 연합
중첩 MV
MV_Capabilities_테이블
요약
안부 전해요,
롭
Added: 29-09-2011
다음은 test2에서도 union all trick을 사용하여 중첩된 MV의 예입니다.
SQL> create table test1
2 ( x1 varchar2(1000)
3 , constraint test1_pk primary key (x1)
4 )
5 /
Table created.
SQL> create materialized view log on test1 with rowid
2 /
Materialized view log created.
SQL> create table test2
2 ( x2 varchar2(1000)
3 , constraint test2_pk primary key (x2)
4 )
5 /
Table created.
SQL> create materialized view log on test2 with rowid
2 /
Materialized view log created.
SQL> create materialized view test2_mv
2 refresh fast on commit
3 as
4 select rowid rid
5 , x2
6 , 'A' umarker
7 from test2
8 union all
9 select rowid
10 , x2
11 , 'B'
12 from test2
13 where 1=0
14 /
Materialized view created.
SQL> alter table test2_mv add constraint test2_mv_pk primary key(x2)
2 /
Table altered.
SQL> create materialized view log on test2_mv with rowid
2 /
Materialized view log created.
SQL> create materialized view test3
2 refresh fast on commit
3 as
4 select rowid rid
5 , x1
6 , 'A' umarker
7 from test1
8 union all
9 select rowid
10 , x1
11 , 'B'
12 from test1
13 where 0 = 1
14 /
Materialized view created.
SQL> alter table test3 add constraint test3_pk primary key (x1)
2 /
Table altered.
SQL> create materialized view log on test3 with rowid
2 /
Materialized view log created.
SQL> create materialized view test4
2 refresh fast on commit
3 as
4 select t1.rowid as rid1
5 , t2.rowid as rid2
6 , t1.x1 u1
7 , t2.x2
8 from test3 t1
9 , test2_mv t2
10 where t1.x1 = t2.x2
11 /
Materialized view created.
SQL> insert into test1 values ('hello')
2 /
1 row created.
SQL> insert into test2 values ('hello')
2 /
1 row created.
SQL> commit
2 /
Commit complete.
SQL> select * from test4
2 /
RID1 RID2
------------------ ------------------
U1
---------------------------------------------------
X2
---------------------------------------------------
AAATXbAAEAAAstdAAA AAATXXAAEAAAstNAAA
hello
hello
1 row selected.
이것이 도움이 되길 바랍니다!
오라클에서 인용
다중 계층 구체화 보기 사용에 대한 제한 사항
구체화된 마스터 뷰와 구체화된 뷰를 기반으로 하는 구체화된 뷰 모두 다음을 수행해야 합니다.
- 주요 주요 구체화된 뷰가 됩니다.
- 호환성 수준이 9.0.1 이상인 데이터베이스에 상주
참고: COMPATIBLE 초기화 매개변수는 데이터베이스의 호환성 수준을 제어합니다.
하지만, 저는 당신을 위한 해결책을 시도해 보겠습니다.돌아올 것이다.
업데이트: 성공하지 못해서 죄송합니다.당신은 제한이 너무 많습니다 :)
Oracle 설명서에 따르면 운이 없을 수 있습니다.
http://download.oracle.com/docs/cd/B28359_01/server.111/b28313/basicmv.htm#i1006734
구체화된 뷰에 중첩된 구체화된 뷰를 작성할 수 있지만 모든 상위 및 기본 구체화된 뷰에는 결합 또는 집합체가 포함되어야 합니다. 구체화된 보기에 대한 정의 쿼리에 조인 또는 집계가 포함되어 있지 않으면 중첩할 수 없습니다.구체화된 뷰가 정의된 모든 기본 객체(구체화된 뷰 또는 테이블)에는 구체화된 뷰 로그가 있어야 합니다.모든 기본 개체는 테이블인 것처럼 처리됩니다.또한 구체화된 뷰에 대해 기존의 모든 옵션을 사용할 수 있습니다.
언급URL : https://stackoverflow.com/questions/7479485/oracle-materialized-view-error-code-included
'programing' 카테고리의 다른 글
느린 쿼리 로그 비우기 (0) | 2023.08.28 |
---|---|
ASP.NET 그리드 보기 대목록 보기 (0) | 2023.08.28 |
REST에서 성공적인 DELETE 문에 대한 HTTP 상태 반환 코드는 무엇입니까? (0) | 2023.08.28 |
CPU 캐시에 따른 MariaDB 성능 (0) | 2023.08.28 |
한 번에 여러 행 시드 5 (0) | 2023.08.23 |