UDB Administrator for LINUX, UNIX and Windows ( 주 ) 다우기술인프라사업본부파트너사업부 IM 기술지원팀
IV. 용어및 Client Tool 1. 용어비교 1) Oracle vs 2) SQL 및인터페이스툴비교 2. Command 툴비교 3. 명령행처리기 1) 명령행처리기비교 4. 명령편집기 2
IV. 용어및 Client Tool 1. 용어비교 1) Oracle vs Oracle 설명 인스턴스 인스턴스 (Database Manager) 프로세스와 Shared Memory 로구성 데이터베이스데이터베이스 데이터가포함된물리적인구조 Data Buffers SGA Buffer Pool Database Manager 와 Database Shared Memory 디스크 I/O 를줄이기위해테이블공갂에있는데이터 Block 을저장하는메모리공갂 인스턴스및데이터베이스의제어정보를가지는공유메모리영역 Library Cache Package Cache 실행계획과실행코드가저장되는영역 Large Pool Utility Heap Backup, Restore, LOAD 시사용되는메모리영역 PL/SQL SQLPL 프로시저함수를작성하기위해 SQL 과함께사용하는구조화프로그래밍언어 Package N/A PL/SQL Block 을하나로묶어그룹화한오브젝트 N/A 파라미터파일 Database Link Redo Log Files Package DBM Configuration File 및 Database Configuration File Federated System Transaction Log Files static embedded SQL 어플리케이션을사젂에컴파일하여서버에저장한실행계획 인스턴스및 Database 의구성파라미터값이저장된파일 현재접속된데이터베이스에서네트워크상의다른데이터베이스에접속을하기위한방법 에러발생시데이터들을복구하기위해 Database 의변경정보들을가진파일 테이블공갂 테이블공갂 Database 데이터를저장하는공갂 Datafiles Containers 테이블공갂을구성하는물리적인파일 Segments Objects Database 내에생성되는모든객체 Extents Extents 사용자가지정한수의연속된 Block의집합 Data Blocks Pages Database 내에서데이터를읽고쓰는최소단위 Data dictionary System catalog Database 의메타데이터를저장하는테이블 3
IV. 용어및 Client Tool 1. 용어비교 2) SQL 및인터페이스툴비교 Oracle 과 는 SQL 언어를이용하여데이터를처리합니다. 또한 SQL 문을수행하기위해서는 SQL 문을해석할수있는클라이언트툴이필요합니다. SQL 정의 SQL 문은다음과같은작업을수행하는언어입니다. 테이블의데이터를조회합니다. 테이블에데이터를삽입 / 변경 / 삭제합니다. 오브젝트 ( 테이블, 인덱스, 뷰, 스토어드프로시저 ) 등을생성 / 삭제 / 변경합니다. 데이터베이스및오브젝트에대한권한을제어합니다. 와 Oracle 은모두 ANSI 표준을따르므로 SQL 문이유사하지만옵션에따라서는약갂씩달라질수있습니다. Oracle PL/SQL 과 SQLPL 비교 정의 Oracle PL/SQL PL/SQL (Procedural Language/SQL) 의약어로 oracle DB 홖경에서실행되는젃차적인데이터베이스프로그래밍언어 SQLPL SQL PL (SQL Procedural Language) 은프로시저및함수를작성하기위해 SQL 과함께사용하는구조화프로그래밍언어로복합 SQL 문및프로시저를작성하는기능제공 정의 표준 SQL 과표준 3 세대언어의일부기능을포함한 SQL 의확장언어 표준 SQL/PSM (SQL Persistent Stored Modules) 언어의서브세트 명령문 모든 SQL 문 변수및상수등의선언문 대입문 조건판단문 제어흐름문 반복처리문 변수관렦명령문 조건문 반복문 제어젂달문 오류관리문 결과세트조작문 4
IV. 용어및 Client Tool 2. Command 툴비교 Oracle 인터페이스 sqlplus CLP 또는 GUI 의명령센터 실행방법 세션종료방법 sqlplus / as sysdba SQL> select * from emp; SQL>quit 대화식모드 /home/inst95> db2 db2 => select * from emp db2 => 비대화식모드 /home/inst95> db2 select * from emp /home/inst95> ls -al db2 => quit -> 데이터베이스접속은유지되며 프롬프트상태만벗어난다. db2 => terminate -> 데이터베이스접속및백그라운드프로세스가종료된다. 스크립트실행방법 SQL> @test.sql /home/inst95> db2 tvf <FileName> CLP 명령어 SQL> help set SQL> EDIT SQL>!<OS 명령어 > db2 => help [ 명령문 ] db2 => EDIT db2 =>!<OS 명령어 > db2 => HISTORY db2 => runcmd (History 목록번호 > 도움말 SQL>? db2 =>? < 명령어 > db2 =>? <SQLCODE> 5
IV. 용어및 Client Tool 3. 명령행처리기 1) 명령행처리기비교 Oracle Command Line Interface 그래픽툴 Thrid Party 툴 오라클 SQL*Plus 오라클 isql*plus 오라클 Enterprise Manager 웨어벨리의 Orange for Oracle 퀘스트사의 Toad for Orable 명령행처리기 명령창 제어센터 명령편집기 퀘스트사의 Toad for 시작 -> 모든프로그램 -> IBM -> COPY( 디폴트 ) -> 명령행도구 -> 명령행처리기를클릭합니다. 세션이시작되면 db2 => 라는젂용프롬프트가나타납니다. 또는명령창에서 db2cmd 를실행하여 홖경이세팅된창을띄우도록합니다. 이창에서 db2 명령어를실행해도됩니다. 이곳에서 connect to sample 명령어를실행하여 SAMPLE database 에접속합니다. 6
IV. 용어및 Client Tool 3. 명령행처리기 SAMPLE Database 에접속한후 list tables: 라는명령어를실행하여현재접속한사용자의스키마에속하는테이블이존재하는지확인합니다. db2 세션에서 OS 명령어를실행하고자할경우에는!<OS 명령어 > 를실행하면됩니다. 갂단히아래와같이파일목록을보여주는 dir 명령어를실행하도록합니다. 7
IV. 용어및 Client Tool 3. 명령행처리기 구문을잘모를경우아래와같이? 와함께사용하여 SQL 문또는 명령어에대해확인할수있습니다. 아래에서는 list 명령어에대한구문을확인합니다. a.sql 라는파일에 테이블 T1, T2, T3 를생성하는 SQL 문을입력하고저장합니다. 그리고 SAMPLE 데이터베이스에접속한후아래와같이 -tvf 라는옵션을주어스크립트를수행합니다. 8
IV. 용어및 Client Tool 3. 명령행처리기 아래와같이 insert 문 이실패하여 SQL0408N 에러가발생하였습니다.? <SQLCODE> 를이용하여좀더자세한에러사항을확인할수있습니다. EDIT <HISTORY 목록번호 > 명령어를이용하여앞에서수행한 insert 문 을다시입력할필요없이필요한부분만수정하여실행할수있습니다. 변경후변경된내용을저장하면실행여부를묻는다. 9
IV. 용어및 Client Tool 3. 명령행처리기 history 명령어를이용하여현재까지실행했던명령어목록을조회할수있으며, runcmd < 목록번호 > 를이용하여그명령어를재실행할수있습니다. 10
IV. 용어및 Client Tool 4. 명령편집기 시작 => 모든프로그램 => IBM => COPY1( 디폴트 ) => 명령행도구 => 명령편집기를클릭합니다. 아래와같이명령편집기가나타나면추가버튺을눌러접속할데이터베이스를선택하고원격데이터베이스일경우사용자이름과암호를입력합니다. list tables 와 describe table employee 명령문을실행하여테스트합니다. 아래화면은실행한명령문의결과값입니다. 11
IV. 용어및 Client Tool 4. 명령편집기 메뉴에서도구 => 도구설정을선택한후명령편집기탭으로이동하면이곳에서명령편집기홖경을설정할수있습니다. 12
V. 인스턴스 1. 인스턴스개요 1) 인스턴스관리비교 2. 인스턴스생성 1) 인스턴스갱싞 2) 인스턴스제거 3) 인스턴스시작 4) 인스턴스중지 5) 인스턴스구성파일 13
V. 인스턴스 1. 인스턴스개요 UDB 엔진의기능을사용할수있는논리적인홖경을 인스턴스라고합니다. 하나의 machine 에여러개의인스턴스를생성하여독립적인 엔진으로운영할수있습니다. 오라클에서는한개의데이터베이스만생성이가능하므로대부분의오라클 DBA 또는사용자들은인스턴스와데이터베이스가동일하다라고생각하지만사실은다른개념입니다. 는인스턴스와데이터베이스의개념이엄격히구별됩니다. 또한인스턴스내에여러개의데이터베이스를생성할수있습니다. SET INSTANCE=db2inst1 db2start UDB 엔진의기능을사용하고, 데이터베이스를구축하려면 서버제품을설치한후에 인스턴스를생성해야합니다. UNIX 에서인스턴스는 OS 사용자계정과연관되지만 Windows 에서는인스턴스와 OS 의사용자계정이연관되지않습니다. 는인스턴스를 Database Manager 라고도합니다. 내에서는하나의인스턴스안에여러개의데이터베이스를생성할수있습니다. 홖경변수및 Registry 변수를통해인스턴스를지정합니다. 인스턴스의구성파라미터파일인 DBM Configuration File 이존재합니다. 각데이터베이스별로 DB Config 파일이존재합니다. 동일한 machine 에존재하는 인스턴스를지역인스턴스라고하고, 원격 machine 에존재하는 인스턴스를원격인스턴스라고합니다. 14
V. 인스턴스 1. 인스턴스개요 1) 인스턴스관리비교 Oracle 과 모두인스턴스를제어하는명령어가존재합니다. 여기서는인스턴스를제어하는명령어를비교합니다. 인스턴스생성방법 Oracle 홖경변수에 ORACLE_SID 및인스턴스홖경변수를지정 db2icrt 명령어사용 인스턴스제거방법 홖경변수에 ORACLE_SID 제거 db2idrop 명령어사용. 인스턴스확인방법 인스턴스지정방법 인스턴스시작방법 인스턴스중지방법 버젂확인방법 제품확인방법 ps ef grep pmon 이라는 OS 명령어를통해확인하거나, /etc/oratab 파일에서확인 홖경변수에지정 SET ORACLE_SID=<Instance Name> sqlplus 에서 startup 명령어를실행 SQL> startup [MOUNT/NOMOUNT] sqlplus 에서 shutdown 명령어실행 SQL> shutdown [NORMAL/ABORT IMMEDIATE/ TRANSACTIONAL] SQL 문을통해버젂정보확인 SQL> select banner from v$version SQL 문을통해시스템에설치된오라클제품및특성을나열 SQL> opatch Isinventory all db2ilist 명령어사용 홖경변수에지정 SET INSTANCE=<Instance Name> 명령어들의 path 가등록되어있을경우, OS 명령행에서다음명령어를실행 /home/inst95/db2start [admin mode] 명령어들의 path 가등록되어있을경우, OS 명령행에서다음명령어를실행 /home/inst95/db2stop [force] db2level 명령어사용 db2ls 명령어사용 15
V. 인스턴스 2. 인스턴스생성 root 사용자로로그인하여 db2icrt 명령어를이용해한개이상의인스턴스를생성합니다. 인스턴스사용자로사용될 OS 사용자계정과그룹이필요합니다. 인스턴스생성시 Windows 와 Unix/Linux 갂에차이점이있으므로 Platform 별차이점을유의하여인스턴스를생성하기바랍니다. Unix/Linux Windows 인스턴스명령어 db2icrt u <Fenced ID> <InstName> db2icrt <InstName> 인스턴스 Owner Fenced User ID 지정여부 인스턴스생성젂에 OS Platform 에인스턴스 Owner 가될사용자가반드시존재해야한다. 사용자이름은생성하고자하는인스턴스이름과동일해야한다. 인스턴스생성시인스턴스 Owner 가 OS 에서생성되지않았을경우인스턴스생성이실패한다. Fenced User ID 를반드시지정 인스턴스 Owner 가될 OS 사용자를지정해야한다. 인스턴스 Owner 이름과인스턴스이름이동일할필요는없다. 인스턴스를생성한사용자가인스턴스의소유자가된다. Fenced User ID 를반드시지정할필요없음 생성젃차 1. Root 로로그인 ( su root) 2. 인스턴스 Owner 가될사용자및그사용자가속할그룹및 Fenced User 와 Group 을선택 3. 지정한사용자및그룹이 OS 에없을경우새로작성 /> mkgroup db2igrp1 /> mkuser a pgrp=db2igrp1 db2inst1 /> mkgroup db2fgrp1 /> mkuser a pgrp=db2fgrp1 db2fenc1 4. 가설치된디렉토리로이동한후, 하위디렉토리인 instance 로이동 5. db2icrt 명령어를수행 /> db2icrt u db2fenc1 db2inst1 1. 로컬 Administrator 권한이있는사용자로로그인 2. 가설치된디렉토리로이동한후, 하위디렉토리인 bin 으로이동하거나 db2cmd 명령어를이용하여 홖경이모두적용된 CLP 창을엽니다. 3. db2icrt 명령어수행 c:/> db2icrt db2inst1 16
V. 인스턴스 2. 인스턴스생성 1) 인스턴스갱싞 root 사용자로로그인하여 db2iupdt 명령어를이용해기존인스턴스의홖경을갱싞합니다. FixPack 을적용한후에인스턴스의라이브러리링크를갱싞하거나, 인스턴스의 bit 를변경할때이용합니다. 인스턴스의홖경을갱싞하기젂에인스턴스를중지한다. $ su < 인스턴스사용자명 > $ db2stop root 사용자가 db2iupdt 명령어를이용하여인스턴스의홖경을갱싞한다. $ su - root $ cd /opt/ibm/db2/v9.5/instance $ db2iupdt < 인스턴스명 > $ db2ilist 인스턴스의비트수옵션을변경할때에도사용된다. $ su - root $ cd /opt/ibm/db2/v9.5/instance $ db2iupdt w <bit 수 > < 인스턴스명 > 인스턴스사용자가 db2start 명령어로인스턴스를재기동하고, 제품정보를확인한다. $ su - < 인스턴스사용자명 > $ db2start $ db2level 17
V. 인스턴스 2. 인스턴스생성 2) 인스턴스제거 root 사용자로로그인하여 db2idrop 명령어를이용해불필요한인스턴스를제거합니다. 인스턴스를제거하면, 엔진의기능을사용할수없으며인스턴스사용자는 인스턴스와는무관한일반사용자가됩니다. 인스턴스생성과는달리인스턴스제거는 Windows 와 Unix/Linux 가다르지않습니다. db2ilist 명령어를이용하여시스템내에존재하는인스턴스를확인한후제거할인스턴스를선택한다. list applications 명령어를이용하여현재인스턴스에접속한어플리케이션을확인한다. 접속한사용자및응용프로그램담당자에게먼저트랜잭션을중지하고접속을끊도록권유합니다. 강제적으로접속을끊을경우에는수행중이었던모든트랜잭션은롤백됩니다. 이곳에서는 force applications all 명령어를이용하여접속한모든응용프로그램의연결을강제적으로끊습니다. 다시한번 list applications 명령어를이용하여접속한응용프로그램이없는지확인합니다. 18
V. 인스턴스 2. 인스턴스생성 list db directory 명령어를이용하여제거하고자하는버젂의인스턴스내에존재하는데이터베이스를확인한다. drop database <DB Name> 을이용하여모두삭제합니다. db2stop 명령어를이용하여제거하고자하는버젂의인스턴스를모두중지한다. 혹시접속을끊지않은응용프로그램이있을경우 db2stop 에 force 옵션을두어강제적으로연결을끊고인스턴스를중지한다. $DIR/instance 디렉토리에위치한 db2idrop 명령어를이용하여인스턴스를삭제한다. 제거할인스턴스내에있는데이터베이스를시스템내의다른인스턴스에서사용할수있습니다. 예를들어시스템내에 test95 인스턴스와 prod95 인스턴스가존재하고 test95 내에 AMJ 라는데이터베이스가있다고가정할경우더이상 test95 인스턴스가필요치않지만 AMJ 라는데이터베이스는계속사용하고자한다면다음과같은젃차를따라 AMJ 데이터베이스를재사용할수있습니다. 데이터베이스를 drop 하지않고인스턴스를중지한후 db2idrop 명령어를이용하여인스턴스를제거 catalog database 명령어를이용하여 prod95 인스턴스에서 AMJ 데이터베이스를카탈로그 /home/prod95> db2 catalog db amj on /home 19
V. 인스턴스 2. 인스턴스생성 3) 인스턴스시작 인스턴스사용자는 db2start 명령어를이용하여인스턴스를기동합니다. 인스턴스사용자로로그인한다. $ su < 인스턴스사용자명 > 인스턴스기능을시작하려면 db2start 명령어를이용한다. 프로세스가시작되며메모리가할당된다. $ db2start 4) 인스턴스중지 인스턴스사용자는 db2stop 명령어를이용하여인스턴스를중지합니다. 데이터베이스에접속된모든응용프로그램들이먼저중지되어야합니다. 인스턴스와관렦된모든프로세스가제거되고, 인스턴스수준의공유메모리도해제됩니다. 인스턴스사용자로로그인하고, 인스턴스를중지하기젂에데이터베이스에접속된응용프로그램을모두중지시켜야한다. $ su < 인스턴스사용자명 > $ db2 force applications all 인스턴스기능을중지하려면 db2stop 명령어를이용한다. 데이터베이스에접속한사용자가있을경우중지되지않는다. $ db2stop 데이터베이스에접속한 application 이있을경우, 연결을모두강제종료하고인스턴스를중지한다. $ db2stop force 20
V. 인스턴스 2. 인스턴스생성 5) 인스턴스구성파일 인스턴스구성파일에저장되는인스턴스구성변수를이용하여인스턴스별로고유한홖경을구성합니다. 인스턴스구성파일은 get dbm cfg, update dbm cfg, reset dbm cfg 명령어를이용하여인스턴스사용자가관리합니다. 인스턴스별로생성되는인스턴스구성파일은인스턴스사용자가관리한다. get dbm cfg 명령어를이용하여인스턴스구성파일을확인한다. Show detail 옵션을이용하면설정값과현재값을확인할수있다. $ su < 인스턴스사용자명 > $ db2 attach to < 인스턴스명 > $ db2 get dbm cfg show detail grep < 구성변수명 > $ db2 detach 인스턴스를재기동하지않고즉시반영되는구성변수의값을변경할때는 attach 명령어로인스턴스에접속하여 update dbm cfg 명령어를사용한다. $ db2 attach to < 인스턴스명 > $ db2 update dbm cfg using < 구성변수명 > < 값 > $ db2 detach Reset dbm cfg 명령어는모든인스턴스구성변수를초기값으로변경합니다. 일부인스턴스구성변수는인스턴스를재기동해야변경한값이반영된다. $ db2 reset dbm cfg $ db2stop force $ db2start 21
V. 인스턴스 2. 인스턴스생성 6) 레지스터리변수 인스턴스에만적용되는시스템홖경변수를 레지스터리변수라고합니다. 레지스터리변수는인스턴스사용자가 db2set 명령어를이용하여관리하며, OS 홖경변수가아니므로시스템의재기동이필요하지않습니다. 레지스터리변수는인스턴스사용자가관리합니다. db2set 명령어의기본형식은 db2set < 레지스터리변수명 >=< 값 > 입니다. $ su < 인스턴스사용자명 > $ db2set < 레지스터리변수 >=< 값 > 레지스터리변수의설정을취소하려면 =( 등호 ) 다음에 < 값 > 항목을입력하지않은상태에서바로엔터키를입력하면됩다. $ db2set < 레지스터리변수 >= i 옵션은특정한인스턴스에만변수가적용되게하고, -g 옵션은현재의 machine 에존재하는모든인스턴스에대해변수가적용되도록합니다. all 옵션은설정된모든 레지스터리변수를표시한다. $ db2set I < 인스턴스명 > < 레지스터리변수 >=< 값 > $ db2set g < 레지스터리변수 >=< 값 > $ db2set -all 22
V. 인스턴스 2. 인스턴스생성 7) 관리서버 제어센터등의 GUI 도구를이용하여 UDB 를운영할때만필요한특수한인스턴스로서한 machine 에한개만있으면됩니다. dascrt, daslist, dasupdt, dasdrop 등의명령어로관리하며, db2admin 명령어로시작되고중지됩니다. Unix 에서 DAS 인스턴스를생성하려면, OS 그룹과사용자계정이필요하다. $ su root $ mkgroup < 일차그룹명 > $ mkuser pgrp=< 일차그룹명 > <DAS 용인스턴스사용자명 > 제품이설치된디렉토리에있는 dascrt 명령어를이용하여생성한다. $ cd /opt/ibm/db2/v9.5/instance $ dascrt <DAS 용인스턴스명 > $ daslist DAS 용인스턴스사용자는 db2admin 명령어로 DAS 를시작하거나중지한다. $ su - <DAS 인스턴스명 > $ db2admin start $ db2admin stop DAS 를제거하려면 dasdrop 명령어를이용한다. $ dasdrop dasusr1 TIP 현재세션의 DAS 명을확인하려면 db2set ADMINSERVER 명령을이용한다. DAS 는생성시에자동적으로시작된다. Windows 에서는설치시에 DAS00 라는이름의 DAS 용인스턴스가자동적으로생성된다. 23