SlideShare uma empresa Scribd logo
1 de 214
INFORMIX User Guide


        2001. 6

     Informix Korea
목차
     RDB 란 무엇인가
     SQL 개요
     dbaccess 를 이용한 query 실행
     Informix DBMS 의 이해
     SQL 을 이용한 질의 방법
     DB Admin 작업
     ESQL/C 를 이용한 프로그래밍
     System Admin 작업
     Client/Server Connectivity
     Data Migration
     Backup & Restore
     GLS (Global Language Support)




INFORMIX User                     2
RDB 란 무엇인가
      정보와 데이터
      정보시스템
      자료처리시스템
      데이터베이스의 정의
      데이터베이스의 특성
      DBMS 발전 배경
      데이터 독립성과 데이터 구조간의 사상
      데이터베이스 관리시스템
      데이터 모델링
      관계 데이터 모델
      계층 데이터 모델
      네트워크 데이터 모델
      Primary Key 와 Foreign Key
      정규화 (Normalization)
정보와 데이터
   데이터
       현실 세계 (Real World) 로부터 단순한 관찰이나 측정을 통해서 수집한 사실
        (Fact) 또는 값 (Values)


   정보
       어떤 상황에 관한 어떤 의사 결정을 할 수 있게 하는 지식 (Knowledge) 로써
        데이터의 유효한 해석 (Interpretation) 이나 데이터 상호간의 관계
        (Relationship)




                          처리기 (P)             정보 (I)
          데이터 (D)




INFORMIX User                4
정보 시스템
     경영   정보    시스템 (MIS : Management Information System)
     군사   정보    시스템 (Military Information System)
     행정   정보    시스템 (Administration Information System)
     인사   정보    시스템 (Personnel Information System)
     의사   결정    지원 시스템 (Decision Support System)


                                                                  의
            수집                입력             출력                   사
   현실 세계                           처리기 (P)        정보 (I)     분배
                    데이터 (D)                                       결
                                                                  정




                                   저장 데이터




INFORMIX User                       5
자료 처리 시스템
   정보 시스템을 구축 하기 위해 정확한 최신의 정보를 적시에 제공하는 시
    스템
       자료 처리 시스템의 종류
           일괄 처리 시스템 (batch Processing)
           온라인 처리 시스템 (on-line processing)
           분산 처리 시스템 (distributed processing)




INFORMIX User                          6
데이터베이스의 정의
   데이터베이스란 어느 한 조직의 다수 응용 시스템들이 사용하기위해 통
    합 , 저장된 운영 데이터의 집합

       통합된 데이터 (Integrated Data)
           최소의 중복 , 통제된 중복 허용
       저장된 데이터 (Stored Data)
       운영 데이터 (Operational Data)
           존재 목적이 뚜렷하고 필수 적인 데이터
       공용 데이터 (Shared Data)




INFORMIX User                       7
데이터 베이스의 특성
   실시간 접근성 (Real Time Accessibility)
       수시적이고 비 정형적인 데이터의 검색이나 처리를 요구하는 질의
       질의 (Queries) 에 대하여 실시간에 처리 응답
   계속적인 변화 (Continuous Evolution)
       데이터의 삽입 , 삭제 , 갱신을 통하여 가장 최근의 정확한 데이터를 유지
   동시 공유 (Concurrent Sharing)
       동시에 여러사용자가 접근 이용 가능
   내용에 의한 참조 (Content Reference)
       데이터 레코드들은 주소나 위치에 의해 참조되는 것이 아니라 데이터의 내용
        즉 , 어떤 특정 조건을 만족하는 레코드들은 모두 하나의 논리적 단위로 취급
        되고 접근




INFORMIX User                    8
DBMS 발전 배경
   데이터의 종속성
   데이터의 중복성
   내부적 일관성 (Consistency)
       보안성 (Security)
       경제성 (Economics)
       무결성 (Integrity)
   데이터의 독립성
       논리적 데이터 독립성
       물리적 데이터 독립성




INFORMIX User               9
데이터 독립성과 데이터 구조간의 사
   상
            프로그램 데이터 구조         데이터베이스
                                 논리적 구조
                A
                B
                C                     A          물리적
                D                               데이터베이스
   응용 프로그램 1                          B
                                      C
                            논               물
                B           리         D     리
                          사적              사적     A B C
                E         상               상      D E F
                            구         E     구
                F                                G H ...
    응용 프로그램 2               조               조
                                      F
                                      G
                G
                                      H
                A
    응용 프로그램 3   C




INFORMIX User                    10
데이터베이스 관리시스템
   응용 프로그램과 데이터의 중재자로써 모든 응용 프로그램들이 데이터베
    이스를 공용할 수 있게끔 관리해 주는 소프트웨어 시스템
       정의 기능
           데이터베이스의 논리적 구조와 그 특성을 어떤 데이터 모델에 따라 명세
                 데이터베이스의 물리적 구조를 명세
                 물리적 구조와 논리적 구조의 변환이 가능하도록 사상 (mapping) 을 명세
       조작 기능
           데이터 처리가 간편하고 쉬우며 명확하고 완전하고 효율적
       제어 기능
           데이터 무결성 제어
           보안과 권한을 검사
           동시성 제어 (Concurrency Control)




INFORMIX User                         11
데이터 모델링

       객체 ( 그        엔티티 타입                 레코드
           룹         에트리뷰트                 데이터 필드
            )          값                     값
        성 질
         값
       현실 세계 ( 실체
                    개념 세계 ( 정보 )        컴퓨터 세계 ( 데이터 )
              )


                                            정보 모델링
                            현실 세계                        개념 세계


                                                           데이터
                                   일치성                     모델링


                                            데이터구조화
                            물리적                          데이터 모델
                           데이터베이스
                                                            컴퓨터 세계


INFORMIX User                      12
관계 데이터 모델
   현실 세계를 ER 다이어 그램으로 표현한 것은 현실 세계를 사람이 이해
    할 수 있게 표현한 논리적 구조



    현실 세계                     ER                       데이터           저장
                            다이어그램                      모델          데이터베이스




                     학번      이름    학년   학과   학번     과목 번호    성적
                학생                                                수강
                     1234    김철수   3    전산   1235   CS312    90
                     1235    이상철   4    전산   1246   CS312    85
                     1246    박영수   3    전자   1234   CS322    88
                     1248    조성진   3    전기   1235   CS322    95
                     1225    강신조   1    산공   1248   CS322    94
                                             1234   CS412    98
                     과목 번호     과목이름     학점
           교과목                               1235   CS412    75
                     CS312     자료 구조    3    1246   CS412    80
                     CS322     파일 처리    3
                     CS412    데이터베이스    3




INFORMIX User                                13
계층 데이터 모델



            교과목                        데이터베이스

                                                     CS 421.2
   선수 과목              강 좌         파일 처리론         CS 421.1



                                                            홍수영
                교 수         학 생            이상길             김철수




INFORMIX User                     14
네트워크 데이터 모델
      1000, 갑 , 경영 , 4   A    영어 , 4


                         B


                         C
                              역사 , 3

      2000, 을 , 전산 , 3   D


                         A


                              음악 , 2
      3000, 병 , 영문 , 2   B


                         C



INFORMIX User            15
Primary Key 와 Foreign Key
   Primary Key
         각 개체를 유일하게 구분할 수 있는 속성 혹은 속성의 조합 .
         Primary 는 반드시 존재하는 값이어야 한다 .
         모든 개체는 하나의 primary key 를 가져야 한다 .
         예
           고객 개체 : 주민번호
           상품 개체 : 상품 코드 , 제조업체
           학생 개체 : 학번
   Foreign Key
         다른 개체의 primary key 를 참조해야 하는 개체의 속성
         개체 간에 관계를 설정하기위해 사용되는 속성 혹은 속성의 집합
         값이 없어도 가능
         중복된 값 가능
         수정 가능
         예
           주문 개체의 주문 고객 속성   고객 개체의 고객번호
           수강 개체의 수강 학생 속성   학생 개체의 학번


INFORMIX User                      16
정규화 - 1NF(First Normal Form)
   엔티티 (entity) 안에 반복되는 속성 그룹을 제거한다

                         주문            주문
                         주문번호
                         주문날짜          주문번호   composite
                         총액            항목번호   primary key
                         항목번호 1        수량
                         항목수량 1        주문날짜
    반복되는 속성은 데이터를 유
                         항목번호 2        총액
    연하게 저장할 수 없다 .
                         항목수량 2        지불날짜
    여기서 , 항목은 최대 4 개밖에
                         항목번호 3
    저장할 수 없다
                         항목수량 3
                         항목번호 4
                         항목수량 4




INFORMIX User                     17
정규화 - 2NF(Second Normal
   Form)
   1NF 에서 모든 속성은 전체 Primary Key 에 종속되어야한다
   엔티티의 모든 속성은 Primary Key 에 functionally dependent 해야
    한다
   데이터항목 a 가 데이터항목 b 에 의해 정의될 수 있다면 a 는 b 에
    functionally dependant 하다고 한다
                                      주문                        주문마스터

                                                                주문번호
        주문날짜 , 총액 ,                   주문번호
                                                                주문날짜
        지불날짜는 단지                      항목번호
                                                                총액
        주문번호에만                        수량
                                                                지불날짜
        functionally                  주문날짜
        dependant 하다                  총액
                                      지불날짜                      주문상세

                                                                주문번호
        주문번호    1010       1010       1011       1010 항목의 지불    항목번호
        항목번호    1          2          3                         수량
        수량      20         3          12         날짜가 바뀌면 모
        주문날짜    1/4/2001   1/4/2001   1/4/2001   든 1010 항목을 수
        총액      50,000     50,000     50,000
        지불날짜    2/4/2001   2/4/2001   2/4/2001
                                                 정해야 한다


INFORMIX User                                          18
정규화 - 3NF(Third Normal
   Form)
   Primary Key 에 종속적인 Key 가 아닌 속성에 종속적인 속성이 있으면
    안된다 .
   어떠한 속성도 Primary Key 에 transitively dependent 하면 안된다 .
   데이터항목 a 가 다른 데이터항목 b 에 종속적이면 a 는 b 가 종속적인
    다른 데이터 항목에도 함께 종속적인 관계가 되고 이를 transitively
    dependent 하다고 말한다
                      주문가격                        주문       품목
                       주문번호                       주문번호
                       항목번호                       항목번호     품목번호
                       품목번호                       품목번호     제조코드
                       제조코드                       제조코드     단가
                       수량                         수량
                       단가



    주문번호   1010    1010    1011    주문하지 않은 항목에 대한 단가를 입력할 수 없다
    항목번호   1       2       1
    품목번호   1       30      1       항목을 포함한 주문이 삭제되면 그 항목의 단가를 잃는다
    제조코드   ABC     XYZ     ABC     단가는 중복적으로 저장된다
    수량     20      3       12
    단가     1,000   3,500   1,000
                                   단가가 변경되면 그 항목을 포함한 모든 주문에 대해서 변
                                   경해야 한다

INFORMIX User                                19
SQL 개요
      SQL 이란 무엇인가
      SQL 의 종류
      DB 내의 object 이름 규칙
      인포믹스 자료형 (Data Type)
      Character Data Type
      Numeric Data Type
      Large Object Data Type
      Time Data Type
      Row Data Type
      Collection Data Type
      Complex Data Type
SQL 이란 무엇인가 ?
     Structured Query Language 의 준말
     영어와 흡사한 언어
     Database 와의 관련 작업을 가능하게 함 .
     논리적인 database 의 model 을 관계형 DB 의 schema 로 번역하는
      데 사용되는 언어 .
       schema 란 - DB 내에서의 table 의 물리적인 정의
       table 이란 - 열과 행으로 이루어진 2 차원 표현




INFORMIX User                 21
SQL 의 종류
   DDL(Data Definition Language)
           DB 나 table 을 생성하고 , 그 구조를 수정하는 작업관련 구문
   DML(Data Manipulation Language)
           Data 를 가져오고 , 수정하고 , 삭제하는 등의 Data 를 사용하는데 사용되는 구문
   Cursor Manipulation
           Cursor 를 사용하는데 사용되는 구문
   Dynamic Management
           동적으로 자원을 사용 , 관리하는데 사용되는 구문
   Data Access
           Data 에 대한 권한을 설정하고 , lock 을 거는등의 작업에 사용되는 구문
   Data integrity
           Transaction 을 관리하는데 사용되는 구문
   Query optimization
           질의 최적화에 사용되는 구문
   Stored procedure
           Stored procedure 를 실행하는 작업에 사용되는 구문



INFORMIX User                     22
DB 내의 object 이름 규칙
   Informix version 에 따라 길이 제한이 다름 .
       Informix 7.*,8.* ,9.1*: 18 글자 ( 영문기준 )
       Informix 9.2* : 128 글자 ( 영문기준 )
   숫자로 시작하면 안됨 .
   특수문자의 사용 불가
       예 : 공백문자 , tab 문자 , 등…
   “_ ” 는 사용 가능
   ANSI-reserved word 사용 안됨 .




INFORMIX User                       23
인포믹스 자료형 (data type)
                                  Character                              char

                                   Numeric               Exact          varchar

     Built-in Data Type          Large-object         Approximate      lvarchar

   User-defined Data Type            Time                byte       decimal/numeric

    Complex Data Type              boolean                text          money

                            Opaque Data Type             blob         integer/int

                            Distinct Data Type           clob          smallint

           Row Type          Named Row Type              date            int8

        Collection Type     Unnamed Row Type           datetime          serial

                                      set               interval        serial8

                                      list                             decimal

                                   multiset                              float

                                                                         real


INFORMIX User                                    24
Character Data Type
   char (size)
       고정 길이 문자 저장
       1~ 32,767 byte 까지의 character 저장 가능
       default 값은 1
   varchar (max, reserve)
       가변 길이 문자 저장
       1~ 255 byte 까지 가능
       Reserve(default 로 0 ) 는 option 이나 Max 는 반드시 주어야 함 .
   lvarchar
       2K 까지의 가변길이 문자를 저장




INFORMIX User                     25
Numeric Data Type
   decimal (precision,scale) or numeric (precision,scale)
       고정 소수점 실수를 저장 ,32 유효자리수까지 표현
       default 자리수 : 16, default 소수점이하 : 0
   money (precision, scale)
       내부적으로 decimal 과 같으나 , 화폐단위기호가 붙어서 출력됨 .
   integer or int
       4bytes integer 저장 : -(2 31 -1) ~ 2 31 -1
   int8
       8bytes integer 저장 : -(2 63 -1) ~ 2 63 -1
   smallint
       2bytes integer 저장 : -(2 15 -1) ~ 2 15 -1
   serial (start) / serial8 (start)
       서버에 의해 자동적으로 1 씩 증가되는 값을 저장할 수 있는 type.
       내부적으로 int 와 같음 .




INFORMIX User                           26
Numeric Data Type
   float or double precision
       부동 소수점 실수를 저장
       유효자리수 16 까지 표현 가능
   real or smallfloat
       부동 소수점 실수를 저장
       유효자리수 8 까지 가능




INFORMIX User                   27
Large-Object Data Type
   Large-Object data type
       text
           2G 까지의 ASCII character 형식의 object 를 저장
       byte
           2G 까지의 binary character 형식의 object 를 저장
   Smart Large Object data type
       clob
           4T 까지의 ASCII character 형식의 object 를 저장
       blob
           4T 까지의 binary character 형식의 object 를 저장




INFORMIX User                        28
Time Data Type
   date
       연 , 월 , 일의 날짜를 저장
       Format 을 정의할 수 있음 .(default : mm/dd/yyyy)
       환경변수 DBDATE 를 이용해 변경
   datetime
       날짜를 시간까지 저장할 수 있음 .
       default : yyyy-mm-dd hh:MM:ss.fff
   interval
       시간의 간격 ( 기간 ) 을 저장할 수 있음 .




INFORMIX User                        29
Row Data Type
   C 언어의 구조체와 유사한 여러 종류의 데이터의 모음
   Unnamed Row Data Type
          create table part ( part_id serial ,
                               cost     decimal,
                                part_dimensions row (length decimal, width decimal,
                                                        height decimal, weight
            decimal) );
          insert into part values (0, 10.00, row(1.0, 2.0, 3.0, 4.0));
   Named Row Data Type
          create row type dimension_t ( length decimal, width decimal,
                                             height decimal, weight decimal);
          create table part ( part_id serial, cost decimal, part_dimensions
            dimension_t);
                    constructor           Cast operator                 Row data type
          insert into part values (0, 10.00, row(1.0, 2.0, 3.0, 4.0)::dimension_t;



   Row Data Type 데이터 조회
          select part_id, cost, part_dimensions from part
                  where part_dimensions.weight > 100;

INFORMIX User                               30
Collection Data Type
   Set
       데이터 입력 순서에 의미 없고 , 중복된 값을 허용하지 않음
           alter table part add (defective_dates set(date not null));
           insert into part (part_id, defective_dates)
                   values (0,(set{2/23/2001,3/15/2001}));
           select * from part where ‘1/26/2001’ in defective_dates;
   MultiSet
       데이터 순서에 의미 없고 , 중복된 데이터를 허용함
   List
       데이터 순서가 의미 있고 , 중복된 데이터를 허용함




INFORMIX User                                31
Complex Data Type
   User-defined Data Types (UDTs) 라고 부른다
   Distinct Types
       기존에 존재하는 데이터형을 기반으로한 새로운 데이터형을 나타낸다
          create distinct type inches as decimal;
          create row type dimension_t ( length inches, width inches, . . . );
   Opaque Data Types
       C 언어나 JAVA 를 이용하여 데이터형의 내부 구조와 함수를 정의한다
       Create Opaque Type 문을 이용하여 새로운 데이터형을 등록한다
       Create Function 문을 사용하여 이 데이터형을 지원하는 함수를 등록한다




INFORMIX User                              32
dbaccess 를 이용한 query 실
행
       dbaccess   란?
       dbaccess   실행
       dbaccess   의 메뉴 구조
       dbaccess   의 실행방법
Dbaccess 란 ?
   Query 를 실행하고 , db 나 table 에 대한 information 을 볼 수 있는
    tool




INFORMIX User                34
Dbaccess 실행
   $ dbaccess




   메뉴의 사용법
       Space-bar 를 이용하거나 화살표키로 이동
       혹은 각 메뉴의 대문자로 쓰여진 문자를 누름
           예 : Exit 의 경우 “ e” 를 누름




INFORMIX User                         35
Dbaccess 의 메뉴구조

   Query Language    Connection     Database        Table       Session     Exit
    New             Connect       Select        Create
    Run             Disconnect    Create        Alter
    Modify          Exit          Info          Info
    Use-Editor                    Drop          Drop
    Output                        cLose         Exit
    Save                          Exit
    Info
    Drop
    Exit



             NEW     dbaccess editor 에서 SQL 문장을 작성한다 , 작성이 끝나면 ESC 키를 눌러야 메뉴로 돌아간다
             RUN     작성된 SQL 문장을 실행한다
             MODIFY dbaccess editor 에서 SQL 문장을 수정한다
             USE_EDITOR vi editor 를 호출하여 SQL 문장을 작성 및 수정한다 . 작성이 끝나면 저장하고 vi 를 종료한다
             OUTPUT 출력결과를 파일로 저장한다
             SAVE    editor 에 기록되어 있는 SQL 문장을 파일로 저장한다 ( 확장자 : .sql)
             INFO    현재 연결된 데이터베이스의 테이블 정보를 본다
             DROP    현재 디렉토리에 저장된 SQL 파일 ( 확장자 : .sql) 을 삭제한다
             EXIT    Query Language 종료




INFORMIX User                              36
Dbaccess 의 실행 방법
   구문을 적은 file 을 명령 프롬프트에서 바로 실행하여 결과를 볼 수 있
    다.
       Shell program, cron job 등에 응용 가능
       dbaccess DB 이름 SQL 파일명
          dbaccess test_db test.sql
   Interactive mode 로 prompt 상에서 실행한다
       SQL 문장 끝에 세미콜론 (;) 을 넣어야 실행된다
       종료는 interrupt 키를 눌러 빠져나온다
          dbaccess test_db -
          > select * from customer;
   여러 문장을 그룹으로 프롬프트에서 실행한다
       새 입력 라인 첫 자리에 종료 문자가 나타날때까지 문장을 입력 받는다
          dbaccess test_db << !
          > select * from customer;
          > select * from state;
          !




INFORMIX User                         37
Informix DBMS 의 이해
       Informix DBMS 의 아키텍쳐
       Database Server 의 구성요소
       물리적인 저장 공간
       논리적인 저장 공간
       물리적 디스크 공간 할당
       논리적 디스크 공간 할당
       SYSMASTER 데이터베이스
       데이터베이스 구조
Informix DBMS 의 아키텍쳐
     Client/Server 구조                 Multi-threaded 구조
         client 는 server 에게                적은 프로세스 소요
          command 나 query 를 보내              여러 프로세스가 하나의 어플리케이션
          고 결과를 받는다                          을 위하여 작업
         server 는 데이터베이스의 컨                서버 프로세스 안에서 thread
          텐츠를 관리하며 client 가 보                scheduling 과 context switching
          낸 query 를 해석하고 실행하
          여 결과를 client 에게 보낸다

                                                         application

                          •interpre
                          t
                          •execute
                SQL
                          •return

                results
                                               process     process     process
      Client                Server

                                                           Server


INFORMIX User                         39
Database Server 의 구성 요소
    빠른 access
    를 위하여 disk              Shared Memory
    로부터 데이터
    를 cache 하는                                      Lock, LRU, Buffer Pool,
                             Resident Portion       Logical log buffer,
    영역
    사용자 세션 관                                        Physical Log Buffer..
                            Virtual    Message
    리          MT, Sort,                                  client 와
                            Portion    Portion            server 간의 통
               Session,
               Procedure, Dictionary,                     신 영역
    메모리와 디스
    크 데이터의 동 Big buffer, Global..     환경변수 :       INFORMIXSERVER, INFORMIXDIR,
    기화 작업                                                 PATH
                             checkpoin
                                 t
                                                        Processes
 Chunk                          Disk
 Page                                                         V.P 는 자체적으로
 Extent                                                       thread 를
 Tblspace                                                     scheduling 하고
 Dbspace                                                      실행한다
 Blobspace                               Virtual Processors
 Smart Blobspace                         (CPU, PIO, LIO, AIO, ADT, MSC, SHM,
 Physical Log, Logical Log                TLI, SOC, ADM, OPT, JVP..)



INFORMIX User                             40
물리적인 저장 공간
   Page
         IDS 의 기본적인 I/O 의 단위
         CHUNK 를 구성하는 최소 단위 .
         메모리 버퍼의 사이즈와 동일
         Size : 2K 혹은 4K
   Extent
       Table 이나 index, fragment 에 저장영역을 할당하는 단위로서 , 연속된 페
        이지의 묶음 .
   Chunk
       Informix 에 할당된 연속된 disk 의 공간
       Raw device 나 cooked device(file) 가능




INFORMIX User                       41
논리적인 저장공간
   Tblspaces
       Table 에 할당된 extent 의 묶음
       하나의 dbspace 에만 존재가능
   Dbspaces
       Informix 가 사용하는 저장 공간으로 하나 이상의 Chunk 로 구성됨 .




        /dev/rvol1                            Tab1 의 tablespace

                dbspace                       Tab2 의 tablespace

                     /usr/ifmxdata
        /dev/rvol2




INFORMIX User                        42
물리적인 디스크 공간 할당
                                           first_table
          create table first_table (
             tab_id int ,
             name char(20) ,                                    second_table
             address          char(50)
          ) extent size 32 next size 16;


          create table second_table (                    …………
             tab_id int ,
             name char(20) ,
             address         char(50)
          ) extent size 16 next size 8;




                                                                  page




INFORMIX User                              43
논리적 디스크 공간 할당
          create database example1db;
          create database example2db in dbspace1;   rootdbs
          create table first_table (
              tab_id int ,
              name char(20) ,                        example1db
              address         char(50)
          ) ;
          create table second_table (
                                                    dbspace1
              tab_id int ,
              name char(20) ,                        example2db
              address         char(50)
          ) in dbspace2;                                first_table


                                                    dbspace2

                                                      second_table




INFORMIX User                           44
SYSMASTER 데이터베이스
   Informix 서버의 정보를 저장
   Informix 서버가 초기화 되는 시점에 자동 생성
   공유메모리의 실제 데이터를 접근 (access)

     SELECT dbsnum, name, owner,
            nchuncks, is_temp,       shared memory
            is_blobspace, flags                         SELECT partnum, dbsnum,
     FROM sysdbspaces                                          owner, tabname
                                                        FROM systabnamess
                                            process     WHERE dbsname = “DB 이름
                                                        ”

      SELECT name, owner,
      created,
               is_logging,              sysmaster
      is_buff_log,
               is_ansi
      FROM sysdatabases

                                                      SELECT sid, username, uid
                 SELECT c.dbsnum, chknum,                     hostname,
                         nxchknum, d.name,            connected
                         chksize, nfree               FROM syssessions
                 FROM syschunks c, sysdbspaces
                 c
                 WHERE c.dbsnum = d.dbsnum
                 AND d.name = “dbspace 이름”


INFORMIX User                                45
데이터베이스 구조 (1)
   시스템 카타로그 테이블 (system catalog table)
       데이터베이스의 구조에 대한 정보를 저장
       데이터베이스가 생성되는 시점에 자동적으로 생성
       데이터베이스내의 테이블 구조가 변경되는 시점에 자동으로 수정
   데이터 테이블
       테이블을 생성할 때 고려할 사항
           dbspace : 테이블이 생성될 위치
           extent/next size : 연속으로 할당할 공간의 크기
           lock mode : row 또는 page 단위의 locking 사용
   인덱스
       데이터를 빠르게 접근하기 위한 정보를 저장
       인덱스의 종류
           데이터 중복 여부에 따라 unique / duplicate 인덱스로 구분
           여러 컬럼을 인덱스 키로 사용하는 composite 인덱스
           인덱스 생성 시 데이터의 물리적 위치를 재 정렬시키는 cluster 인덱스




INFORMIX User                       46
데이터베이스 구조 (2)
   제약조건 (Constraints)
         Referential constraint : 테이블간의 integrity 보장
         Default values : 입력 내용이 없을 경우 지정한 기본값 저장
         NOT NULL constraint : null 값을 허용하지 않는 컬럼 지정
         Check constraint : 입력 , 수정시 허용하는 컬럼 값을 지정
         Unique constraint : 컬럼값이 테이블안에서 유일
   뷰 (view) 테이블
       실제 테이블에서 데이터를 가져오는 가상의 테이블
   Stored Procedure
       사용자가 정의한 함수
       데이터베이스 안에 저장되는 로직
   Trigger
       테이블에 이벤트 발생시 자동적으로 실행




INFORMIX User                     47
데이터베이스 구조 (3)
   dbschema utility
       데이터베이스의 구조를 파악할 수 있는 유틸리티
       사용법
             dbschema   -d   <DB   이름   >
             dbschema   -d   <DB   이름   > -t <table 이름 >
             dbschema   -d   <DB   이름   > -s <synonym 이름 >
             dbschema   -d   <DB   이름   > -f <procedure 이름 >

           table 이름 , synonym 이름 , procedure 이름 대신 “ all” 을 사용하면 지정한 데이
            터베이스 내의 모든 table, synonym, procedure 에 대한 정보를 출력한다
           옵션뒤에 파일 이름을 명시하면 실행결과가 파일로 저장된다
           -ss 옵션을 추가하면 테이블의 lock mode, extent, space 정보 등을 자세히 출
            력한다 .




INFORMIX User                                   48
SQL 을 이용한 질의 방법
      SQL 질의 작성 방법
      DML 문의 종류
      SELECT
      SELECT 의 예
      SQL 실행 경로 확인
      INSERT, UPDATE, DELETE
      Concurrency Control
      SPL
      SPL 생성 및 실행
      SPL 구문
      Trigger
SQL 질의 작성 방법
   구문 ( 구문 , 테이블이름 , 컬럼이름등 ..) 은 대 소문자 상관 없다 .
   질의의 내용이 아닌 주석의 경우
       줄단위로는 “ --” 를 이용하고
       단락단위로는 “ { }” 를 이용한다 .
   문자를 입력하거나 , 비교할때에는 인용부호가 필요하다 .
   조건의 대상이되는 문자열의 경우 대소문자를 구별한다 .
       “CA” ,”ca”, “Ca” 는 모두 다르다 .
   한 문장은 “ ;” 로 끝난다 .




INFORMIX User                     50
DML 문의 종류
   SELECT
       테이블내의 자료를 가져옴 .
       Row, column 단위
   INSERT
       테이블내에 새로운 자료를 입력
       Row 단위
   UPDATE
       테이블내의 자료를 갱신
       Column 단위
   DELETE
       테이블내의 자료를 삭제
       Row 단위




INFORMIX User              51
SELECT
   문법

      Select 가져올 컬럼 리스트
      From 테이블 이름
      Where 가져올 조건
      Group by 그룹으로 만들 대상 컬럼
      Having 그룹내의 가져올 조건
      Order by 정렬 기준 컬럼
      Into temp 임시테이블의 이름




INFORMIX User                  52
Select 의 예 (1)

         SYNTAX
                            SELECT * FROM customer;
    Select *
    From table_name ;


  S 테이블의 모든 컬럼을 가져온다 .




         SYNTAX
                            SELECT distinct customer_num
    Select distinct 컬럼이름
                              FROM orders
    From table_name ;


    테이블의 특정 컬럼중 유일한 값만을
     가져 온다 .




INFORMIX User              53
Select 의 예 (2)

         SYNTAX
                                     SELECT phone[2,3] FROM
    Select column [ first, last ]      customer;
    From table_name ;
                                     Output :
                                       Phone
    테이블의 특정 컬럼의 first 부터 last 까       08
    지를                                 11
     가져온다 .                            12



         SYNTAX
                                     SELECT substr(phone,2,3)
    Select substr(column,first,n)      FROM customer;
    From table_name ;
                                Output :
                                (expression)
 테이블의 특정 컬럼의 first 부터 n 개의 문자를
                                789
  가져온다 .
                                822
                                328


INFORMIX User                       54
Select 의 예 (3) – where 조건 적
   용
         SYNTAX
                                 SELECT stock_num, manu_code, unit
    Select . . .                   FROM stock
    From . . .                     WHERE unit != ‘case’;
    Where [ 조건 ]
             ] 특정 row 를 가져옴 .     stock 테이블 중 unit 컬럼 값이 case
             join 의 조건            인 것만
                                   가져온다 .




                                 SELECT stock_num, manu_code, unit
                                   FROM stock
                                   WHERE unit != ‘case’;

                                  stock 테이블 중 unit 컬럼 값이 case
                                   가 아닌 것만 가져온다 .




INFORMIX User                   55
Select 의 예 (3-1) – where 조건
     적용
         SYNTAX

     Select . . .                    SELECT * FROM customer
     From . . .                        WHERE customer_num in
     Where 컬럼 in ( 값 , 값 . . . );       (118,114,106);


     테이블의 컬럼이 값들중에 있다면 모두
      가져온다 .




         SYNTAX
     Select . . .                    SELECT * FROM stock
     From . . .                        WHERE unit_price between 20.00 and
     Where 컬럼 between A and B;          30.00;


 .   테이블의 컬럼이 A 와 B 사이인것을 가져온다 .




INFORMIX User                       56
Select 의 예 (3-2) – where 조건
     적용
         SYNTAX

     Select . . .                 SELECT * FROM customer
     From . . .                     WHERE address2 is null;
     Where 컬럼 is null ;

 S   테이블의 컬럼이 null 값인것을 가져온다 .




         SYNTAX
     Select . . .                 SELECT * FROM customer
     From . . .                     WHERE address2 is not null;
     Where 컬럼 is not null ;

 .   테이블의 컬럼이 null 값이 아닌것을 가져온다 .




INFORMIX User                    57
Select 의 예 (3-3) – where 조건
     적용
         SYNTAX

     Select . . .              SELECT * FROM customer
     From . . .                  WHERE phone[1,3] matches
                                  ‘415’;
     Where 컬럼 matches ‘* 값 *’;
                               SELECT * FROM customer
                                 WHERE company matches
 S   테이블의 컬럼에 값을 포함한 것을 가져온다 .    ‘*City*’;




         SYNTAX
     Select . . .                 SELECT customer_num , company
     From . . .                     FROM customer
     Where 컬럼 like ‘% 값 %’;         WHERE company like ‘City%’;


 .   테이블의 컬럼에 값을 포함한 것을 가져온다 .




INFORMIX User                    58
Select 의 예 (4) – 정렬

         SYNTAX

    Select . . .     SELECT stock_num, manu_code
    From . . .         FROM stock
    Order by 컬럼 ;      ORDER BY stock_num;

                      stock 테이블의 row 를 stock_num
                       순서로 가져온다 .




                     SELECT stock_num, manu_code
                       FROM stock
                       ORDER BY stock_num desc;

                      stock 테이블의 row 를 stock_num
                       내림 순서로 가져온다 .




INFORMIX User       59
Select 의 예 (5) – 조건식의 사용

         SYNTAX

    CASE                           SELECT title,
                                             CASE movie_type
    WHEN condition1 THEN result1
                                                 WHEN 1 THEN ‘HORROR’
    WHEN condition2 THEN result2                 WHEN 2 THEN ‘COMEDY’
    . . .                                        WHEN 3 THEN ‘ROMANCE’
    ELSE result n                                WHEN 4 THEN ‘WESTERN’
    END                                          ELSE ‘UNCLASSIFIED’
                                             END,
  S 조건에 따라 다른값을 출력한다 .                       our_cost
                                     FROM movie_titles;




INFORMIX User                       60
Select 의 예 (5-1) – 조건식의 사
   용
         SYNTAX
                                     SELECT fname,
                                               NVL(addr, “Address is missing”)
    NVL(value1, value2)                        as address
                                       FROM employees;
value1 이 null 값이면 value2 를 출력한다 .    Input :
                                      fname address
                                      Peter   3318 Rockdale
                                      Paul    NULL

                                      Output   :
                                      fname    address
                                      Peter      3318 Rockdale
                                      Paul       Address is missing




INFORMIX User                          61
Select 의 예 (5-2) – 조건식의 사
   용
          SYNTAX
                                          SELECT DECODE
   DECODE(value1, value2, value3,                   (city, “Menlo Park”, “local”,
              value4, . . . value n )                “Palo Alto”, “Tall Tree”, city)
                                          city
                                              FROM customer;
 value1 이                              Input :             Output :
         value2 이면 value3 을 return 하고 , city                city
         value4 이면 value5 를 return 하고 , Menlo Park          Local
         아니면 valuen 을 return 한다 .       Santa Clara         Santa Clara
                                        Palo Alto           Tall Tree
                                        San Francisco       San Francisco




INFORMIX User                              62
Select 의 예 (6) – function 의 사
   용
          SYNTAX
                                        UPDATE orders
    today                                  SET order_date = TODAY
    current                                WHERE order_num = 1005;
                                        INSERT INTO orders VALUES
                                           (0, TODAY, 120, NULL, NULL, NULL);
S 오늘 날짜를 return 한다 .
today : 연 , 월 , 일                      CREATE TABLE new_acct (
current : 연 , 월 , 일 , 시 , 분 , 초 , 각       col1 int,
                                           col2 datetime year to day
                                                 default current year to day );
                                        DELETE FROM cust_calls
                                          WHERE res_dtime < CURRENT
                                                      YEAR TO MINUTE;
                                        SELECT * FROM orders
                                          WHERE
                                        DAY(ord_date)<DAY(CURRENT);
                                        SELECT * FROM cust_calls
                                          WHERE call_dtime BETWEEN
                                                   ‘1997-1-1 00:00:00’ AND
                                        CURRENT;



INFORMIX User                          63
Select 의 예 (6-1) – Algebraic

         SYNTAX

                                              SELECT * FROM orders
  ABS ( num_expression )                         WHERE ABS(ship_charge) > 20;
  MOD ( dividend, divisor )                   SELECT
  POW ( base, exponent )                         MOD(today-mdy(1,1,year(today)),30)
  ROOT ( radicand, index ) default index:2       FROM orders;
                                              SELECT * FROM circle
  ROUND ( expr, factor ) default factor:0
                                                 WHERE (3.14 * POW(radius,2)) <
  SQRT ( sqrt_radicand )                      1000;
  TRUNC ( expr, factor ) default factor:0     SELECT ROOT(9) FROM square;
                                              SELECT ROOT(64,3) FROM cube;
                                              SELECT SQRT(9) FROM angles;




INFORMIX User                                64
Select 의 예 (6-2) –
   Log,hex,length
         SYNTAX

    EXP (float_expression)      SELECT EXP(3) FROM angles;
                                SELECT LOGN(population) FROM history
    LOGN (float_expression)
                                  ORDER BY date;
    LOG10 (float_expression)    SELECT LOG10(distance) +1 digits
    HEX (expression)              FROM travel;
    LENGTH(expression)          SELECT tabname, HEX(partnum)
                                  FROM systables;
                                SELECT HeX(order_num + 1)
                                  FROM orders;
                                SELECT LENGTH(fname) +
                                         LENGTH(lname),
                                         LENGTH(‘How many bytes ?’)
                                  FROM customer;




INFORMIX User                  65
Select 의 예 (6-3) – time

         SYNTAX
                                        SELECT * FROM order
  DATE (non_date_expr)                  1. WHERE
  DAY (date/datetime_expr)              order_date<DATE(‘12/31/99’);
  MONTH (date/datetime_expr)            2. WHERE order_date < DATE(365);
  WEEKDAY (date/datetime_expr)          3. WHERE DAY(order_date) >
                                                        DAY (CURRENT);
  YEAR (date/datetime_expr)
                                        SELECT order_num, MONTH(order_date)
  EXTEND (datetime_expr, first to last)     FROM orders;
  MDY (month, day, year)                SELECT * FROM orders
                                            WHERE WEEKDAY(paid_date) =
                                                    WEEKDAY(CURRENT);
                                        SELECT order_num FROM orders
                                            WHERE YEAR(ship_date) <
                                     Date(365) = 12/31/1899+365day = 12/31/1900
                                        YEAR(TODAY);
                                     WEEKDAY 는 일요일을 0 으로 시작하여
                                     각 요일을 나타낸다
                                        0 : Sunday, 1 : Monday, …




INFORMIX User                          66
Select 의 예 (6-4) – time

         SYNTAX
                                              SELECT TO_CHAR(begin_date,
                                                        ‘%A %B %d, %Y %R’) FROM tab1;
    TO_DATE (String [,fmt] )                  UPDATE tab1
    TO_CHAR (String [,fmt] )                  SET begin_date = TO_DATE
                                                   (“Wednesday February 07, 01 14:17”,
                                                    “%A %B %d, %Y %R”);
          The full weekday name as defined
    %A                                          Input :
          in the locale
                                                begin_date
          The full month name as defined        2001-02-07 14:17
    %B
          in the locale
          The day of the month as a decimal     Output :
    %d
          number                                begin_date
                                                Wednesday February 07, 01 14:17
    %Y   The year as a 4-digit decimal number

    %R    The time in 24-hour notation




INFORMIX User                                   67
Select 의 예 (6-5) –
   trigonometric
         SYNTAX

                                      SELECT COS(degrees*180/3.14)
    COS/SIN/TAN (radian_expr)            FROM anglestb1;
    ASIN/ACOS/ ATAN (numeric_expr)    SELECT SIN(radians) FROM anglestb1;
    ATAN2 (y,x)                       SELECT TAN(radians) FROM anglestb1;
                                      SELECT ACOS(-0.73) FROM anglestb1;
                                      SELECT ASIN(-0.73) FROM anglestb1;
                                      SELECT ATAN(-0.73) FROM anglestb1
                                        WHERE angles > ATAN2(4,5);




INFORMIX User                        68
Select 의 예 (6-6) – string

         SYNTAX

 TRIM ( source_expr)                  SELECT TRIM(c1),
                                                TRIM(TRAILING ‘#’ FROM
 TRIM ({ LEADING|TRAILING|BOTH }      c1),
        [trim_expr] FROM source_expr)           TRIM(LEADING FROM c1)
 TRIM ( trim_expr FROM source_expr)      FROM tab;
                                      UPDATE c1 = ‘xyz’ FROM tab
                                        WHERE LENGTH(TRIM(c1))=5;
                                      SELECT c1, TRIM(LEADING ‘#’ FROM
                                          TRIM(TRAILING ‘%’ FROM ‘###abc
                                      %%%’))
                                        FROM tab;




INFORMIX User                        69
Select 의 예 (6-7) – string

         SYNTAX

                                  SELECT REPLACE(‘Mighxzy xzime’,’xz’,’t’)
    REPLACE(string,old [,new] )     FROM mytable;

                                    Output :
 string 의 old 값을 new 로 대체한다 .      (constant)
                                    Mighty time




INFORMIX User                      70
Select 의 예 (6-8) – string

         SYNTAX

                                  SELECT LPAD(‘Here we are’,16,’-_’ )
                                    FROM mytable;
    LPAD(string,length [,pad] )   SELECT RPAD(‘Where are you’,18,’?!’)
    RPAD(string,length [,pad] )     FROM mytable;
                                   Output :
                                   (constant)
                                   -_-_-Here we are
  W 왼쪽이나 오른쪽에 특정 문자를 채워
  Length 만큼의 문자열을 만든다 .
                                   (constant)
                                   Where are you?!?!?




INFORMIX User                      71
Select 의 예 (6-9) – string

         SYNTAX

                                  SELECT city, LOWER(city), UPPER(city),
    UPPER (column or string)                INITCAP(city)
    LOWER(column or string)         FROM weather
    INITCAP (column or string)      WHERE UPPER(city) = “SUNNYVALE”;
                                 Output :
                                 city
  UPPER : 모두 대문자로
                                 sunnyVale
  LOWER : 모두 소문자로
  INITCAP : 처음 문자만 대문자로
                                 city        (constant) (constant)    (constant)
                                 sunnyVale   sunnyvale SUNNYVALE     Sunnyvale




INFORMIX User                      72
Select 의 예 (6-10) – aggregate

         SYNTAX

                                  SELECT count(*) FROM stock;
  COUNT(*)                        SELECT sum(total_price) FROM stock;
  AVG ( [DISTINCT|UNIQUE] column) SELECT city,state,count(*)
  MAX ( [DISTINCT|UNIQUE] column)   FROM customer
  MIN ( [DISTINCT|UNIQUE] column)   GROUP BY city,state;
  SUM ( [DISTINCT|UNIQUE] column) SELECT order_num,sum(total_price)
                                    FROM items
  COUNT([DISTINCT|UNIQUE] column) GROUP BY order_num;
  RANGE (expr)
  STDEV (expr)
  VARIANCE (expr)




INFORMIX User                        73
Select 의 예 (7) – group by,having

         SYNTAX

                          SELECT order_num,sum(total_price)
    SELECT . . .          FROM items
    FROM . . .            GROUP BY order_num
    GROUP BY 컬럼           HAVING COUNT(*) > 2;
    HAVING 조건 ;


 H 기준 컬럼에 의해 만들어진 group 안에서
   조건을 만족하는 그룹의 결과만을 가져온다 .




INFORMIX User                 74
Select 의 예 (8) – HINT 의 사용
   Optimizer Directive (HINT) 란 ?
       SQL 을 어떠한 방식으로 실행할 것인가를 결정하는 optimizer 에게 주는 지
        시자 .
       Index 의 사용 , join 방법 등을 지정할 수 있다 .


   문법
       그 줄의 끝까지가 DIRECTIVE 일때
          “--+” 로 시작
       여러 줄 혹은 그 줄의 일부가 DIRECTIVE 일때
         {+ } 로 묶음




INFORMIX User                        75
Select 의 예 (8-1) – access
   method
         SYNTAX
                                   SELECT --+ INDEX(e salary_indx)
    --+ INDEX                               name, salary
    ( {table|view|synonym|alias}     FROM emp e
       index[,index] )               WHERE e.dno = 1 AND e.salary > 50000;

  W 특정 테이블에 대해 인덱스를 사용하여
    질의하도록 함 .



         SYNTAX
                                   SELECT --+ AVOID_INDEX(e salary_indx)
    --+ AVOID_INDEX                         name, salary
    ( {table|view|synonym|alias}     FROM emp e
       index[,index] )               WHERE e.dno = 1 AND e.salary > 50000;


  S 특정 테이블에 대해 인덱스를 사용하지 않도록
    질의하도록 함 .



INFORMIX User                       76
Select 의 예 (8-2) – access
   method
         SYNTAX

                                     SELECT {+ FULL(e) } name, salary
    --+ FULL                           FROM emp e
    ( {table|view|synonym|alias} )     WHERE e.dno = 1 AND e.salary > 50000;


 W 특정 테이블에 대해 full scan 하여
   질의하도록 함 .



         SYNTAX

                                     SELECT {+ AVOID_FULL(e),
    --+ AVOID_FULL                             INDEX(e salary_indx) }
    ( {table|view|synonym|alias} )             name, salary
                                       FROM emp e
                                       WHERE e.dno = 1AND e.salary > 50000;
  S 특정 테이블에 대해 full scan 하지 말고
    질의하도록 함 .




INFORMIX User                         77
Select 의 예 (8-3) – Join Order

         SYNTAX

                                  SELECT --+ ORDERED
    --+ ORDERED
                                         name, title, dept
                                    FROM dept, job, emp
                                    WHERE title = “clerk”
 Join 의 대상 테이블에 대한 Join 의 순서를
                                    AND emp.dno = dept.dno
  from 절 다음의 테이블 순서대로 하도록 한다 .
                                    AND emp.job = job.job;




INFORMIX User                    78
Select 의 예 (8-4) – Join Method

         SYNTAX                            SYNTAX


    --+ USE_NL                        --+ AVOID_NL
    ( {table|view|synonym|alias} )    ( {table|view|synonym|alias} )

    Join 에 있어서 Nested Loop Join 방 Join 에 있어서 Nested Loop Join 을 사용하지
    법을                               않는다 .
      사용한다 .



         SYNTAX                            SYNTAX

    --+ USE_HASH                      --+ AVOID_HASH
    ( {table|view|synonym|alias}      ( {table|view|synonym|alias}
      [/BUILD|/PROBE] )                 [/BUILD|/PROBE] )

 Join 에 있어서 HASH Join 방법을 사용한다  Join 에 있어서 HASH Join 방법을 사용하지
                                .
                                   않는다 .




INFORMIX User                        79
Select 의 예 (8-2) – Optimization
   Goal
         SYNTAX
                                    SELECT --+ FIRST_ROWS
    --+ FIRST_ROWS                           name, age
    --+ ALL_ROWS (default)            FROM employee e, department d
                                      WHERE e.dept_no = d.dept_no;

    Query Optimizer 가 질의를 최적화 할때   SET OPTIMIZATION FIRST_ROWS;
    에,                              SELECT ……
      그 목적을 처음 몇개의 row 를 빨리 가
    져올 수                            OPT_GOAL. 파라매터를 사용하여 최적화 방법을
      있도록 최적화 하거나 , 전체 row 를 빨      결정할 수 있다
    리                               OPT_GOAL = -1 : ALL_ROWS
      가져올 수 있도록 최적화 할 것인가를          OPT_GOAL = 0 : FIRST_ROWS
      지정할 수 있다 .

    . 이 방법은 질의의 대상이 전체가 아닌
       일부분의 데이터 만을 가져오는 “ first
    n” 과
       함께 사용될때 가장 좋은 성능을 낼 수
    있다 ,




INFORMIX User                        80
Select 의 예 (8-2) – First N

         SYNTAX

                                 SELECT FIRST 10 name, salary
    SELECT FIRST n                 FROM emp
                                   ORDER BY salary DESC;

 O 질의의 결과중 처음 n 개의 row 를 가져옴 .




INFORMIX User                    81
SQL 실행 경로 확인
   SQL 구문이 optimizing 된 결과를 볼 수 있다 .
       Set explain on;
       확인하고자 하는 구문들 . . .
       Set explain off;
   UNIX 의 경우 현재 이 구문을 실행한 application 이 실행된 디렉토리
    밑에 “ sqexplain.out” 이라는 file 에 기록된다 .
   NT 의 경우 $INFORMIXDIR/sqexpln 디렉토리 안에 현재 구문을 실행
    한 “ user 이름 .out” 이라는 file 에 기록된다 .
     예>
                QUERY:
                ------
                select * from customer

                Estimated Cost: 1
                Estimated # of Rows Returned: 28
                 1) anchoi.customer: SEQUENTIAL SCAN




INFORMIX User                                82
INSERT,UPDATE,DELETE
   문법
       Insert into 테이블 ( 컬럼이름들 ) values( 값들 );
           테이블에 값들을 입력


       Update 테이블 set 컬럼 ( 들 ) = 값 where 조건 ;
           테이블중 조건에 만족하는 row 의 컬럼을 값으로 갱신


       Delete   테이블 Where 조건 ;
           테이블에 조건을 만족하는 row 를 삭제




INFORMIX User                      83
Concurrency Control
   DB 는 다수의 사용자에 의해 공유됨 .
   Read Concurrency - SELECT
       4 가지의 isolation level 로 적용 .
             Dirty Read
             Committed Read
             Cursor Stability
             Repeatable Read
   Update Concurrency - INSERT, DELETE, UPDATE
       Lock 의 크기로 적용
           Type of Locking
                 Exclusive
                 Shared
                 Update
           Levels of locking
                 Database, Table, Page, Row, Key




INFORMIX User                                  84
Concurrency Control - READ

  Dirty Read                            Committed Read
                     server process                              server process

                                                          Can lock be
                                                           acquired?


 기존의 lock 을 check 하지 않고 ,             자신이 lock 을 걸수 있는지 check 하고 읽어내림 .
 Data 를 읽어내림 .                        그러나 자신은 lock 을 걸지 않음 .
 이때에 자신도 lock 을 걸지 않고 읽음 .

  Cursor Stability                      Repeatable Read
                     server process                              server process

                      Shared lock                            Locks put on
                     placed on row                        all rows examined


 Cursor 가 현재 fetch 하고 있는 row 에 대해 자신의 process 가 질의에서 참조하고 있는
 Lock 을 걸고 , 다음 row 를 fetch 할때에   모든 row 에 대해 lock 을 걸고 작업함 .
 Lock 을 해제함 .



INFORMIX User                           85
Concurrency Control - READ
   Isolation level 의 적용
       DB 의 형태 별 default 가 존재 한다 .
             NO Logging DB : Dirty Read
             Logging DB : Committed Read
             ANSI DB : Repeatable Read
       따라서 default 이외로 변경시에는 다음의 구문으로 적용하여야 한다 .
       해당 세션에만 적용된다 .
   구문
      Set   Isolation   To   Dirty Read;
      Set   Isolation   To   Committed Read;
      Set   Isolation   To   Cursor Stability;
      Set   Isolation   To   Repeatable Read;




INFORMIX User                                86
Concurrency Control - UPDATE

  Database Level Locking               Table Level Locking
     database stores exclusive;             lock table customer in share mode;

                      stores                              customer




   다른 사용자는 데이터                                               select    select
   베이스에 접근할 수 없다
                                      update
                                      delete
                                      insert

                                                                       set isolation
                                                                       to dirty read
                                                          customer




                                  lock table customer in exclusive mode;


INFORMIX User                          87
Concurrency Control - Lock
   Mode
   다른 사용자에 의해 lock 이 걸려 있는 자료에 접근할때에는 default 로
    기다리지 않고 error 를 return.
      Set Lock Mode to Wait ;
      Set Lock Mode to Not Wait ;
      Set Lock Mode to Wait 20 ;




                                         set lock mode to wait 20
                                           lock 이 해제될때까지 20 초 동안 기다림




                                             set lock mode to not wait
      set lock mode to wait
                                                lock 이 해제될때까지 기다리지
        lock 이 해제될때까지                           않고 즉시 에러를 리턴함
        무한정 기다림




INFORMIX User                       88
Concurrency Control -
   Page/Row
   테이블 생성 시 default lock mode 는 page 단위
      create table row_lock_table (
         id        char(20),
         name      char(20)
      ) lock mode row;
      alter table page_lock_table lock mode (page);
                                               page
                                      modify



                                                      access

                                               page
                                      modify




INFORMIX User                        89
SPL
   Stored Procedure Language
   Stored procedure 를 작성하는 데 사용됨 .
   Stored procedure
       DB 내에 저장된 SQL 문들과 , SPL 로 작성된 구문의 묶음 .
   주로 business logic 을 DB 에 저장하는 용도로 사용됨 .
   SQL 문은 미리 parsing 되고 optimize 된 상태로 해당 DB 의 시스템
    카타로그 테이블 (sysprocedures, sysprocbody, sysprocplan,
    sysprocauth) 에 저장됨 .




INFORMIX User                 90
SPL - 간단한 예제
   작성
         Stored procedure 의 이름   매개 변수의 이름   매개 변수의 type


     create procedure test_proc(name varchar(10))
         insert into test_tab values(name);
     end procedure;

   실행         매개 변수로 넘어 온 값을 test_tab 이라는    table 에 insert 하라는 구문

    execute procedure test_proc(“anna”);




INFORMIX User                        91
SPL - 코드 내용 보기
   DBSCHEMA utility
      dbschema -d <dbname> -f <procedure 이름 >   sql.sql
      dbschema -d <dbname> -f all   spl.sql

   System Catalog Table
      select data
       from sysprocedures d, sysprocbody b
       where datakey = “T”
         and d.procname = “procedure 이름”
         and d.procid = b.procid




INFORMIX User                       92
SPL 생성 및 실행 - 기본구조
   기본구조

   Stored procedure 의 이름       매개변수                   문장 블럭 (statement block)

      create procedure raise_prices (per_cent int)
         update stock -- increase by percentage
             set unit_price = unit_price + (unit_price * (per_cent / 100 ) );
      end procedure
                                      주석 (comment)
      document
         “usage : execute procedure raise_prices (xxx) “,
         “xxx = percentage from 1 – 100 “
                                              document 절은 생략 가능
         with listing in “warn_file”;
                                              컴파일 warning 저장


      execute procedure raise_prices (5);
      execute procedure db@servername:raise_prices(5)




INFORMIX User                            93
SPL 생성 및 실행 - 매개변수와 리
   턴값
      create procedure delete_order (p_order_num int default null )
         returning int, int;
                                                                    default 값
         define item_count int;
         select count(*) into item_count from items
                                                                     매개변수
           where order_num=p_order_num;
         delete from items where order_num = p_order_num;
         delete from orders where order_num = p_order_num;두 개의 정수 반환 예정
         returning p_order_num, item_count;
      end procedure;                                       두 개의 정수 변수 반환

   DBACCESS
      execute procedure delete_order (1001) ;
   ESQL/C
      EXEC SQL execute procedure delete_order(:p_order_num)
        into :p_order_num, :p_item_count;




INFORMIX User                         94
SPL 생성 및 실행 - 커서사용
   SPL                                         ESQL/C
                                              EXEC SQL declare geti cursor for
      create procedure get_items()               execute procedure get_items();
         returning integer, char(3), integer; EXEC SQL open geti
                                              while(1) {
         define p_stock_no integer;              EXEC SQL fetch geti
         define p_manu_code char(3);             into :p_num, :p_code, :p_qty;
         define p_quantity integer;              if (sqlca.sqlcode == 100)
                                              break;
         foreach                              }
           select stock_num, manu_code, quantity SQL close geti;
                                              EXEC
          into p_stock_no, p_manu_code, p_quantity
          from items
          return p_stock_no, p_manu_code, p_quantity with resume;
        end foreach;
      end procedure;

                                             커서 사용


                                       foreach 문안에서 계속 리턴값을 반환하도록 한다


INFORMIX User                           95
SPL 생성 및 실행 - 호출 / 제거
   SQL 문에서 호출
      select * from orders where order_num = get_biggest_order(114);
      insert into old_orders execute procedure get_orders(114);
   SPL 에서 호출
      create procedure give_disconnect (p_customer_num integer)
         define p_order_num integer;
         call get_biggest_order (p_customer_num ) returning p_order_num;
         :
      end procedure
   SPL 제거
      drop procedure get_biggest_order;




INFORMIX User                         96
SPL 구문 - 변수
   SPL 내부에서 변수 선언
         define   p_order_date date;                    유효한 데이터베이스 자료형
         define   p_customer_num like orders.customer_num;
         define   global global_bar integer default 1;
         define   blob_var references text;            명시한 테이블 컬럼의 자료형


                       세션 안에서 전역값을 가진다             BLOB 자료형
   변수값 할당
         let   c = 10; let d = 5;
         let   p_order_date = today;
         let   a,b = 10,c+d;
         let   a,b = (select col_a, col_b from tab1 where col_c=10);
         let   a = proc_name();
         let   a = c || d;




INFORMIX User                              97
SPL 구문 - 조건식
   구문
      IF 조건식 THEN 문장 1
      ELIF 조건식 THEN 문장 2
      ELSE 문장 3
      END IF
   조건식의 예
      if exists (select order_num from orders where order_num = 1023) then
          :
      end if
      if p_total_price > all
         (select total_price from items where order_num = 1023) then
          :
      end if
      if p_customer_name matches “A*” then
          :
      end if



INFORMIX User                          98
SPL 구문 - 루프
   FOREACH
      foreach select ship_charge into p_ship_charge from orders
          :
      end foreach;
   WHILE                                               ※ 루프 제어
                                                        for i = 1 to 10
      while i < nbr_rows                                   if i = 5 then
        insert into test_tab values ( i );                      continue for;
                                                           elif i = 8 then
        let i = i + 1;
                                                                exit for;
      end while                                            end if
   FOR                                                 end for;

      for i = 1 to 10 step 2
          :
      end for
      for i in (1,5,10,15) … end for
      for i in (1 to 20 step 5, 20 to 1 step –5, 1,2,3,4,5) … end for




INFORMIX User                                99
SPL 구문 – dbinfo 사용
   serial 값 반환
      define ser int;
      insert into orders (order_num, order_date, customer_num)
        values (0, “04/01/99”, 102);
      let ser = dbinfo(“sqlca.sqlerrd1”);

   처리된 행의 수 반환
      define num_rows int;
      delete from orders where customer_num = 104;
      let num_rows = dbinfo(“sqlca.sqlerrd2”);




INFORMIX User                         100
SPL 구문 - 기타
   업데이트 커서
        define p_ship_date date;
                                               업데이트 커서의 이름을 명시해야 한다
        begin work;
        foreach cur1 for
          select ship_date into p_ship_date from orders
             where order_date < today - 100
          if p_ship_date is not null then               현재 커서가 오픈하고 있는 행
              delete from orders where current of cur1;
          end if
        end foreach;
        commit work;            업데이트 된 행의 lock 해제

   OS 명령어 호출
        system “echo ““Delete Operation Completed”” | mail judy” ;
        system “mail –s violation ” || usr1 || “ ” || usr2 || “< vio.file”;




INFORMIX User                             101
Trigger
   트리거 (Trigger) 는 어떠한 이벤트가 발생했을때 자동적으로 SQL 문을
    실행하도록 하는 데이터베이스 메커니즘
   트리거 이벤트 (event) 는 특정 테이블에 대해 INSERT, UPDATE,
    DELETE 와 같은 SQL 문
   트리거 액션 (action) 은 INSERT, UPDATE, DELETE 및 EXECUTE
    PROCEDURE 문


            Create                        Trigger
            Trigger                        name
                           Trigger


                Trigger                 Trigger
                 event                  action
                          correlation
                            name

INFORMIX User                  102
Trigger - Event / Action
   트리거 이벤트 (event)
         INSERT ON 테이블이름
         DELETE ON 테이블이름
                                                           event
         UPDATE ON 테이블이름                          update orders
         UPDATE OF 컬럼이름 ON 테이블이름                  set ship_instruct =
                                                   “express”
   트리거 액션 (action)                                where customer_num =
       BEFORE ( SQL 문 )                           106;
       FOR EACH ROW ( SQL 문 )
       AFTER ( SQL 문 )                          106
   예제                                           106
      create trigger test1 update on orders           action
         before (execute procedure check_permission()) execute
                                                       check_permission
         for each row (execute procedure log_chg())    update 1 row
         after (execute procedure log_total());        execute log_chg
                                                       update 1 row
                                                       execute log_chg
                                                       execute log_total


INFORMIX User                          103
Trigger - referencing
   트리거 동작 전 , 후의 값을 구분하기 위하여 correlation name 을 부여
   NEW, OLD 는 키워드로 DELETE 이벤트에서는 NEW 가 사용 될 수 없
    고 , INSERT 이벤트에서는 OLD 가 사용 될 수 없다 .
   예제
      create trigger items_upd update of total_price on items
         referencing new as post old as pre
         for each row
           (update orders
               set order_price = order_price +
                                  post.total_price = pre.total_price
             where order_num = post.order_num );




INFORMIX User                           104
Trigger - when
   트리거 이벤트가 발생되었을때 WHEN 절에 조건이 만족하는지 먼저 검
    사한 후 조건이 맞을 때에 트리거 액션이 동작한다 .
   예제
      create trigger ins_cust_calls insert on cust_calls
         referencing new as post
         for each row when (post.call_code = “B”)
           ( insert into warn_billing values (post.customer_num) );




INFORMIX User                           105
DB admin 작업
       DB admin 작업이란
       DB 의 생성
       Table 의 생성
       Table 의 분할
       보안의 설정
       데이터 무결성 보장
       인덱스의 생성
       질의 수행을 최적화 해주기 위한 작업
       Data Migration
DB admin 작업이란
   DB admin 작업이란 ?
         DB 와 관련된 사항을 결정하고 , 변경하는 작업
         DB 나 table 을 생성하는 작업
         보안을 적용하는 작업
         데이터의 무결성을 보장하는 작업
         동시 사용자에 관한 제어
         인덱스와 관련된 작업
         질의 수행을 최적화해 주는 작업
         Data migration




INFORMIX User                107
DB 의 생성
   DB 의 생성시 다음의 사항을 고려해야 한다 .
       DB 를 물리적으로 어느 위치에 둘 것인가
           DB 가 위치할 dbspace 를 지정함 .
       DB 는 어떤 형태로 만들것인가
           DB 에 대한 logging 작업을 할 것인가를 결정

          create database <DB 이름 >
            in <DB 를 저장할 dbspace 이름 > default: rootdbs
            with <DB 의 logging 모드 >;  default : no logging
       예>
          create   database   test_db   in dbspace1 with log;
          create   database   test_db   with log;
          create   database   test_db   in dbspace1 ;
          create   database   test_db   in dbspace1 with buffered log;




INFORMIX User                                   108
Table 의 생성
   Table 생성시 다음의 사항을 고려해야 한다 .
         컬럼에는 어떤 자료형을 사용할 것인가
         테이블에 대해 분할 할 것인가
         테이블의 위치
         얼마만큼의 디스크 공간을 할당할 것인가
         테이블에 대한 lock 모드

          create table < 테이블이름 >( 컬럼이름 컬럼자료형 )
            in <dbspace 이름 > or < 분할 방법및 위치 >
            extent size < 초기에 할당할 영역 크기 K 단위 : default 는 8page>
            next size < 증가분에 할당할 영역 크기 K 단위 : default 는 8page>
            lock mode <row or page : default 는 page>;




INFORMIX User                        109
Table 의 분할
     한 테이블의 데이터를 여러 dbspace 에 분할한다
     병렬적으로 데이터를 입출력 할 수 있다
     입출력의 부하를 균등하게 조절할 수 있다
     데이터의 가용성을 향상 시킨다
     다양한 기준으로 데이터를 분할할 수 있다

                                            입출력 부하 분산



                  fragment1   scan thread

        table




                                                        병렬 스
                  fragment2   scan thread




                                                           캔
                  fragment3   scan thread



INFORMIX User                  110
Table 의 분할 - round robin
                create table roundtable (
                          col_1 serial,
                          col_2 char(20),
                          :
                )
                fragment by round robin in dbspace1, dbspace2, dbspace3
                extent size 10000 next size 3000 ;



insert   into   roundtable(col_1,   col_2)   values   (0,   ‘aabb’);
insert   into   roundtable(col_1,   col_2)   values   (0,   ‘aabb’);
insert   into   roundtable(col_1,   col_2)   values   (0,   ‘aabb’);
insert   into   roundtable(col_1,   col_2)   values   (0,   ‘aabb’);
insert   into   roundtable(col_1,   col_2)   values   (0,   ‘aabb’);
insert   into   roundtable(col_1,   col_2)   values   (0,   ‘aabb’);




                                                            dbspace1   dbspace2   dbspace3


INFORMIX User                                          111
Table 의 분할 - Expression
           create table exprtable (
                    col_1 serial,
                    col_2 char(20),
                    :
           )
           fragment by expression
                    col_1 <= 100 and col_1 >= 1 in dbspace1,
                    col_1 <= 200 and col_1 > 100 in dbspace2,
                    remainder in dbspace3 ;




 insert into exprtable(col_1) values (50);
 insert into exprtable(col_1) values (700);
 insert into exprtable(col_1) values (120);




                                                dbspace1   dbspace2   dbspace3


INFORMIX User                                 112
Table 의 분할 - hash
           create table exprtable (
                    col_1 serial,
                    col_2 char(20),
                    :
           )
           fragment by expression
                    mod (col_1, 3) = 0 in dbspace1,
                    mod (col_1, 3) = 1 in dbspace2,
                    mod (col_1, 3) = 2 in dbspace3 ;




 insert into exprtable(col_1) values (17);
 insert into exprtable(col_1) values (34);
 insert into exprtable(col_1) values (66);




                                               dbspace1   dbspace2   dbspace3


INFORMIX User                                113
Table 의 분할 - guidelines
     가급적 remainder 절을 쓰지 않도록 expression 을 만든다
     여러 디스크에 I/O 를 분산할 수 있도록 고려한다
     expression 은 가능한한 단순한 형태여야 한다
     expression 에서 가장 제한적인 조건이 먼저 나올 수 있도록 한다
     데이터의 변환이 필요한 expression 은 피한다
     데이터 로드 및 전체 조회가 주된 목적이라면 round robin 을 사용한다
     인덱스 또한 fragment 구문에 의해 분할 될 수 있지만 , 가급적 별도의
      dbspace 에 fragment 되지 않은 형태 (detached index) 로 생성한다
          create index idx_roundtable on roundtable(col_1) in dbspace4;
   테이블 분할에 의한 이득이 그다지 많지 않다면 분할하지 않는다




INFORMIX User                             114
보안의 설정
   보안의 적용 방법
       권한 제한
       View 의 사용
       Role 의 사용


   권한의 종류
       DB level : DBA,RESOURCE,CONNECT
       Table,Column level : SELECT,INSERT,UPDATE,DELETE,ALTER…




INFORMIX User                      115
보안의 설정 - 권한 제한
   권한 설정 방법
       GRANT 권한이름 <on 테이블이름 ( 컬럼이름 )> to user 이름 ;
       REVOKE 권한이름 <on 테이블이름 > from user 이름 ;
       Table 의 경우 일단 모든 권한을 뺏고 하나하나 설정한다 .


   예
          GRANT DBA to user1;
          GRANT CONNECT to user2;
          REVOKE ALL ON tab1 from PUBLIC;
          GRANT SELECT ON tab1 to user2;
          GRANT DELETE,UPDATE,INSERT on tab1 to user1;
          GRANT SELECT(col1,col2) on tab2 to user2;




INFORMIX User                          116
보안의 설정 - view 의 사용
   View 는 테이블의 일부 혹은 계산된 값등에 설정될 수 있다 .
   예
          create view cust_seoul as
          select * from customer where city=‘ 서울’ ;

          create view big_order_won as
          select total_price*1200 from orders where total_price > 10000;

          create view detail_info_cust as
          select company, order_num,total_price
              from customer,orders
              where customer.customer_num=orders.customer_num;




INFORMIX User                             117
보안의 설정 - role 의 사용
   Role 이란 , 사용자의 그룹 권한의 제한이 , 개인별로가 아닌 그룹별로
    해야할 필요가 있을때에 쓰임 .
   개인은 개인의 권한으로의 작업도 가능하고 , role 의 일원으로서의 작업
    도 가능하다
   예
          Create role marketing;
          Create role sales;
          Grant marketing to user1,user2;
          Grant sales to user3,user4;


   만일 user1 이 marketing role 로서 작업하려면 다음 구문을 실행해야
    함.
          Set role marketing;




INFORMIX User                               118
데이터 무결성의 보장 (1)
   데이터값에 대한 속성을 제한자 (constraint) 를 통해 적용 .
   종류
         Primary Key
         Foreign key
         CHECK
         UNIQUE
         NOT NULL




INFORMIX User             119
데이터 무결성의 보장 (2)
   Constraint 의 이름은 자동적으로 부여 될 수 있지만 , 직접 명시할 수도
    있다
          CREATE TABLE orders (
            order_num integer UNIQUE CONSTRAINT order_num_uq,
            order_date date NOT NULL CONSTRAINT order_num_nn DEFAULT TODAY);
          ALTER TABLE orders
            MODIFY order_num integer NOT NULL CONSTRAINT order_num_nn;
   Constraint 는 컬럼 단위 또는 테이블 단위로 정의할 수 있는데 , 다른
    컬럼에 대한 정의가 포함될 경우는 테이블 단위로 정의해야만 한다
          -- 테이블 단위
          ALTER TABLE items ADD CONSTRAINT CHECK (quantity >= 1);
          -- 컬럼 단위
          ALTER TABLE items MODIFY quantity smallint CHECK (quantity >= 1);
          -- 컬럼 단위는 다른 컬럼을 사용할 수 없다 .
          ALTER TABLE orders MODIFY paid_date date CHECK (paid_date >
            ship_date);
          #
          #676: Invalid check constraint column.



INFORMIX User                            120
데이터 무결성의 보장 (3)
   Referential Constraint 의 종류
       Cyclic referential constraints
                                          parent   child

       Self referential constraints      parent

       Multiple path constraints
                                          parent   child

                                                   child


   Primary / Foreign Key 규칙
       Primary key 는 자동적으로 unique index 역할을 하게 된다
       Foreign key 컬럼값은 Primary key 에 값이 있어야 입력 , 수정 할 수 있다
       Foreign Key 값이 있는 상태에서 Primary Key 값을 삭제 , 수정 할 수 없다




INFORMIX User                            121
데이터 무결성의 보장 (4)
   Cyclic referential constraints
          create table customer (
                                                       customer         orders
            customer_num serial,
                                                        customer_num      order_num
            fname char(20),
                                                            fname       customer_num
            primary key (customer_num) constraint pk_cnum );
          create table orders (
            order_num serial,
            customer_num integer,
            foreign key (customer_num) references customer constraint fk_cnum);
   Self referential constrains
                                                      emp
          create table emp (
                                                          enum
            enum serial,
                                                          mnum
            mnum integer,
            primary key (enum) constraint pk_enum,
            foreign key (mnum) references emp(enum) constraint fk_enum) ;




INFORMIX User                             122
데이터 무결성의 보장 (5)
   Multiple path referential constraints
          create table stock (
                                                                 stock
            stock_num smallint,
                                                                   stock_num
            manu_code char(3),
                                                                  manu_code
            primary key (stock_num, manu_code) constraint pk_stock);
          create table items (                          items             catalog
            item_num smallint,                             item_num        catalog_num
            stock_num smallint,                           stock_num         stock_num
            manu_code char(3),                            manu_code        manu_code
            foreign key (stock_num, manu_code) references stock constraints
            fk1_stock);
          create table catalog (
            catalog_num serial,
            stock_num smallint,
            manu_code char(3),
            foreign key (stock_num, manu_code) references stock constraints
            fk2_stock);




INFORMIX User                               123
인덱스의 생성
   테이블에 대해 빠른 접근을 위해 사용
   OLTP 업무의 경우 인덱스의 생성은 매우 중요함 .
   다음에 해당되는 컬럼에 생성하는 것이 좋음 .
       조인의 대상이 되는 컬럼
       조건 비교의 대상이 되는 컬럼
       정렬의 기준이 되는 컬럼


      Create index < 인덱스이름 > on 테이블이름 ( 컬럼이름 )
              In < 인덱스를 저장할 위치 >;


   예
          create unique index idx_cust on customer(customer_num) in dbspace1;
          create index idx_stock on stock (stock_num, manu_code) ;




INFORMIX User                            124
질의 수행을 최적화 해주기 위한 작
   업
   서버로 전달된 모든 질의는 다음의 과정을 거침



          Parsing       Optimizing       Executing

    유효성 , 문법 등을 체크    최적화된 질의 수행의           실행
                        경로를 결정

   질의 수행 경로를 결정하는데 참조하는 데이터는 system catalog 의 정
    보를 기반으로 함 .
   질의 수행 경로를 결정하는 데 영향을 미치는 요인
       인덱스 유무 , 데이터의 양 , 데이터 분포도 등 ..
   따라서 , 현재상황의 데이터에 관한 정확한 정보를 제공하여야 , 최적의
    질의를 수행할 수 있음 .




INFORMIX User                125
질의 수행을 최적화 해주기 위한 작
   업
   Update statistics
       System catalog 의 데이터 관련 통계자료를 갱신
       데이터에 대한 분포도를 만들어줌 .
   Mode 의 종류
       Low
           system catalog 의 통계정보만 갱신
       Medium
           통계정보 갱신과 함께 , 데이터 분포도를 만듬 . 이때 , 표본 추출에 의해 분포도를
            만듬 .
       High
           medium 과 같으나 , 표본추출이 아닌 전체 데이터를 가지고 분포도를 만듬 .




INFORMIX User                      126
질의 수행을 최적화 해주기 위한 작
   업
   언제 수행하여야 하나 ?
       대량의 데이터 변경시에는 반드시 해주어야 한다 .
            Bulk Data loading 후 , bulk update 등 ..
       시스템 유휴 시간대에 정기적으로 해주어도 좋다 .


   구문
         Update   statistics   [low|medium|high]     ;
         Update   statistics   [low|medium|high]     for table;
         Update   statistics   [low|medium|high]     for table 테이블이름 ;
         Update   statistics   [low|medium|high]     for table 테이블이름 ( 컬럼이름 );




INFORMIX User                              127
Data Migration
   DB 혹은 table 을 file 로 내릴 필요가 있을때 사용 .
   Data Backup 의 하나의 방법으로도 사용 가능
   서로 다른 기종의 machine 에 있는 서버로 데이터를 옮기고자 할때 유
    용.
   Data 를 기존의 table 에 append 할때에 유용 .
   사용 용도나 , 제공되는 기능에 따라 다양한 tool, 구문을 제공 .




INFORMIX User          128
Data Migration - Unloading
   종류
       UNLOAD 구문
           SQL 구문이므로 사용하기 쉽고 , 원하는 조건에 따라 내려 받을 수 있다 .
                 UNLOAD to ‘ 파일이름’ select * from customer;
       ONUNLOAD
           DB 담위 , table 단위 가능
           Binary 형태로 받음 .
                 onunload –t /dev/rmt0 DB 이름
       DBEXPORT
           DB 단위의 작업 지원 : DB 단위작업에 가장 많이 사용
           Ascii 형태로 받음 .
                 dbexport DB 이름
       ONPLOAD
           HPL(High Performance Loader) 을 구성하는 process
           많은 양의 데이터에 대해 가장 좋은 성능을 냄 .




INFORMIX User                                   129
Data Migration - Loading
   종류
       LOAD 구문
           SQL 구문이므로 사용하기 쉽고 , 원하는 조건에 따라 내려 받을 수 있다 .
                 LOAD from ‘ 파일이름’ insert into customer;
       ONLOAD
           DB 담위 , table 단위 가능
           Binary 형태로 받음 .
                 onload –t /dev/rmt0 DB 이름
       DBIMPORT
           DB 단위의 작업 지원 : DB 단위작업에 가장 많이 사용
           Ascii 형태로 받음 .
                 dbimport DB 이름
       ONPLOAD
           HPL(High Performance Loader) 을 구성하는 process
           많은 양의 데이터에 대해 가장 좋은 성능을 냄 .




INFORMIX User                                 130
ESQL/C 를 이용한 프로그래밍
      ESQL/C 란
      ESQL/C 의 사용
      ESQL/C 프로그램 작성 규칙
      ESQL/C 프로그램 compile
      ESQL/C 프로그램 작성 예제
      호스트변수 (Host Variables)
      데이터베이스 연결
      SQLCA 구조체
      EXCEPTION 테스트
      GET DIAGNOSTICS 사용
      prepare 를 사용한 단순 DML 처리
      Indicator 사용
      커서 (Cursors)
ESQL/C 란
   C 프로그램 내에 sql 구문을 바로 넣어 그 실행 결과를 프로그램에서
    다양하게 사용할 수 있도록 제공되는 어플리케이션 개발 tool
   ESQL/C 의 주된 component 는 preprocessor 로서 ESQL/C code
    를 C code 로 변환하여 C compiler 에게 넘겨준다 .




INFORMIX User               132
ESQL/C 의 사용
   다음의 환경변수를 설정해야 한다 .
       INFORMIXDIR
           ESQL/C 설치 디렉토리
       PATH
           ESQL/C 실행 파일의 위치를 추가
       LD_LIBRARY_PATH
           Library 의 위치
       INFORMIXC
           CC 컴파일러 외의 다른 컴파일러를 사용하고자 할 때


   예
      export    INFORMIXDIR=/usr/informix
      export    PATH=$PATH:$INFORMIXDIR/bin
      export    LD_LIBRARY_PATH=$INFORMIXDIR/lib:$INFORMIXDIR/lib/esql
      export    INFORMIXC=gcc




INFORMIX User                          133
ESQL/C 프로그램 작성 규칙
   ESQL/C preprocessor 가 다른 C code 와 구별할 수 있게 하기 위해
    SQL 은 “ $” 혹은 “ exec sql” 으로 시작
   SQL 구문의 끝에는 “ ;” 를 붙임 .
   SQL 구문 안의 변수 (host 변수라 부름 ) 는 변수 이름 앞에 “ :” 를 붙
    임.
   주석은 표준 C 의 주석인 “ /* */” 사용




INFORMIX User              134
ESQL/C 프로그램 compile (1)
   Esql 의 option 은 다양하므로 각 경우에 따라 다양하게 사용
       esql [-e] [preprocessor 옵션 ] [cc 매개변수 ] [-o 실행파일 ] 소스 .ec
        [ 링크옵션 ]
   예>
       ESQL/C 로 작성된 customer.ec file 을 customer 라는 이름의 실행파일로
        만들고자 한다면
          esql -o customer customer.ec
         customer.ec     customer. c          customer. o              customer


                esql preprocess        c compile        -shared 옵션이 default 값

                                              standard library     esql/c library

                                                         -static 옵션
          esql customer.ec file.c -l mylib -o customer -static
         customer.ec      customer. c        customer. o            customer


                esql preprocess        c compile

                              file.c               file. o          mylib



INFORMIX User                               135
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide

Mais conteúdo relacionado

Semelhante a Informix user guide

데이터의 이해
데이터의 이해데이터의 이해
데이터의 이해paul lee
 
데이터베이스 시스템 chapter1_STG박하은
데이터베이스 시스템 chapter1_STG박하은데이터베이스 시스템 chapter1_STG박하은
데이터베이스 시스템 chapter1_STG박하은ETRIBE_STG
 
정보검색의개요
정보검색의개요정보검색의개요
정보검색의개요Dosang Yoon
 
News Big Data Analytics
News Big Data AnalyticsNews Big Data Analytics
News Big Data AnalyticsDaemin Park
 
빅데이터플랫폼구축_개방형플랫폼중심.pdf
빅데이터플랫폼구축_개방형플랫폼중심.pdf빅데이터플랫폼구축_개방형플랫폼중심.pdf
빅데이터플랫폼구축_개방형플랫폼중심.pdf효근 윤
 
Daum내부 Hadoop 활용 사례 | Devon 2012
Daum내부 Hadoop 활용 사례 | Devon 2012Daum내부 Hadoop 활용 사례 | Devon 2012
Daum내부 Hadoop 활용 사례 | Devon 2012Daum DNA
 
Ankus 제품소개서
Ankus 제품소개서Ankus 제품소개서
Ankus 제품소개서onycom1
 
Daum 내부 빅데이터 및 클라우드 기술 활용 사례- 윤석찬 (2012)
Daum 내부 빅데이터 및 클라우드 기술 활용 사례- 윤석찬 (2012)Daum 내부 빅데이터 및 클라우드 기술 활용 사례- 윤석찬 (2012)
Daum 내부 빅데이터 및 클라우드 기술 활용 사례- 윤석찬 (2012)Channy Yun
 
Introduction to ankus(data mining and machine learning open source)
Introduction to ankus(data mining and machine learning open source)Introduction to ankus(data mining and machine learning open source)
Introduction to ankus(data mining and machine learning open source)SuHyun Jeon
 
2016년 인문정보학 Sql세미나 1/3
2016년 인문정보학 Sql세미나 1/32016년 인문정보학 Sql세미나 1/3
2016년 인문정보학 Sql세미나 1/3in2acous
 
Rinker 전시회 발표용 (1)
Rinker 전시회 발표용 (1)Rinker 전시회 발표용 (1)
Rinker 전시회 발표용 (1)Seungho Han
 
How to prevent cyber attack with big data &amp; intelligence(sfis170222)
How to prevent cyber attack with big data &amp; intelligence(sfis170222)How to prevent cyber attack with big data &amp; intelligence(sfis170222)
How to prevent cyber attack with big data &amp; intelligence(sfis170222)Yong Suk Kang 姜龙锡
 
[SSA] 01.bigdata database technology (2014.02.05)
[SSA] 01.bigdata database technology (2014.02.05)[SSA] 01.bigdata database technology (2014.02.05)
[SSA] 01.bigdata database technology (2014.02.05)Steve Min
 
[H3 2012] 로그속 사용자 발자국 들여다보기
[H3 2012] 로그속 사용자 발자국 들여다보기[H3 2012] 로그속 사용자 발자국 들여다보기
[H3 2012] 로그속 사용자 발자국 들여다보기KTH, 케이티하이텔
 
20120525 active directory가이드
20120525 active directory가이드20120525 active directory가이드
20120525 active directory가이드Sukjin Yun
 
[Retail & CPG Day 2019] Amazon.com의 무중단, 대용량 DB패턴과 국내사례 (Lotte e-commerce) - ...
[Retail & CPG Day 2019] Amazon.com의 무중단, 대용량 DB패턴과 국내사례 (Lotte e-commerce) - ...[Retail & CPG Day 2019] Amazon.com의 무중단, 대용량 DB패턴과 국내사례 (Lotte e-commerce) - ...
[Retail & CPG Day 2019] Amazon.com의 무중단, 대용량 DB패턴과 국내사례 (Lotte e-commerce) - ...Amazon Web Services Korea
 
[웨비나] 우리가 데이터 메시에 주목해야 할 이유
[웨비나] 우리가 데이터 메시에 주목해야 할 이유[웨비나] 우리가 데이터 메시에 주목해야 할 이유
[웨비나] 우리가 데이터 메시에 주목해야 할 이유confluent
 
Deep learning framework 제작
Deep learning framework 제작Deep learning framework 제작
Deep learning framework 제작Tae Young Lee
 
디지털 인문학 데이터베이스 개론
디지털 인문학 데이터베이스 개론디지털 인문학 데이터베이스 개론
디지털 인문학 데이터베이스 개론Baro Kim
 
빅데이터, 가치창출구조와 가능성
빅데이터, 가치창출구조와 가능성빅데이터, 가치창출구조와 가능성
빅데이터, 가치창출구조와 가능성Jeong-Soo KANG
 

Semelhante a Informix user guide (20)

데이터의 이해
데이터의 이해데이터의 이해
데이터의 이해
 
데이터베이스 시스템 chapter1_STG박하은
데이터베이스 시스템 chapter1_STG박하은데이터베이스 시스템 chapter1_STG박하은
데이터베이스 시스템 chapter1_STG박하은
 
정보검색의개요
정보검색의개요정보검색의개요
정보검색의개요
 
News Big Data Analytics
News Big Data AnalyticsNews Big Data Analytics
News Big Data Analytics
 
빅데이터플랫폼구축_개방형플랫폼중심.pdf
빅데이터플랫폼구축_개방형플랫폼중심.pdf빅데이터플랫폼구축_개방형플랫폼중심.pdf
빅데이터플랫폼구축_개방형플랫폼중심.pdf
 
Daum내부 Hadoop 활용 사례 | Devon 2012
Daum내부 Hadoop 활용 사례 | Devon 2012Daum내부 Hadoop 활용 사례 | Devon 2012
Daum내부 Hadoop 활용 사례 | Devon 2012
 
Ankus 제품소개서
Ankus 제품소개서Ankus 제품소개서
Ankus 제품소개서
 
Daum 내부 빅데이터 및 클라우드 기술 활용 사례- 윤석찬 (2012)
Daum 내부 빅데이터 및 클라우드 기술 활용 사례- 윤석찬 (2012)Daum 내부 빅데이터 및 클라우드 기술 활용 사례- 윤석찬 (2012)
Daum 내부 빅데이터 및 클라우드 기술 활용 사례- 윤석찬 (2012)
 
Introduction to ankus(data mining and machine learning open source)
Introduction to ankus(data mining and machine learning open source)Introduction to ankus(data mining and machine learning open source)
Introduction to ankus(data mining and machine learning open source)
 
2016년 인문정보학 Sql세미나 1/3
2016년 인문정보학 Sql세미나 1/32016년 인문정보학 Sql세미나 1/3
2016년 인문정보학 Sql세미나 1/3
 
Rinker 전시회 발표용 (1)
Rinker 전시회 발표용 (1)Rinker 전시회 발표용 (1)
Rinker 전시회 발표용 (1)
 
How to prevent cyber attack with big data &amp; intelligence(sfis170222)
How to prevent cyber attack with big data &amp; intelligence(sfis170222)How to prevent cyber attack with big data &amp; intelligence(sfis170222)
How to prevent cyber attack with big data &amp; intelligence(sfis170222)
 
[SSA] 01.bigdata database technology (2014.02.05)
[SSA] 01.bigdata database technology (2014.02.05)[SSA] 01.bigdata database technology (2014.02.05)
[SSA] 01.bigdata database technology (2014.02.05)
 
[H3 2012] 로그속 사용자 발자국 들여다보기
[H3 2012] 로그속 사용자 발자국 들여다보기[H3 2012] 로그속 사용자 발자국 들여다보기
[H3 2012] 로그속 사용자 발자국 들여다보기
 
20120525 active directory가이드
20120525 active directory가이드20120525 active directory가이드
20120525 active directory가이드
 
[Retail & CPG Day 2019] Amazon.com의 무중단, 대용량 DB패턴과 국내사례 (Lotte e-commerce) - ...
[Retail & CPG Day 2019] Amazon.com의 무중단, 대용량 DB패턴과 국내사례 (Lotte e-commerce) - ...[Retail & CPG Day 2019] Amazon.com의 무중단, 대용량 DB패턴과 국내사례 (Lotte e-commerce) - ...
[Retail & CPG Day 2019] Amazon.com의 무중단, 대용량 DB패턴과 국내사례 (Lotte e-commerce) - ...
 
[웨비나] 우리가 데이터 메시에 주목해야 할 이유
[웨비나] 우리가 데이터 메시에 주목해야 할 이유[웨비나] 우리가 데이터 메시에 주목해야 할 이유
[웨비나] 우리가 데이터 메시에 주목해야 할 이유
 
Deep learning framework 제작
Deep learning framework 제작Deep learning framework 제작
Deep learning framework 제작
 
디지털 인문학 데이터베이스 개론
디지털 인문학 데이터베이스 개론디지털 인문학 데이터베이스 개론
디지털 인문학 데이터베이스 개론
 
빅데이터, 가치창출구조와 가능성
빅데이터, 가치창출구조와 가능성빅데이터, 가치창출구조와 가능성
빅데이터, 가치창출구조와 가능성
 

Último

Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Wonjun Hwang
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionKim Daeun
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스
 
A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)Tae Young Lee
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Kim Daeun
 
Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Wonjun Hwang
 

Último (6)

Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차
 
A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
 
Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)
 

Informix user guide

  • 1. INFORMIX User Guide 2001. 6 Informix Korea
  • 2. 목차  RDB 란 무엇인가  SQL 개요  dbaccess 를 이용한 query 실행  Informix DBMS 의 이해  SQL 을 이용한 질의 방법  DB Admin 작업  ESQL/C 를 이용한 프로그래밍  System Admin 작업  Client/Server Connectivity  Data Migration  Backup & Restore  GLS (Global Language Support) INFORMIX User 2
  • 3. RDB 란 무엇인가  정보와 데이터  정보시스템  자료처리시스템  데이터베이스의 정의  데이터베이스의 특성  DBMS 발전 배경  데이터 독립성과 데이터 구조간의 사상  데이터베이스 관리시스템  데이터 모델링  관계 데이터 모델  계층 데이터 모델  네트워크 데이터 모델  Primary Key 와 Foreign Key  정규화 (Normalization)
  • 4. 정보와 데이터  데이터  현실 세계 (Real World) 로부터 단순한 관찰이나 측정을 통해서 수집한 사실 (Fact) 또는 값 (Values)  정보  어떤 상황에 관한 어떤 의사 결정을 할 수 있게 하는 지식 (Knowledge) 로써 데이터의 유효한 해석 (Interpretation) 이나 데이터 상호간의 관계 (Relationship) 처리기 (P) 정보 (I) 데이터 (D) INFORMIX User 4
  • 5. 정보 시스템  경영 정보 시스템 (MIS : Management Information System)  군사 정보 시스템 (Military Information System)  행정 정보 시스템 (Administration Information System)  인사 정보 시스템 (Personnel Information System)  의사 결정 지원 시스템 (Decision Support System) 의 수집 입력 출력 사 현실 세계 처리기 (P) 정보 (I) 분배 데이터 (D) 결 정 저장 데이터 INFORMIX User 5
  • 6. 자료 처리 시스템  정보 시스템을 구축 하기 위해 정확한 최신의 정보를 적시에 제공하는 시 스템  자료 처리 시스템의 종류  일괄 처리 시스템 (batch Processing)  온라인 처리 시스템 (on-line processing)  분산 처리 시스템 (distributed processing) INFORMIX User 6
  • 7. 데이터베이스의 정의  데이터베이스란 어느 한 조직의 다수 응용 시스템들이 사용하기위해 통 합 , 저장된 운영 데이터의 집합  통합된 데이터 (Integrated Data)  최소의 중복 , 통제된 중복 허용  저장된 데이터 (Stored Data)  운영 데이터 (Operational Data)  존재 목적이 뚜렷하고 필수 적인 데이터  공용 데이터 (Shared Data) INFORMIX User 7
  • 8. 데이터 베이스의 특성  실시간 접근성 (Real Time Accessibility)  수시적이고 비 정형적인 데이터의 검색이나 처리를 요구하는 질의  질의 (Queries) 에 대하여 실시간에 처리 응답  계속적인 변화 (Continuous Evolution)  데이터의 삽입 , 삭제 , 갱신을 통하여 가장 최근의 정확한 데이터를 유지  동시 공유 (Concurrent Sharing)  동시에 여러사용자가 접근 이용 가능  내용에 의한 참조 (Content Reference)  데이터 레코드들은 주소나 위치에 의해 참조되는 것이 아니라 데이터의 내용 즉 , 어떤 특정 조건을 만족하는 레코드들은 모두 하나의 논리적 단위로 취급 되고 접근 INFORMIX User 8
  • 9. DBMS 발전 배경  데이터의 종속성  데이터의 중복성  내부적 일관성 (Consistency)  보안성 (Security)  경제성 (Economics)  무결성 (Integrity)  데이터의 독립성  논리적 데이터 독립성  물리적 데이터 독립성 INFORMIX User 9
  • 10. 데이터 독립성과 데이터 구조간의 사 상 프로그램 데이터 구조 데이터베이스 논리적 구조 A B C A 물리적 D 데이터베이스 응용 프로그램 1 B C 논 물 B 리 D 리 사적 사적 A B C E 상 상 D E F 구 E 구 F G H ... 응용 프로그램 2 조 조 F G G H A 응용 프로그램 3 C INFORMIX User 10
  • 11. 데이터베이스 관리시스템  응용 프로그램과 데이터의 중재자로써 모든 응용 프로그램들이 데이터베 이스를 공용할 수 있게끔 관리해 주는 소프트웨어 시스템  정의 기능  데이터베이스의 논리적 구조와 그 특성을 어떤 데이터 모델에 따라 명세  데이터베이스의 물리적 구조를 명세  물리적 구조와 논리적 구조의 변환이 가능하도록 사상 (mapping) 을 명세  조작 기능  데이터 처리가 간편하고 쉬우며 명확하고 완전하고 효율적  제어 기능  데이터 무결성 제어  보안과 권한을 검사  동시성 제어 (Concurrency Control) INFORMIX User 11
  • 12. 데이터 모델링 객체 ( 그 엔티티 타입 레코드 룹 에트리뷰트 데이터 필드 ) 값 값 성 질 값 현실 세계 ( 실체 개념 세계 ( 정보 ) 컴퓨터 세계 ( 데이터 ) ) 정보 모델링 현실 세계 개념 세계 데이터 일치성 모델링 데이터구조화 물리적 데이터 모델 데이터베이스 컴퓨터 세계 INFORMIX User 12
  • 13. 관계 데이터 모델  현실 세계를 ER 다이어 그램으로 표현한 것은 현실 세계를 사람이 이해 할 수 있게 표현한 논리적 구조 현실 세계 ER 데이터 저장 다이어그램 모델 데이터베이스 학번 이름 학년 학과 학번 과목 번호 성적 학생 수강 1234 김철수 3 전산 1235 CS312 90 1235 이상철 4 전산 1246 CS312 85 1246 박영수 3 전자 1234 CS322 88 1248 조성진 3 전기 1235 CS322 95 1225 강신조 1 산공 1248 CS322 94 1234 CS412 98 과목 번호 과목이름 학점 교과목 1235 CS412 75 CS312 자료 구조 3 1246 CS412 80 CS322 파일 처리 3 CS412 데이터베이스 3 INFORMIX User 13
  • 14. 계층 데이터 모델 교과목 데이터베이스 CS 421.2 선수 과목 강 좌 파일 처리론 CS 421.1 홍수영 교 수 학 생 이상길 김철수 INFORMIX User 14
  • 15. 네트워크 데이터 모델 1000, 갑 , 경영 , 4 A 영어 , 4 B C 역사 , 3 2000, 을 , 전산 , 3 D A 음악 , 2 3000, 병 , 영문 , 2 B C INFORMIX User 15
  • 16. Primary Key 와 Foreign Key  Primary Key  각 개체를 유일하게 구분할 수 있는 속성 혹은 속성의 조합 .  Primary 는 반드시 존재하는 값이어야 한다 .  모든 개체는 하나의 primary key 를 가져야 한다 .  예  고객 개체 : 주민번호  상품 개체 : 상품 코드 , 제조업체  학생 개체 : 학번  Foreign Key  다른 개체의 primary key 를 참조해야 하는 개체의 속성  개체 간에 관계를 설정하기위해 사용되는 속성 혹은 속성의 집합  값이 없어도 가능  중복된 값 가능  수정 가능  예  주문 개체의 주문 고객 속성 고객 개체의 고객번호  수강 개체의 수강 학생 속성 학생 개체의 학번 INFORMIX User 16
  • 17. 정규화 - 1NF(First Normal Form)  엔티티 (entity) 안에 반복되는 속성 그룹을 제거한다 주문 주문 주문번호 주문날짜 주문번호 composite 총액 항목번호 primary key 항목번호 1 수량 항목수량 1 주문날짜 반복되는 속성은 데이터를 유 항목번호 2 총액 연하게 저장할 수 없다 . 항목수량 2 지불날짜 여기서 , 항목은 최대 4 개밖에 항목번호 3 저장할 수 없다 항목수량 3 항목번호 4 항목수량 4 INFORMIX User 17
  • 18. 정규화 - 2NF(Second Normal Form)  1NF 에서 모든 속성은 전체 Primary Key 에 종속되어야한다  엔티티의 모든 속성은 Primary Key 에 functionally dependent 해야 한다  데이터항목 a 가 데이터항목 b 에 의해 정의될 수 있다면 a 는 b 에 functionally dependant 하다고 한다 주문 주문마스터 주문번호 주문날짜 , 총액 , 주문번호 주문날짜 지불날짜는 단지 항목번호 총액 주문번호에만 수량 지불날짜 functionally 주문날짜 dependant 하다 총액 지불날짜 주문상세 주문번호 주문번호 1010 1010 1011 1010 항목의 지불 항목번호 항목번호 1 2 3 수량 수량 20 3 12 날짜가 바뀌면 모 주문날짜 1/4/2001 1/4/2001 1/4/2001 든 1010 항목을 수 총액 50,000 50,000 50,000 지불날짜 2/4/2001 2/4/2001 2/4/2001 정해야 한다 INFORMIX User 18
  • 19. 정규화 - 3NF(Third Normal Form)  Primary Key 에 종속적인 Key 가 아닌 속성에 종속적인 속성이 있으면 안된다 .  어떠한 속성도 Primary Key 에 transitively dependent 하면 안된다 .  데이터항목 a 가 다른 데이터항목 b 에 종속적이면 a 는 b 가 종속적인 다른 데이터 항목에도 함께 종속적인 관계가 되고 이를 transitively dependent 하다고 말한다 주문가격 주문 품목 주문번호 주문번호 항목번호 항목번호 품목번호 품목번호 품목번호 제조코드 제조코드 제조코드 단가 수량 수량 단가 주문번호 1010 1010 1011 주문하지 않은 항목에 대한 단가를 입력할 수 없다 항목번호 1 2 1 품목번호 1 30 1 항목을 포함한 주문이 삭제되면 그 항목의 단가를 잃는다 제조코드 ABC XYZ ABC 단가는 중복적으로 저장된다 수량 20 3 12 단가 1,000 3,500 1,000 단가가 변경되면 그 항목을 포함한 모든 주문에 대해서 변 경해야 한다 INFORMIX User 19
  • 20. SQL 개요  SQL 이란 무엇인가  SQL 의 종류  DB 내의 object 이름 규칙  인포믹스 자료형 (Data Type)  Character Data Type  Numeric Data Type  Large Object Data Type  Time Data Type  Row Data Type  Collection Data Type  Complex Data Type
  • 21. SQL 이란 무엇인가 ?  Structured Query Language 의 준말  영어와 흡사한 언어  Database 와의 관련 작업을 가능하게 함 .  논리적인 database 의 model 을 관계형 DB 의 schema 로 번역하는 데 사용되는 언어 .  schema 란 - DB 내에서의 table 의 물리적인 정의  table 이란 - 열과 행으로 이루어진 2 차원 표현 INFORMIX User 21
  • 22. SQL 의 종류  DDL(Data Definition Language)  DB 나 table 을 생성하고 , 그 구조를 수정하는 작업관련 구문  DML(Data Manipulation Language)  Data 를 가져오고 , 수정하고 , 삭제하는 등의 Data 를 사용하는데 사용되는 구문  Cursor Manipulation  Cursor 를 사용하는데 사용되는 구문  Dynamic Management  동적으로 자원을 사용 , 관리하는데 사용되는 구문  Data Access  Data 에 대한 권한을 설정하고 , lock 을 거는등의 작업에 사용되는 구문  Data integrity  Transaction 을 관리하는데 사용되는 구문  Query optimization  질의 최적화에 사용되는 구문  Stored procedure  Stored procedure 를 실행하는 작업에 사용되는 구문 INFORMIX User 22
  • 23. DB 내의 object 이름 규칙  Informix version 에 따라 길이 제한이 다름 .  Informix 7.*,8.* ,9.1*: 18 글자 ( 영문기준 )  Informix 9.2* : 128 글자 ( 영문기준 )  숫자로 시작하면 안됨 .  특수문자의 사용 불가  예 : 공백문자 , tab 문자 , 등…  “_ ” 는 사용 가능  ANSI-reserved word 사용 안됨 . INFORMIX User 23
  • 24. 인포믹스 자료형 (data type) Character char Numeric Exact varchar Built-in Data Type Large-object Approximate lvarchar User-defined Data Type Time byte decimal/numeric Complex Data Type boolean text money Opaque Data Type blob integer/int Distinct Data Type clob smallint Row Type Named Row Type date int8 Collection Type Unnamed Row Type datetime serial set interval serial8 list decimal multiset float real INFORMIX User 24
  • 25. Character Data Type  char (size)  고정 길이 문자 저장  1~ 32,767 byte 까지의 character 저장 가능  default 값은 1  varchar (max, reserve)  가변 길이 문자 저장  1~ 255 byte 까지 가능  Reserve(default 로 0 ) 는 option 이나 Max 는 반드시 주어야 함 .  lvarchar  2K 까지의 가변길이 문자를 저장 INFORMIX User 25
  • 26. Numeric Data Type  decimal (precision,scale) or numeric (precision,scale)  고정 소수점 실수를 저장 ,32 유효자리수까지 표현  default 자리수 : 16, default 소수점이하 : 0  money (precision, scale)  내부적으로 decimal 과 같으나 , 화폐단위기호가 붙어서 출력됨 .  integer or int  4bytes integer 저장 : -(2 31 -1) ~ 2 31 -1  int8  8bytes integer 저장 : -(2 63 -1) ~ 2 63 -1  smallint  2bytes integer 저장 : -(2 15 -1) ~ 2 15 -1  serial (start) / serial8 (start)  서버에 의해 자동적으로 1 씩 증가되는 값을 저장할 수 있는 type.  내부적으로 int 와 같음 . INFORMIX User 26
  • 27. Numeric Data Type  float or double precision  부동 소수점 실수를 저장  유효자리수 16 까지 표현 가능  real or smallfloat  부동 소수점 실수를 저장  유효자리수 8 까지 가능 INFORMIX User 27
  • 28. Large-Object Data Type  Large-Object data type  text  2G 까지의 ASCII character 형식의 object 를 저장  byte  2G 까지의 binary character 형식의 object 를 저장  Smart Large Object data type  clob  4T 까지의 ASCII character 형식의 object 를 저장  blob  4T 까지의 binary character 형식의 object 를 저장 INFORMIX User 28
  • 29. Time Data Type  date  연 , 월 , 일의 날짜를 저장  Format 을 정의할 수 있음 .(default : mm/dd/yyyy)  환경변수 DBDATE 를 이용해 변경  datetime  날짜를 시간까지 저장할 수 있음 .  default : yyyy-mm-dd hh:MM:ss.fff  interval  시간의 간격 ( 기간 ) 을 저장할 수 있음 . INFORMIX User 29
  • 30. Row Data Type  C 언어의 구조체와 유사한 여러 종류의 데이터의 모음  Unnamed Row Data Type create table part ( part_id serial , cost decimal, part_dimensions row (length decimal, width decimal, height decimal, weight decimal) ); insert into part values (0, 10.00, row(1.0, 2.0, 3.0, 4.0));  Named Row Data Type create row type dimension_t ( length decimal, width decimal, height decimal, weight decimal); create table part ( part_id serial, cost decimal, part_dimensions dimension_t); constructor Cast operator Row data type insert into part values (0, 10.00, row(1.0, 2.0, 3.0, 4.0)::dimension_t;  Row Data Type 데이터 조회 select part_id, cost, part_dimensions from part where part_dimensions.weight > 100; INFORMIX User 30
  • 31. Collection Data Type  Set  데이터 입력 순서에 의미 없고 , 중복된 값을 허용하지 않음 alter table part add (defective_dates set(date not null)); insert into part (part_id, defective_dates) values (0,(set{2/23/2001,3/15/2001})); select * from part where ‘1/26/2001’ in defective_dates;  MultiSet  데이터 순서에 의미 없고 , 중복된 데이터를 허용함  List  데이터 순서가 의미 있고 , 중복된 데이터를 허용함 INFORMIX User 31
  • 32. Complex Data Type  User-defined Data Types (UDTs) 라고 부른다  Distinct Types  기존에 존재하는 데이터형을 기반으로한 새로운 데이터형을 나타낸다 create distinct type inches as decimal; create row type dimension_t ( length inches, width inches, . . . );  Opaque Data Types  C 언어나 JAVA 를 이용하여 데이터형의 내부 구조와 함수를 정의한다  Create Opaque Type 문을 이용하여 새로운 데이터형을 등록한다  Create Function 문을 사용하여 이 데이터형을 지원하는 함수를 등록한다 INFORMIX User 32
  • 33. dbaccess 를 이용한 query 실 행  dbaccess 란?  dbaccess 실행  dbaccess 의 메뉴 구조  dbaccess 의 실행방법
  • 34. Dbaccess 란 ?  Query 를 실행하고 , db 나 table 에 대한 information 을 볼 수 있는 tool INFORMIX User 34
  • 35. Dbaccess 실행  $ dbaccess  메뉴의 사용법  Space-bar 를 이용하거나 화살표키로 이동  혹은 각 메뉴의 대문자로 쓰여진 문자를 누름  예 : Exit 의 경우 “ e” 를 누름 INFORMIX User 35
  • 36. Dbaccess 의 메뉴구조 Query Language Connection Database Table Session Exit New Connect Select Create Run Disconnect Create Alter Modify Exit Info Info Use-Editor Drop Drop Output cLose Exit Save Exit Info Drop Exit  NEW dbaccess editor 에서 SQL 문장을 작성한다 , 작성이 끝나면 ESC 키를 눌러야 메뉴로 돌아간다  RUN 작성된 SQL 문장을 실행한다  MODIFY dbaccess editor 에서 SQL 문장을 수정한다  USE_EDITOR vi editor 를 호출하여 SQL 문장을 작성 및 수정한다 . 작성이 끝나면 저장하고 vi 를 종료한다  OUTPUT 출력결과를 파일로 저장한다  SAVE editor 에 기록되어 있는 SQL 문장을 파일로 저장한다 ( 확장자 : .sql)  INFO 현재 연결된 데이터베이스의 테이블 정보를 본다  DROP 현재 디렉토리에 저장된 SQL 파일 ( 확장자 : .sql) 을 삭제한다  EXIT Query Language 종료 INFORMIX User 36
  • 37. Dbaccess 의 실행 방법  구문을 적은 file 을 명령 프롬프트에서 바로 실행하여 결과를 볼 수 있 다.  Shell program, cron job 등에 응용 가능  dbaccess DB 이름 SQL 파일명 dbaccess test_db test.sql  Interactive mode 로 prompt 상에서 실행한다  SQL 문장 끝에 세미콜론 (;) 을 넣어야 실행된다  종료는 interrupt 키를 눌러 빠져나온다 dbaccess test_db - > select * from customer;  여러 문장을 그룹으로 프롬프트에서 실행한다  새 입력 라인 첫 자리에 종료 문자가 나타날때까지 문장을 입력 받는다 dbaccess test_db << ! > select * from customer; > select * from state; ! INFORMIX User 37
  • 38. Informix DBMS 의 이해  Informix DBMS 의 아키텍쳐  Database Server 의 구성요소  물리적인 저장 공간  논리적인 저장 공간  물리적 디스크 공간 할당  논리적 디스크 공간 할당  SYSMASTER 데이터베이스  데이터베이스 구조
  • 39. Informix DBMS 의 아키텍쳐  Client/Server 구조  Multi-threaded 구조  client 는 server 에게  적은 프로세스 소요 command 나 query 를 보내  여러 프로세스가 하나의 어플리케이션 고 결과를 받는다 을 위하여 작업  server 는 데이터베이스의 컨  서버 프로세스 안에서 thread 텐츠를 관리하며 client 가 보 scheduling 과 context switching 낸 query 를 해석하고 실행하 여 결과를 client 에게 보낸다 application •interpre t •execute SQL •return results process process process Client Server Server INFORMIX User 39
  • 40. Database Server 의 구성 요소 빠른 access 를 위하여 disk Shared Memory 로부터 데이터 를 cache 하는 Lock, LRU, Buffer Pool, Resident Portion Logical log buffer, 영역 사용자 세션 관 Physical Log Buffer.. Virtual Message 리 MT, Sort, client 와 Portion Portion server 간의 통 Session, Procedure, Dictionary, 신 영역 메모리와 디스 크 데이터의 동 Big buffer, Global.. 환경변수 : INFORMIXSERVER, INFORMIXDIR, 기화 작업 PATH checkpoin t Processes Chunk Disk Page V.P 는 자체적으로 Extent thread 를 Tblspace scheduling 하고 Dbspace 실행한다 Blobspace Virtual Processors Smart Blobspace (CPU, PIO, LIO, AIO, ADT, MSC, SHM, Physical Log, Logical Log TLI, SOC, ADM, OPT, JVP..) INFORMIX User 40
  • 41. 물리적인 저장 공간  Page  IDS 의 기본적인 I/O 의 단위  CHUNK 를 구성하는 최소 단위 .  메모리 버퍼의 사이즈와 동일  Size : 2K 혹은 4K  Extent  Table 이나 index, fragment 에 저장영역을 할당하는 단위로서 , 연속된 페 이지의 묶음 .  Chunk  Informix 에 할당된 연속된 disk 의 공간  Raw device 나 cooked device(file) 가능 INFORMIX User 41
  • 42. 논리적인 저장공간  Tblspaces  Table 에 할당된 extent 의 묶음  하나의 dbspace 에만 존재가능  Dbspaces  Informix 가 사용하는 저장 공간으로 하나 이상의 Chunk 로 구성됨 . /dev/rvol1 Tab1 의 tablespace dbspace Tab2 의 tablespace /usr/ifmxdata /dev/rvol2 INFORMIX User 42
  • 43. 물리적인 디스크 공간 할당 first_table create table first_table ( tab_id int , name char(20) , second_table address char(50) ) extent size 32 next size 16; create table second_table ( ………… tab_id int , name char(20) , address char(50) ) extent size 16 next size 8; page INFORMIX User 43
  • 44. 논리적 디스크 공간 할당 create database example1db; create database example2db in dbspace1; rootdbs create table first_table ( tab_id int , name char(20) , example1db address char(50) ) ; create table second_table ( dbspace1 tab_id int , name char(20) , example2db address char(50) ) in dbspace2; first_table dbspace2 second_table INFORMIX User 44
  • 45. SYSMASTER 데이터베이스  Informix 서버의 정보를 저장  Informix 서버가 초기화 되는 시점에 자동 생성  공유메모리의 실제 데이터를 접근 (access) SELECT dbsnum, name, owner, nchuncks, is_temp, shared memory is_blobspace, flags SELECT partnum, dbsnum, FROM sysdbspaces owner, tabname FROM systabnamess process WHERE dbsname = “DB 이름 ” SELECT name, owner, created, is_logging, sysmaster is_buff_log, is_ansi FROM sysdatabases SELECT sid, username, uid SELECT c.dbsnum, chknum, hostname, nxchknum, d.name, connected chksize, nfree FROM syssessions FROM syschunks c, sysdbspaces c WHERE c.dbsnum = d.dbsnum AND d.name = “dbspace 이름” INFORMIX User 45
  • 46. 데이터베이스 구조 (1)  시스템 카타로그 테이블 (system catalog table)  데이터베이스의 구조에 대한 정보를 저장  데이터베이스가 생성되는 시점에 자동적으로 생성  데이터베이스내의 테이블 구조가 변경되는 시점에 자동으로 수정  데이터 테이블  테이블을 생성할 때 고려할 사항  dbspace : 테이블이 생성될 위치  extent/next size : 연속으로 할당할 공간의 크기  lock mode : row 또는 page 단위의 locking 사용  인덱스  데이터를 빠르게 접근하기 위한 정보를 저장  인덱스의 종류  데이터 중복 여부에 따라 unique / duplicate 인덱스로 구분  여러 컬럼을 인덱스 키로 사용하는 composite 인덱스  인덱스 생성 시 데이터의 물리적 위치를 재 정렬시키는 cluster 인덱스 INFORMIX User 46
  • 47. 데이터베이스 구조 (2)  제약조건 (Constraints)  Referential constraint : 테이블간의 integrity 보장  Default values : 입력 내용이 없을 경우 지정한 기본값 저장  NOT NULL constraint : null 값을 허용하지 않는 컬럼 지정  Check constraint : 입력 , 수정시 허용하는 컬럼 값을 지정  Unique constraint : 컬럼값이 테이블안에서 유일  뷰 (view) 테이블  실제 테이블에서 데이터를 가져오는 가상의 테이블  Stored Procedure  사용자가 정의한 함수  데이터베이스 안에 저장되는 로직  Trigger  테이블에 이벤트 발생시 자동적으로 실행 INFORMIX User 47
  • 48. 데이터베이스 구조 (3)  dbschema utility  데이터베이스의 구조를 파악할 수 있는 유틸리티  사용법  dbschema -d <DB 이름 >  dbschema -d <DB 이름 > -t <table 이름 >  dbschema -d <DB 이름 > -s <synonym 이름 >  dbschema -d <DB 이름 > -f <procedure 이름 >  table 이름 , synonym 이름 , procedure 이름 대신 “ all” 을 사용하면 지정한 데이 터베이스 내의 모든 table, synonym, procedure 에 대한 정보를 출력한다  옵션뒤에 파일 이름을 명시하면 실행결과가 파일로 저장된다  -ss 옵션을 추가하면 테이블의 lock mode, extent, space 정보 등을 자세히 출 력한다 . INFORMIX User 48
  • 49. SQL 을 이용한 질의 방법  SQL 질의 작성 방법  DML 문의 종류  SELECT  SELECT 의 예  SQL 실행 경로 확인  INSERT, UPDATE, DELETE  Concurrency Control  SPL  SPL 생성 및 실행  SPL 구문  Trigger
  • 50. SQL 질의 작성 방법  구문 ( 구문 , 테이블이름 , 컬럼이름등 ..) 은 대 소문자 상관 없다 .  질의의 내용이 아닌 주석의 경우  줄단위로는 “ --” 를 이용하고  단락단위로는 “ { }” 를 이용한다 .  문자를 입력하거나 , 비교할때에는 인용부호가 필요하다 .  조건의 대상이되는 문자열의 경우 대소문자를 구별한다 .  “CA” ,”ca”, “Ca” 는 모두 다르다 .  한 문장은 “ ;” 로 끝난다 . INFORMIX User 50
  • 51. DML 문의 종류  SELECT  테이블내의 자료를 가져옴 .  Row, column 단위  INSERT  테이블내에 새로운 자료를 입력  Row 단위  UPDATE  테이블내의 자료를 갱신  Column 단위  DELETE  테이블내의 자료를 삭제  Row 단위 INFORMIX User 51
  • 52. SELECT  문법 Select 가져올 컬럼 리스트 From 테이블 이름 Where 가져올 조건 Group by 그룹으로 만들 대상 컬럼 Having 그룹내의 가져올 조건 Order by 정렬 기준 컬럼 Into temp 임시테이블의 이름 INFORMIX User 52
  • 53. Select 의 예 (1) SYNTAX SELECT * FROM customer; Select * From table_name ; S 테이블의 모든 컬럼을 가져온다 . SYNTAX SELECT distinct customer_num Select distinct 컬럼이름 FROM orders From table_name ; 테이블의 특정 컬럼중 유일한 값만을 가져 온다 . INFORMIX User 53
  • 54. Select 의 예 (2) SYNTAX SELECT phone[2,3] FROM Select column [ first, last ] customer; From table_name ; Output : Phone 테이블의 특정 컬럼의 first 부터 last 까 08 지를 11 가져온다 . 12 SYNTAX SELECT substr(phone,2,3) Select substr(column,first,n) FROM customer; From table_name ; Output : (expression) 테이블의 특정 컬럼의 first 부터 n 개의 문자를 789 가져온다 . 822 328 INFORMIX User 54
  • 55. Select 의 예 (3) – where 조건 적 용 SYNTAX SELECT stock_num, manu_code, unit Select . . . FROM stock From . . . WHERE unit != ‘case’; Where [ 조건 ] ] 특정 row 를 가져옴 .  stock 테이블 중 unit 컬럼 값이 case join 의 조건 인 것만 가져온다 . SELECT stock_num, manu_code, unit FROM stock WHERE unit != ‘case’;  stock 테이블 중 unit 컬럼 값이 case 가 아닌 것만 가져온다 . INFORMIX User 55
  • 56. Select 의 예 (3-1) – where 조건 적용 SYNTAX Select . . . SELECT * FROM customer From . . . WHERE customer_num in Where 컬럼 in ( 값 , 값 . . . ); (118,114,106); 테이블의 컬럼이 값들중에 있다면 모두 가져온다 . SYNTAX Select . . . SELECT * FROM stock From . . . WHERE unit_price between 20.00 and Where 컬럼 between A and B; 30.00; . 테이블의 컬럼이 A 와 B 사이인것을 가져온다 . INFORMIX User 56
  • 57. Select 의 예 (3-2) – where 조건 적용 SYNTAX Select . . . SELECT * FROM customer From . . . WHERE address2 is null; Where 컬럼 is null ; S 테이블의 컬럼이 null 값인것을 가져온다 . SYNTAX Select . . . SELECT * FROM customer From . . . WHERE address2 is not null; Where 컬럼 is not null ; . 테이블의 컬럼이 null 값이 아닌것을 가져온다 . INFORMIX User 57
  • 58. Select 의 예 (3-3) – where 조건 적용 SYNTAX Select . . . SELECT * FROM customer From . . . WHERE phone[1,3] matches ‘415’; Where 컬럼 matches ‘* 값 *’; SELECT * FROM customer WHERE company matches S 테이블의 컬럼에 값을 포함한 것을 가져온다 . ‘*City*’; SYNTAX Select . . . SELECT customer_num , company From . . . FROM customer Where 컬럼 like ‘% 값 %’; WHERE company like ‘City%’; . 테이블의 컬럼에 값을 포함한 것을 가져온다 . INFORMIX User 58
  • 59. Select 의 예 (4) – 정렬 SYNTAX Select . . . SELECT stock_num, manu_code From . . . FROM stock Order by 컬럼 ; ORDER BY stock_num;  stock 테이블의 row 를 stock_num 순서로 가져온다 . SELECT stock_num, manu_code FROM stock ORDER BY stock_num desc;  stock 테이블의 row 를 stock_num 내림 순서로 가져온다 . INFORMIX User 59
  • 60. Select 의 예 (5) – 조건식의 사용 SYNTAX CASE SELECT title, CASE movie_type WHEN condition1 THEN result1 WHEN 1 THEN ‘HORROR’ WHEN condition2 THEN result2 WHEN 2 THEN ‘COMEDY’ . . . WHEN 3 THEN ‘ROMANCE’ ELSE result n WHEN 4 THEN ‘WESTERN’ END ELSE ‘UNCLASSIFIED’ END, S 조건에 따라 다른값을 출력한다 . our_cost FROM movie_titles; INFORMIX User 60
  • 61. Select 의 예 (5-1) – 조건식의 사 용 SYNTAX SELECT fname, NVL(addr, “Address is missing”) NVL(value1, value2) as address FROM employees; value1 이 null 값이면 value2 를 출력한다 . Input : fname address Peter 3318 Rockdale Paul NULL Output : fname address Peter 3318 Rockdale Paul Address is missing INFORMIX User 61
  • 62. Select 의 예 (5-2) – 조건식의 사 용 SYNTAX SELECT DECODE DECODE(value1, value2, value3, (city, “Menlo Park”, “local”, value4, . . . value n ) “Palo Alto”, “Tall Tree”, city) city FROM customer; value1 이 Input : Output : value2 이면 value3 을 return 하고 , city city value4 이면 value5 를 return 하고 , Menlo Park Local 아니면 valuen 을 return 한다 . Santa Clara Santa Clara Palo Alto Tall Tree San Francisco San Francisco INFORMIX User 62
  • 63. Select 의 예 (6) – function 의 사 용 SYNTAX UPDATE orders today SET order_date = TODAY current WHERE order_num = 1005; INSERT INTO orders VALUES (0, TODAY, 120, NULL, NULL, NULL); S 오늘 날짜를 return 한다 . today : 연 , 월 , 일 CREATE TABLE new_acct ( current : 연 , 월 , 일 , 시 , 분 , 초 , 각 col1 int, col2 datetime year to day default current year to day ); DELETE FROM cust_calls WHERE res_dtime < CURRENT YEAR TO MINUTE; SELECT * FROM orders WHERE DAY(ord_date)<DAY(CURRENT); SELECT * FROM cust_calls WHERE call_dtime BETWEEN ‘1997-1-1 00:00:00’ AND CURRENT; INFORMIX User 63
  • 64. Select 의 예 (6-1) – Algebraic SYNTAX SELECT * FROM orders ABS ( num_expression ) WHERE ABS(ship_charge) > 20; MOD ( dividend, divisor ) SELECT POW ( base, exponent ) MOD(today-mdy(1,1,year(today)),30) ROOT ( radicand, index ) default index:2 FROM orders; SELECT * FROM circle ROUND ( expr, factor ) default factor:0 WHERE (3.14 * POW(radius,2)) < SQRT ( sqrt_radicand ) 1000; TRUNC ( expr, factor ) default factor:0 SELECT ROOT(9) FROM square; SELECT ROOT(64,3) FROM cube; SELECT SQRT(9) FROM angles; INFORMIX User 64
  • 65. Select 의 예 (6-2) – Log,hex,length SYNTAX EXP (float_expression) SELECT EXP(3) FROM angles; SELECT LOGN(population) FROM history LOGN (float_expression) ORDER BY date; LOG10 (float_expression) SELECT LOG10(distance) +1 digits HEX (expression) FROM travel; LENGTH(expression) SELECT tabname, HEX(partnum) FROM systables; SELECT HeX(order_num + 1) FROM orders; SELECT LENGTH(fname) + LENGTH(lname), LENGTH(‘How many bytes ?’) FROM customer; INFORMIX User 65
  • 66. Select 의 예 (6-3) – time SYNTAX SELECT * FROM order DATE (non_date_expr) 1. WHERE DAY (date/datetime_expr) order_date<DATE(‘12/31/99’); MONTH (date/datetime_expr) 2. WHERE order_date < DATE(365); WEEKDAY (date/datetime_expr) 3. WHERE DAY(order_date) > DAY (CURRENT); YEAR (date/datetime_expr) SELECT order_num, MONTH(order_date) EXTEND (datetime_expr, first to last) FROM orders; MDY (month, day, year) SELECT * FROM orders WHERE WEEKDAY(paid_date) = WEEKDAY(CURRENT); SELECT order_num FROM orders WHERE YEAR(ship_date) < Date(365) = 12/31/1899+365day = 12/31/1900 YEAR(TODAY); WEEKDAY 는 일요일을 0 으로 시작하여 각 요일을 나타낸다 0 : Sunday, 1 : Monday, … INFORMIX User 66
  • 67. Select 의 예 (6-4) – time SYNTAX SELECT TO_CHAR(begin_date, ‘%A %B %d, %Y %R’) FROM tab1; TO_DATE (String [,fmt] ) UPDATE tab1 TO_CHAR (String [,fmt] ) SET begin_date = TO_DATE (“Wednesday February 07, 01 14:17”, “%A %B %d, %Y %R”); The full weekday name as defined %A Input : in the locale begin_date The full month name as defined 2001-02-07 14:17 %B in the locale The day of the month as a decimal Output : %d number begin_date Wednesday February 07, 01 14:17 %Y The year as a 4-digit decimal number %R The time in 24-hour notation INFORMIX User 67
  • 68. Select 의 예 (6-5) – trigonometric SYNTAX SELECT COS(degrees*180/3.14) COS/SIN/TAN (radian_expr) FROM anglestb1; ASIN/ACOS/ ATAN (numeric_expr) SELECT SIN(radians) FROM anglestb1; ATAN2 (y,x) SELECT TAN(radians) FROM anglestb1; SELECT ACOS(-0.73) FROM anglestb1; SELECT ASIN(-0.73) FROM anglestb1; SELECT ATAN(-0.73) FROM anglestb1 WHERE angles > ATAN2(4,5); INFORMIX User 68
  • 69. Select 의 예 (6-6) – string SYNTAX TRIM ( source_expr) SELECT TRIM(c1), TRIM(TRAILING ‘#’ FROM TRIM ({ LEADING|TRAILING|BOTH } c1), [trim_expr] FROM source_expr) TRIM(LEADING FROM c1) TRIM ( trim_expr FROM source_expr) FROM tab; UPDATE c1 = ‘xyz’ FROM tab WHERE LENGTH(TRIM(c1))=5; SELECT c1, TRIM(LEADING ‘#’ FROM TRIM(TRAILING ‘%’ FROM ‘###abc %%%’)) FROM tab; INFORMIX User 69
  • 70. Select 의 예 (6-7) – string SYNTAX SELECT REPLACE(‘Mighxzy xzime’,’xz’,’t’) REPLACE(string,old [,new] ) FROM mytable; Output : string 의 old 값을 new 로 대체한다 . (constant) Mighty time INFORMIX User 70
  • 71. Select 의 예 (6-8) – string SYNTAX SELECT LPAD(‘Here we are’,16,’-_’ ) FROM mytable; LPAD(string,length [,pad] ) SELECT RPAD(‘Where are you’,18,’?!’) RPAD(string,length [,pad] ) FROM mytable; Output : (constant) -_-_-Here we are W 왼쪽이나 오른쪽에 특정 문자를 채워 Length 만큼의 문자열을 만든다 . (constant) Where are you?!?!? INFORMIX User 71
  • 72. Select 의 예 (6-9) – string SYNTAX SELECT city, LOWER(city), UPPER(city), UPPER (column or string) INITCAP(city) LOWER(column or string) FROM weather INITCAP (column or string) WHERE UPPER(city) = “SUNNYVALE”; Output : city UPPER : 모두 대문자로 sunnyVale LOWER : 모두 소문자로 INITCAP : 처음 문자만 대문자로 city (constant) (constant) (constant) sunnyVale sunnyvale SUNNYVALE Sunnyvale INFORMIX User 72
  • 73. Select 의 예 (6-10) – aggregate SYNTAX SELECT count(*) FROM stock; COUNT(*) SELECT sum(total_price) FROM stock; AVG ( [DISTINCT|UNIQUE] column) SELECT city,state,count(*) MAX ( [DISTINCT|UNIQUE] column) FROM customer MIN ( [DISTINCT|UNIQUE] column) GROUP BY city,state; SUM ( [DISTINCT|UNIQUE] column) SELECT order_num,sum(total_price) FROM items COUNT([DISTINCT|UNIQUE] column) GROUP BY order_num; RANGE (expr) STDEV (expr) VARIANCE (expr) INFORMIX User 73
  • 74. Select 의 예 (7) – group by,having SYNTAX SELECT order_num,sum(total_price) SELECT . . . FROM items FROM . . . GROUP BY order_num GROUP BY 컬럼 HAVING COUNT(*) > 2; HAVING 조건 ; H 기준 컬럼에 의해 만들어진 group 안에서 조건을 만족하는 그룹의 결과만을 가져온다 . INFORMIX User 74
  • 75. Select 의 예 (8) – HINT 의 사용  Optimizer Directive (HINT) 란 ?  SQL 을 어떠한 방식으로 실행할 것인가를 결정하는 optimizer 에게 주는 지 시자 .  Index 의 사용 , join 방법 등을 지정할 수 있다 .  문법  그 줄의 끝까지가 DIRECTIVE 일때  “--+” 로 시작  여러 줄 혹은 그 줄의 일부가 DIRECTIVE 일때 {+ } 로 묶음 INFORMIX User 75
  • 76. Select 의 예 (8-1) – access method SYNTAX SELECT --+ INDEX(e salary_indx) --+ INDEX name, salary ( {table|view|synonym|alias} FROM emp e index[,index] ) WHERE e.dno = 1 AND e.salary > 50000; W 특정 테이블에 대해 인덱스를 사용하여 질의하도록 함 . SYNTAX SELECT --+ AVOID_INDEX(e salary_indx) --+ AVOID_INDEX name, salary ( {table|view|synonym|alias} FROM emp e index[,index] ) WHERE e.dno = 1 AND e.salary > 50000; S 특정 테이블에 대해 인덱스를 사용하지 않도록 질의하도록 함 . INFORMIX User 76
  • 77. Select 의 예 (8-2) – access method SYNTAX SELECT {+ FULL(e) } name, salary --+ FULL FROM emp e ( {table|view|synonym|alias} ) WHERE e.dno = 1 AND e.salary > 50000; W 특정 테이블에 대해 full scan 하여 질의하도록 함 . SYNTAX SELECT {+ AVOID_FULL(e), --+ AVOID_FULL INDEX(e salary_indx) } ( {table|view|synonym|alias} ) name, salary FROM emp e WHERE e.dno = 1AND e.salary > 50000; S 특정 테이블에 대해 full scan 하지 말고 질의하도록 함 . INFORMIX User 77
  • 78. Select 의 예 (8-3) – Join Order SYNTAX SELECT --+ ORDERED --+ ORDERED name, title, dept FROM dept, job, emp WHERE title = “clerk” Join 의 대상 테이블에 대한 Join 의 순서를 AND emp.dno = dept.dno from 절 다음의 테이블 순서대로 하도록 한다 . AND emp.job = job.job; INFORMIX User 78
  • 79. Select 의 예 (8-4) – Join Method SYNTAX SYNTAX --+ USE_NL --+ AVOID_NL ( {table|view|synonym|alias} ) ( {table|view|synonym|alias} ) Join 에 있어서 Nested Loop Join 방 Join 에 있어서 Nested Loop Join 을 사용하지 법을 않는다 . 사용한다 . SYNTAX SYNTAX --+ USE_HASH --+ AVOID_HASH ( {table|view|synonym|alias} ( {table|view|synonym|alias} [/BUILD|/PROBE] ) [/BUILD|/PROBE] ) Join 에 있어서 HASH Join 방법을 사용한다  Join 에 있어서 HASH Join 방법을 사용하지 . 않는다 . INFORMIX User 79
  • 80. Select 의 예 (8-2) – Optimization Goal SYNTAX SELECT --+ FIRST_ROWS --+ FIRST_ROWS name, age --+ ALL_ROWS (default) FROM employee e, department d WHERE e.dept_no = d.dept_no; Query Optimizer 가 질의를 최적화 할때 SET OPTIMIZATION FIRST_ROWS; 에, SELECT …… 그 목적을 처음 몇개의 row 를 빨리 가 져올 수 OPT_GOAL. 파라매터를 사용하여 최적화 방법을 있도록 최적화 하거나 , 전체 row 를 빨 결정할 수 있다 리 OPT_GOAL = -1 : ALL_ROWS 가져올 수 있도록 최적화 할 것인가를 OPT_GOAL = 0 : FIRST_ROWS 지정할 수 있다 . . 이 방법은 질의의 대상이 전체가 아닌 일부분의 데이터 만을 가져오는 “ first n” 과 함께 사용될때 가장 좋은 성능을 낼 수 있다 , INFORMIX User 80
  • 81. Select 의 예 (8-2) – First N SYNTAX SELECT FIRST 10 name, salary SELECT FIRST n FROM emp ORDER BY salary DESC; O 질의의 결과중 처음 n 개의 row 를 가져옴 . INFORMIX User 81
  • 82. SQL 실행 경로 확인  SQL 구문이 optimizing 된 결과를 볼 수 있다 .  Set explain on;  확인하고자 하는 구문들 . . .  Set explain off;  UNIX 의 경우 현재 이 구문을 실행한 application 이 실행된 디렉토리 밑에 “ sqexplain.out” 이라는 file 에 기록된다 .  NT 의 경우 $INFORMIXDIR/sqexpln 디렉토리 안에 현재 구문을 실행 한 “ user 이름 .out” 이라는 file 에 기록된다 . 예> QUERY: ------ select * from customer Estimated Cost: 1 Estimated # of Rows Returned: 28 1) anchoi.customer: SEQUENTIAL SCAN INFORMIX User 82
  • 83. INSERT,UPDATE,DELETE  문법  Insert into 테이블 ( 컬럼이름들 ) values( 값들 );  테이블에 값들을 입력  Update 테이블 set 컬럼 ( 들 ) = 값 where 조건 ;  테이블중 조건에 만족하는 row 의 컬럼을 값으로 갱신  Delete 테이블 Where 조건 ;  테이블에 조건을 만족하는 row 를 삭제 INFORMIX User 83
  • 84. Concurrency Control  DB 는 다수의 사용자에 의해 공유됨 .  Read Concurrency - SELECT  4 가지의 isolation level 로 적용 .  Dirty Read  Committed Read  Cursor Stability  Repeatable Read  Update Concurrency - INSERT, DELETE, UPDATE  Lock 의 크기로 적용  Type of Locking  Exclusive  Shared  Update  Levels of locking  Database, Table, Page, Row, Key INFORMIX User 84
  • 85. Concurrency Control - READ Dirty Read Committed Read server process server process Can lock be acquired? 기존의 lock 을 check 하지 않고 , 자신이 lock 을 걸수 있는지 check 하고 읽어내림 . Data 를 읽어내림 . 그러나 자신은 lock 을 걸지 않음 . 이때에 자신도 lock 을 걸지 않고 읽음 . Cursor Stability Repeatable Read server process server process Shared lock Locks put on placed on row all rows examined Cursor 가 현재 fetch 하고 있는 row 에 대해 자신의 process 가 질의에서 참조하고 있는 Lock 을 걸고 , 다음 row 를 fetch 할때에 모든 row 에 대해 lock 을 걸고 작업함 . Lock 을 해제함 . INFORMIX User 85
  • 86. Concurrency Control - READ  Isolation level 의 적용  DB 의 형태 별 default 가 존재 한다 .  NO Logging DB : Dirty Read  Logging DB : Committed Read  ANSI DB : Repeatable Read  따라서 default 이외로 변경시에는 다음의 구문으로 적용하여야 한다 .  해당 세션에만 적용된다 .  구문 Set Isolation To Dirty Read; Set Isolation To Committed Read; Set Isolation To Cursor Stability; Set Isolation To Repeatable Read; INFORMIX User 86
  • 87. Concurrency Control - UPDATE Database Level Locking Table Level Locking database stores exclusive; lock table customer in share mode; stores customer 다른 사용자는 데이터 select select 베이스에 접근할 수 없다 update delete insert set isolation to dirty read customer lock table customer in exclusive mode; INFORMIX User 87
  • 88. Concurrency Control - Lock Mode  다른 사용자에 의해 lock 이 걸려 있는 자료에 접근할때에는 default 로 기다리지 않고 error 를 return. Set Lock Mode to Wait ; Set Lock Mode to Not Wait ; Set Lock Mode to Wait 20 ; set lock mode to wait 20 lock 이 해제될때까지 20 초 동안 기다림 set lock mode to not wait set lock mode to wait lock 이 해제될때까지 기다리지 lock 이 해제될때까지 않고 즉시 에러를 리턴함 무한정 기다림 INFORMIX User 88
  • 89. Concurrency Control - Page/Row  테이블 생성 시 default lock mode 는 page 단위 create table row_lock_table ( id char(20), name char(20) ) lock mode row; alter table page_lock_table lock mode (page); page modify access page modify INFORMIX User 89
  • 90. SPL  Stored Procedure Language  Stored procedure 를 작성하는 데 사용됨 .  Stored procedure  DB 내에 저장된 SQL 문들과 , SPL 로 작성된 구문의 묶음 .  주로 business logic 을 DB 에 저장하는 용도로 사용됨 .  SQL 문은 미리 parsing 되고 optimize 된 상태로 해당 DB 의 시스템 카타로그 테이블 (sysprocedures, sysprocbody, sysprocplan, sysprocauth) 에 저장됨 . INFORMIX User 90
  • 91. SPL - 간단한 예제  작성 Stored procedure 의 이름 매개 변수의 이름 매개 변수의 type create procedure test_proc(name varchar(10)) insert into test_tab values(name); end procedure;  실행 매개 변수로 넘어 온 값을 test_tab 이라는 table 에 insert 하라는 구문 execute procedure test_proc(“anna”); INFORMIX User 91
  • 92. SPL - 코드 내용 보기  DBSCHEMA utility dbschema -d <dbname> -f <procedure 이름 > sql.sql dbschema -d <dbname> -f all spl.sql  System Catalog Table select data from sysprocedures d, sysprocbody b where datakey = “T” and d.procname = “procedure 이름” and d.procid = b.procid INFORMIX User 92
  • 93. SPL 생성 및 실행 - 기본구조  기본구조 Stored procedure 의 이름 매개변수 문장 블럭 (statement block) create procedure raise_prices (per_cent int) update stock -- increase by percentage set unit_price = unit_price + (unit_price * (per_cent / 100 ) ); end procedure 주석 (comment) document “usage : execute procedure raise_prices (xxx) “, “xxx = percentage from 1 – 100 “ document 절은 생략 가능 with listing in “warn_file”; 컴파일 warning 저장 execute procedure raise_prices (5); execute procedure db@servername:raise_prices(5) INFORMIX User 93
  • 94. SPL 생성 및 실행 - 매개변수와 리 턴값 create procedure delete_order (p_order_num int default null ) returning int, int; default 값 define item_count int; select count(*) into item_count from items 매개변수 where order_num=p_order_num; delete from items where order_num = p_order_num; delete from orders where order_num = p_order_num;두 개의 정수 반환 예정 returning p_order_num, item_count; end procedure; 두 개의 정수 변수 반환  DBACCESS execute procedure delete_order (1001) ;  ESQL/C EXEC SQL execute procedure delete_order(:p_order_num) into :p_order_num, :p_item_count; INFORMIX User 94
  • 95. SPL 생성 및 실행 - 커서사용  SPL ESQL/C EXEC SQL declare geti cursor for create procedure get_items() execute procedure get_items(); returning integer, char(3), integer; EXEC SQL open geti while(1) { define p_stock_no integer; EXEC SQL fetch geti define p_manu_code char(3); into :p_num, :p_code, :p_qty; define p_quantity integer; if (sqlca.sqlcode == 100) break; foreach } select stock_num, manu_code, quantity SQL close geti; EXEC into p_stock_no, p_manu_code, p_quantity from items return p_stock_no, p_manu_code, p_quantity with resume; end foreach; end procedure; 커서 사용 foreach 문안에서 계속 리턴값을 반환하도록 한다 INFORMIX User 95
  • 96. SPL 생성 및 실행 - 호출 / 제거  SQL 문에서 호출 select * from orders where order_num = get_biggest_order(114); insert into old_orders execute procedure get_orders(114);  SPL 에서 호출 create procedure give_disconnect (p_customer_num integer) define p_order_num integer; call get_biggest_order (p_customer_num ) returning p_order_num; : end procedure  SPL 제거 drop procedure get_biggest_order; INFORMIX User 96
  • 97. SPL 구문 - 변수  SPL 내부에서 변수 선언  define p_order_date date; 유효한 데이터베이스 자료형  define p_customer_num like orders.customer_num;  define global global_bar integer default 1;  define blob_var references text; 명시한 테이블 컬럼의 자료형 세션 안에서 전역값을 가진다 BLOB 자료형  변수값 할당  let c = 10; let d = 5;  let p_order_date = today;  let a,b = 10,c+d;  let a,b = (select col_a, col_b from tab1 where col_c=10);  let a = proc_name();  let a = c || d; INFORMIX User 97
  • 98. SPL 구문 - 조건식  구문 IF 조건식 THEN 문장 1 ELIF 조건식 THEN 문장 2 ELSE 문장 3 END IF  조건식의 예 if exists (select order_num from orders where order_num = 1023) then : end if if p_total_price > all (select total_price from items where order_num = 1023) then : end if if p_customer_name matches “A*” then : end if INFORMIX User 98
  • 99. SPL 구문 - 루프  FOREACH foreach select ship_charge into p_ship_charge from orders : end foreach;  WHILE ※ 루프 제어 for i = 1 to 10 while i < nbr_rows if i = 5 then insert into test_tab values ( i ); continue for; elif i = 8 then let i = i + 1; exit for; end while end if  FOR end for; for i = 1 to 10 step 2 : end for for i in (1,5,10,15) … end for for i in (1 to 20 step 5, 20 to 1 step –5, 1,2,3,4,5) … end for INFORMIX User 99
  • 100. SPL 구문 – dbinfo 사용  serial 값 반환 define ser int; insert into orders (order_num, order_date, customer_num) values (0, “04/01/99”, 102); let ser = dbinfo(“sqlca.sqlerrd1”);  처리된 행의 수 반환 define num_rows int; delete from orders where customer_num = 104; let num_rows = dbinfo(“sqlca.sqlerrd2”); INFORMIX User 100
  • 101. SPL 구문 - 기타  업데이트 커서 define p_ship_date date; 업데이트 커서의 이름을 명시해야 한다 begin work; foreach cur1 for select ship_date into p_ship_date from orders where order_date < today - 100 if p_ship_date is not null then 현재 커서가 오픈하고 있는 행 delete from orders where current of cur1; end if end foreach; commit work; 업데이트 된 행의 lock 해제  OS 명령어 호출 system “echo ““Delete Operation Completed”” | mail judy” ; system “mail –s violation ” || usr1 || “ ” || usr2 || “< vio.file”; INFORMIX User 101
  • 102. Trigger  트리거 (Trigger) 는 어떠한 이벤트가 발생했을때 자동적으로 SQL 문을 실행하도록 하는 데이터베이스 메커니즘  트리거 이벤트 (event) 는 특정 테이블에 대해 INSERT, UPDATE, DELETE 와 같은 SQL 문  트리거 액션 (action) 은 INSERT, UPDATE, DELETE 및 EXECUTE PROCEDURE 문 Create Trigger Trigger name Trigger Trigger Trigger event action correlation name INFORMIX User 102
  • 103. Trigger - Event / Action  트리거 이벤트 (event)  INSERT ON 테이블이름  DELETE ON 테이블이름 event  UPDATE ON 테이블이름 update orders  UPDATE OF 컬럼이름 ON 테이블이름 set ship_instruct = “express”  트리거 액션 (action) where customer_num =  BEFORE ( SQL 문 ) 106;  FOR EACH ROW ( SQL 문 )  AFTER ( SQL 문 ) 106  예제 106 create trigger test1 update on orders action before (execute procedure check_permission()) execute check_permission for each row (execute procedure log_chg()) update 1 row after (execute procedure log_total()); execute log_chg update 1 row execute log_chg execute log_total INFORMIX User 103
  • 104. Trigger - referencing  트리거 동작 전 , 후의 값을 구분하기 위하여 correlation name 을 부여  NEW, OLD 는 키워드로 DELETE 이벤트에서는 NEW 가 사용 될 수 없 고 , INSERT 이벤트에서는 OLD 가 사용 될 수 없다 .  예제 create trigger items_upd update of total_price on items referencing new as post old as pre for each row (update orders set order_price = order_price + post.total_price = pre.total_price where order_num = post.order_num ); INFORMIX User 104
  • 105. Trigger - when  트리거 이벤트가 발생되었을때 WHEN 절에 조건이 만족하는지 먼저 검 사한 후 조건이 맞을 때에 트리거 액션이 동작한다 .  예제 create trigger ins_cust_calls insert on cust_calls referencing new as post for each row when (post.call_code = “B”) ( insert into warn_billing values (post.customer_num) ); INFORMIX User 105
  • 106. DB admin 작업  DB admin 작업이란  DB 의 생성  Table 의 생성  Table 의 분할  보안의 설정  데이터 무결성 보장  인덱스의 생성  질의 수행을 최적화 해주기 위한 작업  Data Migration
  • 107. DB admin 작업이란  DB admin 작업이란 ?  DB 와 관련된 사항을 결정하고 , 변경하는 작업  DB 나 table 을 생성하는 작업  보안을 적용하는 작업  데이터의 무결성을 보장하는 작업  동시 사용자에 관한 제어  인덱스와 관련된 작업  질의 수행을 최적화해 주는 작업  Data migration INFORMIX User 107
  • 108. DB 의 생성  DB 의 생성시 다음의 사항을 고려해야 한다 .  DB 를 물리적으로 어느 위치에 둘 것인가  DB 가 위치할 dbspace 를 지정함 .  DB 는 어떤 형태로 만들것인가  DB 에 대한 logging 작업을 할 것인가를 결정 create database <DB 이름 > in <DB 를 저장할 dbspace 이름 > default: rootdbs with <DB 의 logging 모드 >;  default : no logging  예> create database test_db in dbspace1 with log; create database test_db with log; create database test_db in dbspace1 ; create database test_db in dbspace1 with buffered log; INFORMIX User 108
  • 109. Table 의 생성  Table 생성시 다음의 사항을 고려해야 한다 .  컬럼에는 어떤 자료형을 사용할 것인가  테이블에 대해 분할 할 것인가  테이블의 위치  얼마만큼의 디스크 공간을 할당할 것인가  테이블에 대한 lock 모드 create table < 테이블이름 >( 컬럼이름 컬럼자료형 ) in <dbspace 이름 > or < 분할 방법및 위치 > extent size < 초기에 할당할 영역 크기 K 단위 : default 는 8page> next size < 증가분에 할당할 영역 크기 K 단위 : default 는 8page> lock mode <row or page : default 는 page>; INFORMIX User 109
  • 110. Table 의 분할  한 테이블의 데이터를 여러 dbspace 에 분할한다  병렬적으로 데이터를 입출력 할 수 있다  입출력의 부하를 균등하게 조절할 수 있다  데이터의 가용성을 향상 시킨다  다양한 기준으로 데이터를 분할할 수 있다 입출력 부하 분산 fragment1 scan thread table 병렬 스 fragment2 scan thread 캔 fragment3 scan thread INFORMIX User 110
  • 111. Table 의 분할 - round robin create table roundtable ( col_1 serial, col_2 char(20), : ) fragment by round robin in dbspace1, dbspace2, dbspace3 extent size 10000 next size 3000 ; insert into roundtable(col_1, col_2) values (0, ‘aabb’); insert into roundtable(col_1, col_2) values (0, ‘aabb’); insert into roundtable(col_1, col_2) values (0, ‘aabb’); insert into roundtable(col_1, col_2) values (0, ‘aabb’); insert into roundtable(col_1, col_2) values (0, ‘aabb’); insert into roundtable(col_1, col_2) values (0, ‘aabb’); dbspace1 dbspace2 dbspace3 INFORMIX User 111
  • 112. Table 의 분할 - Expression create table exprtable ( col_1 serial, col_2 char(20), : ) fragment by expression col_1 <= 100 and col_1 >= 1 in dbspace1, col_1 <= 200 and col_1 > 100 in dbspace2, remainder in dbspace3 ; insert into exprtable(col_1) values (50); insert into exprtable(col_1) values (700); insert into exprtable(col_1) values (120); dbspace1 dbspace2 dbspace3 INFORMIX User 112
  • 113. Table 의 분할 - hash create table exprtable ( col_1 serial, col_2 char(20), : ) fragment by expression mod (col_1, 3) = 0 in dbspace1, mod (col_1, 3) = 1 in dbspace2, mod (col_1, 3) = 2 in dbspace3 ; insert into exprtable(col_1) values (17); insert into exprtable(col_1) values (34); insert into exprtable(col_1) values (66); dbspace1 dbspace2 dbspace3 INFORMIX User 113
  • 114. Table 의 분할 - guidelines  가급적 remainder 절을 쓰지 않도록 expression 을 만든다  여러 디스크에 I/O 를 분산할 수 있도록 고려한다  expression 은 가능한한 단순한 형태여야 한다  expression 에서 가장 제한적인 조건이 먼저 나올 수 있도록 한다  데이터의 변환이 필요한 expression 은 피한다  데이터 로드 및 전체 조회가 주된 목적이라면 round robin 을 사용한다  인덱스 또한 fragment 구문에 의해 분할 될 수 있지만 , 가급적 별도의 dbspace 에 fragment 되지 않은 형태 (detached index) 로 생성한다 create index idx_roundtable on roundtable(col_1) in dbspace4;  테이블 분할에 의한 이득이 그다지 많지 않다면 분할하지 않는다 INFORMIX User 114
  • 115. 보안의 설정  보안의 적용 방법  권한 제한  View 의 사용  Role 의 사용  권한의 종류  DB level : DBA,RESOURCE,CONNECT  Table,Column level : SELECT,INSERT,UPDATE,DELETE,ALTER… INFORMIX User 115
  • 116. 보안의 설정 - 권한 제한  권한 설정 방법  GRANT 권한이름 <on 테이블이름 ( 컬럼이름 )> to user 이름 ;  REVOKE 권한이름 <on 테이블이름 > from user 이름 ;  Table 의 경우 일단 모든 권한을 뺏고 하나하나 설정한다 .  예 GRANT DBA to user1; GRANT CONNECT to user2; REVOKE ALL ON tab1 from PUBLIC; GRANT SELECT ON tab1 to user2; GRANT DELETE,UPDATE,INSERT on tab1 to user1; GRANT SELECT(col1,col2) on tab2 to user2; INFORMIX User 116
  • 117. 보안의 설정 - view 의 사용  View 는 테이블의 일부 혹은 계산된 값등에 설정될 수 있다 .  예 create view cust_seoul as select * from customer where city=‘ 서울’ ; create view big_order_won as select total_price*1200 from orders where total_price > 10000; create view detail_info_cust as select company, order_num,total_price from customer,orders where customer.customer_num=orders.customer_num; INFORMIX User 117
  • 118. 보안의 설정 - role 의 사용  Role 이란 , 사용자의 그룹 권한의 제한이 , 개인별로가 아닌 그룹별로 해야할 필요가 있을때에 쓰임 .  개인은 개인의 권한으로의 작업도 가능하고 , role 의 일원으로서의 작업 도 가능하다  예 Create role marketing; Create role sales; Grant marketing to user1,user2; Grant sales to user3,user4;  만일 user1 이 marketing role 로서 작업하려면 다음 구문을 실행해야 함. Set role marketing; INFORMIX User 118
  • 119. 데이터 무결성의 보장 (1)  데이터값에 대한 속성을 제한자 (constraint) 를 통해 적용 .  종류  Primary Key  Foreign key  CHECK  UNIQUE  NOT NULL INFORMIX User 119
  • 120. 데이터 무결성의 보장 (2)  Constraint 의 이름은 자동적으로 부여 될 수 있지만 , 직접 명시할 수도 있다 CREATE TABLE orders ( order_num integer UNIQUE CONSTRAINT order_num_uq, order_date date NOT NULL CONSTRAINT order_num_nn DEFAULT TODAY); ALTER TABLE orders MODIFY order_num integer NOT NULL CONSTRAINT order_num_nn;  Constraint 는 컬럼 단위 또는 테이블 단위로 정의할 수 있는데 , 다른 컬럼에 대한 정의가 포함될 경우는 테이블 단위로 정의해야만 한다 -- 테이블 단위 ALTER TABLE items ADD CONSTRAINT CHECK (quantity >= 1); -- 컬럼 단위 ALTER TABLE items MODIFY quantity smallint CHECK (quantity >= 1); -- 컬럼 단위는 다른 컬럼을 사용할 수 없다 . ALTER TABLE orders MODIFY paid_date date CHECK (paid_date > ship_date); # #676: Invalid check constraint column. INFORMIX User 120
  • 121. 데이터 무결성의 보장 (3)  Referential Constraint 의 종류  Cyclic referential constraints parent child  Self referential constraints parent  Multiple path constraints parent child child  Primary / Foreign Key 규칙  Primary key 는 자동적으로 unique index 역할을 하게 된다  Foreign key 컬럼값은 Primary key 에 값이 있어야 입력 , 수정 할 수 있다  Foreign Key 값이 있는 상태에서 Primary Key 값을 삭제 , 수정 할 수 없다 INFORMIX User 121
  • 122. 데이터 무결성의 보장 (4)  Cyclic referential constraints create table customer ( customer orders customer_num serial, customer_num order_num fname char(20), fname customer_num primary key (customer_num) constraint pk_cnum ); create table orders ( order_num serial, customer_num integer, foreign key (customer_num) references customer constraint fk_cnum);  Self referential constrains emp create table emp ( enum enum serial, mnum mnum integer, primary key (enum) constraint pk_enum, foreign key (mnum) references emp(enum) constraint fk_enum) ; INFORMIX User 122
  • 123. 데이터 무결성의 보장 (5)  Multiple path referential constraints create table stock ( stock stock_num smallint, stock_num manu_code char(3), manu_code primary key (stock_num, manu_code) constraint pk_stock); create table items ( items catalog item_num smallint, item_num catalog_num stock_num smallint, stock_num stock_num manu_code char(3), manu_code manu_code foreign key (stock_num, manu_code) references stock constraints fk1_stock); create table catalog ( catalog_num serial, stock_num smallint, manu_code char(3), foreign key (stock_num, manu_code) references stock constraints fk2_stock); INFORMIX User 123
  • 124. 인덱스의 생성  테이블에 대해 빠른 접근을 위해 사용  OLTP 업무의 경우 인덱스의 생성은 매우 중요함 .  다음에 해당되는 컬럼에 생성하는 것이 좋음 .  조인의 대상이 되는 컬럼  조건 비교의 대상이 되는 컬럼  정렬의 기준이 되는 컬럼 Create index < 인덱스이름 > on 테이블이름 ( 컬럼이름 ) In < 인덱스를 저장할 위치 >;  예 create unique index idx_cust on customer(customer_num) in dbspace1; create index idx_stock on stock (stock_num, manu_code) ; INFORMIX User 124
  • 125. 질의 수행을 최적화 해주기 위한 작 업  서버로 전달된 모든 질의는 다음의 과정을 거침 Parsing Optimizing Executing 유효성 , 문법 등을 체크 최적화된 질의 수행의 실행 경로를 결정  질의 수행 경로를 결정하는데 참조하는 데이터는 system catalog 의 정 보를 기반으로 함 .  질의 수행 경로를 결정하는 데 영향을 미치는 요인  인덱스 유무 , 데이터의 양 , 데이터 분포도 등 ..  따라서 , 현재상황의 데이터에 관한 정확한 정보를 제공하여야 , 최적의 질의를 수행할 수 있음 . INFORMIX User 125
  • 126. 질의 수행을 최적화 해주기 위한 작 업  Update statistics  System catalog 의 데이터 관련 통계자료를 갱신  데이터에 대한 분포도를 만들어줌 .  Mode 의 종류  Low  system catalog 의 통계정보만 갱신  Medium  통계정보 갱신과 함께 , 데이터 분포도를 만듬 . 이때 , 표본 추출에 의해 분포도를 만듬 .  High  medium 과 같으나 , 표본추출이 아닌 전체 데이터를 가지고 분포도를 만듬 . INFORMIX User 126
  • 127. 질의 수행을 최적화 해주기 위한 작 업  언제 수행하여야 하나 ?  대량의 데이터 변경시에는 반드시 해주어야 한다 .  Bulk Data loading 후 , bulk update 등 ..  시스템 유휴 시간대에 정기적으로 해주어도 좋다 .  구문  Update statistics [low|medium|high] ;  Update statistics [low|medium|high] for table;  Update statistics [low|medium|high] for table 테이블이름 ;  Update statistics [low|medium|high] for table 테이블이름 ( 컬럼이름 ); INFORMIX User 127
  • 128. Data Migration  DB 혹은 table 을 file 로 내릴 필요가 있을때 사용 .  Data Backup 의 하나의 방법으로도 사용 가능  서로 다른 기종의 machine 에 있는 서버로 데이터를 옮기고자 할때 유 용.  Data 를 기존의 table 에 append 할때에 유용 .  사용 용도나 , 제공되는 기능에 따라 다양한 tool, 구문을 제공 . INFORMIX User 128
  • 129. Data Migration - Unloading  종류  UNLOAD 구문  SQL 구문이므로 사용하기 쉽고 , 원하는 조건에 따라 내려 받을 수 있다 .  UNLOAD to ‘ 파일이름’ select * from customer;  ONUNLOAD  DB 담위 , table 단위 가능  Binary 형태로 받음 .  onunload –t /dev/rmt0 DB 이름  DBEXPORT  DB 단위의 작업 지원 : DB 단위작업에 가장 많이 사용  Ascii 형태로 받음 .  dbexport DB 이름  ONPLOAD  HPL(High Performance Loader) 을 구성하는 process  많은 양의 데이터에 대해 가장 좋은 성능을 냄 . INFORMIX User 129
  • 130. Data Migration - Loading  종류  LOAD 구문  SQL 구문이므로 사용하기 쉽고 , 원하는 조건에 따라 내려 받을 수 있다 .  LOAD from ‘ 파일이름’ insert into customer;  ONLOAD  DB 담위 , table 단위 가능  Binary 형태로 받음 .  onload –t /dev/rmt0 DB 이름  DBIMPORT  DB 단위의 작업 지원 : DB 단위작업에 가장 많이 사용  Ascii 형태로 받음 .  dbimport DB 이름  ONPLOAD  HPL(High Performance Loader) 을 구성하는 process  많은 양의 데이터에 대해 가장 좋은 성능을 냄 . INFORMIX User 130
  • 131. ESQL/C 를 이용한 프로그래밍  ESQL/C 란  ESQL/C 의 사용  ESQL/C 프로그램 작성 규칙  ESQL/C 프로그램 compile  ESQL/C 프로그램 작성 예제  호스트변수 (Host Variables)  데이터베이스 연결  SQLCA 구조체  EXCEPTION 테스트  GET DIAGNOSTICS 사용  prepare 를 사용한 단순 DML 처리  Indicator 사용  커서 (Cursors)
  • 132. ESQL/C 란  C 프로그램 내에 sql 구문을 바로 넣어 그 실행 결과를 프로그램에서 다양하게 사용할 수 있도록 제공되는 어플리케이션 개발 tool  ESQL/C 의 주된 component 는 preprocessor 로서 ESQL/C code 를 C code 로 변환하여 C compiler 에게 넘겨준다 . INFORMIX User 132
  • 133. ESQL/C 의 사용  다음의 환경변수를 설정해야 한다 .  INFORMIXDIR  ESQL/C 설치 디렉토리  PATH  ESQL/C 실행 파일의 위치를 추가  LD_LIBRARY_PATH  Library 의 위치  INFORMIXC  CC 컴파일러 외의 다른 컴파일러를 사용하고자 할 때  예 export INFORMIXDIR=/usr/informix export PATH=$PATH:$INFORMIXDIR/bin export LD_LIBRARY_PATH=$INFORMIXDIR/lib:$INFORMIXDIR/lib/esql export INFORMIXC=gcc INFORMIX User 133
  • 134. ESQL/C 프로그램 작성 규칙  ESQL/C preprocessor 가 다른 C code 와 구별할 수 있게 하기 위해 SQL 은 “ $” 혹은 “ exec sql” 으로 시작  SQL 구문의 끝에는 “ ;” 를 붙임 .  SQL 구문 안의 변수 (host 변수라 부름 ) 는 변수 이름 앞에 “ :” 를 붙 임.  주석은 표준 C 의 주석인 “ /* */” 사용 INFORMIX User 134
  • 135. ESQL/C 프로그램 compile (1)  Esql 의 option 은 다양하므로 각 경우에 따라 다양하게 사용  esql [-e] [preprocessor 옵션 ] [cc 매개변수 ] [-o 실행파일 ] 소스 .ec [ 링크옵션 ]  예>  ESQL/C 로 작성된 customer.ec file 을 customer 라는 이름의 실행파일로 만들고자 한다면 esql -o customer customer.ec customer.ec customer. c customer. o customer esql preprocess c compile -shared 옵션이 default 값 standard library esql/c library -static 옵션 esql customer.ec file.c -l mylib -o customer -static customer.ec customer. c customer. o customer esql preprocess c compile file.c file. o mylib INFORMIX User 135