onpladm quick start guide
onpladm은 GUI환경의 ipload나 shell program을 대체할 수 있는 서버 명령어로 IIF 9.2버전 이후에 제공된다. job은 mapping과 formatting이 필요한 conversion job과 informix의 internal format 즉, unload/load형태로 자료를 사용할 수 있는 non-conversion job이 있다.
non-conversion job 생성
onpladm create job [-p ] -d
-D -t -f [luadp]
[-T ] [-S ]
예)onpladm create job customer2 -d /tmp/pload/customer2.unl -D stores_demo -t customer2 -fu -n
Successfully created Job customer2
최초로 job을 생성하면 onpload 데이터베이스 생성된다
-n옵션은 no-conversion job이란 의미
-f옵션에는 u(unload), l(load), a(device array), d(tape device), p(pipe command)를 넣을 수 있는데, u나 l옵션 하나만 넣어도 unload job과 load job이 한번에 생성된다 (왜 그럴까?)
job list 확인
onpladm list job [ -p <projectname>] -f[lu] [-S <onploadservername>]
예)onpladm list job
customer2 [L]
customer2 [ U]
list옵션에는 job외에도 map, format, query, device, filter, machine, project, default 옵션이 있는데, no-conversion job을 생성했다면 query와 device에만 정보가 들어있다.
즉, query리스트를 보려면 onpladm list query 실행
job실행
onpladm run job <jobname> -p <projectname> -f [lu]
[-l <log_file_name>] [-S <onploadservername>]
예)onpladm run job customer2 -fu
Successful connection to onpload established
Wed Mar 21 19:10:26 2001
SHMBASE 0xa000000
CLIENTNUM 0x49010000
Session ID 2
Unload Database -> stores_demo
Query Name -> AUTO.2
Device Array -> customer2
Query Mapping -> AUTO.2
Query -> select * from customer2 for read only
Convert Reject -> /tmp/customer2.rej
Database Unload Completed -- Unloaded 28 Records Detected 0 Errors
Wed Mar 21 19:10:30 2001
Job Completed Successfully ... connection closed
-l옵션을 주고 로그파일을 지정하면 화면상에 출력되는 메시지가 파일로 저장된다
job 내용 확인
onpladm describe job -f[lu] [-F <specfilename> [-p <projectname> ] [-R] [-S <onploadservername>]
예) onpladm describe job customer2 -fu
BEGIN OBJECT FASTUNLOADJOB customer2
PROJECT
DEVICE customer2
SERVER
DATABASE stores_demo
QUERY customer2
END OBJECT
list옵션과 마찬가지로 describe뒤에 map, format, query, device, filter, machine, project, default 옵션을 사용할 수 있다
예) onpladm describe query customer2
BEGIN OBJECT QUERY customer2
PROJECT
DATABASE stores_demo
SELECTSTATEMENT "select * from customer2"
END OBJECT
예) onpladm describe device customer2
BEGIN OBJECT DEVICEARRAY customer2
BEGIN SEQUENCE
TYPE FILE
FILE /tmp/pload/customer2.unl
TAPEBLOCKSIZE 0
TAPEDEVICESIZE 0
PIPECOMMAND
END SEQUENCE
END OBJECT
job 변경
onpladm modify object [-F <specfilename>] [-S <onploadservername>]
다음은 device를 변경하는 예제이다
예)vi customer2.mod
BEGIN OBJECT DEVICEARRAY customer2
BEGIN SEQUENCE
TYPE FILE
FILE /tmp/pload/customer.txt
TAPEBLOCKSIZE 0
TAPEDEVICESIZE 0
PIPECOMMAND
END SEQUENCE
END OBJECT
예)onpladm modify object -F ./customer2.mod
Successfully modified object DEVICEARRAY customer2
specfile을 만들기 위해서 describe로 기존의 값을 먼저 파일로 저장하고 그 구문에 맞춰 필요한 부분을 고치면 편리하다
job 삭제
onpladm delete job <jobname> [-p <projectname>] [-R] [-S <onploadservername>]
예)onpladm delete job customer2 -fl
Successfully deleted Job customer2
위의 경우 customer2의 unload job은 삭제되지 않고 남아있다
job을 모두 삭제하더라도 query나 device등에는 여전히 남아있다
따라서, 완전히 모든 정보를 지우기 위해서는 각각 delete명령을 사용해야한다
예)onpladm delete device customer2
Successfully deleted Device-Array customer2
예)onpladm delete query customer2
Successfully deleted Query customer2
CASE STUDY - fixed length 데이터 로드
테이블 생성
$ dbaccess stores_demo << !
create table fixedlengthtable (
col1 int,
col2 char(3),
col3 char(3) );
!
데이터파일
$ vi /tmp/pload/fixedlength.dat
1abc123
2bcd234
3cde345
4def456
5efg567
6fgh678
7ghi789
8hij890
9ijk901
device 정의
$ vi /tmp/pload/fixed.device
BEGIN OBJECT DEVICEARRAY fixeddevice
BEGIN SEQUENCE
TYPE FILE
FILE /tmp/pload/fixedlength.dat
TAPEBLOCKSIZE 0
TAPEDEVICESIZE 0
PIPECOMMAND
END SEQUENCE
END OBJECT
$ onpladm create object -F fixed.device
Successfully created object DEVICEARRAY fixeddevice
format 정의
$ vi /tmp/pload/fixed.format
BEGIN OBJECT FIXEDFORMAT fixedformat
PROJECT
CHARACTERSET ASCII
MACHINE Sparcstation
BEGIN SEQUENCE
FIELDNAME f01
DATATYPE "Chars"
BYTES 1
DECIMALS
OFFSET 0
END SEQUENCE
BEGIN SEQUENCE
FIELDNAME f02
DATATYPE "Chars"
BYTES 3
DECIMALS
OFFSET 1
END SEQUENCE
BEGIN SEQUENCE
FIELDNAME f03
DATATYPE "Chars"
BYTES 3
DECIMALS
OFFSET 4
END SEQUENCE
BEGIN SEQUENCE
FIELDNAME f04
DATATYPE "Chars"
BYTES 1
DECIMALS
OFFSET 7
END SEQUENCE
END OBJECT
데이터 파일의 carriage return값을 읽기 위해서 f04를 선언했다
$ onpladm create object -F fixed.format
Successfully created object FIXEDFORMAT fixedformat
map 정의
$ vi /tmp/pload/fixed.map
BEGIN OBJECT LOADMAP fixedmap
PROJECT
FORMAT fixedformat
DATABASE stores_demo
TABLE fixedlengthtable
BEGIN SEQUENCE
COLUMNNAME col1
FIELDNAME f01
JUSTIFICATION
CASECONVERT
DEFAULTVALUE
TRANSFERBYTES 0
COLUMNOFFSET 0
FIELDOFFSET 0
FIELDMINIMUM
FIELDMAXIMUM
FILLCHARACTER
PICTURE
FUNCTION
STORAGECODING
BLOBCOLUMN
END SEQUENCE
BEGIN SEQUENCE
COLUMNNAME col2
FIELDNAME f02
JUSTIFICATION
CASECONVERT
DEFAULTVALUE
TRANSFERBYTES 0
COLUMNOFFSET 0
FIELDOFFSET 0
FIELDMINIMUM
FIELDMAXIMUM
FILLCHARACTER
PICTURE
FUNCTION
STORAGECODING
BLOBCOLUMN
END SEQUENCE
BEGIN SEQUENCE
COLUMNNAME col3
FIELDNAME f03
JUSTIFICATION
CASECONVERT
DEFAULTVALUE
TRANSFERBYTES 0
COLUMNOFFSET 0
FIELDOFFSET 0
FIELDMINIMUM
FIELDMAXIMUM
FILLCHARACTER
PICTURE
FUNCTION
STORAGECODING
BLOBCOLUMN
END SEQUENCE
END OBJECT
format에서는 f04를 선언했지만 mapping시키지는 않는다
$ onpladm create object -F fixed.map
Successfully created object LOADMAP fixedmap
device 정의
$ vi /tmp/pload/fixed.job
BEGIN OBJECT LOADJOB fixedjob
PROJECT
DEVICE fixeddevice
MAP fixedmap
FILTER
SERVER
DATABASE stores_demo
REJECTFILE /tmp/pload/fixedjob.rej
LOGFILE /tmp/pload/fixedjob.log
RUNMODE E
GENERATEVIORECS Y
TAPES 0
NUMRECORDS 0
STARTRECORD 0
MAXERRORS 0
END OBJECT
$ onpladm create object -F fixed.job
Successfully created object LOADJOB fixedjob
data load
$ onpladm run job fixedjob -fl
Connecting to onpload, Please wait...
Successful connection to onpload established
Thu Mar 22 11:19:59 2001
SHMBASE 0xa000000
CLIENTNUM 0x49010000
Session ID 8
Load Database -> stores_demo
Load Table -> fixedlengthtable
Device Array -> fixeddevice
Record Mapping -> fixedmap
Convert Reject -> /tmp/pload/fixedjob.rej
Table 'fixedlengthtable' will be read-only until level 0 archive
Database Load Completed -- Processed 9 Records
Records Inserted-> 9
Detected Errors--> 0
Engine Rejected--> 0
Thu Mar 22 11:20:05 2001
Job Completed Successfully ... connection closed
마치며...
기존에 사용하던 shell이나, ipload 작업과 마찬가지로 onpladm에서 job을 생성하면 모든 정보는 onpload 데이터베이스에 만들어지는데, 몇가지 테이블을 업데이트하여 필요한 정보 변경할 수 있다.
unload 파일의 delimiter를 다른 문자로 변경하고 싶으면
formats 테이블에서 fieldsep 컬럼에 변경할 delimiter문자를 넣는다.
log파일을 변경하고 싶으면
session테이블에서 logfile 컬럼에 전체경로와 파일명을 넣는다.
reject파일을 변경하고 싶으면
session테이블에서 rejectfile 컬럼에 전체경로와 파일명을 넣는다.
runmode(express,deluxe)를 변경하고 싶으면
session테이블에서 runmode를 변경한다
LOAD JOB
deluxe : 129
express : 130
UNLOAD JOB
Dirty Read : 129
Committed Read : 130
한글 로케일을 사용해야한다면 session테이블에서 datatype컬럼값을 ASCII에서 KS5601로 바꾼다 .
데이터파일을 여러개로 구분한다면 device테이블에서 seq를 1부터 증가하면서 file컬럼에 데이터파일명을 넣는다.
즉,seq:1, file:/tmp/customer1.unl
seq:2, file:/tmp/customer2.unl 등등..
위의 모든 테이블에서 키가 되는 컬럼은 name인데 update할때 where절에 name조건을 넣지 않아서 전체 job이 몽땅 변경되는 사태는 만들지 말아야 하겠다.
음.. 이정도쯤은 shell로 만들어 놔도 간단히 쓸만 하겠는데..
onpladm에 대해 더 자세한 내용은 인포믹스 onpladm 매뉴얼을 참조한다
|