구체화 된보기를 새로 고치려고하는 경우 DML 오류 로깅을 사용하여 모든 문제 행을 캡처하는 방법을 알지 못합니다. 반면에 테이블을 생성하고 DML 오류 로깅을 사용하면 테이블을 채우고 구체화 된 뷰를 새로 고칠 때 발생할 수있는 모든 오류를 캡처 할 수 있습니다.
잠재적으로이 테이블을 수동으로 채우고 create a materialized view on this prebuilt table을 채울 수 있습니다. 이는 작성한 테이블에 기본 테이블 (오류 로그에 기록 된 행)의 일부 데이터가 누락 될 것이므로 구체화 된 뷰가 사용되는 방식과 쿼리 재 작성의 종류에 따라 문제가 발생할 수 있습니다.
테이블 및 오류 로그 (10) 행을 삽입하는
SQL> create table t (
2 col1 number,
3 col2 number
4 );
Table created.
Elapsed: 00:00:00.00
SQL> ed
Wrote file afiedt.buf
1 begin
2 dbms_errlog.create_error_log('T', 'T_ERR');
3* end;
SQL>/
PL/SQL procedure successfully completed.
Elapsed: 00:00:00.01
SQL> create function f1
2 return varchar2
3 is
4 begin
5 return 'A';
6 end;
7/
Function created.
시도를 만듭니다. 3은 LEVEL
3의 배수와 함수에 의해 반환되는 문자열이 될 수 있기 때문에, 지금은 숫자
Elapsed: 00:00:00.01
SQL> insert into t(col1, col2)
2 select level,
3 (case when mod(level,3) = 0
4 then to_number(f1)
5 else mod(level,3)
6 end)
7 from dual
8 connect by level <= 10
9 log errors into t_err
10 reject limit unlimited;
7 rows created.
Elapsed: 00:00:00.01
SQL> ed
Wrote file afiedt.buf
1 select ora_err_mesg$, col1, col2
2* from t_err
SQL>/
ORA_ERR_MESG$ COL1 COL2
------------------------------ ---------- ----------
ORA-01722: invalid number 3 0
ORA-01722: invalid number 6 0
ORA-01722: invalid number 9 0
Elapsed: 00:00:00.00
로 변환 할 수없는 실패 구체화 된 뷰를 만들려면이 미리 만들어진 테이블을 사용합니다
SQL> ed
Wrote file afiedt.buf
1 create materialized view t
2 on prebuilt table
3 as
4 select 1 col1, 1 col2
5* from dual
SQL>/
Materialized view created.
Elapsed: 00:00:00.11
당신은 그것이 내가 의미했던 것보다 훨씬 낫다고 말했습니다 ... 다중 행을 반환하는 FCN 때문에 MView가 새로 고침에 실패했습니다. 이렇게하면 기본 쿼리에서 object_ID를 가져온 다음 시드 행에 대한 해당 err 테이블을 사용하여 fcn 출력을 열로 사용하여 쿼리를 실행할 수 있습니다. 어쨌든, 잠재적으로 수백만 행에서 우리가 알 수없는 1,000 개까지 걸릴 수 있습니다. 우리는 그것을 시도하고 우리가 성공하면 다시보고 할 것입니다. 감사합니다 저스틴 – Marc
마침내 돌아 왔습니다 ... 우리는 MView의 오류를 기록하는 코드를 구현했습니다. 그것은 작동합니다. 미리 빌드 된 테이블에서 MView를 작성하는 것에 대한 부분을 이해하지 못했습니다. Hermant의 기사는 도움이되지 않았지만 늦었습니다. 나는 그것에 대해 공부해야 할 것이고, 나는 곧 그것을 필요로 할 것이라고 확신한다. ;) – Marc