2011년 12월 11일 일요일

MS SQL Server 개발자를 위한 DB2 가이드 (1)

MS SQL Server 개발자를 위한 DB2 가이드 (1)
* 출처: http://www.kdug.kr/
* 저자: 강창성 님

관리/마이그레이션 | 2009-07-01 13:30:31
많은 기업 환경에서 단일한 DB 환경보다는 이기종 DB 환경을 운영하고 있다. 따라서 DB 개발자나 관리자는 되도록 많은 DBMS 다룰 아는 것이 업무에 도움이 된다. 특히 다양한 DBMS MS SQL Server 2000(이하 MS SQL Server) DB2 함께 비교해볼 기회는 흔치 않다.
문서가 MS SQL Server 그리고 DB2 환경에서 SQL 프로그래밍을 하는 개발자나 어느 DBMS 마이그레이션을 검토하고 있는 운영 담당자에 조금이나마 도움이 되기를 바라고 서로의 특징을 상호 비교해보면서 MS SQL Server DB2 모두 친숙해질 있는 계기가 되었으면 한다.
테스트 환경
- Microsoft SQL Server 2000 - 8.00.2039 (Intel X86)
- DB2 v9.5.0.808
- Windows Server 2003 Enterprise Edition sp2
DBMS 구조
MS SQL Server DB2처럼 사용자(스키마), 데이터베이스, 인스턴스로 이어지는 데이터베이스 구조 체계를 가지고 있다. [그림 1] 살펴보면 DBMS 간의 상당히 유사한 부분을 많이 발견할 있을 것이다. 좀더 자세한 차이는 아래 부분에서 천천히 살펴보기로 하자.
[그림] SQL Server 2000 DB2 UDB 구조 비교



SQL SERVER 경우에는 기본 시스템 테이블 스페이스 영역으로 master, msdb, model, tempdb 등이 있다. DB2에서도 유사한 기능을 수행하는 테이블 스페이스가 구성되어 있는데 한가지 특이 사항을 언급하자면 DB2에서는 MS SQL Server에서 DB 생성시 기준이 되는 model DB처럼 별도의 기준 DB 존재하지는 않는다.
그리고 DB2에는 MS SQL Server tempdb 기능으로 시스템 임시 테이블스페이스, 사용자 임시 테이블테이블 스페이스 공간을 사용한다. DB2에서는 업그레이드와 기능이 추가됨에 따라 다양한 시스템 스키마가 존재한다. (: SQLJ, SYSIBMINTERNAL, SYSIBMTS )
[ 1] DB2 시스템 스키마 간단 설명
DB2 시스템 스키마
설명
SYSIBM
- 기본적인 시스템 catalog 테이블 저장소
SYSCAT
- 시스템 catalog 테이블 View 저장소
- Read only 시스템 catalog view 생성
SYSSTAT
수정 가능한 시스템 catalog 저장소
SYSFUN
- 사용자 정의 함수 저장소
SYSIBMADMIN
- Snapshot 시스템 지원 테이블 함수 저장소
SYSPROC
- 시스템 지원 저장 프로시저 저장소
시스템 테이블 정보와 조회 방법
MS SQL Server DB2 모두 시스템 정보에서부터 사용자 정의 오브젝트까지 SQL 쿼리 문이나 명령문으로 관련 정보를 확인할 있는 시스템 테이블, 뷰를 지원하고 있다. DBMS 비교하면 [ 2] 같다.
[ 2] 시스템 테이블 정보 catalog table
SQL Server system table
DB2 catalog table
select * from master.dbo.sysdevices
select * from SYSCAT.TABLESPACES
select * from INFORMATION_SCHEMA.tables
select * from SYSCAT.TABLES
select * from INFORMATION_SCHEMA.columns
select * from SYSCAT.COLUMNS
select * from INFORMATION_SCHEMA.views
select * from SYSCAT.VIEWS
select * from sysobjects
where type='TR'
select * from SYSCAT.TRIGGERS
select * from sysindexes
select * from SYSCAT.INDEXES
select * from INFORMATION_SCHEMA.routines
select * from SYSCAT.SYSPROCEDURES
select * from SYSCAT.ROUTINES
select * from INFORMATION_SCHEMA.routines
where ROUTINE_TYPE ='FUNCTION'
select * from SYSCAT.FUNCTIONS
select * from systypes
select * from SYSCAT.DATATYPES
select * from sysreferences
select * from SYSCAT.REFERENCES
ü 물론 위의 정보를 조회하기 위해 다른 스키마의 뷰나 테이블 함수 등의 다른 포맷으로도 조회 가능하다.
MS SQL SERVER 2000에서는 사용자와 스키마 사용에 약간 모호한 감이 있어서 DBA 편하게(?) 혼용하여 사용하는 부분이 있었다. 물론 MS SQL SERVER 버전이 올라가면서 사용자 개념보다는 확장이 가능한 스키마로 정착하고 있는 추세이다.
[ 3] 스키마 작성 문법 Check
SQL Server
DB2 UDB
CREATE SCHEMA AUTHORIZATION kishore
CREATE SCHEMA billing AUTHORIZATION user1;
CREATE TABLE billing.orders (......,......)
[ 4] 간단 지원 유틸리티 프로시저나 쿼리 부분 확인
SQL Server
DB2 UDB
SP_SERVER_INFO
Select @@version
Select * from sysibmadm.env_inst_info
select @@spid
select application_id() as appl_id
from sysibm.sysdummy1
SP_CONFIGURE
select * from sysibmadm.DBMCFG
select * from sysibmadm.DBCFG
select dbmconfig_type, numdb, diaglevel
from table(sysfun.get_dbm_config()) as dbmcfg
CLP>db2 get dbm cfg
CLP>db2 get db cfg
Sp_spaceused 테이블명 ()
SELECT TABNAME, CARD
FROM SYSCAT.TABLES
WHERE TABNAME= 'SALES'
Sp_spaceused 테이블명 (사이징)
SELECT TABSCHEMA,
TABNAME,DATA_OBJECT_P_SIZE,
INDEX_OBJECT_P_SIZE,LONG_OBJECT_P_SIZE,
LOB_OBJECT_P_SIZE,XML_OBJECT_P_SIZE
FROM SYSIBMADM.ADMINTABINFO
WHERE TABNAME ='SALES' -- 임의의 테이블
select suser_sname()
values current_user
-
values current_path
=>
"SYSIBM","SYSFUN","SYSPROC","SYSIBMADM","ADMINISTRATOR"
sp_change_owner
스키마 변경은 export/import 작업으로 가능
전체 스키마 복사는 ADMIN_COPY_SCHEMA 저장프로시저 활용.
sp_helpdevice
select * from sysdevices
SELECT *
FROM SYSIBMADM.DBPATHS
sp_helpdb pubs
CLP>connect to sample
CLP>db2 "call get_dbsize_info(?,?,?,0)"
sp_rename 테이블1, 테이블2
rename table 테이블1 to 테이블2
ü [MS SQL] SP_SPACEUSED ‘테이블명같은 저장 프로시져 데이타는 정확한 조회를 위해서는 runstats 작업을 수행해야 한다. ) isql> RUNSTATS ON TABLE ADMINISTRATOR.SALES ON ALL COLUMNS ALLOW WRITE ACCESS ;
ü [DB2]에서도 RUNSGTATE 유틸을 수행하면 SYSCAT.TABLES에서 CARD 컬럼이 최신 value 업데이트 된다.
[ 5] SQL 매핑 예시문
SQL Server
DB2 UDB
SELECT getdate()
VALUES CURRENT TIMESTAMP
VALUES CURRENT DATE
VALUES CURRENT TIME
SELECT CURRENT TIMESTAMP FROM SYSIBM.SYSDUMMY1
TRUNCATE TABLE employee
db2 "import from /dev/null of del replace into inst95.empokyee"
SELECT TOP n…
SELECT …. FETCH FIRST n rows only
select * into test_emp
from employee WHERE 1<>1
CREATE TABLE TEST_EMP
LIKE EMPLOYEE
select ENAME from bi_stu1 a
where not exists (select '1' from nw_stu1 b where a.ename = b.ename)
select ENAME from bi_stu1
except
select ENAME from nw_stu1
ALTER TABLE TEST_EMP ALTER COLUMN EMP_ID VARCHAR(20)
*ALTER TABLE INST95.TEST_REAL ALTER COLUMN NAME SET DATA TYPE VARCHAR(30)
SP_RECOMPILE ‘프로시져명
SYSPROC.REBIND_ROUTINE_PACKAGE (’P’, ’MYSCHEMA.MYPROC’, ’ANY’)
ü DB2 9.7에서는 해당 컬럼 값의 타입 변환지원이 더욱 막강해졌다.
테이블 생성에서는 SQL Server DB2에서는 많은 부분이 유사함을 있다.

댓글 없음:

댓글 쓰기