Oracle/기타2009. 12. 8. 10:29

DBMS_STATS 패키지란?

data dictionary에 저장되거나 사용자 지정 테이블에 저장된 최적화된 통계를 보거나 수정할 수 있는 기능을 제공하는
패키지이다. data dictionary에 있는 이러한 통계만이 비용에 근거한 최적화에 의해 사용되었다.
8i부터 이용가능하다.


주요 프로시져

Procedure Collects

GATHER_INDEX_STATS

Index statistics

GATHER_TABLE_STATS

Table, column, and index statistics

GATHER_SCHEMA_STATS

Statistics for all objects in a schema

GATHER_DICTIONARY_STATS

Statistics for all dictionary objects

GATHER_DATABASE_STATS

Statistics for all objects in a database




참조 : ORACLE 9i PL/SQL Programming (scott urman저)
         http://download.oracle.com/docs/cd/B19306_01/server.102/b14211/stats.htm#i41448

'Oracle > 기타' 카테고리의 다른 글

[펌]오라클의 뷰가 만들어지는 과정  (0) 2009.12.23
login.sql셋팅  (0) 2009.12.15
index의 크기 문제  (0) 2009.12.02
SQL*PLUS에서 HTML, EXCEL 출력물 만들기  (0) 2009.11.18
Oracle hint  (0) 2009.11.18
Posted by 자수성가한 부자
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/기타2009. 12. 2. 10:28
● 인덱스의 특성

   1. 삭제된 key공간은 다음번 insert에 재활용

   2. delete된 공간은 다음번 split시에 재활용


● 인덱스의 크기가 문제되는 상황

   1. 여유 공간은 있지만 내 공간은 없다.

   2. 동일 transaction내에서는 삭제된 공간을 재활용하지 못한다.

   3. 한번 늘어난 공간은 절대로 저절로 늘어나지 않는다.

   4. transaction이 rollback되어도 늘어난 공간은 줄어들지 않는다.
     - 테이블과 index공간 둘 다
     - 다음번 insert시에는 재활용된다.

   5. 여유공간은 많지만 dead block이 없는 경우(fragmentation)
      - index rebuild : alive block만 모아서 새롭게 index를 생성하고 기존의 index삭제

   6. 삭제 후의 dead block이 즉각 재활용되지 못하기도 한다.
      - index coalesce : 키 병합 -> leaf node의 chain 정리(주소값이 바뀜), 공간의 회수

※ 위의 상황들을 어떻게 검증할까??


● 인덱스 SPLIT

   ◎ 의미
      : 인덱스가 자란다.
        리프블럭이 꽉차면 새로운 리프 블럭을 추가하고 key를 옮긴다.(50:50 또는 90:10)

   ◎ 특징
      - 고비용의 작업
      - 많은 양의 redo유발
      - physical i/o유발
      - tx lock경합
      - 50:50 스플릿, 90:10 스플릿이 존재
      - 관련 뷰 : v$sysstat

   ◎ 인덱스 SPLIT을 줄이기 위한 대책(대체로 큰 효과없고, 부작용 발생 가능)
      - 동시 session수를 줄인다.
      - 불필요한 index삭제
      - index생성시에 높은 pctfree 부여
      - reverse index 생성

참조 : index 크기문제 part1
         index 크기문제 part2
         index 크기문제 part3


'Oracle > 기타' 카테고리의 다른 글

login.sql셋팅  (0) 2009.12.15
DBMS_STATS package  (0) 2009.12.08
SQL*PLUS에서 HTML, EXCEL 출력물 만들기  (0) 2009.11.18
Oracle hint  (0) 2009.11.18
ROWNUM  (2) 2009.11.17
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 자수성가한 부자