Oracle/Admin2010. 1. 11. 15:34
● Character Set
   : encoding scheme
     숫자로 글자를 표현, 글자와 숫자를 mapping한 코드표
     encoding 은 byte sequence로 표시
     서버(DB)와 클라이언트의 character set을 꼭 맞출것 
     서버(DB)와 클라이언트의 character set을 맞춰줬는데도 글자가 깨질 경우 OS의 code page를 확인해 볼 것. 

   ◎ 서버(DB)

SQL> create database 이름
         character set __________
         national character set ____________;


      - US7ASCII : 7bit        => 영어 데이터만 들어온다면 저장소, 메모리 등을 고려했을 때 최적
      - WE8ISO8859P1 : 8bit
      - 한글용 character set
         KO16KSC5601 : 16bit, 예전에 쓰던 한글 character set (깨지는 글자 많음, 샾, 먄, 믜)
         => KO16MSWIN949 : 16bit, 최근에 주로 씀. 
      - AL32UTF8 : 가변길이, 한글을 2byte로 인식하기 때문에 export후 import시에 문제 없음.
      - AL16UTF16 : 고정길이
      - UTF-8
        단점 : 한글이 3byte로 입력됨. 데이터 export할 경우 3byte이므로 import시에 KO16MSWIN949일 경우 import않됨.

        character set에는 single byte, 가변길이 character set 만 허락됨.
        national charater set에는 고정길이 character set만 써야함.
 
   ◎ 클라이언트
      - profile 또는 레지스트리의 환경변수
         NLS_LANG = □□□□□_◇◇◇◇◇.__________ => 반드시 서버 쪽과 같은 character set으로 설정할 것

      - 서버 쪽의 character set 확인 쿼리

SQL> select * from database_properties;         
또는
SQL> select * from nls_database_parameters;


● NLS (National Language Support)
   ◎ NLS를 설정할 수 있는 부분
     1. parameter file
        - NLS_LANGUAGE = American
        - NLS_Territory = China   => 다른 것을 써도 됨.

      2. profile or 레지스트리
        - NLS_LANG = spanish_china.O16MSWIN949
        - NLS_LANG와 NLS_LANGUAGE중 NLS_LANG이 우선 순위가 높으므로
           NLS_LANG이 설정되어 있다면 NLS_LANGUAGE는 설정할 필요가 없다. 

      3. alter session set nls_* = ?
        - 해당 세션에서만 적용됨.

      4. 함수 to_char(col1, '...','NLS_L*')

   ◎ Locale Builder
     
: 날짜형식 등을 바꿀 수 있는 utility
       예) 1월 -> 첫달

OS] lbuilder

● Sort
   : 정렬시에 언어에 따른 sort 가 잘못될 경우를 대비해서 nls_sort parameter를 변경하거나 nlssort()함수를 사용할 수 있다.

   ◎ nls_sort parameter
       - 영어를 사용할 경우(default)

SQL> alter session set nls_sort = binary;

       - 프랑스어를 사용할 경우

SQL> alter session set nls_sort = french_m;

   ◎ nlssort() 함수

SQL> select fr_word
         from words
         order by nlssort(fr_word, 'nls_sort=french_m');


기타 참고사항

-  OS에서 nls_lang 환경변수  확인 방법

OS] echo $NLS_LANG
or
OS] env | grep NLS_LANG

- nls_comp의 특성(비교시에 language)
   nls_sort = binary(default)
                  french_m
   nls_comp = binary(default)
                   ANSI(비교 매커니즘을 nls_sort parameter에 정의된 값을 따른다.)

- 대소문자 상관없는 정렬을 가능하게 하려면?
   {예) ABCD....abc  -> AaAaBbBbCCCccC}
    : nls_sort = <nls_sort_name> [Ai | Ci]

참고 : http://www.oracle.com/technology/global/kr/pub/columns/nls_list.html

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

alert_SID.log  (0) 2010.03.24
index rebuild 작업  (0) 2010.02.25
Security  (0) 2010.01.08
Resource Manager  (0) 2010.01.07
ASM(Automatic Storage Management)  (0) 2010.01.07
Posted by 자수성가한 부자
Oracle/Admin2010. 1. 8. 18:50

TDE (Transparent Data Encryption)
  : 10g~
     마스터 키 1개, 테이블의 컬럼별로 암호 설정할 수 있다.
     테이블의 데이터와 인덱스를 암호화할 수 있다.
     Oracle Wallet Manager를 이용하여 wallet 생성
     OWM>

    TDE를 하기 위한 설정
    1. wallet생성 : OWM (Oracle Wallet Manager) 이용
    2. 인스턴스 내에 마스터키를 설정한다.

SQL> alter system set encryption key indentified by <password>


    3. 인스턴스내에 wallet을 open
    4. 암호화된 컬럼이 포함된 테이블을 생성.

SQL> CREATE TABLE emp_enc (
          first_name VARCHAR2(20),
          last_name VARCHAR2(20),
          empID NUMBER,
          salary NUMBER(6) ENCRYPT,
          job_nonenc varchar2(20),
          job varchar2(20) ENCRYPT
          ) tablespace tde;


    참조 : http://blog.naver.com/orapybubu?Redirect=Log&logNo=40041554572

    client side wallet
    - mkstore utitlity를 이용.

DP(Datapump) 결과물에 대한 암호화
   : 10g~
     데이터 펌프로 추출한 데이터에 대한 암호화
     TDE 셋팅이 필수이다. 

RMAN을 이용한 암호화
    3가지 방법
    1. TDE 셋팅 필수 : 한 곳에서 백업하고 복원
        TDE셋팅후 아래의 쿼리 수행시 결과물이 암호화 된다.

RMAN> configure encryption for database open

      
    2. TDE 셋팅이 필요 없는 방식
        : 한 곳에서 백업하고 다른 곳에서 복원
          패스워드 지정하는 방식, 암호를 꼭 기억해야 한다.

    3. TDE 셋팅 필수 : 한 곳에서 백업하고 복원 또는 한 곳에서 백업하고 다른 곳에서 복원           
         TDE를 셋팅하고 패스워드를 지정하는 방식.

VPD (Virtual Private Database)
   : where 절 자동 생성 기능
     VPD는 사전 정의된 기준에 따라 테이블 또는 사용자에 대한 부분적인 뷰만을 제공한다.
     정책에 따라 볼 수 있는 데이터가 제한되어 있음.
     관련 패키지 : DBMS_RLS

      VPD를 사용하기 위한 기반 기술
      - FGAC : Fine Grained Access Control
      - Application Context : 예제
  

참조 : http://blog.naver.com/orapybubu?Redirect=Log&logNo=40021505395

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

index rebuild 작업  (0) 2010.02.25
Globalization  (0) 2010.01.11
Resource Manager  (0) 2010.01.07
ASM(Automatic Storage Management)  (0) 2010.01.07
Managing Storage  (0) 2010.01.06
Posted by 자수성가한 부자
Oracle/Admin2010. 1. 7. 17:10
Database Resource Manager 개요
   - 혼합된 작업 로드 관리
   - 그룹을 생성, 그룹별 자원(cpu, 동시 세션등)을 정해주고 자원을 조정할 수 있다.
   - 배치 작업은 밤에 한다. -> resource manager로 낮에도 가능하게 할 수 있다.


plan을 생성한다.
mydb_plan / nedb_plan / ...

위에 plan대로 자원이 분배된다.
alter system set resource_manager_plan = mydb_plan;

multilevel schema : 모두가 작업하려고 할 때 적용되는 규칙




postman group : 0.3 * 0.4 = 0.12의 cpu가 보장됨
other groups : 새로 plan을 만들 때 마다 꼭 있어야 하는 plan,

Resource Plan 생성
   - dbms_resource_manager.switch_plan 를 이용하여 plan을 생성할 수 있다.

DBMS_RESOURCE_MANAGER.SWITCH_PLAN
(PLAN_NAME => 'DAY_PLAN',
SID => 'ORCL',
ALLOW_SCHEDULER_PLAN_SWITCHES => true );


Consumer Group 생성
   - dbms_resource_manager.create_consumer_group 를 이용하여 consumer group 생성

DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(
CONSUMER_GROUP => 'APPUSER',
CPU_MTH => 'ROUND-ROBIN',
COMMENT => '');


Consumer Group Mapping
   - 클라이언트가 어떤 모듈에 어떤 action을 하는지 알 수 있다.

    관련 view : v$session의                       current_queue_duration
                    v$rsrc_consumer_group의    queue_length

select sid, serial#, username, module, action, client_identifier, service_name
from v$session
where username = 'SCOTT';


참고 : http://download.oracle.com/docs/cd/B19306_01/server.102/b14231/dbrm.htm#sthref3441

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

Globalization  (0) 2010.01.11
Security  (0) 2010.01.08
ASM(Automatic Storage Management)  (0) 2010.01.07
Managing Storage  (0) 2010.01.06
Managing Schema Objects  (0) 2009.12.30
Posted by 자수성가한 부자
Oracle/Admin2010. 1. 7. 16:02
ASM이란?
  : 이식성이 좋은 (어떤 종류의 하드웨어이든지 간에 잘 돌아가는) 고성능 클러스터 파일 시스템이다.
    10g new feature
    오라클 데이터베이스 파일들만 들어간다.
    mirroring기능도 있다.
    RAID와 RAW device의 개념이 내포


ASM을 사용하기 위한 조건
  1. ASM instance 구성 / 관리 
      - DBCA vs 수동
  2. ASM disk group
  3. ASM file  


ASM에만 있는 프로세스
  - RBAL(Rebalance) : 디스크 추가시 데이터를 이동시키는 백그라운드 프로세스
  - ARBn


ASM instance 초기화 파라미터

  - INSTANCE_TYPE = ASM
  - DB_UNIQUE_NAME = +ASM
  - ASM_POWER_LIMIT = 1
  - ASM_DISKSTRING = '/dev/rdsk/*s2', '/dev/rdsk/c1*'
  - ASM_DISKGROUPS = dgroupA, dgroupB
  - LARGE_POOL_SIZE = 8MB

  ※ 위 파라미터 중 생략하면 에러가 나는 파라미터는?
      instance_type : default값이 rdbms이기때문에...


ASM instance의 startup

OS] export ORACLE_SID='+ASM'
OS] sqlplus /nolog
SQL> connect / as sysdba
SQL> startup;

    sysdba 권한 : 모든 작업이 가능
    sysoper 권한 : 일부 작업에 제한을 받음(disk group 생성, disk를 추가는 안됨)

ASM instance의 shutdown
   : db instance가 살아있는 동안은 shutdown이 안됨.
     단, shutdown abort는 가능. -> 잠시후 db instance도 전부 shutdown 됨(비정상 종료)

ASM storage
   : AU(Allocation Unit) au단위로 공간이 쪼개짐 1M

ASM Disk Groups

SQL> 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';

   failure 그룹 : 하나의 특정 디스크 그룹 내에서 failure를 허용해야 하는 공통 리소스를 공유하는 디스크 셋입니다

   chunk : 1M의 AU

   asm에서는 striping은 무조건 일어남.

Disk Group Mirroring 
  : au레벨에서 mirroring한다.
    각 디스크에서 primary au와 mirror au가 혼재함.
   - external : 하드웨어의 mirroring을 따름
   - normal redundancy : 2중 mirroring, 최소 둘 이상의 failure 그룹
   - high redundancy : 3중 mirroring, 최소 셋 이상의 failure그룹

   - disk group dynamic rebalancing


Disk Group Management

   - 디스크 그룹 생성 : create disk group
   - 디스크 그룹 삭제 : drop diskgroup 
   - 디스크 추가 : alter diskgroup
   - 디스크 그룹으로 부터 디스크 제거 : alter diskgroup dgroupA drop disk a5;


ASMCMD utility
   : asm 디스크 안에 있는 파일들을 볼 수 있게 하는 유틸리티(10g r2~)
     cd, ls, pwd의 os 명령이 가능하다.
     커맨드가 아래와 같이 나옴.
     ASMCMD>

데이터베이스를 저장영역으로 이전

OS] export ORACLE_SID=kaydb
OS] vi $ORACLE_HOME/dbs/initkaydb.ora
db_name       = kaydb
instance_name = kaydb
compatible    = 10.2.0
processes     = 100
undo_management = auto
undo_tablespace = undotbs01
db_cache_size    = 64m
shared_pool_size = 72m
db_block_size    = 4096
db_create_file_dest = '+dg1';
db_create_online_log_dest1 = '+dg1';
db_create_online_log_dest2 = '+dg2';
db_recovery_file_dest = '+dg2';
db_recovery_file_dest_size = 200G;
remote_login_passwordfile = exclusive
os] sqlplus / as sysdba
SQL> startup nomount
SQL> create database kaydb


참고 : 오라클 교재 - 10g ws2 12장


기타 참고사항

  RAID <-> SLED

  RAW device : 그냥 파티션 <-> File System(Cooked Device)

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

Security  (0) 2010.01.08
Resource Manager  (0) 2010.01.07
Managing Storage  (0) 2010.01.06
Managing Schema Objects  (0) 2009.12.30
Moving Data (SQL*Loader, Export/Import, Datapump)  (0) 2009.12.15
Posted by 자수성가한 부자
Oracle/Admin2010. 1. 6. 16:12
● Space Management
: 오라클 데이터베이스에 의해 자동으로 관리됨.
OMF, server-generated alerts

Free Space Management
: ASSM(Automatic Segment Space Management)

  segment : 공간을 차지하는 객체

Block Space Management

FLM의 경우

create table emp
(..............)
pctfree 10 pctused 40 initrans 2 maxtrans 5   -- block utilization 설정
storage(initial 1m next 1m)                          -- extent allocation 설정
tablespace users;

create table emp
(..............)
pctfree 10          -- update 여유공간을 얼마로 줄 것인가?
pctused 40        -- freelist에 재등록되는 시점
initrans 2           -- transaction slot의 최소 갯수
maxtrans 5        -- 임시 transaction slot을 포함한 transaction slot의 최대 갯수


Row Chaining & Migration
   - row chaing : insert된 row의 길이가 너무 커서 연속된 두개의 block에 데이터를 insert한 것.
   - migration : 업데이트시 블럭에 공간이 남아 있지 않은 경우, 행 전체가 위치만 남기고 전체 이동.

-- chaning이 발생했는지 확인
SQL> analyze table emp compute statistics
SQL> select chain_cnt from dba_tables;


● Proactive Monitoring : ts
   - server alerts : 공간의 사용에 따라 alert를 설정하여 미리 대응할 수 있다.(EM or DBMS_SERVER_ALERTS를 이용)
   - undo_tablespace

Shrinking Segments
   : 일부 migration이 해소됨.
     DMT tablespace에서는 안됨.
     segment advisor를 이용하여 shrink 대상이 될 테이블을 찾아낸다.


SQL> alter table employees shrink space compact;         -- 뒤의 데이터가 앞쪽으로 insert되고 뒤의 데이터 delete, hwm는 조정안됨.


SQL> alter table employees shrink space;                      -- 뒤의 데이터가 앞쪽으로 insert되고 뒤의 데이터 delete, hwm 조정됨,


Resumable Space Allocation(9i~)
   : insert 중에 공간이 부족하여 에러가 날 경우 rollback을 하지 않고, 그 공간 부족이 된 시점에서 일정시간동안(기본 2시간) 멈춤
     resumable 권한이 있어야 한다.
     유용한 곳 : Query (정렬시 pga부족으로 temporary tablespace를 사용할 경우)
                     DML, 특정 DDL(create .. as select)

 SQL> alter session enable resumable;


SQL> alter session disable resumable;


TTS (transportable tablespace)
: 전송테이블 스페이스
  tts가 가능한 조건

  8i  9i  10g 
 block  O
 platform  O O X
 characterset  O O

참조

TDB (transporting database)
   : 10g r2 new feature, 리눅스 -> 윈도우 가능, 리눅스 -> solaris는 불가능.
      데이터베이스를 이동.
      데이터 파일, script, parameter file로만 새로운 db 생성


기타 참고 사항

- endian_format이란?
   : 부호를 표현할 때 왼쪽에서 표시하는 방법과 오른쪽에 표시하는 방법으로 나뉘어짐

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

Resource Manager  (0) 2010.01.07
ASM(Automatic Storage Management)  (0) 2010.01.07
Managing Schema Objects  (0) 2009.12.30
Moving Data (SQL*Loader, Export/Import, Datapump)  (0) 2009.12.15
Backup and Recovery  (0) 2009.12.10
Posted by 자수성가한 부자
Oracle/Admin2009. 12. 30. 18:18
● Tables

  Table  Segment 
 Heap  1
 Partition  1
 Cluster  N
 IOT  1

cf. Table(LOB)                                                1                                                                 N

   ◎ (Heap Oraganized) Table
        : 테이블이 하나면 segment가 하나
   ◎ Partitioned Table 
        (참고1 : Learn How to Partition in oracle9i release 2, 참고2 : 파티션의 이해와 활용)
        : 실제 테이블은 하나이지만, 입력되는 데이터를 파티션으로 분류할 수 있는 테이블.
         파티션은 당 하나의 테이블 스페이스를 지정할 수 있다.
         테이블이 하나면 여러개의 extent를 가짐

         ○ range (8~)
             각 파티션의 크기에 차이가 많이 있을 경우, 병렬처리시에 문제 발생

             실습

-------------------   range partitioned table 생성 / 데이터 입력 -------------------
SQL> drop table t1 purge;

SQL> create table t1
         (col1 number,
          col2 number,
          flag varchar2(1) constraint t1_flag_ck check(flag in ('A', 'B', 'C', 'D'))
         )
        partition by range (flag)
        (partition p1 values less than ('B') tablespace ts1,                               -- p1 파티션에는 B 미만 즉 A만 입력됩니다.
         partition p2 values less than ('C') tablespace ts2,                               -- p2 파티션에는 C 미만 즉 B만 입력됩니다.
         partition p3 values less than ('D') tablespace ts3,
         partition p4 values less than (maxvalue) tablespace ts4
        );

SQL> insert into t1 values (1, 1, 'K');     -- ORA-02290: check constraint (SYS.T1_FLAG_CK) violated
SQL> insert into t1
         select level, level, decode(trunc(level/250), 0, 'A', 1, 'B', 3, 'C', 'D')
         from dual
        connect by level <= 1000;
-------------------------------   확인 ---------------------------------

SQL> exec dbms_stats.gather_table_stats('SCOTT', 'T1')
SQL> set autot on
SQL> select * from t1 where flag = 'A';
SQL> select * from t1 where flag = 'B';
SQL> select * from t1 where flag in ('B', 'C');
SQL> select * from t1 partition (p2);
SQL> alter tablespace ts2 offline;
         select * from t1 where flag = 'B';
SQL> select * from t1 where flag = 'C';
SQL> select *
         from dict
         where table_name like '%PART%';
SQL> select *
         from dba_tables
         where owner = 'SCOTT'
         and table_name = 'T1';
SQL> select *
         from DBA_TAB_PARTITIONS
         where table_owner = 'SCOTT'
         and table_name = 'T1';
 


         ○ hash (8i~)
             있는 값 그대로가 아닌 어떤 연산을 하여 나온 결과로 분류
             hashing이란 : 불특정 다수의 데이터가 몇개 안되는 것으로 분류되는 것.

             실습

------------------------   hash partitioned table 생성 / 데이터 입력 -----------------------------

SQL> alter tablespace ts2 online;
SQL> drop table t1 purge;
SQL> create table t1
         (col1 number,
          col2 number,
          flag varchar2(1) constraint t1_flag_ck check(flag in ('A', 'B', 'C', 'D'))
         )
         partition by HASH (flag)
         (partition p1 tablespace ts1,
          partition p2 tablespace ts2,
          partition p3 tablespace ts3,
          partition p4 tablespace ts4
         );

SQL> insert into t1
         select level, level, decode(trunc(level/250), 0, 'A', 1, 'B', 3, 'C', 'D')
         from dual
        connect by level <= 1000;

-------------------------------   확인 ---------------------------------
SQL> exec dbms_stats.gather_table_stats('SCOTT', 'T1')
SQL> set autot on
SQL> select * from t1 where flag = 'A';
SQL> select * from t1 where flag = 'B';
SQL> select * from t1 where flag = 'C';
SQL> select * from t1 where flag = 'D';
SQL> select * from t1 partition (p2);


         ○ list (9i)


----------------------   list partitioned table 생성 / 데이터 입력 ---------------------------
SQL> drop table t1 purge;
SQL> create table t1
         (col1 number,
          col2 number,
          flag varchar2(1) constraint t1_flag_ck check(flag in ('A', 'B', 'C', 'D', 'E', 'F' , 'G', 'H', 'I'))
         )
         partition by LIST (flag)
         (partition p1 values ('A', 'B')      tablespace ts1,
          partition p2 values ('C', 'D', 'E') tablespace ts2,
          partition p3 values ('F')           tablespace ts3,
          partition p4 values (default) tablespace ts4
         );
SQL> insert into t1
         select level, level, decode(trunc(level/250), 0, 'A', 1, 'B', 3, 'C', 'D')
         from dual
         connect by level <= 1000;

SQL> insert into t1
        select level, level, decode(trunc(level/200), 0, 'E', 1, 'F', 3, 'G', 4, 'H', 'I')
        from dual
        connect by level <= 1000;

---------------------------------   확인 ------------------------------------
SQL> exec dbms_stats.gather_table_stats('SCOTT', 'T1')

SQL> set autot on
SQL> select * from t1 where flag = 'A';
SQL> select * from t1 where flag IN ('C', 'D', 'E')
SQL> select * from t1 where flag = 'C';
SQL> select * from t1 where flag = 'D';
SQL> select * from t1 partition (p2);

         ○ range + hash
             : range partiotion과 hash partition의 조합


-----------------   range + hash paritioned table 생성 / 데이터 입력 --------------------------

SQL> create tablespace ts5 datafile '/u01/app/oracle/oradata/orcl/ts5.dbf' size 10m;
SQL> create tablespace ts6 datafile '/u01/app/oracle/oradata/orcl/ts6.dbf' size 10m;
SQL> create tablespace ts7 datafile '/u01/app/oracle/oradata/orcl/ts7.dbf' size 10m;
SQL> create tablespace ts8 datafile '/u01/app/oracle/oradata/orcl/ts8.dbf' size 10m;
SQL> drop table t1 purge;
SQL> create table t1
        (col1 number,
         col2 number,
         flag varchar2(1) constraint t1_flag_ck check(flag in ('A', 'B', 'C', 'D', 'E', 'F' , 'G', 'H', 'I')))
         partition by range (col1)
         subpartition by hash (flag)
        (partition p1 values less than (1001)
           (subpartition sub1 tablespace ts1,
            subpartition sub2 tablespace ts2,
            subpartition sub3 tablespace ts3,
            subpartition sub4 tablespace ts4),
         partition p2 values less than (maxvalue)
           (subpartition sub5 tablespace ts5,
            subpartition sub6 tablespace ts6,
            subpartition sub7 tablespace ts7,
            subpartition sub8 tablespace ts8)
        );
SQL> insert into t1
         select level, level, decode(trunc(level/250), 0, 'A', 1, 'B', 3, 'C', 'D')
         from dual
         connect by level <= 2000;

---------------------------------   확인 ------------------------------------

SQL> set autot on
SQL> select * from t1 partition (p1);
SQL> select * from t1 partition (p2);
SQL> select * from t1 subpartition (sub1);
SQL> select * from t1 subpartition (sub5);


         ○ range + list

             : range partition과 list partition의 조합

 
   ◎ Index Organized Table
      : 인덱스가 필요없어지는 테이블
          primary key 기준으로 데이터 찾을 경우 빠름
          스토리지 적게 소비(인덱스에 대한 스토리지가 필요없으므로)
          물리적인 Rowid 대신 논리적인 RowID를 갖는다.
        예) 학생테이블, 과목 테이블은 N:N이므로 중간에 교차 entity(수강내역테이블)을 추가함에 따라
             1:N 의 관계로 만들어줌. 이때 수강내역 테이블의 primary key가 stu_id, class_id여여만함
             인덱스가 필요없어지는 테이블
             데이터가 주소 뒤에 컬럼과 데이터가 들어있음.

           ○ 실습

create table students (id number primary key, name varchar2(10));
create table classes (id number primary key, name varchar2(10));
- 수강 내역 관리 : 첫번째 방법 -
create table registers
(stu_id number references students(id),
 class_id number references classes(id),
 grade varchar2(1));
create index registers_pk_idx on registers (stu_id, class_id);
alter table registers add primary key(stu_id, class_id);

-- 수강 내역 관리 : 두번째 방법

drop table registers purge;
create table registers
(stu_id number references students(id),
 class_id number references classes(id),
 grade varchar2(1),
 primary key(stu_id, class_id))
 organization index;


   ◎ Clustered Table
         1. index cluster
            :

1. cluster 생성
create cluster ed_clu
(deptno number(2))
size 1k                     -- 중요한 결정사항
tablespace users;
if) 블럭 사이즈 8k - size가 1k이면, cluster가 7개 정도 들어감.
if) 블럭 사이즈 8k - size가 13k이면, cluster가 하나도 안들어갈까?
  --> cluster는 논리적 개념임.
2. cluster용 index 생성
create index ed_clu_idx
on cluster ed_clu;

3. table 생성 (...)
create table n_emp
cluster ed_clu(deptno)
as
select * from emp;

rename emp   to old_emp;
rename n_emp to emp;
create index emp_deptno_idx on emp(deptno);


         2. hash cluster
            : 특정 함수를 사용하여 hashing함
              범위 질의일 경우 사용할 수 없음.


(1) cluster 생성
create cluster emp_h_cluster
(empno number(4))
size 1k
hashkeys 100                    -- 오라클이 알아서 함수를 알아서 만들어 hashing함
--hash is mod(empno, 1000)
tablespace users;

(2) table 생성(...)
create table h_emp
cluster emp_h_cluster(empno)
as
select * from emp;

alter table h_emp add contraint h_emp_empno_pk primary key (empno);
select * from h_emp
where empno = 7788;

         3. sorted hash cluster(10g~)
            : Cluster Key 를 Hashing 하여 저장한것과 각 Hashing 값들에 대해 정렬된 값들을 합친 구조

create cluster emp_cluster
(deptno number(2),
 sal    number sort)
 hashkeys 4
 hash is deptno
 size 50;
create table emp1
(empno number,
 ename varchar2(30),
 sal   number,
 deptno number(2))
cluster emp_cluster(deptno, sal);

insert into emp1
select empno, ename, sal, deptno from emp;

set autot on
select * from emp1;

select * from emp1
where deptno = 10
order by deptno, sal;                       
select * from emp1
where deptno = 20
order by deptno, sal;

참조 : http://www.urbantree.wo.tc/entry/10-Managing-Schema-Objects

size?
growth trend
optimizer statistics
reorganization
 - 9i : dbms_redefinition 패키지
         http://kr.forums.oracle.com/forums/thread.jspa?threadID=453730
 - 10g : EM
 



기타 참고사항

- 데이터를 빨리 찾게 하기 위한 방법
  1. index를 이용
  2. 해싱기법을 이용
  3. partitioned table

- partition prunning
  : 조건에 맞는 partition만 scan

- AWR에는 segment의 공간이 성장하는 패턴도 들어있음.

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

ASM(Automatic Storage Management)  (0) 2010.01.07
Managing Storage  (0) 2010.01.06
Moving Data (SQL*Loader, Export/Import, Datapump)  (0) 2009.12.15
Backup and Recovery  (0) 2009.12.10
Optimizer Statistics & Performance Statistics  (0) 2009.12.10
Posted by 자수성가한 부자
Oracle/Admin2009. 12. 15. 16:05
SQL*Loader

외부의 데이터 파일의 데이터를 데이터베이스의 테이블로 넣기 위한 유틸리티
일종의 insert 자동발생기로 생각하면 됨

datafile과 control file이 있어야 함.
datafile에 맞는 control file(text)을 잘 만드는 것이 실력이다.

control file은 로딩될 데이터의 위치와 파일명, 데이터의 포맷 등이 기술되어 있다.

data file(a.txt) 의 내용

7782 CLARK      MANAGER   7839  2572.50          10
7839 KING       PRESIDENT       5500.00          10
7934 MILLER     CLERK     7782   920.00          10
7566 JONES      MANAGER   7839  3123.75          20
7499 ALLEN      SALESMAN  7698  1600.00   300.00 30
7654 MARTIN     SALESMAN  7698  1312.50  1400.00 30
7658 CHAN       ANALYST   7566  3450.00          20
7654 MARTIN     SALESMAN  7698  1312.50  1400.00 30

control file(a.ctl)의 내용

 LOAD DATA
 INFILE 'a.txt'
 INTO TABLE t1
      (empno         POSITION(01:04)   INTEGER EXTERNAL,
       ename         POSITION(06:15)   CHAR,
       job           POSITION(17:25)   CHAR,
       mgr           POSITION(27:30)   INTEGER EXTERNAL,
       sal           POSITION(32:39)   DECIMAL EXTERNAL,
       comm          POSITION(41:48)   DECIMAL EXTERNAL,
       deptno        POSITION(50:51)   INTEGER EXTERNAL)

 SQL*Loader를 이용하여 데이터 적재

OS] sqlldr phil/phil control=a.ctl direct=y

참조 : http://download.oracle.com/docs/cd/B10501_01/server.920/a96652/ch10.htm#1006795
           http://download.oracle.com/docs/cd/B10501_01/server.920/a96652/ch10.htm#1007588

Export
: 데이터 추출을 할 수 있게 하는 유틸리티

OS] exp test/test file=t2.dmp tables=t2
OS] ls t2.dmp


Import
: 데이터 적재를 할 수 있게 하는 유틸리티

OS] imp test/test file=t2.dmp tables=t2
OS] sqlplus test/test
SQL> select * from t2;

cf)
imp test/test file=t2.dmp show=y


data pump
: 10g new feature이다.
  서버 내부에 job, process가 일을 함.
 
10gR2 메뉴얼에서 확인할 것

OS] 선생님 자료 참고할 것.

OS] exp    test/test@jgh_db file=t2.dmp tables=t2 { full=y}                       -- 세션이 끊어지면 작업도 중단됨
OS] expdp test/test@jgh_db SCHEMA=hr DIRECTORY=dpump   job_name=obama
-- 서버안에 job이 만들어지고, 서버 안에 파일이 만들어짐, 세션이 끊어져도 서버 내부에서 일을 끝날때까지 계속함
OS] expdp test/test@jgh_db attach=obama

OS] expdp hr/hr parfile=hr.par                       -- 설정 내용을 파라미터 파일(.par)에 기술할 것.


expdp : 데이터 펌프 export
impdp : 데이터 펌프 import

impdp hr/hr tables=employees directory

ETL (Extraction Transform Loading)

테이블 스페이스를 다 추출하고(TTS)
테이블 스페이스의 meta data만 뽑는다.

SQL> select * from dba_datapump_jobs

external table
- SQL*Loader를 이용한 external table 9i
- Data pump를 이용한 external table 10g등장.
   pupulation = unload

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

Managing Storage  (0) 2010.01.06
Managing Schema Objects  (0) 2009.12.30
Backup and Recovery  (0) 2009.12.10
Optimizer Statistics & Performance Statistics  (0) 2009.12.10
Performance Management  (0) 2009.12.08
Posted by 자수성가한 부자
Oracle/Admin2009. 12. 10. 18:41

● Backup (복사)
  ◎ logical backup
      : export utility(~9i), data pump(10g~)를 이용 
        널리 사용되지만, 완벽한 backup은 아님
        open상태에서만 가능

SQL> exp phil/phil file=a.dmp tables=emp
SQL> imp phil/phil file=a.dmp tables=emp


   ◎ physical backup
      : OS명령, RMAN(Recovery Manager)
        open, closed


● Restore (복원)
    : 손상된 파일 대신 Backup해둔 파일을 재위치 시키는 것.


● Recovery (복구)
    : Restore + Redo적용
      완전 복구(complete)       : 있는 redo를 모두 적용
      불완전 복구(incomplete) : 특정 시점까지만 redo를 적용


● failure의 유형
    1. statement failure
    2. user process failure -> pmon이 정리, sqlnet.expire_time=n (비정상 종료를 빨리 찾게 하는 기능)
    3. network failure -> 장비 또는 tnsnames.ora, listener.ora의 설정
    4. user의 실수 : 심각한 에러
    5. instance failure : smon이 처리
    6. media failure

2009년 11월 12일 수업내용

● 인스턴스 복구
    - 비정상적으로 인스턴스가 종료되었을 때, 파일의 동기화가 맞지 않을 때 리두로그 그룹을 맞추는 일
    - roll forward(open전) : 리두로그 파일에 있는 것을 하나도 빠지지 않고 메모리에 올림(commit이 된 것과 안된 것 공존)
    - roll back(open후, on demand & smon)) : 데이터 블럭과 undo블럭을 메모리로 올림
       참조 : http://cafe.naver.com/gseducation/371


● 인스턴스 리커버리 튜닝
    - 인스턴스 리커버리를 조정(더 낫게 만드는 것이 아님)
    - EM > Administaration > Advisor Central > MTTR Advisor를 이용 
   -> 원하는 값을 주면 리두로그파일의 크기를 권고함


● 데이터베이스에 오직 commit된 데이터만 들어있는 경우
    - only 정상 shutdown

● 데이터베이스에 commit된 데이터과 commit안된 데이터의 공존
    - 평상시
    - 인스턴스 비정상 종료시


● 데이터베이스 모드 수정
    : Backup & Recovery 실습 전 준비사항

      실습 내용은 첨부파일을 참고할 것.


● Backup & Recovery 유형 / 실습

    ◎ 데이터 파일이 손상되는 상황
         : 모든 데이터 파일은 평등하나, 데이터 파일이 어느 테이블 스페이스에 소속되어 있느냐에 따라 대접이 달라짐

        ○ 완전 복구
            - system tablespace or undo tablespace
               : mount 단계에서 복구 (closed 복구: 유저들 접근 안됨)
            - users tablespace
               : 문제있는 파일을 offline으로 설정 -> open단계에서 복구
            - index tablespace
               : 인덱스만 있는 파일이므로 삭제 후 재생성만으로 해결
            - read only ts
               : copy & paste
            - temp file
               : startup시 자동 생성됨

        ○ 불완전 복구
            - 유저 실수로 인한 복구 -> flashback으로 해결.

    ◎ Redo log file
         : 전제 조건 - 다중화되어 있을 것
         - file 1개 삭제
            : copy & paste
         - group 삭제
            : inactive group ->완전 복구
         - active, current group -> 불완전 복구(동)

    ◎ Control file
         - 1개만 손상되었을 경우
            : copy & paste
         - 전부 손상되었을 경우
            : 완전 복구(create control file ...)

    ◎ Archived log group 삭제
         - datafile에 문제가 없을 경우 : whole Backup
         - datafile에 문제가 있을 경우 : 불완전 복구(은)

          백업에 문제가 있을 경우(금)

          실습 내용은 첨부파일 참조할 것.


기타 참고사항

DBA의 의무
- 많은 종류의 failure로부터 DB보호
- MTBF를 증가시켜라.(failure가 나는 주기를 증가시켜라)
- MTTR를 감소시켜라.(recover하는데 시간을 줄여라.)
- 데이터의 손실을 최소화시켜라.

문제제기
- nomount -> mount사이의 순서가
   파라미터 파일 읽기 -> SGA 구성 -> BGP실행 -> 진단파일 염
   but 진단 파일에서 BGP가 실행되는 순서가 기록되기 때문에 진단 파일 열고난 후 BGP실행이 나중이 아닌지?? --> 확인요

- 추천 영어 관련 사이트
    http://www.ebse.co.kr

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

Managing Schema Objects  (0) 2009.12.30
Moving Data (SQL*Loader, Export/Import, Datapump)  (0) 2009.12.15
Optimizer Statistics & Performance Statistics  (0) 2009.12.10
Performance Management  (0) 2009.12.08
Proactive Maintenance  (0) 2009.12.07
Posted by 자수성가한 부자
Oracle/Admin2009. 12. 10. 16:50

● Optimizer Statistics
  ◎ 정의
       - 옵티마이져(optimizer)가 실행계획을 세울 때 필요한 통계정보

  ◎ 특징
       - 출처는 일부 DBA_로 시작하는 Static Data Dictionary Views
       - 다음과 같은 정보가 포함됨
            1. 테이블 및 인덱스의 크기
            2. 테이블 : ROW의 갯수, 평균 row의 크기, chain의 갯수
            3. 인덱스 : 높이와 delete된 leaf row의 갯수
       - 관련 패키지 : DBMS_STATS
       - 이 내용을 분석해야 SQL 튜닝이 가능함.
       - 주기적으로 수집을 해줘야 함.(변화가 많은 오브젝트를 기준으로)
       - gather_stats_job : 테이블 선별, 히스토그램 비율과 결정을 알아서 해줌.
                                   매일 밤 실행됨. 정확성에 문제가 있을 수 있음.

  ◎ 분류
       ○ System Stats
           : 환경적 데이터의 상황을 알려줌. 9i R2부터 등장.
           - dbms_stats.GATHER_SYSTEM_STATS 

       ○ Data Stats   
           : 내부의 데이터의 상황을 알려줌
           - dbms_stats.GATHER_DATABASE_STATS
           - dbms_stats.GATHER_DICTIONARY_STATS
           - dbms_stats.GATHER_FIXED_OBJECTS_STATS
           - dbms_stats.GATHER_INDEX_STATS
           - dbms_stats.GATHER_SCHEMA_STATS
           - dbms_stats.GATHER_TABLE_STATS

● Performance Statistics
  ◎ 정의
       - 서버 튜닝을 하기 위한 performance의 통계정보

  ◎ 특징
       - V$로 시작하는 Dynamic Performance Views
       - 이 통계 정보를 분석해야 서버 튜닝이 가능함
       - 단점 : 누적된다. 휘발성이다. -> 문제의 원인을 금방 찾을 수 없다.
       - 버전에 따라 통계를 수집하는 방식이 달라짐
           - 8i이전
               utlbstat.sql(b : begin), utlestate.sql(e : end) -> report.txt
               일정 주기 snapshot으로 결과물을 생성, 파일의 위치는 $ORACLE_HOME/rdbms/admin 이다.
           - 8i부터
               statspack : sp*.sql -> perfstat유저가 생성되고, ...
           - 10g부터
               AWR + MMON + ADDM

  ◎ 분류
       ○ Activity
           - v$statname                                                                            -- 363
           - v$sysstat         : 인스턴스 시작이래로 있었던 모든 Activity의 누적  -- 363
           - v$sesstat         : 현재 연결중인 각 session의 Activity의 누적,        -- 363*세션수
           - v$service_stats : 서비스 이름별 time model Activity의 누적           -- 주로 time model 관련 지표
           - v$mystat          : 내 세션의 Activity의 누적                                  -- 363
           ※ 사라진 세션이 문제가 될수도 있다.  -> trace를 조정(cctv설치)

       ○ Wait
           - v$event_name    : 발생 가능한 wait의 목록                                             
           - v$system_event : 인스턴스 시작이래로 경험한 wait(event)의 누적             -> v$system_wait_class
           - v$session_event : 현재 연결중인 각 세션이 경험한 wait(event)의 누적       -> v$session_wait_class
           - v$service_event  : 서비스 이름별 wait의 누적                                         -> v$service_wait_class
           - v$session_wait (10g ASH{Active Session History}) or v$session: 지금 당장 기다리고 있는 wait(event)

       ○ Others
           - v$sql
           - v$latch
           - v$filestat
           - v$pgastat
              ...


기타참고사항

- 대기 이벤트 = System API Call

가령 SQL*Net message to client 대기는 Server Process가 OS에서 Network Send API 요청을 하고 응답이 오기를 기다린다는 것을 의미한다. OS는 Server Process가 요청한 Data를 TCP Send Buffer에 넣는 것으로 일을 마치고 Server Process에게 응답을 보낸다. 즉, SQL*Net message to client 대기는 실제 Network 전송이 끝나기를 기다린다는 의미가 아니라 OS가 Send Buffer에 성공적으로 Data를 등록하기를 기다린다는 것을 의미한다. Network API들은 이런 속성을 지니고 있다.

- 경영 : 불확실성을 최소화하는 과정


참조 : http://ukja.tistory.com/219

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

Moving Data (SQL*Loader, Export/Import, Datapump)  (0) 2009.12.15
Backup and Recovery  (0) 2009.12.10
Performance Management  (0) 2009.12.08
Proactive Maintenance  (0) 2009.12.07
Configuring the Oracle Network Environment  (0) 2009.12.04
Posted by 자수성가한 부자
Oracle/Admin2009. 12. 8. 11:08
● 개요

- SQL Tuning Advisor(STA)를 이용하여 SQL을 튜닝할 수 있다.
- SQL Access Advisor(SAA)를 이용하여 SQL을 튜닝할 수 있다.
- ASSM을 사용할 수 있다.
- Memory Advisor를 사용할 수 있다.
- performance관련 dynamic views
- 유효하지 않고, 사용하지 않는 objects를 trouble shooting할 수 있다.

● SQL Tuning Advisor
    ◎ 정의
        - SQL의 튜닝을 위해 조언을 해주는 프로세스

    ◎ 특징
        - tuning모드의 optimizer가 분석한 결과를 받아서 전달.
       - optimizer가 권고안을 만들고 STA가 전해준다.

● SQL Access Advisor
    ◎ 정의
        - 인덱스와 MVIEW에 생성에 관한 권고를 해주는 프로세스

● Memory Advisor
    ◎ ASMM
        - Automatic Shared Memory Management의 약자.
        - MMAN(Memory Manager)라는 백그라운드 프로세스가 수분에 한번씩 모니터링한 후 기존에 있는
           메모리 어드바이져의 권고에 따라 SGA ( Shared Pool, Buffer Cache, Large Pool, Java Pool, Streams Pool)의
           크기를 늘이고 줄이는 것은 중요한 임무.

        - sga_target 을 on/off할 수 있는 파라미터
          (shared_pool_size, large_pool_size, java_pool_size, db_cache_size, streams_pool_size 등은 자동으로 관리됨)

SQL> alter system set sga_target = 2G       -- 기능을 on
SQL> alter system set sga_target = 0         -- 기능을 off


기타참고사항

- optimizer의 모드
   ① normal mode : 
       최대 목표는 빠른 판단
   ② tuning mode : 
       문장을 시간을 많이 쓰면서 분석 -> STA에게 전달.

ASMM (Automatic Shared Memory Management)

참고 : http://kin.naver.com/knowhow/detail.nhn?d1id=8&dirId=8&docId=232574&qb=U1FMIFR1bmluZyBBZHZpc29y&enc=utf8&section=kin&rank=1&sort=0&spq=0&pid=fx9ojg331xlssbk/uwVssv--158809&sid=Sx9oA5lnH0sAAFiMCro

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

Backup and Recovery  (0) 2009.12.10
Optimizer Statistics & Performance Statistics  (0) 2009.12.10
Proactive Maintenance  (0) 2009.12.07
Configuring the Oracle Network Environment  (0) 2009.12.04
Implementing Oracle Database Security  (0) 2009.12.04
Posted by 자수성가한 부자