이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 11117|회답: 0

[출처] ORACLE 11g 신규 기능 - DDL 잠금이 DML 잠금을 기다릴 수 있게 합니다

[링크 복사]
게시됨 2014. 11. 26. 오후 3:54:15 | | |
저도 전에 이 주제에 대해 쓴 적이 있습니다오라클11g 신규 특집 기사, 지금오라클11G가 주류가 되었습니다오라클데이터베이스 버전, 이해 및 학습오라클11G의 새로운 기능들이 매우 중요하고, 저도 마찬가지입니다오라클11G의 새로운 기능을 처음 접하는 분들을 위해 제 학습 과정과 경험을 여기서 공유하고자 합니다.
이 글은 주로 다음을 기록하고 있습니다:오라클DDL 잠금장치가 DML 잠금을 기다릴 수 있게 하는 11g의 새로운 기능은 6월 30일 ACOUG 행사에서 장 레이(카무스) 씨가 공유한 주제이기도 합니다.
11g 이전 버전에서는 기본적으로 DDL 락이 DML 락을 기다리지 않으며, DML 락이 있는 테이블에 DDL 작업을 수행하면 즉시 실패를 반환합니다(같은 SESSION을 제외하고). 간단한 실험을 해봅시다. SESSION1 테이블 STREAM에 데이터를 삽입하고 제출하지 마세요. 이 시점에 테이블 STREAM에 DML 락이 걸려 있으며, SESSION2에서 TRUNCATE 테이블 STREAM 연산을 실행하면 즉시 실패를 반환합니다:
SESSION1 >스트림 셀렉트에 삽입 * dbdream에서; 10행 생성. SESSION2 >테이블 스트림을 절단; 테이블 스트림 절단 * 1행 오류: ORA-00054: 자원 사용 중이며, NOWAIT가 지정되어 있거나 버전 11g에서 타임아웃이 만료됨,오라클DDL 락이 DML 잠금을 기다릴 수 있도록 하는 매개변수DDL_LOCK_TIMEOUT 도입되었으며, 이 잠금장치는 DDL 잠금이 DML 잠금을 기다리는 시간을 제어합니다. 초는 0입니다. 즉, DDL 잠금은 DML 잠금을 기다리지 않습니다. 최대 값은 1백만 일, 즉 11.5일입니다. 이 매개변수는 전역적으로 또는 세션 수준에서 설정할 수 있습니다.
SESSION2 >SHOW parameter ddl_lock_timeout NAME TYPE VALUE ----------------------- ----------- ------ ddl_lock_timeout 정수 0 SESSION2 >ALTER 세션 세트 ddl_lock_timeout=2000000; 오류: ORA-00068: 매개변수 ddl_lock_timeout에 대해 잘못된 값 2000000, 0에서 1000000 사이여야 합니다. 다음은 다음 DDL_LOCK_TIMEOUT 매개변수의 효과를 보여주며, 위 STREAM 테이블을 예로 들 때, 현재 STREAM 테이블은 여전히 DML 잠금이 있으며, SESSION2에서는 DDL_LOCK_ TIMEOUT은 60초로 설정된 후 TRUNCATE 작업이 실행되며, 실패는 즉시 반환되지 않고 60초간 기다립니다. STREAM 테이블의 DL 락이 60초 이내에 해제되지 않으면 실패를 반환합니다.
SESSION2 >alter session set ddl_lock_timeout=60; 세션 변경. SESSION2 >SESSION2 >트런케이트 테이블 스트림에 타이밍을 설정; --이 시점에서 SESSION2가 일시 중지, SESSION1가 60초 이내에 DML 락을 해제할 때까지 기다립니다. 60초 후 반환 실패, 테이블 스트림 절단 * 1행 오류: ORA-00054: 자원 사용 중이며, NOWAIT 지정이나 타임아웃 만료로 획득 완료: 경과: 00:01:00.01 DDL_LOCK_TIMEOUT 매개변수의 등장은 DBA 작업을 크게 단순화합니다. 예를 들어, 테이블에 필드를 추가하고 싶지만, 이 테이블에는 DML 작업이 많아 ALTER SYSTEM KILL SESSION 메서드를 사용해 이 작업을 종료할 수 없습니다. 따라서 필드를 추가하려면 필드를 수없이 추가하거나 스크립트를 작성해야 하며, 이제 DDL_ LOCK_TIMEOUT 매개변수는 값을 약간 더 크게 설정하면 되며, SQL 실행에 신경 쓸 필요가 없습니다. 아래에서 이 과정을 시연해 보겠습니다.
SESSION2 필드를 추가하기:
SESSION2 >alter table stream add jpg_path varchar2(255) default '/home/오라클/'; 此时挂起,等待STREAM表的DML锁释放,SESSION1提交释放DML锁后,SESSION2操作便成功了。
SESSION1 >커밋; 커밋 완료. SESSION2 >alter table stream add jpg_path varchar2(255) default '/home/오라클/'; Table altered. SESSION2 >select * from stream; ID IDENTIFIER PIC_NO JPG_PATH ---------- --------------- ------ --------------- 1 18-0220-003 1 /home/오라클/ 2 18-0221-003 1 /home/오라클/ 3 18-0221-003 2 /home/오라클/ 4 18-0221-003 3 /home/오라클/ 5 18-0223-005 1 /home/오라클/ 6 18-0223-005 2 /home/오라클/ 7 18-0223-005 3 /home/오라클/ 8 18-0223-005 4 /home/오라클/ 9 18-0223-005 5 /home/오라클/ 10 18-0223-005 6 /home/오라클/ 10 rows selected.




이전의:실용 SQL 문장: 날짜 추정
다음:Oracle ORA-12541: TNS:no listener error 우회 방법
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com