4월, 2015의 게시물 표시

db2 테이블스페이스 확인 및 확장

DB 시작 # su - db2inst1 $ db2start $ db2 connect to DB_NAME DB 종료 # su - db2inst1 $ db2 terminate $ db2 force application all $ db2stop * 참고 db2 activate db 명령어는 DB global memory를 미리 메모리에 상주시켜, 처음 connect 시간을 단축 DB를 중지 시 db2 deactivate db 명령어를 이용하여 메모리를 release 시켜야 함 $ db2 activate db 테이블스페이스 확인 $ db2 list tablespaces show detail | more 테이블스페이스 확인 $ db2 list tablespace containers for 3 (3 : Tablespace ID) 로그 확인 $ db2diag >> db2diag.log_1 * The DMS table space "TABLE_NAME" (ID "3") is full. "DMS Container space full" Error 메세지 확인. (3은 Tablespace ID) * DMS(Database Managed Space) 테이블 공간은 데이터베이스 관리 프로그램이 저장 공간을 제어한다. SMS(System Managed Space)에 비해 지속적인 관리가 필요하지만, long 데이터, index등을 따로 저장할 수 있고 하나의 데이블을 여러 테이블 공간에 저장할 수 있는 등 성능면에서 이점. * Tablesapce에 할당되는 페이지 개수는 4, 8, 16, 31k 단위이며, Logical Volumn 생성시 부여한 lv size 보다 크게 지정할 경우 Error가 발생하고, 작게 지정할 경우 남은 size 만큼 사용이 불가능하므로 정확하게 계산하여 지정. 테이블스페이스 생성 $ create tablespace TABLESPACE_NAME ma

db2 Linux 설치

DB2 설치 및 삭제 설치 OS . CentOS 5.7 . Gnome 다운로드 . http://www.ibm.com/db2/express/download.html . db2exc_975_LNX_x86.tar.gz # cd /usr/local # tar xvfz db2exc_975_LNX_x86.tar.gz 커널 수정 # ipcs -l # sysctl -w kernel.msgmni=128 설치1 - GUI # ./db2setup . 제품 설치 . 새로 설치 . 소프트웨어 사용권 계약 : 승인 . 일반 설치 . 내 설정값 저장 . 설치 디렉토리 : /opt/ibm/db2/v9.7 . DAS 사용자 - dasusr1 / dasadm1 . 인스턴스 설정 . 인스턴스 사용자 - db2inst1 / db2iadm1 . 분리 사용자 - db2fenc1 / db2fadm1 설치2 # mkdir /db2home # groupadd -g 999 db2iadm1 # groupadd -g 998 db2fadm1 # groupadd -g 997 dasadm1 # useradd -u 1004 -g db2iadm1 -m -d /db2home/db2inst1 db2inst1 # useradd -u 1003 -g db2fadm1 -m -d /db2home/db2fenc1 db2fenc1 # useradd -u 1002 -g dasadm1 -m -d /home/dasusr1 dasusr1 # passwd db2inst1 # mkdir /db2data # mkdir /db2data/db2inst1 # chown -R db2inst1:db2iadm1 /db2data/db2inst1 # chmod 0775 /db2data/db2inst1 # ./db2_install ; DB2.EXP # cd /opt/ibm/db2/v9.7/instance # ./db2icrt -u db2fenc1 db2inst1 # ./dascrt d

db2 command

실행 . 대화식 모드 # su - db2inst1 $ db2 db2 => select * from table . 비대화식 모드 $ db2 "select * from table" $ ls -al 세션 종료 db2 => quit ; 데이터베이스 접속은 유지 db2 => terminate ; 데이터베이스 접속 및 백그라운드 프로세스 종료 스크립트 실행 $ db2 -tvf file_name 예제 $ db2 connect to sample $ db2 list tables $ db2 ! ls $ db2 ? list tables $ db2 ? list 참고 db2 => ? db2 => help <명령문> db2 => !<OS 명령어> db2 => HISTORY

db2 인스턴스

인스턴스 생성 . db2icrt -u <Fenced ID> <InstName> . Fenced User ID를 반드시 지정 (설치 유저 생성 참조) # cd /opt/ibm/db2/v9.7/instance # ./db2icrt -u db2fenc1 db2inst1 # ./dascrt dasusr1 인스턴스 제거 . 데이터베이스 확인 $ db2 list db directory . 데이터베이스 삭제 $ db2 drop db sample . 인스턴스를 모두 중지 $ db2stop force $ exit $ ./db2idrop db2inst1 . 데이터베이스를 다른 인스턴스에 사용할 경우 - 데이터베이스를 drop 하지 않고 인스턴스를 중지 $ ./db2idrop db2inst1 $ db2 catalog db sample on /home 인스턴스 시작 # su - db2inst1 $ db2start 인스턴스 중지 # su - db2inst1 $ db2 force applications all $ db2stop $ db2stop force 인스턴스 구성 파일 확인 $ db2 attach to db2inst1 $ db2 get dbm cfg show detail | more $ db2 detach 인스턴스 구성 변수 초기화 $ db2 reset dbm cfg $ db2stop force $ db2start db2 관리 서버 . 제어 센터 등의 GUI 도구를 이용하여 db2 udb를 운영할 경우 필요 # su - dasusr1 $ db2admin start $ db2admin stop . DAS 확인 $ db2set db2adminserver

db2 데이터베이스

개요 . 하나의 인스턴스에 한 개 이상의 데이터베이스 생성 . 데이터베이스 구성 파일을 이요하여 개별적인 환경 구성 . 3개의 기본 테이블 스페이스 : SYSCATSPACE, TEMPSPACE1, USERSPACE1 . SYSCATSPACE 테이블 스페이스에는 데이터베이스의 모든 오브젝트에 대한 정보를 저장하고 있는 메타 테이블인 시스템 카탈로그 테이블이 생성 . 데이터에 대한 변경 사항은 데이터베이스 트랜잭션 로그 파일에 기록 초기 3개의 기본 로그 파일과 2개의 보조 로그 파일이 생성 데이터베이스 구성 파일을 이용하여 로그 파일의 개수와 크기를 조절 데이터베이스 생성 및 제거 ; 생성 # su - db2inst1 $ db2 "create db NEW_DB" $ ls -al ~/$DB2INSTANCE/NODE* $ db2 "create db NEW_DB on /database/db2data" $ ls -al /database/db2data/$DB2INSTANCE/NODE* ;예제 $ db2 "create db NEW_DB automatic storage yes on /db2data" ; 확인 $ db2 list db directory ; CODESET, TERRITORY 지정 $ db2 "create db NEW_DB using codeset <CODESET> TERRITORY <국가코드> $ db2 get db cfg for NEW_DB | grep <국가코드> ; 제거 $ db2stop $ db2 drop db NEW_DB 접속 및 해제 ; 접속 $ db2 connect to NEW_DB $ db2 "select * from syscat.tables" $ db2 "select current date from syscat.tables" ; 접속 해제 $ db2 connec

db2 테이블스페이스

테이블스페이스 관리 . 테이블 스페이스는 테이블을 저장하는 논리적 개념 . 테이블 스페이스를 구성하는 물리적인 개념은 Container ; 디폴트 테이블스페이스 SYSCATSPACE : catalog table 및 데이터베이스를 관리하기 위한 관리 테이블들이 저장 TEMPSAPCE1 : temporary 테이블 스페이스 USERSAPCE1 : 사용자가 생성한 오브젝트 및 데이터를 저장하는 테이블스페이스 테이블 생성시 테이블스페이스를 지정하지 않을 경우 디폴트로 이 테이블스페이스를 사용 ; 테이블스페이스 관리 방식 . System Managed Space(SMS) - 운영체제가 테이블스페이스를 관리 - 컨테이너로 디렉토리가 사용되며 운영체제의 파일시스템이 스토리지 할당 및 관리를 제어 . Database Managed Space(DMS) - 데이터베이스가 테이블스페이스를 관리 - 컨테이너로 file과 raw device가 이용 . Automatic Storag table space - DB2가 자동으로 스토리지를 관리 - 테이블스페이스 타입에 따라 SMS, DMS로 자동 생성하며 컨테이너를 지정할 필요 없음 ; 테이블스페이스 타입 . Regular - 오브젝트 및 인덱스의 모든 데이터를 저장하는 공간 . Temporary - System Temporary : 정렬 및 SQL문 및 기타 작업 실행 시 데이터베이스 Manager가 사용하는 영역 - User Temporary : 세션의 전역 임시 테이블의 데이터를 임시로 저장하는 영역 . Large - regular 처럼 모든 데이터를 저장하나 관리 유형이 DMS일 경우에만 생성이 가능 테이블스페이스 생성/확장/삭제 ; 생성 $ db2 connect to NEW_DB $ db2 "create tablespace NEW_TS managed by database using (file '/data/db2inst1/db2data/NEW_TS_FILE'

db2 명령어

db2licm -v $ db2licm -l $ db2level 데이터베이스 접속 여부 확인 $ db2 get connection state 접속한 데이터베이스 확인 $ db2 "values (current server)" 데이터베이스 코드 페이지 확인 $ db2 get db cfg for DB_NAME | grep code 데이터베이스 로그 파일 정보 확인 $ db2 get db cfg for DB_NAME | grep LOG 시스템 로그 확인 $ taif -f systemout.log 데이터베이스 목록 확인 $ db2 list db directory $ db2 list db directory show detail |grep -B6 -i indirect | grep "Database name" 데이터베이스 용량 확인 $ db2 "call GET_DBSIZE_INFO(?,?,?,0)" 활성화되어 있는 데이터베이스 확인 $ db2 list active databases DB에 있는 Table 확인 $ db2 list tables $ db2 list tables for all | more TABLE의 column 정보 확인 $ db2 connect to DB_NAME $ db2 "select tabschema, tabname, colname, taypename, length, scale, default, nulls from syscat.columns" Application 확인 $ db2 list application show detail $ db2 get snapshot for application agentid 111(Appl. Handle) $ db2 update monitor switches usnig statement on lock on uow on $ db2 update monitor switches using uow on $ d

DB2 백업 및 복구 백업

백업 . online backup - full backup, tablespace backup 가능 - 복구 시 반드시 restore, rollforward 복구를 수행 . offline backup - restore 복구만 수행 . DB2가 살아있어야 하고, normal, backup-pending 상태 . connect 상태 Online full backup . online full backup $ db2 connect to TESTDB $ db2 list applications $ db2 force application all $ db2 terminate $ db2stop force $ db2start $ db2 backup db TESTDB online to /dbbackup . online tablespace backup $ db2 backup database TESTDB tablespace table1 online 복구 . crash recovery - 전원 off나 비정상적인 종료 시 - 데이터베이스가 자동으로 복구 - restart 명령어로 수동 복구 . restore recovery - 백업이미지로 백업 시점까지 복구 . rollforward recovery - 로그이미지로 복구 - 최근이나 특정 시점까지 복구 . 버전 복구 $ db2 force applications all $ db2 restore db TESTDB from /dbbackup taken at 201112182005 - 백업파일이 여러개 있는 경우 taken at 옵션으로 백업이미지 시간을 지정 . rollforward 복구 - 백업이미지 시점 이전의 로그파일을 /db2/db2inst1/log_dir/NODE0000 에 복사 - 소유권 변경 $ db2 rollforward db TESTDB to end of logs and complete - 확인 $ rollforward db TESTDB query s

db2 user 생성 및 권한 설정

1. user 생성 . OS에서 유저 생성 . mkuser testuser 2. 권한 설정 . connect 권한 > db2 grant connect on database to user testuser . connect 확인 > db2 connect to test_db user testuser using testpassword . select 권한 > db2 grant select on test_db.test_table to user testuser 3. toad 접속 . node 확인 > db2 list node directory ; node name, Hostname, Service name * connect 권한만 준 경우 select 할 수 없음. * table 별로 select 권한 설정.

db2 table 복사

1. ddl 확인 및 수정 > db2look -d DB_NAME -e -t TABLE_NAME -nofed -x > TABLE_NAME_look.out > vi TABLE_NAME_look.out . TABLE_NAME -> TABLE_NAME_TEST 변경 2. table 생성 및 insert > db2 -stvf TABLE_NAME_look.out > db2 "insert into SCHEMA.TABLE_NAME_TEST select * from SCHEMA.TABLE_NAME; * 추가 1. DDL 확인 및 수정 > db2look -d DB_NAME -e -t TABLE_NAME -nofed -x > TABLE_NAME_look.out > vi TABLE_NAME_look.out . TABLE_NAME -> TABLE_NAME_TEST1 변경 2. table 생성 및 insert > db2 -stvf TABLE_NAME_look.out > db2 "insert into SCHEMA.TABLE_NAME_TEST1 select * from SCHEMA.TABLE_NAME; 3. TABLE_NAME_TEST2 생성 및 데이터 입력(PK_COLUMN) > db2look -d DB_NAME -e -t TABLE_NAME -nofed -x > TABLE_NAME_look.out > vi TABLE_NAME_look.out . TABLE_NAME -> TABLE_NAME_TEST2 변경 . PK column 만 생성 > db2 -stvf TABLE_NAME_look.out > db2 "insert into SCHEMA.TABLE_NAME_TEST2 ( select PK_COLUMN from SCHEMA.TABLE_NAME except select PK_COLUMN from into SCHEMA.TABLE_N

db2 table 확인

db2 describe table syscat.tables db2 "select count(*) from syscat.tables where type='T' db2 "select count(*) from syscat.tables where type='T' and tabschema not like 'SYS%'"

DB2 table export/import

del 형식 - csv 형태의 텍스트 파일로 export ixf 형식 - oracle exp와 유사, 테이블 생성과 insert 작업을 동시에 지정 del 형식 db2=> select * from test_table db2=> export to test_table_del.dmp of del select * from test_table db2=> !type test_table.dmp db2=> delete from test_table db2=> select * from test_table db2=> import from test_table.dmp of del insert into emp db2=> select * from test_table ixf 형식 db2=> select * from test_table db2=> export to test_table_ixf.dmp of ixf select * from test_table db2=> drop table test_table db2=> import from test_table_ixf.dmp of ixf create into test_table db2=> select * from test_table *** 추가 데이터 삭제 및 insert db2=> select * from test_table db2=> export to test_table_ixf.dmp of ixf select * from test_table db2=> delect * from test_table db2=> import from test_table_ixf.dmp of ixf insert into test_table 테이블 삭제 db2=> export to test_table_ixf.dmp of ixf select * from test_table # db2look -d kbp -e -t "tes

DB2 Federation

- 환경설정 # db2 get dbm cfg | grep -i federated # db2 update dbm cfg suing federated yes # db2stop # db2start - catalog node, db 생성 # db2 connect to db1svr # db2 catalog tcpip node KBP_NEW remote xxx.xxx.xxx.xxx server 50000; # db2 list node directory # db2 attach to KBP_NEW user db2inst1 using db2inst1 # db2 catalog db KBP_NEW as KBP_NEW at node KBP_NEW; # db2 list db directory - wrapper 설정 # db2 create wrapper drda # db2 select * from syscat.wrappers - server 정의 # db2 "create server db2svr type db2/udb version '9.1' wrapper "drda" authorization "db2inst1" password "db2inst1" options( add d bname 'KBP_NEW', add nodename 'KBP_NEW')" # db2 "select * from syscat.servers" - user mapping # db2 "create user mapping for db2singl server db2svr options (remote_authid 'db2inst1`, remote_password 'db2inst1')" - nickname 생성 # db2 create nickname sapkbp.TAB1_TEST for db2svr.sapkbp.TAP

DB2 SQL1040N 데이터베이스에 이미 최대 응용프로그램 수가 연결되어 있습니다.

# db2 connect to TESTDB SQL1040N 데이터베이스에 이미 최대 응용프로그램 수가 연결되어 있습니다. SQLSTATE=57030 # db2 list application global | wc -l ===== 40 ===== # db2 get db cfg for TESTDB |grep -i maxappls ===== 실행 중인 최대 프로그램 수 (MAXAPPLS) = 40 ===== * default : 40 # db2 update db cfg for TESTDB using maxappls 50 # db2 force application all # db2stop # db2start * 참고 # db2 force application ('appl.handle')

db2 reorg

reorg 효과 1. 데이터 정렬(cluster index) 2. 삭제된 row 및 overflow 된 row의 공간 정리 3. extent 재배치 4. pctree 확보 5. index rebuild -> index tree 최적화 reorg command # db2 reorgchk current statistics on table SCHEMA.TABLE # db2 reorg table SCHEMA.TABLE user TEMPTABLESPACE # db2 reorg table SCHEMA.TABLE index SCHEMA.INDEX # db2 runstats on table SCHEMA.TABLE with distribution and indexes all *** CARD는 runstats 후 최신값으로 업데이트 *** clusterratio : 하나의 index를 이용해서 전체 table의 data를 access 할 때 index 순서와 data page가 얼마나 일치 (* db2 reorg indexes all for table SCHEMA.TABLE) rerog 작업 내역 확인 # db2pd -db DBNAME -reorgs reorg 기타 Table statistics: F1: 100 * OVERFLOW / CARD < 5 F2: 100 * (Effective Space Utilization of Data Pages) > 70 F3: 100 * (Required Pages / Total Pages) > 80 Index statistics: F4: CLUSTERRATIO or normalized CLUSTERFACTOR > 80 F5: 100 * (KEYS * (ISIZE + 9) + (CARD - KEYS) * 5) / ((NLEAF - NUM EMPTY LEAFS -1) * (INDEXPAGESIZE - 96) > MIN(50, (10 0- PCTFREE)) F6: (