COMMIT WRITE WAIT | COMMIT WRITE NOWAIT | ||
---|---|---|---|
{code:none | borderStyle=solid} (동기/기본값) - 리두가 모두 디스크에 쓰일 때까지 기다림 {code} | {code:none | borderStyle=solid} - 안기다림, 디스크에 쓰이기 전에도 다른 세션이 변경된 데이터 볼 수 있음 - 언제써? (실패시 자동으로 재시작할 수 있는 배치(백그라운드) 어플리케이션) - 맞춤형 데이터 적재 프로그램 - 커밋에 문제가 생길 수 있음을 고려 되어야 함 - 실시간으로 공급되는 데이터를 처리하는 프로그램 - 장애시 생성된 데이터를 무시할 수 있는 경우 (주식시세?) - 큐잉 메커니즘을 자체적으로 구현한 프로그램 - PROCESSED_FLAG = 'N' → 'Y' → (장애) → 'N' → 'Y' {code} |
borderStyle=none}{code} h6. (2) 비분산 PL/SQL 코드 블록 내에서 COMMIT 사용시 | Demo#1 | ||
{code:sql | borderStyle=solid} -- 클라이언트 애플리케이션에 제어권을 반환하기 전 마지막 한 번만 WAIT 함 SQL> create table t 2 as 3 select * 4 from all_objects 5 where 1 = 0 6 / |
Table created.
SQL> create or replace procedure p
2 as
3 begin
4 for x in ( select * from all_objects )
5 loop
6 insert into t values x;
7 commit;
8 end loop;
9 end;
10 /
Procedure created.
-- 위 코드(p) 는 아래와 같다
SQL> create or replace procedure p
2 as
3 begin
4 for x in ( select * from all_objects )
5 loop
6 insert into t values x;
7 commit write NOWAIT;
8 end loop;
9
10 -- make internal call here to ensure
11 -- redo was written by LGWR
12 end;
13 /
Procedure created.
|