본문 바로가기

DB

07강

 

7강 Managinh Schema Objects

 

인덱스
  • index rebuild : 새로 만드는 것은 아니고 리빌드 하는 것인데 기존에 만들어저 있는 것을 참고하여 새로 만들어 지는 것이라고 한다.즉 쏘팅 않해도 된다.

  • Syntax : Alter Index index명 Rebuild online

    • 인덱스 리빌드시는 Table에 Lock이 걸려 버린다. select는 허용 되나 insert, update, delete를 할 수 없다.

      lock을 걸리지 않게 하려면 online 옵션을 줄 수 있다. 이경우는 리빌드가 느리게 진행된다.

  •  index

    • logical
    • physical

      • b*tree (분포도가 좋으면)(이름, 주민번호)(null 계시면 않되요)
      • bitmap (분포도가 적은 경우)(성별, 연령대)(null 도 받아 드려요)
    •  bitmap

      • 구성 순서

        1. Table Scan
        2. Bitmap Construction (위에래 데이타를 비교하여 bitmap 데이타 생성 ㅡㅡ)
        3. Sort
        4. Bitmap Compaction
        5. Index Creation
      • 단점 : update시 table에 lock을 걸어야 한다. (오마이갓~)(수정시 다른 row에 영향을 미치기 때문이다.)

        • 그래서리 readonly 시스템에 사용하기 유용하다.
Temporary Tables
  • 정의 : 특정 session이나 특정 Transaction 내에서만 Data를 유지한다. 그렇게 때문에 Lock도 걸릴일이 없다.(한 session에만 데이타가 유효하기 때문)
  • Syntax

    1. Create Global Temporary Table xemp
      on commit preserve rows
      as
      select * from employees;
  •  사용예? 월마다 배치 작업때문에 Table을 만들고 지우고 만들고 지우고 작업을 진행할 경우가 있다 이것은 DefaultTableSpace의 플레그멘테이션 현상을 일으킬수 있다. 하지만 Temporary Table는 TemporaryTableSpace에 생성되었다가 삭제 되기 때문에 단편화 현상이 생기지 않는다.

 

Data Dictionary Views
  • Static View : dba_xxx, All_xxx, User_xxx    <== by ddl(create, alter)명령에 의해서만 변경이 된다.

    1. select username from dba_users;
  •  ----------------------------------------------------------------------------------

    • dba_xxx : sys, system 만 조회 가능하다.

      • All_xxx : User가 Access할 수 Object에 대한 기본 정보를 보여준다.
      1. select * from all_tables;
        select * from all_sequences;
        select * from all_users;
  •  ----------------------------------------------------------------------------------

    • user_xxx : User가 만든 Object에 대한 자세한 정보를 보여준다
    1. select * from user_tables;
      select * from user_sequences;
      select * from user_users;
  • --------------------------------------------------------------------------
  • Dynamix (Performance)View : V$xxx (좌동으로 변한다.)

    1. select namespace, gets, gethits, pins, pinhits from v$librarycache

 

8 Managing Data and Concurrency

 

Procedural Language /SQL
  • Plsql Block

    • Stored block : 이름을 가지고 oracle server에 컴파일 되어 dictionary로 저장

      1. Function : 꼭 값을 리턴
      2. Procedure : 리턴 하던지 말던지
      3. Package : 한대 묶어 버려~
      4. Trigger : 뭐할때 같이 뭐 해라
    • Anonymous block

      • 매번 컴파일, 매번 실행, 어디에서 저장되지 않는다.
      1. set serveroutput ON; --요걸 꼭해야 결과가 나온다.
      2. declare                  --선언부
             lname varchar2(25);          
             sal   number(7,2);
        begin
             select last_name, salary INTO lname, sal     --last_name는 lname에, salary는 sal에 들어간다.
             from employees
             where employee_id=100;
             dbms_output.put_line('Name :'|| lname ||'Salary :'||to_char(sal));
        end;
        /
      3.  
Locks
  • 정의 : 나 수정할때 남 수정 못하게 문 장궈 버려
  • oracle은 rows 단위의 Lock을 건다.
  • oracle은 table에 97%이상의 rows가 lock되어 있다고 하여도 block 또는 table로 lock을 격상 시키지 않는다.

    • col < rows < block < table

      • rows레벨의 lock을 table레벨의 lock으로 변경하는걸 격상 시킨다고 하는거징!
  • Commit, Rollback시 Lock을 푼다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

이 글은 스프링노트에서 작성되었습니다.