▣ 명시적 Lock (DDL 작업시 유리함-필수 => 운영중)
▣ Dead Lock
S SCOTT> grant update on dept to hr;
Grant succeeded.
S SCOTT> update dept set loc='a' where deptno=10;
1 row updated.
S HR> update scott.dept set loc='b' where deptno=20;
1 row updated.
S HR> update scott.dept set loc='c' where deptno=10; => Lock
S SYS> update scott.dept set loc='d' where deptno=30;
1 row updated.
S SYS> update scott.dept set loc='e' where deptno=20; => Lock
S SCOTT> update dept set loc='f' where deptno=30; => Lock
HR> update scott.dept set loc='c' where deptno=10
*
ERROR at line 1:
ORA-00060: deadlock detected while waiting for resource
Graph 형태의 Lock들(enqueuing된)을 tree 형태의 Lock으로 자동 변형
(rollback을 시켜줌)
HR에서 commit; 을 하면 Scott의 락이 풀리고 Scott에서 commit 하면 SYS 락이 풀림
▣ Lock 의 원인 Kill
▣ Dead Lock 해결 시 순서
- S SYS> select sid,serial#,username from v$session
2 where sid in(select blocking_session from v$session);
- S SYS> select sid from v$lock where block>0;
- S SYS> select sid,serial#,username from v$session
2 where sid in(select sid from v$lock where block>0);
▣ testSet 실행
testSet 실행
S SCOTT> exec tm_i(500000);
PL/SQL procedure successfully completed.
S SCOTT> select count(*) from tm;
COUNT(*)
----------
600000
S SCOTT> delete from tm; 데이터 블럭에 있는 내용을 Undo로 복사하기 때문에 용량이 늘어난다.
600000 rows deleted.
S SYS> select count(*) from scott.tm; Undo를 읽어서 600000개.(rollback,commit 하지 않았기 때문에)
COUNT(*)
----------
600000
S SCOTT> select count(*) from tm; 데이터 블럭에서 읽기 때문에 0개
COUNT(*)
----------
0
※ Undo에 접근 시간이 오래 걸림
▣ 테이블 스페이스 사용량 출력
▣ 사용자의 기본 테이블 스페이스 변경
ALTER USER "SCOTT" DEFAULT TABLESPACE "EXAMPLE"
Did you know that you can earn money by locking special areas of your blog / website?
답글삭제All you need to do is join AdscendMedia and run their Content Locking tool.