Oracle/Admin2009. 12. 7. 18:54
● 개요

- 통계를 사용할 수 있다.
- AWR (Automatic Workload Repository)을 관리할 수 있다.
- ADDM (Automatic Database Diagnostic Monitor)을 사용할 수 있다.
- advisory framework를 설명할 수 있다.
- alert thresholds를 설정할 수 있다.
- server generated alerts를 사용할 수 있다.
- automated tasks를 사용할 수 있다.
- SQL Tuning과 Server Tuning의 정의 및 특징을 알 수 있다.


● Proactive Maintenance
  ◎ AWR + MMON + ADDM
       ○ AWR
          - Automatic Workload Repository의 약자.
          - SYSAUX 테이블 스페이스에 존재(SYS의 소유)하는 테이블의 집단
          - performance관련 데이터가 자동으로 들어감.(MMON이 DMA방식으로 채운다)
          - 들어온 데이터가 7일정도 머문다. 조정은 가능.
          - DB를 만들면 저절로 생김
          - 실제로 기록되는 내용은 snapshot이다.

       ○ MMON
          - Manageability Monitor의 약자.
          - snapshot을 자동으로 만들어주는 역할
          - DMA(Direct Memory Access) 방식으로 AWR에 데이터를 쌓음

       ○ ADDM
          - Automatic Database Diagnostic Monitor의 약자.
          - AWR에 쌓여 있는 snapshot들을 분석하는 것
          - AWR snapshot이 끝날 때마다 자동적으로 실행된다.
          - doctor, engine, robot dba의 역할로 비유할 수 있다.
          - 분석결과물을 화면으로 표시 또는 AWR에 저장한다.

  ◎ Advisory framework
         - Server Alert가 발생할 때, 참고하는 곳 -> 메세지 보낼 때 첨부해서 보낼 때도 있다.
         - 여러 advisor가 존재 : STA(SQL Tuning Advisor)
         - 관련 패키지 : dbms_advisor

  ◎ Server Alerts
         - 이상한 징후와 해결책을 적시에 알리주는 경고
         - 알려주는 상황은 관리자가 셋팅
         - 대표적인 상황 : 테이블 스페이스 소비량이 어느 수준을 넘었을 때, 
                                 CPU의 소비율이 어느 정도 이상될 때 정리 안된 것들
         - 관련 패키지 : dbms_server_alert

  ◎ Automated Task
         - 일들을 자동화 시키는 것.
         - 자원배분, 여러 job을 chain처럼 연계해서 운용
         - 관련 패키지 : dbms_scheduler

  ◎ 기타
      ○ Baseline

          - 데이터베이스가 정상적으로 운영되고 있을 때 수집한 데이터
          - 통계들 중 기준이 되는 통계

      ○ Metric
          - 통계를 측정단위로 나눈 것. 단위 당 통계 (예) 단위 시간당 얼마, 초당 얼마 등)
          - internal component(각 advisor)를 위해 존재한다.

      ○ Snapshot Sets
          - AWR에 쌓여 있는 snapshot이 안지워지도록 설정하는 것.
            시작날짜와 끝날짜를 주고, Baseline화 한다.


기타 참고사항
       
- 중요 parameter
     :statistics_level - 통계정보를 수집하는 양이나 범위를 단계별로 나타내는 parameter
       평상시에는 typical : snapshot수집을 안함.
       좀 더 많은 수집을 원하면 all
       모든 자동화된 기능을 끄기를 원하면 basic

- AWR(저장소) -> MMON(수집가) -> ADDM(분석가)


참고 : 오라클 교재 Administration Workshop I 12장. Proactive Maintenance
         

'Oracle > Admin' 카테고리의 다른 글

Optimizer Statistics & Performance Statistics  (0) 2009.12.10
Performance Management  (0) 2009.12.08
Configuring the Oracle Network Environment  (0) 2009.12.04
Implementing Oracle Database Security  (0) 2009.12.04
Managing Undo Data  (0) 2009.12.03
Posted by 자수성가한 부자
Oracle/Admin2009. 12. 4. 11:14
● 개요

- 추가적인 리스너를 생성할 수 있다.
- 오라클 넷 서비스를 생성할 수 있다.
- connect-time failover를 구성할 수 있다.


● 오라클 넷 서비스(Oracle Net Services)
   ◎ 정의
       : 네트워크 connection을 가능하게 하는 소프트웨어

   ◎ 전체 구조도



   ◎ 리스너에 추가하는 법

       ○ telnet으로 추가
           - 리스너가 동작중인지 확인

OS] ps -ef|grep lsnr


           - linstener.ora가 있는 디렉토리로 이동 후 확인

OS] cd $ORACLE_HOME/network/admin
OS] ls

           - listener.ora의 내용을 확인

OS] vi listener.ora

           - 내용을 확인해보면 다음과 같다. 빨간색 부분을 추가한다.(띄어쓰기 안맞을 경우 에러 발생할 가능성이 있다.)

L1 =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = ora10gr2.gsedu.com)(PORT = 1521))
    )
  )
SID_LIST_L1 =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = orcl)
      (ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
      (GLOBAL_DBNAME = orcl)
    )
    (SID_DESC =
      (SID_NAME = ikdb)
      (ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
      (GLOBAL_DBNAME = ikdb)
    )
  )

L2 =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = ora10gr2.gsedu.com)(PORT = 1621))
    )
  )
SID_LIST_L2 =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = jgh_db)
      (ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
      (GLOBAL_DBNAME = jgh_db)
    )
  )

           - 리스너를 start시킨다.
             기본은 1521 포트의 리스너가 start되지만 리스너를 명시해서 start, stop을 할 수 있다.

OS] lsnrctl start
OS] lsnrctl stop
OS] lsnrctl start L1
OS] lsnrctl start L2
OS] lsnrctl stop L1
OS] lsnrctl stop L2

           - lsnrctl 명령으로도 가능

OS] lsnrctl
LSNRCTL> start l1
LSNRCTL> start l2
LSNRCTL> service l1
LSNRCTL> service l2
LSNRCTL> status l1
LSNRCTL> status l2
LSNRCTL> set current l2           -- 디폴트 리스너를 바꿀 수 있다.


       ○ Oracle Net Manager로 추가

OS] netmgr


       ○ Oracle Configuration Assistant로 추가

OS] netca

       ○ EM으로 추가



 ※ Server에 기본 리스너외에 추가 리스너 등록

SQL> alter system set local_listener = a            -- 같은 machine내에 a리스트를 보고 등록
SQL> alter system set remote_listener =         -- 다른 machine의 리스너 등록

<tnsnames.ora>
=
(DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.10)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.11)(PORT = 1621))
    (CONNECT_DATA =
         (SERVER = DEDICATED)
         (SID = orcl)
    )
)


※ RAC환경에서의 설정
    - SID는 중복 불가, SERVICE_NAME은 중복 가능

SERVER1 (192.168.0.10)
OS] vi initi1.ora
instance_name = i1
service_names = haha, hoho
remote_listener = .....

SERVER2 (192.168.0.11)
OS] vi initi2.ora
instance_name = i2
service_names = haha, hoho
remote_listener = .....

SERVER3 (192.168.0.12)
OS] vi initi3.ora
instance_name = i3
service_names = haha, hoho
remote_listener = .....

CLIENT
<tnsnames.ora>
sqlplus chris/chris@a                         -- a : connect identifier(=network alias, service alias)
a =
(DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.10)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.11)(PORT = 1521))
    (CONNECT_DATA =
         (SERVER = DEDICATED)
         (SERVICE_NAME = haha)
    ) 
)
-- connect discriptor

- haha라는 서비스명으로 접속하므로 i1이 shutdown되어 있더라도 i2로 접속이 가능
  SID=i1으로 할 경우 문제가 생길 소지가 있음. SERVICE_NAME으로 하는 것이 좋음

※ instance name이 같은 서버가 있어도 도메인으로 식별 가능

instance1
instance_name = HRDB
db_domain = asia.com

instance2
instance_name = HRDB
db_domain = africa.com


※ Dedicated Server vs. Shared Server

  Dedicated Server
    - 하나의 유저에 하나의 서버 프로세스가 담당.
    - sserver process당 PGA가 생긴다.

    dedicate server로 접속시 client의 tnsnames.ora설정 파일

<tnsnames.ora>
shared =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.122.1)(PORT = 1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.122.1)(PORT = 1621))
      (LOAD_BALANCE = yes)
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )


  Shared Server
    - 일정 갯수의 서버 프로세스를 유저서버프로세스가 공유하는 형식
    - UGA(user session data, cursor state, sort data)가 SGA내에 생김(서버 프로세스가 공유하기 위해서)
    - 아래의 파일들을 설정해주어야 함

    shared server 접속시 client의 tnsnames.ora 설정 파일

<tnsnames.ora>
shared =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.122.1)(PORT = 1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.122.1)(PORT = 1621))
      (LOAD_BALANCE = yes)
    )
    (CONNECT_DATA =
      (SERVER = SHARED)
      (SERVICE_NAME = orcl)
    )
  )

      server의 파라미터 파일 설정

SQL> alter system set shared_servers = 2;                                             -- 서버프로세스를 2개
SQL> alter system set dispatchers = '(protocol=tsp)(dispatchers=3)';        -- 디스패쳐를 3개


기타참고사항

- JDBC 드라이버
    : Java Database Connectivity의 약자. 번역기. DBMS의 벤더들이 만든다.
      oracle net을 simmulate한 것
      사용시에 오라클의 버전에 맞게 사용할 것

- 리스너가 살아있는지 확인(서버가 살아있는지 확인하는 것은 아님)
   tnsping 172.16.122.106:1521/orcl

- name resolution
  : connect identifier(network alias, service alias)를 connect descriptor로 바꾸는 행위를 말한다.

- linux : oerr ora 12154 명령을 치면 에러에 대한 내용이 나옴.

- 오라클에서의 connection과 session
   - connection
      : communication path way
   - session
      : log in ~ log out

'Oracle > Admin' 카테고리의 다른 글

Performance Management  (0) 2009.12.08
Proactive Maintenance  (0) 2009.12.07
Implementing Oracle Database Security  (0) 2009.12.04
Managing Undo Data  (0) 2009.12.03
Lock의 종류  (0) 2009.12.03
Posted by 자수성가한 부자
Oracle/Admin2009. 12. 4. 10:34
● 개요

- 보안에 대한 DBA의 책임을 기술할 수 있다.
- 최소 권한의 원리를 적용할 수 있다.
- audit 옵션을 명시할 수 있다.
- audit 정보를 검토할 수 있다.
- audit trail을 유지할 수 있다.
- user들이 날리는 쿼리문의 기록을 어떻게 남길까?


● 데이터베이스 보안
    - 법률적으로 정의되어 있다.
    - 보안사고 : 내부자의 소행이 많음.
    - DBA책임은 공유되어야 한다.: 실수방지, 상호감시
    - 계정은 다르게 한다.
    - DBA와 시스템 관리자는 다른 사람이어야 한다.

● 최소 권한의 원칙
    ◎ 정의
        - 컴퓨터에 꼭 필요한 최소한의 소프트웨어만 설치
        - 루트, 관리자 계정에 접근을 제한
        - SYSDBA, SYSOPER 계정에 접근을 제한
        - 일에 필요한 만큼만 유저의 접근을 제한

    ◎ 적용방법

SQL> 07_dictionary_accessibility=false                -- 데이터 딕셔너리를 보호
SQL> revoke execute on utl_smtp, utl_tcp, utl_http, utl_file   -- 필요없는 권한 뺏기
         from public; 

   ※ EM의 All Policy Violations를 클릭하면 HAA의 기준대로 하지 않고 있는 것들의 목록이 나오고, 쉽게 수정할 수 있다.

● 감시(auditing)
    ◎ 정의
        - 

    ◎ 분류
        - Mandatory :
             주기적으로 아래의 파일들을 보는 것
            ?/rdbms/audit, alert_sid.log

        - DB Auditing : 
             Audit_trail이란 파라미터에 값을 준다.(static parameter이므로 재기동 필요) -> 확인
             유저가 insert, update의 명령을 수정한 기록은 남기나, 구체적인 값은 기록되지 않음.(9i까지, 10g부터는 기록가능)
             파라미터(audit_trail)를 설정한다.
             sp파라미터 파일에도 적용하고 싶을 경우에는 scope=both를 추가적으로 지정한다.

SQL> alter system set audit_trail = db scope=both;    -- db내부에 쌓임
SQL> alter system set audit_trail = os scope=both;    -- os내부에 쌓임
SQL> startup force                                                -- shutdown후 startup       

SQL> audit table;                                                  -- table이 대한 명령을 전부 auditing
SQL> audit select any table by session;                 -- table에 대한 모든 select는 auditing
                                                                              세션에서  한번만 남김
SQL> audit select on phil.emp by access;              -- phil.emp에 대한 모든 select 를 auditing 
                                                                              접근 할때마다 남김

감사한 기록을 보자.(audit_trail = db로 설정시)

SQL> select * from dba_audit_trail;

audit_file_dest에 지정된 경로에 audit된 기록이 남는다.
audit_file_dest 확인 방법은 다음과 같다.

SQL> show parameter audit_file_dest

감사 해제하는 방법

SQL> noaudit all by <유저명>;

        - Value-Based Auditing
           : Trigger를 이용하여 구체적인 값을 남김(new와 old를 이용)

        - FGA (Fine-grained auditing)
           : 특정 컨텐츠를 볼 경우에만 auditing 하는 것 -> SQL문이 남는다.
             정책을 설정 sal>3000  -> 조건에 맞을 경우 SQL문이 남는다.
             DBMS_FGA 패키지를 이용하여 정책을 설정한다.
             dba_fga_audit_trail의 경로에 저장된다.

        - DBA auditing 
           : SYS유저가 하는 일을 auditing
             audit된 기록은 반드시 OS에 남는다.(sys는 idle instance, nomount, mount에서도 작업을 하기 때문에)
             audit_sys_operation=true : 일 경우 남는다.
             audit_file_dest에 정의된 경로에 남는다.

기타참고사항


- audting은 가능한한 포커스를 좁히는 것이 중요하다.

- 감사기록은 aud$에 남는다.(system tablespace)

- audit 조건이 이상해 에러가 발생하면 그에 관한 쿼리문도 에러발생

참고 : 오라클 교재 
         

'Oracle > Admin' 카테고리의 다른 글

Proactive Maintenance  (0) 2009.12.07
Configuring the Oracle Network Environment  (0) 2009.12.04
Managing Undo Data  (0) 2009.12.03
Lock의 종류  (0) 2009.12.03
Managing Schema Objects-2  (0) 2009.12.02
Posted by 자수성가한 부자
Oracle/Admin2009. 12. 3. 16:54
● 개요

- DML과 undo data를 설명할 수 있다.
- undo 데이터를 모니터하고 관리한다.
- undo data와 redo data의 차이를 알 수 있다.
- undo retention을 구성할 수 있다.
- undo retention을 보장할 수 있다.
- undo advisor을 사용할 수 있다.


● Undo Data
    ◎ 정의
      - 변경전의 원래 데이터이다.

    ◎ 특징
       - 데이터를 변경하는 모든 트랜잭션을 위해서 모아둔다.
       - 트랜잭션이 끝나기전까지 보호됨

    ◎ 존재 목적
        - 읽기 일관성 (가장 중요한 존재 목적)
            : 문장이 시작된 시점의 데이터를 문장이 끝날 때까지 보는 것.
        - Rollback
        - Flashback시 이용(undo를 이용해 데이터를 살림)
        - 트랜잭션이 실패시 복구

    ◎ 관련 파라미터 
        ① undo_management = auto
        ② undo_tablespace = undotbs1
        ③ undo_retention = 600(sec)

    ◎ select시에 에러 발생
        : ORA-1555 : snapshot too old 발생
    
       ○ 발생이유
           : 비록 rollback 목적은 상실했지만, 아직 읽기 일관성 목적의 undo data가 사라졌기 때문에 발생한다.

       ○ 해결방법
           ① SQL튜닝
           ② undo 공간을 확대
           ③ undo retention 파라미터 수정

SQL> alter tablespace undotbs1 retention guarantee;  (retention 보장 10g부터)

    ◎ DML에서 에러 발생
       ○ 해결방법
           ① commit를 촉진
           ② 공간확대

기타참고사항

- AUM (Automatic Undo segment Management) <-> MUM(Manual Undo segment Management)
    : 9i 이후 다른 segment의 extents를 가져다 씀

- undo segment관련 쿼리

select * from v$rollstat;   의 RSSIZE 컬럼(롤백 세그먼트의 크기)
select * from dba_rollback_sergs;
select * from v$rollname;

             

'Oracle > Admin' 카테고리의 다른 글

Configuring the Oracle Network Environment  (0) 2009.12.04
Implementing Oracle Database Security  (0) 2009.12.04
Lock의 종류  (0) 2009.12.03
Managing Schema Objects-2  (0) 2009.12.02
Managing Data and Concurrency (주요내용 : Lock)  (0) 2009.12.01
Posted by 자수성가한 부자
Oracle/Admin2009. 12. 3. 16:51

DATA LOCK

유저가 INSERT, DELETE, UDATE, SELECT .. FROM .. FOR UPDATE OF 문장을 실행하면, 변경되는 ROW에 대한 ROW LOCK 과 TABLE 에 대한 TABLE LOCK 이 생긴다

● LOCK TYPE - 의미

◎ ROW LOCK ( TX )

INSERT INTO ... VALUE.. ;,
DELETE FROM ...WHERE ...;,
UPDATE ..SET ..WHERE ..;,
SELECT .. FROM .. WHERE .. FOR UPDATE OF.. ; SQL 문장에서,
WHERE 조건에 해당되는 ROW에 대하여 다른 유저들이 변경할 수 없도록 EXCLUSIVE LOCK 이 생긴다.
TX LOCK 이 걸린 ROW 는 DML 문장을 실행한 유저가 COMMIT 이나 ROLLBACK을 할때 까지 걸리므로
다른 유저들이 변경할 수 없다.


◎ TABLE LOCK ( TM )

TX LOCK 이 걸린 ROW 가 저장된 TABLE 에 대한 LOCK 이다. DML SQL 문장을 수행하는 중에, 해당 테이블이 ALTER 나 DROP 되는 것을 방지하기 위해서 TM LOCK 을 사용한다. 또 TM LOCK 에는 RS (ROW SHARE), RX (ROW EXCLUSIVE), S (SHARE), SRX (SHARE ROW EXCLUSIVE) X (EXCLUSIVE) 가 있다. 이런 TABLE LOCK MODE 는 같은 테이블에서 실행할 수 있는 SQL 문장과 실행할 수 없는 SQL 문장을 구분하기 위해서다. 예를 들어서 한 유저가 사원 테이블을 UPDATE 할때, 다른 유저가 사원 테이블을 DROP 하려고 한다고 가정하자.


그렇다면 테이블 락 모드에는 어떤 것이 있는지 보겠습니다.


● TABLE LOCK MODE (TM)

   LOCK TYPE - 의 미

◎ RS ( ROW SHARE LOCK )

SELECT .. FROM .. WHERE .. FOR UPDATE OF .. ; 이나
LOCK TABLE .. IN ROW SHARE MODE; 명령에 의해 해당 테이블에는 RS LOCK 이 생긴다.
RS LOCK 이 걸린 테이블에는 RS, RX, S, SRX LOCK 을 걸 수 있고, X LOCK 은 걸 수 없다.
단, SELECT .. FROM FOR UPDATE OF 명령에 의해 WHERE 조건에 걸린 ROW 에 대해서는 TX LOCK 이 생기므로 이 ROW 에 대해서 UPDATE, DELETE 를 실행할때는 테이블에 대해서는 RX LOCK 이 생기므로 에러는 안 나지만, COMMIT 이나 ROLLBACK 할때까지 WAITING 을 한다. SELECT .. FOR UPDATE OF; 문장은 테이블에는 RS LOCK 이므로 에러는 안나지만, ROW 에 대해서는 TX LOCK 이 걸리므로 WAITING 한다.


RX ( ROW EXCLUSIVE LOCK )

UPDATE ..;, INSERT INTO ..;, DELETE FROM ..; 이나 LOCK .. IN ROW EXCLUSIVE MODE ; 명령에 의해 테이블에 걸리는 LOCK 이다. RX LOCK 도 RS LOCK 과 비슷한 내용이고, 단지 S, SRX, X LOCK 을 걸 수 없다.


S (SHARE LOCK )
 
LOCK .. IN SHARE MODE; 에 의해 테이블에 생긴 LOCK 이다. S LOCK 은 같은 테이블에 대해서 RS, S LOCK 만 가능
하고, RX, SRX, X LOCK 을 걸 수는 없다.

SQL> LOCK TABLE EMP IN SHARE MODE;
        <- 사원 테이블에는 INSERT, UPDATE,DELETE 할 수 없다.


SRX ( SHARE ROW EXCLUSIVE )

- LOCK TABLE .. IN SHARE ROW EXCLUSIVE MODE; 에 의해 테이블에 생긴 LOCK 이다. SRX LOCK 은 같은 테이블에 대해서 RS LOCK 만 가능하고 RX, SRX, S, X, LOCK 을 걸 수 없다.

SQL> LOCK TABLE 사원 IN SHARE ROW EXCLUSIVE MODE;
         <- 사원 테이블에 SELECT .. FOR UPDATE OF;는 가능하지만 INSERT, DELETE, UPDATE 는 할 수 없다.


◎ X ( EXCLUSIVE )

- LOCK TABLE .. IN EXCLUSIVE MODE; 에 의해 테이블에 생긴 LOCK 이다. X LOCK 은 같은 테이블에서는 어떠한 LOCK 도 걸 수 없다. 즉, DROP TABLE ..;, ALTER TABLE ..; 등의 DDL 문장에 의해 테이블에 생기는 LOCK 이다.


출처 : http://kr.forums.oracle.com/forums/thread.jspa?threadID=431404

'Oracle > Admin' 카테고리의 다른 글

Implementing Oracle Database Security  (0) 2009.12.04
Managing Undo Data  (0) 2009.12.03
Managing Schema Objects-2  (0) 2009.12.02
Managing Data and Concurrency (주요내용 : Lock)  (0) 2009.12.01
Managing Schema Objects-1  (0) 2009.11.30
Posted by 자수성가한 부자
Oracle/Admin2009. 12. 2. 16:13
● 개요

  - 스키마란 무엇인가?
  - 데이터 타입은 무엇이고, 종류는 어떤 것들이 있는가?
  - 테이블의 생성과 수정은 어떻게 하는가?
  - 제약을 정의하는 방법은?
  - 컬럼과 테이블의 내용을 보자
  - 인덱스는 어떻게 생성하는가?
  - 뷰는 어떻게 생성하는가?
  - 시퀀스는 어떻게 생성하는가?
  - 템프테이블은 어떻게 사용하는가?
  - 데이터 딕셔너리를 사용할 수 있다.


● 인덱스 (index)

  ◎ index의 정의
     - ROWID를 전문적으로 보관하는 객체

  ◎ index의 타입
    ○ B-tree index
       - Balanced Index
       - root block, branch block, leaf block이 존재
       - branch block은 데이터의 양에 따라 여러 개가 존재할 수 있다.
       - 자주 데이터가 바뀌는 테이블에는 index를 만들지 않는 것이 좋다.
       - 어떠한 데이터를 찾아도 같은 속도가 보장.
          : 동등 질의(예) where empno = 1), 범위 질의(예) where empno > 46 and empno <= 86)
       - 성장 : leaf block -> branch block -> root의 순으로 커진다.
       - 유일한 값이 많은 컬럼에 주로 쓰인다. (OLTP환경에 많이 쓰인다.)




       - 유지보수

SQL> alter index 인덱스명 coalesce;
SQL> alter index 인덱스명 rebuild;


    ○ bitmap index
       - 유일값이 적은, 즉, 중복값이 많은 컬럼에 주로 쓰인다. (성별, 연령대 등)
       - null값도 보관
       - 전체 데이터 중 유일값이 1%이하면 bitmap인덱스로 만들어도 됨
       - DML에 취약하다. -> 광범위한 lock이 걸림
         (bit단위가 아닌 bitmap segment 단위(index block의 반정도)로 트랜잭션 lock을 건다.)
       - OLAP환경에 주로 쓰임.

SQL> create bitmap index sales_gender_bdix on sales(gender);
SQL> create bitmap index sales_age_bdix      on sales(age);





      - 참고 : Bitmap Index의 크기문제
                 Bitmap Index vs Btree Index

    ○ reverse key index
       : Byte단위로 값을 뒤집어서 저장한다.
         7001 -> 1007, 7002 -> 2007

       - 장점
          : 9:1 split이 줄어든다. 
            트랜잭션 경합을 줄일 수 있다.
            동등질의에만 사용
       - 단점 
          : 5:5 split이 늘어남.
            범위 질의에는 좋지않다.

SQL> create index t23_c1_idx on t23(c1) reverse;



  ◎ index의 옵션
      - compress
         
: 2종류 : 손실압축, 패턴 치환
           io와 메모리에 효율적, 경합은 늘어날 가능성 있음

        - nosegment
        - invisible

        참고 : nosegment index vs invisible index
      
  ◎ EM을 이용한 index의 생성 및 관리
        - Database Instance > Indexes


● 뷰 (view)
  ◎ view의 정의
        - named select
        - 뷰에 대한 질의는 테이블에 대한 질의로 transform된다.

  ◎ EM을 이용한 view의 생성 및 관리
        - Database Instance > Views


● 시퀀스 (sequence)
  ◎ sequence의 정의

  ◎ EM을 이용한 sequence의 생성 및 관리
        - Database Instance > Sequences


  ◎ sequence의 이용

● 템프 테이블 (temporary table)
  ◎ temporary table의 정의
        - 세션이나 트랜잭션이 끝나면 자동으로 없어지는 장소를 제공한다.
        - temporary table에 데이터를 넣으면 redo가 남지 않는다.
        - commit시 데이터가 삭제된다. 

SQL> create global temporary table employees_temp
         on commit preserve rows
         as select * from employees;


  ◎ temporary table에 관한 고찰

● 데이터 딕셔너리 뷰 (data dictionary view)
  ◎ data dictionary view의 정의
     - 데이터베이스에 대한 설명서이다.

  ◎ data dictionary view의 구분

  ◎ data dictionary view의 예

     연관 포스트 : http://aozjffl.tistory.com/admin/entry/edit/183


기타참고사항

테이블 vs 인덱스

create table t23(c1 number)
pctfree 10                          -- update 여유 공간
pctused 40                        --  insert 가능 시점
initrans 2                           -- 최초 tx slot 갯수 : 최소 동시성 보장
maxtrans 5                        -- 최대 tx slot 갯수 : 최대 동시성 제한 (10g 부터는 안됨 오라클이 알아서함)
storage(initial      250k         -- 최초로 할당받는 extent의 크기
            next       250k         -- 두번째 부터 할당받는 extent의 크기
            minextents   3
            maxextents 10
            pctincrease  0)
tablespace users5;


block space utilization parameter
 : pctfree, pctused, initrans, maxtrans

storage(..) 는extents관련


create index t23_c1_idx on t23(c1)
pctfree 10                             -- insert용 여유공간
initrans 2                              -- 최초 tx slot 갯수 : 최소 동시성 보장
maxtrans 5                           -- 최대 tx slot 갯수 : 최대 동시성 제한 (10g 부터는 안됨 오라클이 알아서함)
storage(initial      250k            -- 최초로 할당받는 extent의 크기
            next       250k            -- 두번째 부터 할당받는 extent의 크기
            minextents   3
            maxextents 10
            pctincrease  0)
tablespace users5;

pctused 셋팅 못함


관련 내용 : 오라클 교재 Administration Workshop I 7장
INDEX 크기관련 동영상 : 1. index 크기관련 part1
                                   2. index 크기관련 part2
                                   3. index 크기관련 part3
INDEX SPLIT 관련 동영상 : 1. index split part1
                                      2. index split part2
                                      3. index split part3

'Oracle > Admin' 카테고리의 다른 글

Managing Undo Data  (0) 2009.12.03
Lock의 종류  (0) 2009.12.03
Managing Data and Concurrency (주요내용 : Lock)  (0) 2009.12.01
Managing Schema Objects-1  (0) 2009.11.30
Administering User Security  (0) 2009.11.27
Posted by 자수성가한 부자
Oracle/Admin2009. 12. 1. 22:10
● 개요

- SQL을 사용하여 데이터를 관리하는 방법을 알아보자.
- PL/SQL 객체에 대해 알아보고 관리하는 방법을 알아보자.
- 트리거와 트리거링 이벤트에 대해서 알아보자.
- LOCK 경합을 모니터하고 해결하는 방법을 알아보자.


● DML
  ◎ INSERT
  ◎ UPDATE
  ◎ DELETE
  ◎ MERGE
     - 연관 포스트 : http://aozjffl.tistory.com/134

● TCL
  ◎ COMMIT
  ◎ ROLLBACK

● PL/SQL
  ◎ 정의
      : 4GL언어,  SQL에 절차적 처리를 가능하게 해줌

  ◎ PL/SQL 오브젝트의 관리

  ◎ PL/SQL 오브젝트의 종류와 EM을 이용한 생성 및 관리 방법
     ○ Package
         Database instance > Packages
     ○ Package body
         Database instance > Package Bodies
     ○ Type body
     ○ Procedure
         Database instance > Procedure
     ○ Function
         Database instance > Functions
     ○ Trigger
        - 트리거링 이벤트 : DML, DDL, Database


SQL> select type from dba_source;
SQL> select * from dba_triggers;

종속성 관련 valid, invalid --> 추후에~

● Lock
  ◎ 정의
     : 여러 세션이 동시에 같은 데이터를 변경하는 것을 막는 것을 말한다.

  ◎ Lock의 매커니즘       
     ○ DML
        - TM lock : 이 장의 주요 관심사
           RX    : Row exclusive Table Locks
           RS    : Row Share Table Locks
           S      : Shared Table Locks 다른 DML을 막는 역할
                      테이블에 index생성시에 걸리는 락
           SRX  : Share Row Exclusive Table Locks
           X      : Exclusive
           ※ 연관 포스트 : http://aozjffl.tistory.com/
               Exclusive : I have it and you can not have it.
               Share       : I have it and you can share it with me.
                                But if you try to get it exclusively, I will not let you.
        - TX lock : row level lock

     ○ DDL : 자동 commit이므로 lock에 대해 별 문제가 없다.
       system lock : ST, BF     
       v$lock에 관한 소개 : manual 참조할 것

  ◎ 데이터 일치성
  ◎ DML Locks
  ◎ Enqueue 매커니즘
     ○ Lock vs Latch
        - Lock : 로우에 있는 자원을 보호
                     queuing 되다.
                     v$lock
                     latch보다 덜 엄격하다.(공유 가능한 lock이 많다.)

        - Latch : 메모리에 있는 자원을 보호
                     queuing 되지 않는다. spinning. 복불복 시스템
                     v$latch
                     lock보다 엄격하다.(완전 독점)

  ◎ Lock의 경합
     ○ 원인
         - commit되지 않은 변경
         - 긴 transaction
         - 필요하지 않은 높은 락 레벨

     ○ Lock 경합을 찾는 방법
     ○ Lock 경합을 해결하는 방법
         - EM을 이용한 방법
            Database instance > Blocking Sessions를 이용
            
         - SQL을 이용한 방법

SQL> select sid, serial#, username from v$session;       -- session의 정보를 본다.
SQL> alter system kill session '88','96';                        -- 세션을 죽인다. 88:session id, 96:serial number

     ※ 왜 session id와 serial number를 같이 넣어줄까? 
         -> session의 유일성을 보장하기 위해서.
              session id는 재이용된다. serial number는 계속 증가된다.

     ○ Dead Lock

참고 메뉴얼 : transaction 133page 
                  http://download.oracle.com/docs/cd/B19306_01/server.102/b14220/consist.htm#sthref2026

'Oracle > Admin' 카테고리의 다른 글

Lock의 종류  (0) 2009.12.03
Managing Schema Objects-2  (0) 2009.12.02
Managing Schema Objects-1  (0) 2009.11.30
Administering User Security  (0) 2009.11.27
2009년 11월 26일 수업내용  (0) 2009.11.26
Posted by 자수성가한 부자
Oracle/Admin2009. 11. 30. 10:36
● 개요

  - 스키마란 무엇인가?
  - 데이터 타입은 무엇이고, 종류는 어떤 것들이 있는가?
  - 테이블의 생성과 수정은 어떻게 하는가?
  - 제약을 정의하는 방법은?
  - 컬럼과 테이블의 내용을 보자

  - 인덱스는 어떻게 생성하는가?
  - 뷰는 어떻게 생성하는가?
  - 시퀀스는 어떻게 생성하는가?
  - 템프테이블은 어떻게 사용하는가?
  - 데이터 딕셔너리를 사용할 수 있다.


● 스키마
  - 특정한 유저가 소유한 데이터베이스 객체의 집단.
  - 유저를 만들면 같은 이름의 스키마가 생성.
  - sys, system 스키마
  - hr, oe, pm, sh 등의 sample스키마가 있다.

● 데이터 타입
  ◎ 테이블 내의 데이터 타입
      ○ CHAR(size [BYTE|CHAR]
          : 기본은 BYTE, 예) CHAR(10)인 경우, 10byte, 영어 10자리, 한글 5자리
            CHAR[size CHAR]로 표현가능
      ○ VARCHAR2
      ○ DATE
      ○ NUMBER(p, s)
      ○ BINARY_FLOAT : 10g부터 나옴
      ○ BINARY_DOUBLE
      ○ FLOAT
      ○ INTEGER
      ○ NCHAR(length)
      ○ NVARCHAR2(size [BYTE|CHAR])
      ○ LONG
      ○ LONG RAW
      ○ RAW(size)
      ○ ROWID
      ○ UROWID
      ○ BLOB
      ○ CLOB
      ○ NCLOB
      ○ BFILE
      ○ TIMESTAMP

● 테이블의 생성과 수정
  ◎ EM을 이용한 테이블의 생성과 수정을 알아본다.
     - database instance > tables > create table

● 제약
  ◎ 제약의 종류
     ○ NOT NULL
     ○ UNIQUE Key
     ○ PRIMARY KEY
     ○ FOREIGN KEY
     ○ Check
     ○ type
         - immediate
         - deferrable : 지연가능(commit시에 제약을 검사한다.)
     ○ status
         - disable novalidate
         - disable validate     : 테이블에 insert를 금지할 수 있는 효과
         - enable novalidate   : 여기에 한번 거쳐서 enable validate로 갈 것
         - enable validate

예)

SQL> drop table t1 purge;
SQL> create index t1_col1_idx on t1(col1);
SQL> alter table add constraint t1_col1_pk primary key
SQL> create table t1 (col1 number)
SQL> alter table add constraint t1_col1_pk primary key enable
SQL> insert into t1 values (1);
SQL> insert into t1 values (2);
SQL> insert into t1 values (3);
SQL> commit;
SQL> select * from t1;

      COL1
----------
         1
         2
         3
SQL> insert into t1 values (3);          --> 에러
SQL> alter table t1 disable constraint t1_col1_pk;   --> 제약 해제
SQL> insert into t1 values (3);          --> 성공
SQL> insert into t1 values (3);          --> 성공
SQL> commit;
SQL> select * from t1;

      COL1
----------
         1
         2
         3
         3
         3

SQL> alter table t1 enable constraint t1_col1_pk;                --> 제약을 enable validate로 변경하려고 하지만 에러!!!
SQL> alter table t1 enable novalidate constraint t1_col1_pk
SQL> insert into t1 values (3);                                -- ORA-00001: unique constraint (PHIL.T1_COL1_PK) violated

     ※ exceptions 테이블을 이용한 제약 활성화
         : @?/rdbms/admin/utlexcpt.sql 실행  -> exceptions테이블의 생성.
           문제가 있는 데이터의 rowid가 보관됨

SQL> alter table t1 enable validate constraint t1_col1_pk EXCEPTIONS INTO phil.exceptions;
SQL> set lines 200
SQL> select * from exceptions;
SQL> select * from t1, t1.* from t1
         where rowid in (select row_id from exceptions);

  ROWID                    COL1
  ------------------ ----------
  AAACxtAAGAAAALYAAC          3
  AAACxtAAGAAAALYAAD          3
  AAACxtAAGAAAALYAAE          3

SQL> update t1 set col1=13 where rowid='AAACxtAAGAAAALYAAD';
SQL> update t1 set col1=23 where rowid='AAACxtAAGAAAALYAAE';

SQL> alter table t1 enable validate constraint t1_col1_pk EXCEPTIONS INTO phil.exceptions;


  ◎ EM을 이용해 제약을 정의하는 방법
     - database instance > tables > create table

  ◎ SQL로 제약을 정의하는 방법

SQL> alter table e1 add constraint e1_empno_pk  primary key (empno);
SQL> alter table e1 add constraint e1_sal_ck    check (sal >= 0);
SQL> alter table e1 add constraint e1_hphone_uk unique (hphone);
SQL> alter table e1 add constraint e1_deptno_fk foreign key(deptno) references d1(deptno);
SQL> alter table e1 modify(ename constraint e1_ename_nn not null);


● 테이블 (table)
  ◎ DROP TABLE
     - 공간 할당은 반환되지 않음
     - EM에서 실습하기
       : database instance > tables -> delete with options 버튼 클릭 
        -> Delete the table definition, all its data, and dependent objects (DROP)선택 ->yes버튼 클릭
 
  ◎ TRUNCATE TABLE
     - 최초 테이블을 만든 상태와 같이 된다. 최초 할당받은 extent만 남음
     - EM에서 실습하기
       : database instance > tables -> delete with options 버튼 클릭 ->
         -> Delete only the data with no Rollback support (TRUNCATE) -> yes버튼 클릭


기타참고사항

관련 내용 : 오라클 교재 Administration Workshop I 7장
INDEX 크기관련 동영상 : 1. index 크기관련 part1
                                   2. index 크기관련 part2
                                   3. index 크기관련 part3
INDEX SPLIT 관련 동영상 : 1. index split part1
                                      2. index split part2
                                      3. index split part3

'Oracle > Admin' 카테고리의 다른 글

Managing Schema Objects-2  (0) 2009.12.02
Managing Data and Concurrency (주요내용 : Lock)  (0) 2009.12.01
Administering User Security  (0) 2009.11.27
2009년 11월 26일 수업내용  (0) 2009.11.26
2009년 11월 25일 수업내용  (0) 2009.11.25
Posted by 자수성가한 부자
Oracle/Admin2009. 11. 27. 00:05
유저 관리
- 생성, 삭제
- 권한 관리
- Role 관리
- profile

유저 생성 전에 알아보아야 할 사항들
(isql*plus에서 질의할 것)

SQL> select * from dba_users;
SQL> select * from dba_tablespaces;
SQL> select * from dba_profiles;
SQL> select * from dba_roles;
SQL> select * from dba_sys_privs;
SQL> select distinct privilege from dba_sys_privs order by 1;


유저 생성 예)

SQL> create user phil
         identified by cat
        default tablespace users
        temporary tablespace temp_a
        quota 10m on users
        quota 10m on users5
        account lock
        profile default
        password expire;

권한을 준다.

SQL> grant create session, create table to phil;

※ consumer group은 plsql로 한다.


SYS 유저와 SYSTEM 유저

sys(root) : data dictionary, internal table 소유
system(dba) : 추가적인 table 생성, session
※ 운영상 유의점 : SYS유저로는 작업을 하지 않는 것이 좋다.


Autnentication
 - 이 유저가 등록되어 있는 유저인가?
 - 인증의 종류
    - DB 인증
    - OS 인증
    - 패스워드 파일 인증

sysdba 인증 
- DB인증 (인증 안됨)
    :
shutdown(idle instance) 상태에서 인증이 되어야 하기 때문에
      sqlplus oracle/oracle, sqlplus jgh/jgh
      -> ORA-01034: ORACLE not available 에러 발생

- OS 인증
    : sqlplus / as sysdba로 접속 가능
      {유저가 등록되어 있고, 그룹이 oinstall, dba인 유저(OS의 /etc/passwd, /etc/group 참조)}
      telnet으로 들어온 유저에 대해서 sysdba의 권한을 주고,
      sqlplus 유저/암호@XXXXXX 로 접속하는 유저에게는 sysdba의 권한을 주지 않음

- 패스워드파일 인증
    : 원격지에서 접속하는 유저들에게 sysdba의 권한을 주기 위해 만든다.
    위치 : ORACLE_HOME/dbs
    이름 : orapwsid
    패스워드 파일생성

OS] orapwd file=$ORACLE_HOME/dbs/orapwjgh_db password=nemam entries=5
파일 이름은 orapw + sid
entries=5 는 5명까지 등록가능하다는 의미.

접속


->ORA-01034: ORACLE not available 에러 발생

sqlplus sys/nemam@ip:1521/jgh_db as sysdba

-> sysdba 유저로 접속 가능


일반 유저의 인증
- db 인증(passwd)

SQL> create user john identified by cat;


일반 유저의 os 인증(!권장되는 방식이 아님)

SQL> show parameter os

os인증(external)


1. oracle이 아닌 일반 OS 유저로 sysdba되기

터미널 1

$ su - root
$ useradd -g oinstall -G dba user1
$ passwd user1

터미널 2

$ su - user1
$ export ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1
$ export ORACLE_SID=jgh_db
$ export PATH=$ORACLE_HOME/bin:$PATH; export PATH
$ export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH
$ sqlplus / as sysdba


2. password file 인증

터미널 1

$ su - oracle
$ export ORACLE_SID=jgh_db
$ cd $ORACLE_HOME/dbs
$ rm orapwikdb
$ orapwd file=$ORACLE_HOME/dbs/orapwikdb password=nemam entries=5
$ rm spfileikdb.ora
$ vi initikdb.ora

     remote_login_passwordfile = exclusive

터미널2

$ sqlplus / as sysdba
$ shutdown abort

window에서 접속

OS] sqlplus sys/nemam@192.168.0.10:1521/ikdb as sysdba
SQL> startup

참고 : http://www.adp-gmbh.ch/ora/admin/password_file.html

프로파일이란?
 - 자원사용 및 암호관리에 관한 설정 
 - 여러개의 Profile을 만들 수 있다.

예)

CREATE PROFILE "DEV_PROF"
CPU_PER_CALL           
          1000
CONNECT_TIME 
                    60
IDLE_TIME 
                       60
SESSIONS_PER_USER
               1000       
LIMIT CPU_PER_SESSION            1000
LOGICAL_READS_PER_SESSION        100
LOGICAL_READS_PER_CALL
          100
PRIVATE_SGA 
                     DEFAULT
COMPOSITE_LIMIT 
                 DEFAULT
PASSWORD_LIFE_TIME 
              30
PASSWORD_GRACE_TIME 
             5
PASSWORD_REUSE_MAX 
              unlimited
PASSWORD_REUSE_TIME 
             365
PASSWORD_LOCK_TIME 
              5/1440
FAILED_LOGIN_ATTEMPTS 
           3
PASSWORD_VERIFY_FUNCTION
        verify_function


※ verify_function
  - 패스워드 생성에 복잡성을 부여하기 위한 pl/sql
  - 위치 : $ORACLE_HOME/rdbms/admin/utlpwdmg.sql

권한 관련?



롤(role)이란?

롤 생성 방법



보안을 강화할 목적으로 default role과 암호를 준다.

예)
a role (default) :select 관련 권한
b_role / lion : insert, update, delete, select 관련 권한.

로그인 하면 첫 권한은 a_role이다.(default)

insert나 update, delete 등을 하고 싶을 때 role을 바꾼다.
바꿀때는 패스워드를 입력한다.

SQL> set role b_role identified by lion;



기타사항

bility Architecture and Best Practices (HAA)
  메뉴얼(10r1, 10gr2) 에서 찾아볼 것. (이렇게 하는 것이 좋다라는 일종의 지침)

'Oracle > Admin' 카테고리의 다른 글

Managing Data and Concurrency (주요내용 : Lock)  (0) 2009.12.01
Managing Schema Objects-1  (0) 2009.11.30
2009년 11월 26일 수업내용  (0) 2009.11.26
2009년 11월 25일 수업내용  (0) 2009.11.25
2009년 11월 24일 수업내용  (0) 2009.11.24
Posted by 자수성가한 부자
Oracle/Admin2009. 11. 26. 15:22
UMF vs OMF 
: file의 관리를 사용자가 하는가 ? 오라클이 하는가에 따라 구분.
  OMF는 9i부터 나옴

UMF

- User Managed File의 약자
-
일반적으로 테이블스페이스나 리두파일의 생성, 삭제시 사용자가 수동으로 해줘야함.

OMF

 - Oracle Managed File의 약자
 - 오라클 데이터베이스에 의해 생성되고, 관리되는 파일.
 - 파일 관리의 편이성. 삭제할 때 OS에 직접가서 지우다가 생기는 실수를 유발할 가능성이 배제하기 위해 사용
 - OMF에 의해 생긴 파일의 이름은 바꾸면 안됨
A feature of the Oracle database which manages the creation, naming and deletion of Oracle database files within dedicated areas of disk, to minimize the need for DBAs to concern themselves with such specifics.

실습을 해보자.

파라미터를 설정한다.
(db_create_file_dest              : 데이터 파일과 템프 파일이 생성되는 위치,
 db_create_online_log_dest_n : 리두 로그 파일과 컨트롤 파일이 생성되는 위치,
 db_recovery_file_dest           : RMAN 백업 위치)

SQL> alter system set db_create_file_dest              = '/u01/app/oracle/oradata/jgh_db'; 
SQL> alter system set db_create_online_log_dest_1 = '/u01/app/oracle/oradata/jgh_db';
SQL> alter system set db_create_online_log_dest_2 = '/u01/app/oracle/oradata/jgh_db';

잘 설정되었는지 확인해본다.

SQL> show parameter db_create

테이블 스페이스를 생성하고, 파일이 잘 생성되었는지 확인해본다.

SQL> create tablespace ts1;
SQL> !ls -R /u01/app/oracle/oradata/jgh_db

테이블 스페이스를 삭제하고, 잘 삭제되었는지 확인해본다.

SQL> drop tablespace ts1;
SQL> !ls -R /u01/app/oracle/oradata/jgh_db

로그 파일을 생성하고 확인해본다.

SQL> alter database add logfile;
SQL> !ls -R /u01/app/oracle/oradata/jgh_db

로그파일을 삭제하고 확인해본다.

SQL> alter database drop logfile group 1;
SQL> !ls -R /u01/app/oracle/oradata/jgh_db


OMF + ASM (Automatic Storage Management)

관련 실습 (그냥 참고 삼아서 볼 것)

CREATE DISKGROUP dg1
  NORMAL REDUNDANCY
  FAILGROUP controller1 DISK
   '/devices/diska1',
   '/devices/diska2',
   '/devices/diska3',
   '/devices/diska4'
  FAILGROUP controller2 DISK
   '/devices/diskb1',
   '/devices/diskb2',
   '/devices/diskb3',
   '/devices/diskb4';

CREATE DISKGROUP dg2
  NORMAL REDUNDANCY
  FAILGROUP controller1 DISK
   '/devices/diska11',
   '/devices/diska12',
   '/devices/diska13',
   '/devices/diska14'
  FAILGROUP controller2 DISK
   '/devices/diskb21',
   '/devices/diskb22',
   '/devices/diskb23',
   '/devices/diskb24';

SQL> alter system set db_create_file_dest              = '+dg1';          -- Database Area
SQL> alter system set db_create_online_log_dest_1 = '+dg1';
SQL> alter system set db_create_online_log_dest_2 = '+dg1';

SQL> alter system set db_recovery_file_dest           = '+dg2';         -- Flash Recovery Area(FRA)



DMT vs LMT
: extent의 관리를 data dictionary에서 하는가? 아니면 로컬에서 하는가? 에 따라 구분된다.

 DMT
  - Dictionary Managemant Tablespace의 약자
  - FET$, UEF$와 관련.
  - 시스템 테이블 스페이스가 DMT명 DMT와 LMT를 같이 쓸 수 있음

create tablespace users
datafile '/u01/app/oracle/oradata/jgh_db/users.dbf' size 10m
extent management dictionary;

 LMT
  - Locally Managed Tablespace의 약자
  - 공간을 할당하면 공간에 대한 기본적인 정보를 공간 내에서 관리
  - 시스템 테이블 스페이스가 LMT면 LMT만 가능
  - 디폴트
 
create tablespace users
datafile '/u01/app/oracle/oradata/jgh_db/users.dbf' size 10m
extent management local [option];

[option]에 따라 extent의 크기가 결정된다.
extent management local autoallocate;       -- 오라클 마음대로
extent management local uniform;              -- 모든 extents의 크기 : 1m로 통일
extent management local uniform size ?;    -- 모든 extents의 크기 : ? 로 통일


FLM vs ASSM
: segment의 관리를 segment의 헤더의 freelist를 이용하여 할 것인가?

FLM 
 -  FreeList Managemant의 약자 

ASSM
- Automatic Segment Storage Management의 약자 
- Block을 어떻게 관리할 것인가?


-- LMT + ASSM : default

create tablespace users
datafile '/u01/app/oracle/oradata/jgh_db/users.dbf' size 10m
extent management local
segment space management auto;


-- LMT + FLM
 

create tablespace users
datafile '/u01/app/oracle/oradata/jgh_db/users.dbf' size 10m
extent management local
segment space management manual;


 -- DMT + ASSM
     : 불가능: ORA-30572 : AUTO segment space management not valid with DICTIONARY extent management

create tablespace users
datafile '/u01/app/oracle/oradata/jgh_db/users.dbf' size 10m
extent management dictionary
segment space management auto;


-- DMT + FLM : 오래된 방식으로 가능하면 사용하지 않는게 좋음
 

create tablespace users
datafile '/u01/app/oracle/oradata/jgh_db/users.dbf' size 10m
extent management dictionary
segment space management manual;


※ 참고 : DMT의 Storage 옵션 이해

create tablespace users5
datafile '/u01/app/oracle/oradata/jgh_db/user4.dbf' size 10m
extent management dictionary
minimum extent 100k                -- 모든 extents는 100k의 정수가 되어야 한다.
default storage (initial         100k  -- 첫번째 extent의 크기
                        next          100k  -- 두번째 이후 extent의 크기.
                                                -- 처음 이후에 되도록이면 initial과 같게 해줌
                        minextents  3     -- 최초 몇 개의 extent?
                        maxextents 10   -- 최대로 만들 수 있는 extent 무제한(unlimited)
                        pctincrease 50    -- 퍼센트 : 3번째 부터 extent의 성장 비율
                                                 -- 100k -> 100k -> 150k -> 225k
                        );

create table t1 (c1 number) tablespace users5;
create table t1 (c1 number) tablespace users5 storage (initial 150k next 150k);


단편화 (fragmentation)
 : 세그먼트의 중간중간에 사용하지 않는 공간이 발생하는 것을 말한다.

  문제점
  - 테이블 FULL SCAN시 소요 시간 증가
  - 인덱스 레벨이 깊어짐
  - 디스크 I/O 증가 가능 (하나의 데이터 블록 조회로 적은 로우가 추출)
  - 디스크 공간 낭비

  원인은?
    - 서로 다른 크기가 들락날락하면서 생긴다.

   해결책은?
    - LMT로 한다. (uniform을 셋팅하여 extent의 크기를 모두 고정시킨다.)
    - DMT일 경우 pctincrease옵션 0을 주고, minimum extents 100k로 특정 크기의 배수로 주도록 한다.
  

테이블 스페이스의 관리 

- 이름 변경

SQL> alter tablespace "USER1" rename to "DDD";

※ 테이블스페이스명을 소문자일 경우 인식을 못함.
   (X) alter tablespace "user1" rename to "DDD";


- 상태 변경

SQL> alter tablespace "USER1" read only;
SQL> alter tablespace "USER1" read write;
SQL> alter tablespace "USER1" offline normal;


- 크기 변경

SQL> alter tablespace "USER1" add datafile '/u01/app/oracle/oradata/jgh_db/USER2.dbf' size 10m; 
        -- 줄이는 것 불가능
SQL> alter database datafile '/u01/app/oracle/oradata/jgh_db/user1.dbf' resize 20m;     -- 줄이는 것도 가능
SQL> alter database dafafile '/u01/app/oracle/oradata/jgh_db/user2.dbf' autoextend on next 10m maxsize 2g;
SQL> alter tablespace "USER1" nologging;


ASM
- Automatic Storage management
- 11g r2에서 다른 일반적인 파일도 들어올 수 있음.
- spreading, mirroring 가능

기타내용

테이블 디렉토리 : 클러스터의 다른 테이블의 위치 정보시 필요함.

로우 디렉토리 : (변경될 수 있는) 로우의 위치 정보(2kb)

로우 헤더 : 로우의 길이가 들어가 있음

online redo log file 존재의 주목적은?
- instance 복구
- commit 속도를 빠르게 한다.

테이블 스페이스의 종류
 - permanant : 어떤 종류의 테이블 스페이스도 다 만들 수 있다.
 - temp : temp전문 테이블 스페이스
 - undo : undo전문 테이블 스페이스(9i부터)

insert : freelist + transaction slot이 필요함
update: transaction slot이 필요함

Bitmap?
 - 비트의 맵. extents가 할당되면 1, 해제되면 0
 - 부동산 앞의 지도와 같은 역할이라고 보면 이해하기 쉬움

'Oracle > Admin' 카테고리의 다른 글

Managing Schema Objects-1  (0) 2009.11.30
Administering User Security  (0) 2009.11.27
2009년 11월 25일 수업내용  (0) 2009.11.25
2009년 11월 24일 수업내용  (0) 2009.11.24
Static Data Dictionary View vs Dynamic Performance View  (2) 2009.11.24
Posted by 자수성가한 부자