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
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