사용법 기초 정리
IBM DB2 EE 7.2.1
Windows 2000 Advanced Server
RAM 512MB
IBM DB2 PE 8.1
OS: RedHat 8.0
Kernel: 2.4.20
CPU: Celeron (Mendocino) 400MHz
RAM: 160MB
작성자: 강명규(kang@dbakorea.pe.kr)
내가 테스트해본 것을 개인적으로 정리한 것이다.
DB2는 하나의 인스턴스가 여러개의 데이터베이스를 가질 수 있다.
MySQL, MS-SQL과 유사한 구성이라고 하겠다.
[DB2 기초 정리]
윈도에서 DB2를 설치하고 사용한 것을 정리한 것이다.
프로그램의 위치등을 제외하면 리눅스등의 OS와 별 차이가 없을 것이다.
설치디렉토리: C:\Program Files\SQLLIB
등록된 사용자: db2admin (내 컴퓨터 - 관리 - 로컬 사용자 및 그룹 - 사용자)
등록된 서비스: TCP/IP서비스(db2cDB2)가 C:\WINNT\system32\drivers\etc\services에 등록됨
관리도구 - 서비스에 서비스들이 등록됨(자동시작되는 서비스는 o로 표시)
(o) DB2 - DB2
(o) DB2 - DB2CTLSV
(o) DB2 - DB2DAS00
(x) DB2 Governor
(o) DB2 JDBC Applet Server
(x) DB2 JDBC Applet Server - Control Center
(o) DB2 License Server
(o) DB2 Security Server
DB2 Command실행 방법(콘솔)
db2콘솔을 사용하려면 일단 db2환경을 꾸며줘야 하는데 윈도의 경우, db2cmd.exe를 실행해주면 되고,
유닉스계열은 db2profile를 실행해주면 된다. 그런 후 db2명령을 사용할 수 있게 된다.
아래 2가지 방법중 원하는 방식을 택해서 하면 되겠다.
1. 명령프롬프트: 'db2cmd db2 get dbm cfg' 실행
2. Command Window(명령창): 'db2 get dbm cfg' 실행 (시작 - 프로그램 - IBM DB2)
3. Command Line Processor: 'get dbm cfg' 실행(시작 - 프로그램 - IBM DB2)
db2cmd, db2명령은 각각 독립적으로 실행할 수도 있다.
즉, db2cmd를 치고 나서, db2를 치고 나온 프롬프트에서 'get dbm cfg'를 실행해도 된다.
'get dbm cfg'는 'get database manager configuration'로도 쓸 수 있다.
이후부터 질의어는 3번째에 나온 Command Line Processor에서 작업한다고 가정하겠다.
이 명령을 실행하면 앞에서 언급한 DB2의 TCP/IP서비스(svcename)인 db2cDB2도 발견할 수 있다.
서비스명 db2cDB2를 다른 이름으로 변경하려면 다음과 같이 할 수 있다.(지금은 수정하지 마라)
인스턴스명의 설정 변경 : db2 update dbm cfg using svcename server1
서비스이름으로 지정된 server1은 C:\WINNT\system32\drivers\etc\services(유닉스는 /etc/services)
에 설정되어 있으면 위와 같이 문자열로 써줘도 되고, 그렇지 않다면, 포트번호를 명시적으로 지정한다.
이것은 클라이언트로부터 연결을 수용하는 포트로, 오라클 리스너의 수신포트와 같은 역활을 한다고 하겠다.
클라이언트/서버 연결방법에 대해선 아래에서 다시 설명하겠다.
1. 명령창
DB2 종료 : db2stop (강제종료: db2stop force)
DB2 시작 : db2start
2. 관리도구 - 서비스
DB2 - DB2서비스
3. Control Center(제어센터) - GUI툴
Instances하위의 DB2를 선택한 다음 우측클릭하여 컨텍스트메뉴중 Stop을 선택
제어센터는 오라클의 DBAStudio나 EM, MS-SQL의 Enterprise Manager와 그 기능이 같다고 하겠다.
인터페이스가 그리 좋은 건 아니지만, 초기에 관리작업을 여기서 시작하는 것이 수월할 것이다.
질의어의 실행을 위해 제공되는 GUI툴은 명령센터이다.
연습삼아, Script 편집창에서 다음 명령을 실행해 보라.
create database testdb
connect to testdb
revoke createtab on database from public
revoke bindadd on database from public
grant dbadm on database to user db7dba1
grant dbadm on database to user db7dba2
*
에러메시지에 대한 설명을 알아내기 위해 다음과 같이 한다.
시작 - 프로그램 - IBM DB2 - Information - DB2 Information 을 실행
웹페이지가 열리는데 Adminstration섹션의 Message Reference 라는 부분을 찾아서 링크를 클릭
top,left,right프레임으로 된 페이지가 표시되는데 left프레임에서 SQL Messages라는 부분이 있다.
여기서 SQL1000 - SQL1099부분을 선택하고, 이에 해당하는 내용이 표시된 우측프레임에서 SQL1025N을 찾는다.
사실, 콘솔에서 ?다음 에러번호를 적어주는 것이 더 수월하다.
D:\>db2set db2instance
DB2
D:\>db2set DB2COMM=tcpip
D:\>db2stop
SQL1064N DB2STOP processing was successful.
D:\>db2start
SQL1063N DB2START processing was successful.
D:\>db2set DB2ADMINSERVER
DB2DAS00
D:\>db2set DB2COMM=tcpip -i DB2DAS00
D:\>db2admin stop
SQL4407W The DB2 Administration Server was stopped successfully. SQLSTATE=00000
D:\>db2admin start
SQL4406W The DB2 Administration Server was started successfully. SQLSTATE=00000
D:\>type con >> "C:\WINNT\system32\drivers\etc\services"
server1 3700/tcp # DB2 connection service port
^Z
db2 => update database manager configuration using svcename server1
db2 => db2stop
db2 => db2start
에러로그기록되는 곳
C:\Program Files\SQLLIB\DB2\db2diag.log
C:\Program Files\SQLLIB\DB2DAS00\db2diag.log
리눅스에서 작업
윈도에 설치된 DB2서버에 접속하는 클라이언트로서 사용한다고 가정하겠다.
[root@linux root]# cat >> /etc/services
server1 3700/tcp # DB2 connection service port
[db2inst1@linux db2inst1]$ db2
db2 => catalog tcpip node DB2 remote 192.168.0.1 server server1 (opp: uncatalog node db2)
db2 => catalog database testdb at node db2 (opp: uncatalog database testdb )
db2 => terminate ( to do cache flush: do it at another terminal )
db2 => list node directory
db2 => list db directory
db2 => connect to testdb user Administrator xxxxxx (xxxxxx는 암호)
db2 => disconnect testdb
(에러) - 어떻게 하다보니 되던데 아마
db2 => list tables
SQL0805N Package "NULLID.SQLC2E03" was not found. SQLSTATE=51002
(조치)
아래 내용을 root, db2inst1유저에서 각각 실행해줬다.
둘 중에 하나만 하면 될 것 같은데.. 자세한 내용은 나중에 파악해야겠다.
db2 connect to testdb user Administrator using xxxxxx
cd /opt/IBM/db2/V8.1/bnd
db2 bind @db2ubind.lst blocking all grant public
db2 bind @ddcsmvs.lst blocking all grant public
일반유저가 db2를 사용하기 위해선
[kang@linux kang]$ cat >> .bash_profile
source ~db2inst1/sqllib/db2profile
[kang@linux kang]$ source ~db2inst1/sqllib/db2profile
[kang@linux kang]$ db2
db2 => connect to testdb user kang using xxxxxx
Database Connection Information
Database server = DB2/NT 7.2.1
SQL authorization ID = KANG
Local database alias = TESTDB
db2 => list tables
Table/View Schema Type Creation time
------------------------------- --------------- ----- --------------------------
TEST KANG T 2003-02-22-05.11.43.391000
1 record(s) selected.
db2 => select * from test
ID
--------------------
dbakorea
1 record(s) selected.
db2 =>
db2ca : Client Assistant
db2cc : Control Center
[명령어 정리]
기본 명령어
db2 => ? deregister
db2 => ? SQL1024N
db2 => get db cfg for testdb
데이터베이스 관련 명령어
C:\DB2\NODE0000\ 하위에 SQL00001 와 같이 하위폴더에 생성된 데이터베이스가 위치된다.
db2 => create database testdb2 on d:
db2 => drop database testdb2
db2 => create database testdb2 alias an_alias
db2 => create database testdb2 with "This is my testing DB"
db2 => drop database testdb2
db2 => connect to testdb
db2 => disconnect testdb
db2 => get connection state
db2 => activate database testdb
db2 => deactivate database testdb
db2 => list active databases
db2 => catalog database aaa
db2 => uncatalog database aaa
db2 => change database testdb comment with "Primary Test Database"
db2 => backup database testdb to d:
db2 => list db directory DB목록
테이블스페이스 관련 명령어
db2 => list tablespaces
db2 => create tablespace ts_kang managed by system using ('ts_kang')
db2 => drop tablespace ts_kang
db2 => list tables
테이블관련 명령어
db2 => connect to testdb
db2 => create table test \
db2 (cont.) => ( \
db2 (cont.) => id varchar(10), \
db2 (cont.) => name varchar(10), \
db2 (cont.) => sex char(1), \
db2 (cont.) => age integer, \
db2 (cont.) => nation char(3) with default '001' \
db2 (cont.) => ) in ts_kang
db2 => alter table test add desc varchar(50)
db2 => rename table test to test2
db2 => drop table test2
DML관련 명령어
db2 => insert into test values ('dbakorea','강명규', 'm', 30, '001')
db2 => insert into test values ('maddog','강명규', 'm', 30, '001')
db2 => select * from test
db2 => update test set age=29
db2 => update test set name='성인군자' where id='maddog'
db2 => delete from test where id='maddog'
db2 => select age+10 from test
db2 => select age+10 age from test
db2 => select age+10 as "10년후 나이" from test
db2 => select min,(age), max(age), avg(age), count(*) from test
db2 => select * from test where id like 'mad%'
db2 => select * from test where id like 'mad___'
VIEW관련 명령어
db2 => create view v_test as select id, name from test
db2 => update v_test set name='강명규님' where id='maddog'
db2 => drop view v_test
유저생성
OS유저를 생성하고, DB2에서 이 OS유저에게 권한(Connect)을 GRANT해준다.
유저의 패스워드는 OS에서 지정한 암호로 정해진다.
db2 => connect to testdb
db2 => list tablespaces
db2 => grant createtab,connect on database to user kang
db2 => grant use of tablespace ts_kang to user kang
db2 => connect to testdb user kang using xxxxxx
get 관련 명령
db2 => ? get
db2 => get admin configuration
db2 => get alert configuration for containers
db2 => get alert configuration for database manager
db2 => get alert configuration for databases
db2 => get alert configuration for tablespaces
db2 => get authorizations : 사용자가 가진 권한 표시
db2 => get connection state
db2 => get cli configuration
db2 => get database configuration
db2 => get database manager configuration
db2 => get instance
접속된 놈들 보기
db2 => list application
Auth Id Application Appl. Application Id DB # of
Name Handle Name Agents
-------- -------------- ---------- ------------------------------ -------- -----
ADMINIST>db2bp.exe 6 *LOCAL.DB2.030416143953 DBAKOREA 1
db2 => get snapshot for application agentid 6 접속된 놈의 상세정보보기
SMS의 extent단위 증가:
테이블스페이스가 SMS(System Managed Space)로 관리되고 있다면,
테이블스페이스크기는 1 page단위로 증가한다. 이는 성능상 별로 좋지 않다.
extent(page의 집합. page는 오라클의 db block개념이다)단위로 증가시키려면, 다음과 같다.
dbakorea : DB명
C:\Program Files\IBM\SQLLIB\BIN>db2empfa.exe dbakorea
테이블 분석:
옵티마이저의 실행계획에 도움을 주기 위해 테이블에 대한 통계정보를 수집하여 시스템 카칼로그 테이블에 저장한다..
오라클에서의 analyze table 명령과 같다고 보면 되겠다.
예) kang.test: 사용자.테이블명
db2 => runstats on table kang.test
DB20000I RUNSTATS 명령이 완료되었습니다.
db2 => runstats on table kang.test with distribution and indexes all shrlevel change
DB20000I RUNSTATS 명령이 완료되었습니다.
db2 =>
분석결과는 syscat.tables에 기록된다.
db2 => select card, overflow, npages, fpages from syscat.tables
CARD OVERFLOW NPAGES FPAGES
-------------------- ----------- ----------- -----------
-1 -1 -1 -1
..
테이블 분석이 필요한 시점
1. 대량의 insert, update, delete발생시
2. import작업후
3. 테이블에 새로운 컬럼을 추가시
4. 인덱스 추가시
5. 테이블 재구성(reorganization)시
라이선스 보기
(평가용으로 90일동안 사용가능한데, 재설치해주면 계속 사용가능하다. 어차피 테스트용이므로 상관없음..)
D:\>db2licm -l
제품 이름 = "DB2 Workgroup Server Edition"
제품 암호 = "DB2WSE"
버전 정보 = "8.1"
만기 날짜 = "2004-07-04 (사용 후 구매)"
동시 사용자 규정 = "사용 가능"
등록 사용자 규정 = "사용 가능"
권한이 부여된 사용자 수 = "1"
제한조건 = "소프트 중지(사용권 종료시 기록 후 사용 허가)"
프로세서의 수 = "1"
사용권 받은 프로세서의 수 = "4"
주석 = ""
기타 정보 = ""
D:\>db2set /? :db2set사용법
D:\>db2set -all :현 인스턴스에 정의된 registry변수.
D:\>db2set -lr :지원되는 모든 registry변수
* DB2와 관련된 정보 보기(괄호안의 값은 8.1버전에서 등록된 개수)
D:\>db2set -all System(Environment) Configuration. (registry variables) - 68개
db2 => get dbm cfg Instance Configuration(DB2 Database Manager configuration parameters) - 82개
db2 => get db cfg Database Configuration(DB2 Database configuration parameters)
* DB2와 관련된 정보 변경(각각 위의 순서대로)
D:\>db2set 등록변수=변경값
update dbm cfg using 패러미터명 변경값 <immediate|deferred>
update db cfg (for DB명) using 패러미터명 변경값 <immediate|deferred>
Configuration Advisor
DB에 대한 적절한 환경을 만들어 준다. DB변경시마다 다시 해주는 것이 좋다.
command line processor에서 autoconfigure 사용하면 각 설정키워드를 수동으로 입력하여야 하나,
제어센터에서 작업할 데이터베이스를 선택후, 메뉴의 선택항목 - 구성 어드바이저를 이용하면
마법사기능으로 좀 더 쉽게 설정할 수 있다.
db2 => ? autoconfigure
AUTOCONFIGURE [USING config-keyword value [{,config-keyword value}...]]
[APPLY {DB ONLY | DB AND DBM | NONE}]
config-keyword:
MEM_PERCENT, WORKLOAD_TYPE, NUM_STMTS, TPM, ADMIN_PRIORITY, IS_POPULATED
NUM_LOCAL_APPS, NUM_REMOTE_APPS, ISOLATION, BP_RESIZEABLE.
예) 지정하지 않은 키워드에는 디폴트값이 사용됨.
db2 => autoconfigure apply db only : 지가 알아서 설정함
db2 => autoconfigure using mem_percent 40 apply db only : 전체 물리메모리의 40%만 DB2가 사용하도록 구성해라.
This article comes from dbakorea.pe.kr (Leave this line as is)
'IT > DB' 카테고리의 다른 글
[postgresql] postgresql HA정리 (0) | 2015.07.27 |
---|---|
[IBM DB2] DB2 명령어 (0) | 2015.07.27 |
[ERwin] Data Modeler를 이용하여 Database Reverse Engineering (0) | 2015.07.27 |
[MS SQL Server] MS SQL Server DB 이동 방법 (0) | 2015.07.27 |
[MS SQL Server] MS SQL Server 2005 삭제 방법 (0) | 2015.07.27 |