2009년 8월 6일 목요일

Lock

▣ 명시적 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"

댓글 1개:

  1. 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.

    답글삭제