메인 컨텐츠로 가기

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관 보기.

developerWorks에 처음 로그인하면 developerWorks프로파일이 생성됩니다.귀하의 프로파일에서 동의하신 내용이 공개되지만 이 사항은 언제든지 변경 가능합니다. 귀하의 성명(숨김으로 체크되어 있어도 표시됩니다)과 디스플레이 이름은 게시한 컨텐츠나 사이트 엑세스시 표시됩니다.

모든 정보가 안전하게 전송되었습니다.

  • 닫기 [x]

처음 developerWorks에 로그인할 때 프로파일이 작성되므로, 이를 위해 디스플레이 이름을 선택해야 합니다. 선택하신 디스플레이 이름은 developerWorks에 게시한 컨텐츠에 표시됩니다.

3글자 이상 31글자 이하의 길이로 사용 가능합니다. dW커뮤니티 내에서는 보안상 이메일주소를 제외한 다른 이름을 지정하셔야 합니다.

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관 보기.

모든 정보가 안전하게 전송되었습니다.

  • 닫기 [x]

DB2 9.7: DB2 9.7 for Linux, UNIX and Windows에서 Oracle 애플리케이션 실행하기(1)

PL/SQL 지원 등을 통해 Oracle에서 개발된 애플리케이션의 실행을 지원하는 DB2 9.7

Serge Rielau, SQL Architect, STSM, IBM
Serge Rielau는 12년 동안 DB2 for Linux, UNIX and Window의 SQL 컴파일러로 활동해 왔으며 현재는 DB2 for Linux, UNIX and Windows의 SQL 아키텍트로 활동하고 있다. DB2 9.7의 SQL 호환성 부분 책임 아키텍트인 Serge는 comp.databases.ibm-db2에서 만나볼 수 있다.

요약:  IBM® DB2® 9.7 for Linux®, UNIX® and Windows®에서는 Oracle의 SQL 및 PL/SQL 언어에 대한 지원을 기본적으로 제공합니다. 따라서 Oracle에서 작성된 많은 애플리케이션을 DB2에서도 실행할 수 있습니다. 이 기사에서는 DB2에서 제공하는 Oracle 호환성에 대한 개요를 심도 있게 살펴봅니다. 사용자 정의 애플리케이션을 DB2로 전환하거나 DBMS 공급업체 지원을 DB2로 확장할 계획이 있다면 지금이 바로 적기입니다.

이 연재 자세히 보기

원문 게재일:  2009 년 7 월 23 일 번역 게재일:   2009 년 8 월 04 일
난이도:  중급 영어로:  보기 PDF:  A4 and Letter (454KB | 22 pages)Get Adobe® Reader®
페이지뷰:  3085 회
의견:  


이 기사를 쓰게 된 계기

지난 3월 DB2 9.7에 대한 Cebit 프리젠테이션에서 필자는 변환기를 사용하지 않은 채로 부주의하게 110V 컴퓨터 스피커를 독일의 230V 전원에 연결하는 바람에 스피커를 고장내고 말았다. 이 여행에서 비슷한 사고로 인해 전동 칫솔 및 면도기용 충전기도 고장났었다. 이처럼 필자는 실수를 하고서도 배우지 못하는 사람 중 하나이기 때문에 출처는 모르지만 "표준과 관련된 문제는 세상 어디에나 널려 있다"는 말에 십분 동감하고 있다.

RDBMS(Relational database management systems)의 경우에는 다행히 적어도 다음과 같은 세 가지 주요 표준과 이러한 표준에 대한 다양한 변형이 있다.

  • ANSI SQL 및 ANSI SQL/PSM
  • Oracle SQL 및 PL/SQL
  • Sybase 및 Microsoft TSQL

그림 1은 다양한 SQL 언어의 관계를 보여 주는 벤 다이어그램이다.


그림 1. 다양한 SQL의 복잡한 관계
표준과 겹치는 여러 개의 원

애플리케이션을 작성하려면 그때마다 사용할 RDBMS 공급업체를 선택해야 한다. 한번 선택한 후에는 기본적으로 해당 업체에 얽매이게 된다. 저렴한 가격, 향상된 기술 또는 우수한 파트너십을 활용하기 위해 공급업체를 바꾸려고 해도 다른 RDBMS에서 사용하려면 많은 내용을 다시 작성해야 하는 레거시 코드 때문에 쉽사리 시도할 수도 없다. 또한 제품을 변경할 경우 기존의 스킬을 원하는 만큼 쉽게 활용할 수도 없다.

IBM DB2 9.7 for Linux, UNIX and Windows(DB2)는 Oracle용으로 작성된 애플리케이션을 DB2에서 사용하는 데 있어서 걸림돌이 되는 많은 부분을 획기적으로 제거했기 때문에 고객과 공급업체 모두 애플리케이션 히스토리보다는 얻게 되는 장점을 보고 DBMS를 선택할 수 있다.


DB2 9.7의 Oracle 호환성 기능

한 RDBMS용으로 작성된 애플리케이션을 거의 변경하지 않은 채로 다른 RDBMS에서 실행하기 위해서는 많은 부분을 고려해야 한다. 서버에 있는 다양한 잠금 메커니즘, 데이터 유형, SQL 및 프로시저 언어와 애플리케이션 자체에 사용되는 클라이언트 인터페이스까지도 구문 차원뿐만 아니라 의미 차원에서도 적절하게 조정해야 한다.

DB2에는 이러한 단계가 모두 적용되었다. 변경 사항은 예외이지 규칙이 아니다. (IBM은 필요한 애플리케이션 변경 사항에 빠르게 액세스할 수 있다.) 표 1에서는 공통으로 사용되는 기능을 간략하게 설명한다.


표 1. 공통으로 사용되는 기능
Oracle-->DB2
동시성 제어-->기본 지원
SQL 언어-->기본 지원
PL/SQL-->기본 지원
PL/SQL 패키지-->기본 지원
내장 패키지-->기본 지원
JDBC 클라이언트(확장 포함)-->기본 지원
SQL*Plus 스크립트-->기본 지원

DB2 9.7에서는 애플리케이션을 더 이상 이식하지 않아도 된다. 단순히 애플리케이션을 활성화하기만 하면 된다. 패키지화된 애플리케이션의 경우에는 하나의 소스를 DB2와 Oracle에서 공유할 수도 있다.

즉, Oracle 애플리케이션을 DB2에서 사용할 수 있도록 만드는 작업은 HP-UX용으로 작성된 C 프로그램을 AIX에서 실행할 수 있도록 만드는 작업보다 쉽다.


동시성 제어

과거에 Oracle과 DB2 사이의 가장 큰 차이점 중 하나는 동시성 제어를 처리하는 방법이었다. 대표적인 문구는 "판독자는 작성자를 차단하지 않고 작성자는 판독자를 차단하지 않는다"이다.


표 2. Oracle 동시성 동작
보류 중인 트랜잭션동작새 트랜잭션
판독자차단하지 않음판독자
판독자차단하지 않음작성자
작성자차단하지 않음판독자
작성자차단함작성자

격리 수준에 대해서는 자세히 다루지 않겠지만 여기에서는 Oracle 기본 명령문 수준 격리를 사용하는 거의 대부분의 애플리케이션이 DB2의 기본 CS(Cursor Stability)와 매우 잘 작동한다는 수준의 언급이면 충분할 것이다.

하지만 지금까지의 CS는 작성자가 판독자를 차단하고, 어떤 경우에는 판독자가 작성자를 차단할 수 있도록 구현되었다. 이렇게 구현한 이유는 CS 격리 하에서의 트랜잭션이 보류 중인 동시 트랜잭션의 변경 "결과를 대기"하기 때문이었다.


표 3. 지금까지의 DB2 동시성 동작(CS 사용)
보류 중인 트랜잭션동작새 트랜잭션
판독자차단하지 않음판독자
판독자거의 차단하지 않음작성자
작성자차단함판독자
작성자차단함작성자

CS 격리 하에서 실행 중인 트랜잭션이 변경된 행을 만났을 때 결과를 대기할 이유가 없다는 사실이 밝혀졌다. 이 동작은 변경된 행의 현재 커미트된 버전을 읽는 것과 동일한 동작이기 때문이다.

이 동작은 DB2 9.7에서 구현되었다. 즉, DB2는 단순히 로그에서 잠겨 있는 행의 현재 커미트된 버전을 검색한다. 대부분의 경우에는 변경 사항이 아직 커미트되지 않았기 때문에 해당 행이 로그 버퍼에 남아 있다. 하지만 행이 작성된 후 로그 버퍼에서 다시 겹쳐써졌다고 하더라도 DB2가 해당 행의 위치를 정확히 알고 있기 때문에 한 번의 IO 작업만으로도 원하는 버전을 버퍼풀로 가져올 수 있다.

한 사용자가 직원 테이블의 이름을 갱신하고 있고 이 사용자가 변경 사항을 커미트하기 전에 다른 사용자가 해당 테이블을 검색하고 있는 상황을 가정해 보자(그림 2 참조). 일반적으로 두 번째 사용자는 첫 번째 사용자가 커미트하거나 롤백할 때까지 기다려야 했었다. 하지만 이제는 현재 커미트된 데이터 읽기가 지원되므로 두 번째 사용자가 수행한 검색의 결과로 첫 번째 사용자의 변경 사항이 포함되지 않은 버전의 행이 로그 버퍼에서 검색된다.


그림 2. 작성자가 판독자를 차단하지 않음
작성자가 판독자를 차단하지 않음

이 동작의 중요한 특징은 다음과 같다.

  • 롤백 세그먼트와 같은 새 오브젝트를 사용하지 않는다.
  • 어느 경우에나 로그를 작성해야 하므로 작성자에 대한 성능 오버헤드가 발생하지 않는다.
  • 트랜잭션이 열려 있음에도 불구하고 필요한 로그 파일이 아카이브되는 상황처럼 발생하기 어려운 이벤트가 발생할 경우 DB2는 단순히 폴백하여 잠금이 해제될 때까지 기다리므로 "스냅샷이 너무 오래됨"과 같은 상황이 발생하지 않는다.

DB2에는 이러한 변경 사항 외에도 CS 격리 하에서 잠금을 유지하는 판독자를 제거하기 위해 추가 잠금 회피 기술이 도입되었다.


표 4. 새로운 DB2 동시성 동작(CS 사용)
보류 중인 트랜잭션동작새 트랜잭션
판독자차단하지 않음판독자
판독자 차단하지 않음 작성자
작성자 차단하지 않음 판독자
작성자차단함작성자

이 표에서 알 수 있듯이 이제는 동시성 동작이 Oracle의 동시성 동작과 동일하다. 실제로 새로 작성한 DB2 데이터베이스는 기본적으로 이 동작을 제공한다.


새 데이터 유형

모든 데이터베이스의 핵심은 해당 데이터베이스에 있는 데이터이다. 유형이 일치하지 않거나 이러한 유형의 의미가 일치하지 않으면 애플리케이션을 다른 RDBMS에서 사용할 수 있도록 만드는 데 심각한 영향을 줄 수 있다. 따라서 Oracle 애플리케이션을 DB2에서 실행할 수 있으려면 문자열, 날짜 및 숫자와 같이 표준화되지 않은 기본 유형에 대한 지원이 필요하다. 이러한 기본 유형을 맞추는 부분 외에도 Oracle의 PL/SQL에 일반적으로 사용되는 좀 더 복잡한 유형들도 DB2 9.7에 추가되었다.


표 5. 새 DB2 데이터 유형
데이터 유형설명
NUMBERDECFLOAT(Power6 하드웨어 가속 사용) 및 DECIMAL을 기반으로 NUMBER 및 NUMBER(p [, s])에 대한 지원이 추가되었다.
VARCHAR2VARCHAR2 유형 동작은 NULL로 해석되는 빈 문자열과 후행 공백을 구분하는 데이터 정렬을 포함한다.
Oracle DATEOracle DATE 모드의 데이터베이스는 달력 날짜와 함께 TIME 구성 요소를 포함한다.
TIMESTAMP(n)초 단위의 범위를 0(날짜 + 시간)부터 12(피코초) 사이에서 선택할 수 있다.
BOOLEAN이 유형은 절차적 논리, 변수 및 루틴 매개변수에서 사용할 수 있다.
VARRAY프로시저의 ARRAY 지원이 VARRAY 유형 메소드 및 구문을 지원하도록 확장되었다.
INDEX BYDB2에서는 일반 배열과 함께 결합형 배열도 지원된다.
ROW TYPE이 복합 유형은 변수 및 매개변수에서 사용할 수 있으며 배열 및 결합형 배열에 대한 요소로도 사용할 수 있다.
Ref Cursor type매개변수를 사용하여 커서를 변수에 할당하거나 전달할 수 있다.

묵시적 캐스팅 및 유형 확인

"오리처럼 걷고 오리처럼 말한다면 그것은 분명 오리이다."

이 문구는 PHP 및 Ruby와 같은 같은 여러 새 언어에서 자주 언급되는 문구이다. 모든 리터럴은 문자열이며 컨텍스트에 따라 다른 유형으로 사용된다. SQL 표준을 준수하고 유형 불일치가 코딩 실수를 나타낼 가능성이 높다는 철학에 따라 지금까지 DB2는 문자열과 숫자를 명시적으로 다른 형식으로 캐스팅하지 않는 한 서로 비교할 수 없는 강력한 형식의 규칙을 따랐다.

아쉽게도 Oracle 애플리케이션이 SQL에서 약한 형식 지정을 사용할 경우에는 이 애플리케이션을 DB2에 대해 성공적으로 컴파일할 수 없었다. DB2 9.7에서는 묵시적 캐스팅(약한 형식 지정)이 추가되었다. 즉, 문자열과 숫자를 매우 유연한 방식으로 비교, 할당 및 조작할 수 있게 되었다.

또한 지연된 준비로 인해 형식화되지 않은 NULL을 더 많은 곳에서 사용할 수 있으며 형식화되지 않은 매개변수 마커를 거의 모든 곳에서 사용할 수 있다. 즉, DB2는 첫 번째 실제 값이 나타날 때까지 매개변수 마커의 유형을 확인하지 않는다.

묵시적 캐스팅을 완성하기 위해 DB2에서는 프로시저 매개변수에 기본값을 지정하는 기능과 매개변수에 대한 인수를 이름별로 연결하는 기능을 지원한다.


DB2의 확장된 내장 함수 라이브러리

모든 RDBMS는 데이터에 대한 작업을 수행하는 함수 라이브러리를 제공한다. 하지만 이러한 함수에 같은 이름을 사용하는 경우가 없다는 점이 문제이다. 기능이 매우 비슷한 함수조차도 RDBMS마다 이름이 다르다.

DB2는 이제 기존 함수 세트뿐만 아니라 Oracle과 호환되는 라이브러리도 지원한다. 다음은 이러한 함수 중 일부를 보여 주는 간단한 목록이다.

  • 변환 및 캐스팅 함수
    • TO_DATE
    • TO_CHAR
    • TO_CLOB
    • TO_NUMBER
    • TO_TIMESTAMP
    이들 각 함수는 다양한 호환 형식 문자열 세트를 지원한다.
  • 날짜 계산
    • EXTRACT
    • ADD_MONTHS
    • MONTHS_BETWEEN
    • NEXT_DAY
    • 요일 부분을 추가하는 더하기(+) 부호
  • 문자열 조작
    • LPAD
    • RPAD
    • INSTR
    • INITCAP
    • SUBSTR에 대한 확장
  • 기타
    • NVL
    • DECODE
    • LEAST
    • GREATEST
    • BITAND

두 제품에서 동일하게 지원되는 함수가 많아졌다는 것은 Oracle 애플리케이션을 DB2에서 사용할 수 있도록 만드는 작업의 기본적인 성공률이 높아졌다는 것을 뜻한다.

'DB2 9.7 for Linux, UNIX and Windows에서 Oracle 애플리케이션 실행하기(2)'보기


참고자료

교육

제품 및 기술 얻기

  • DB2 9.7 for Linux, Unix and Windows: DB2 9.7 for Linux, UNIX and Windows의 무료 시험판을 다운로드할 수 있다.

  • DB2 Express-C 9.7: 커뮤니티를 위해 무료로 제공되는 DB2 Express 데이터베이스 서버인 DB2 Express-C 9.7을 다운로드할 수 있다.

  • developerWorks에서 직접 다운로드할 수 있는 IBM 시험판 소프트웨어를 사용하여 후속 개발 프로젝트를 구현해 보자.

토론

  • 포럼에 참여하기.

  • 사용자의 개인 프로파일과 사용자 정의 홈 페이지가 제공되는 My developerWorks community에서는 관심을 가지고 있는 developerWorks의 여러 주제를 추적할 수 있으며 다른 developerWorks 사용자들과 의견을 나눌 수도 있다.

필자소개

Serge Rielau

Serge Rielau는 12년 동안 DB2 for Linux, UNIX and Window의 SQL 컴파일러로 활동해 왔으며 현재는 DB2 for Linux, UNIX and Windows의 SQL 아키텍트로 활동하고 있다. DB2 9.7의 SQL 호환성 부분 책임 아키텍트인 Serge는 comp.databases.ibm-db2에서 만나볼 수 있다.

잘못된 도움말 신고

부정사용 신고

감사합니다. 이 항목은 운영자가 관심을 표시했습니다.


잘못된 도움말 신고

부정사용 신고

제출실패 신고. 나중에 다시 실행해주세요.


디벨로퍼웍스 로그인


IBM ID가 필요하세요?
IBM ID를 잊으셨습니까?


비밀번호를 잊으셨습니까?
비밀번호 변경

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관.

 


developerWorks에 처음 로그인하면 developerWorks프로파일이 생성됩니다.귀하의 프로파일에서 동의하신 내용이 공개되지만 이 사항은 언제든지 변경 가능합니다. 귀하의 성명(숨김으로 체크되어 있어도 표시됩니다)과 디스플레이 이름은 게시한 컨텐츠나 사이트 엑세스시 표시됩니다.

화면상에 보여지는 닉네임을 정하세요.

처음 developerWorks에 로그인할 때 프로파일이 작성되므로, 이를 위해 디스플레이 이름을 선택해야 합니다. 선택하신 디스플레이 이름은 developerWorks에 게시한 컨텐츠에 표시됩니다.

3글자 이상 31글자 이하의 길이로 사용 가능합니다. dW커뮤니티 내에서는 보안상 이메일주소를 제외한 다른 이름을 지정하셔야 합니다.

3개의 &이나 대쉬를 포함해주시고 31글자내로 제한해주세요.


developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관.

 


아티클 순위

의견

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=20
Zone=Information Management
ArticleID=418090
ArticleTitle=DB2 9.7: DB2 9.7 for Linux, UNIX and Windows에서 Oracle 애플리케이션 실행하기(1)
publish-date=07232009
author1-email=srielau@ca.ibm.com
author1-email-cc=

태그

Help
검색 필드를 사용하여 My developerWorks 내에서 해당 태그가 사용된 모든 종류의 컨텐츠를 검색하십시오.

태그를 더 많이 보거나 적게 보기 위해 슬라이더 막대를 사용하십시오.

인기 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 최고 인기 태그를 보여줍니다.

내 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 귀하의 태그를 보여줍니다.

검색 필드를 사용하여 My developerWorks 내에서 해당 태그가 사용된 모든 종류의 컨텐츠를 검색하십시오. 인기 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 최고 인기 태그를 보여줍니다. 내 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 귀하의 태그를 보여줍니다.