프로그래밍... Oracle 10g XE

위의 스샷은 모든 설정이 끝나고, 기본 계정인 scott로 샘플 테이블인 emp 테이블의 내용을 보는 중이다.


학기 초이다 보니, 아무래도 새로 듣게 되는 수업을 위한 실습 환경을 만들게 되는 일이 생긴다. 이럴때 또 문제가 되는 것이 나는 왠만하면 Linux 기반에서 이런 것들을 하기를 원한다는 것이다. 그래서 이번 학기에 듣는 데이터 베이스 프로그래밍, 데이터 베이스 응용이라는 두과목에서 Oracle을 배우는 관계로 오늘은 Oracle Database 10g Express Edition(이후 Oracle 10g XE)을 설치하게 되었다.

Oracle 10g XE 버전은 소규모, 개인을 위한(?) 완전 무료 Oracle 10g 버전이다. 때문에 다음과 같은 약간의 제약이 있다.
Oracle Database XE는 서버의 용량, CPU 숫자에 관계없이 설치가 가능합니다. 다만 호스트 별로 1 GB의 메모리, 1 개의 CPU만을 사용할 수 있으며, 최대 4 GB의 사용자 데이터를 저장할 수 있습니다.

하지만 내가 설치하려는 머신은 어짜피 메모리도 500MB 조차 안되고, CPU도 역시 하나이다. 그리고 거창한 사업이나 프로젝트에 Oracle DB를 쓰려는 것이 아니고, 단지 수업 시간에 하는 내용을 실습하거나 하는 용도로 쓰고 싶은 것이기 때문에 나에겐 알맞다고 판단했다. 게다가 Debian Sarge 머신에 설치하려는 생각을 가지고 있었는데, Oracle 10g XE의 경우 deb 패키지 형태로 제공되었다.


데비안이나 우분투라면 설치 과정은 간단하다. 나는 Debian Sarge에 설치를 하였다.

① /etc/apt/sources.list 의 수정, 다음의 저장소를 추가

deb http://oss.oracle.com/debian unstable main non-free

② 인증키 추가 및 패키지 설치
wget http://oss.oracle.com/el4/RPM-GPG-KEY-oracle -O- | sudo apt-key add -
sudo apt-get update
sudo apt-get install oracle-xe-universal
위의 작업은 sudo 를 쓰거나 root의 권한으로 해야 하는 작업이다. Universal 버전을 선택한 이유는 다음과 같다.
Multi-byte Unicode database for all language deployment, with the Database Homepage user interface available in the following languages: Brazilian Portuguese, Chinese (Simplified and Traditional), English, French, German, Italian, Japanese, Korean and Spanish.


③ 위의 작업으로 Oracle의 설치는 끝난다. 설치 후에 환경 설정을 해야 하는데, 다음의 명령으로 관리자 계정인 SYS와 SYSTEM의 패스워드 설정 및 웹 GUI 인터페이스 port 설정, 리스너(listener) port 설정등을 해준다.
/etc/init.d/oracle-xe configure

④ 그리고 나서 .bash_profile 혹은 .bashrc 에 아래의 명령을 추가해서 Oracle 10g XE를 위한 환경 변수등을 적용시킨다.
. /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/bin/oracle_env.sh

⑤ 이렇게 적용이 끝나면 sqlplus 를 이용한 접속이나, 웹을 이용한 DB 접속이 가능하다.
터미널에서는 다음과 같이 sqlplus 를 이용할 수 있고,
sqlplus 계정명
웹에서는 다음과 같이 DB에 접속이 가능하다.
http://host:port/apex/

이렇게 설치를 끝내고 나서 보니, 각종 교재에 나와있는 Oracle의 기본 계정이라고 하는 scott 계정이 존재하지 않았다. 때문에 다음과 같이 sqlplus에 접속한 뒤에 scott 계정을 만들어 주었다.
CREATE USER scott
IDENTIFIED BY tiger
DEFAULT TABLESPACE users;
TEMPORARY TABLESPACE temp;

GRANT AQ_ADMINISTRATOR_ROLE TO scott;
GRANT CONNECT TO scott;
GRANT RESOURCE TO scott;
EXECUTE dbms_aqadm.grant_type_access('scott');
이렇게 scott 계정을 만들어 주고 나니, 교재에서 실습해 볼 때 나오는 기본 예제 테이블도 없다는 것을 알았다. Oracle 10g XE 디렉토리를 뒤져보았지만 찾을 수가 없어서 Oracle 9i 설치된 컴퓨터에서 예제 테이블 생성 파일(demobld.sql)만 가져왔다. 하지만 이 파일을 적용해 보니 다음과 같은 에러를 뿜으면 정상적으로 테이블이 만들어 지지 않았다.
TO_DATE('17-DEC-1980', 'DD-MON-YYYY'), 800, NULL, 20)
*
3행에 오류:
ORA-01843: 지정한 월이 부적합합니다.
원인을 검색해 본 결과 NLS_DATE_FORMAT이 맞지 않아서 생기는 오류였다. 위의 예제 테이블 생성(sql)에서의 NLS_DATE_FORMAT은 'DD-MON-YYYY' 인데, 시스템의 NLS_DATE_FORMAT은 다른 형식으로 설정되어 있어서 오류가 생겼다.(이 글을 작성한 후 꽤 시간이 지나고 나서 알았지만 위의 오류의 정확한 원인은 아래의 NSL_LANGUAGE 설정 문제였다. NLS_DATE_FORMAT의 설정과는 무관한 문제였다.)

NLS_DATE_FORMAT의 확인은 다음의 명령어로 알아볼 수 있다.
select sysdate from dual;
NLS_DATA_FORMAT을 변경하는 방법은 다음과 같다.
alter session set nls_date_format='DD-MON-YYYY';
이렇게 수정해 주었음에도 불구하고, 에러가 났는데 원인입력하려는 데이터의 DATE 타입은 영문 기준인데, 현재 설정되어 있는 NLS_LANGUAGE가 KOREAN으로 설정되어 있어기 때문이다. DATE 타입이 영문으로 표기하면, 'DD-MON-YYYY' 의 경우 '22-MAR-2007'과 같은 형태가 되지만, 한글로 표기하면 '22-3월 -2007'과 같은 형태가 되기 때문에 오류가 생기는 것이였다. 다음의 명령어로 NLS_LANGUAGE를 AMERICAN으로 변경해주고 나서야 정상적으로 예제 테이블 생성 파일(demobld.sql)을 실행(?) 할 수 있었다.
alter session set nls_language='AMERICAN';

테이블 추가가 끝난 후에는 NLS_DATE_FORMAT과 NLS_LANGUAGE를 원하는대로 다시 바꾸어도 상관이 없다. 예제 테이블 생성 파일과 삭제 파일을 첨부해 둔다.
예제 테이블 생성 파일 : demobld.sql
예제 테이블 삭제 파일 : demodrop.sql

참고 사이트
http://www.oracle.com/technology/tech/linux/install/xe-on-kubuntu.html
http://www.oracle.com/technology/software/products/database/xe/files/install.102/b25144/toc.htm
http://database.sarang.net/?inc=read&aid=22003&criteria=oracle
http://database.sarang.net/?inc=read&aid=28034&criteria=oracle
http://www.cryer.co.uk/brian/oracle/ORA01843.htm

+ Recent posts