<7.0 기반위에 Oracle8i R3 (8.1.7.0.0)설치를 위한 Workaround>
와우리눅스 게시판에 올라와있는 Workaround로 설치해보았으나 잘되지 않았다.
이문서는 경험에비춰 추가하였으며 원본을 원하신다면 와우리눅스로 방문해보기 바란다.
Redhat 7.0에서 Oracle8i R2 및 R3를 설치하는 것은 Default로는 불가능하다.
Oracle사에서도 Linux용 Oracle8i는 R2 (8.1.6.1.0)이 Redhat 6.2에서 설치, 운영하 는것이 최근 버전에 대한 Certification이다.
공식적으로는 위의 제목처럼 설치한다는 것은 Certify되어 있지 않기에 약간의 트릭이 필요하다.
물론 이 트릭도 Oracle사 에서는 인정하지 않겠지만...
본 Workaround는 Tom Bissett씨의 자료를 많이 참고했다.
주소는 http://jordan.fortwayne.com/oracle/ 이며 Linux 배포판별로 Oracle을 설치하는 방법들이 자세히 소개되어 있으니 한번쯤 방문해 보기 바란다.
본 Workaround가 담고 있는 주요 내용은 아래와 같다.
1) Redhat 7.0에서 glibc 2.2x의 문제
2) 와우리눅스 7.0에서 Net8 Configuration Assistant의 문제
(와우리눅스 7.0만의 문제는 아닌것 같지만 다른 배포판에서는 테스트해 보지 않았음)
3) Net8 Protocol의 compile/link 문제
이상의 내용에 대한 Workaround를 담고 있으며 문제점이나 잘 못 기술된 부분들에 대한
Comment는 이곳 게시판이나 E-mail로 질타 바랍니다.
oraman@dreamwiz.com
============================================================================
System 환경
- Linux box: 와우리눅스 7.0 KKachi pre-release
- RDBMS: Oracle8i EE Release 3 (8.1.7.0.0) for Linux
설치를 위해 필요한 것들
- 와우리눅스 7.0 X-mas pre-release
RedHat 7.0 기반으로 이루어진 한글 배포판이다. 아래의 주소에서 다운로드 받을 수 있고, 필요하다면 와우리눅스 사무실에 방문하여 직접 CD를 받을수도 있다(물론 공짜~)
http://www.wowlinux.com
- Oracle8i EE Release 3 (8.1.7.0.0)
http://technet.oracle.com에서 무료로 다운로드 받을 수 있다.
Oracle 본사에서 운영하는 Technet 사이트로 Oracle Products 및 Oracle solution 관련 정보들을
접할 수 있다. 물론 가입을 해야 하지만 무료~~~
- JDK 1.1.8
Oracle8i R3는 설치하기 이전에 JDK118이 Linux box에 미리 설치되어 있어야 한다.
http://www.blackdown.org에서 다운로드 받을 수 있으며 받아야 할 화일 이름은 jdk118_v3-glibc-2.1.3.tar.bz2 이다. root user로 다운을 받아서 /usr/local에 옮겨 놓는다.
- glibc 2.1
VA Linux System사에서 Patch용으로 사용하도록 한 SDK이다. 아래의 주소에 있다.
http://ftp.valinux.com/pub/support/hjl/glibc/sdk/2.1/i386-glibc-2.1-linux.tar.gz
STEP 1. JDK 1.1.8 설치
root로 작업을 하며 /usr/local에서 압축을 풀고 Link을 건다.
참고로 본 화일은 /usr/local에 있다고 가정하자.
su - root
cd /usr/local
tar xvIf jdk118_v3-glibc-2.1.3.tar.bz2
ln -s /usr/local/jdk118_v3 /usr/local/java |
(cd /usr/local/java라고 키인하여 제대로 이동하는지 확인하고 다음으로 넘어가자)
STEP 2. glibc 2.2x를 glibc2.1로 대치
배포판 와우리눅스 7.0에 들어 있는 glibc는 2.2-5인데 Oracle8iR3는 glibc 2.1이 반드시 필요하다.
2.2에서는 Oracle DB 생성에 있어서 링크의 문제가 발생하여 제대로 DB 생성이 되지 않는다.
해서 glibc 2.2에서 사용하는 gcc, cc, ld를 glibc 2.1로 대치하는 작업이 필요하고, Oracle DB 생성 후 되돌릴 수 있다.
다운로드 받은 glibc 2.1은 /download 에 위치한다고 가정하자. 물론 root로 작업한다.
su - root
cd /
tar xfz /download/i386-glibc-2.1-linux.tar.gz
cd /usr/bin
mkdir saved
mv gcc cc ld saved
ln -s /usr/i386-glibc-2.1-linux/bin/i386-glibc21-linux-gcc gcc
ln -s gcc cc
ln -s /usr/i386-glibc-2.1-linux/bin/i386-glibc21-linux-ld ld
cd /usr/lib
mkdir saved
mv libc.so libdl.so libm.so libpthread.so saved
mv libc.a libdl.a libm.a libpthread.a saved |
(위의 작업들은 순서대로 수행하고 오타가 나지 않도록 주의!!!)
STEP 3. Oracle8i 설치를 위한 group, user 생성 및 환경 설정
기본적으로 Oracle products을 설치하는 User와 설치된 제품을 가지고 개발하는 User는 다르다.
이번 단계에서는 설치를 위한 유저의 생성 및 환경 설정이지 개발자의 환경설정은 아님을 주지하기 바란다.
참고로 다음과 같이 정의하겠다.
Group: dba
User: ora817
Oracle SID: ora817
Oracle Home: /oracle/app/oracle/product/8.1.7 |
(Group, User 생성은 다른 문서를 참조 바람). 참고로 ora817 user의 .bash_profile 내용중 Oracle8iR3 관련 환경 정보는 아래와 같다.
다른 user name이라해도 환경은 가능하면 아래의 내용을 따라주기 바란다.
# groupadd -g 5000 dba
# useradd -u 5000 -g dba ora817
# passwd ora817
# chmod -R /oracle
# Environment for Oracle8i (8.1.7.0.0) Release 3
export ORACLE_BASE=/oracle/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/8.1.7
export ORACLE_OWNER=ora817
export ORACLE_SID=ora817
export TMPDIR=$ORACLE_BASE/tmp
export PATH=$PATH:/oracle/app/oracle/product/8.1.7/bin:/usr/local/java/bin:
export CLASSPATH=.:/oracle/app/oracle/product/8.1.7/jdbc/lib/classes111.zip
export TNS_ADMIN=$ORACLE_HOME/network/admin
export NLS_LANG=American_America.KO16KSC5601
export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
export ORACLE_TERM=vt100
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export LANG=C
umask 022
mesg n |
(/bin /usr/bin 및 기타 PATH는 기본적으로 설정되어 있다고 가정함)
STEP 4. Oracle8i 설치 I
Custom으로 설치하며 Net8이 제대로 설치되었는지까지의 과정을 살펴본다.
중간중간 중요한 부분만 설명하겠다.
1) XWindows를 ora817 user로 다시 로그인한다
(Gnome, KDE 상관 없고 Remote에서 작업을 하기 위해서는 XWin emulator가 필요하다)
2) Oracle8i를 /usr에 Copy하여 압축을 푼다.
cd /usr/Disk1
./runInstaller |
3) 설치 제품은 Oracle8i Enterprise Edition 8.1.7.0.0을 선택하고, 설치 타입은 반드시 Custom으로 할 것이며 Database를 생성하겠냐는 질문에는 No라고 한다.
아직은 DB를 생성할 필요가 없다.
4) '설치 가능한 제품구성 요소'에서는 최소한의 설치를 한다.
설치하지 않겠다고 체크되는 그 모든것은 다 설치하지 않는것이 시간을 벌 수 있다.
나중에 다시 설치해야 하기 때문에... 그러나 반드시 Net8과 관련된 내용은 모두 선택해야 한다.
5) 이렇게 해서 설치과정을 진행하고 나면 'Net8 Assistant Configuration' 과정이 나타난다.
이 단계에서 새로운 Net8 Assistant 설정을 위한 Windows가 Open되어야 하지만 그렇게 되지 않는다.
메세지 내용에서 'Net8 구성:'이라는 메세지를 마지막으로 그 어떤 진행과정이 없다.
과감히 Net8 Assistant Configuration을 클릭하여 프로그램을 종료한다.
(runInstaller까지 종료한다)
STEP 5. Net8 Protocol 확인 및 Net8 재설치
TCP/IP관련 Net8 adapter가 제대로 설치가 되지 않는다. 확인하고 다시 Net8을 설치해야 한다.
1) Net8 Protocol의 설치 내용 확인하기 위해서는 Terminal 창에서 ora817 계정으로 adapters라고 타이핑한다.
[ora817@phonon 8.1.7]$ adapters
Installed Net8 Tranport Protocols are:
IPC
Error!!! TCP/IP is not completely installed!
Present in libntcp8, but missing from ntcontab.o...
BEQueath
Error!!! SSL is not completely installed!
Present in libntcps8, but missing from ntcontab.o...
RAW
Installed Net8 Naming Adapters are:
TNSnames.ora
OracleNames
LDAP
Hostname
(이하 생략) |
위에서 보듯이 TCP/IP 프로토콜이 제대로 설치가 되지 않았다. 이는 설치과정에서 ins_names.mk에 대한 compile/link의 문제가 발생된 경우인데 재설치해야 한다.
3) runInstaller를 실행하여 Custom 설치 선택, Net8 제품을 체크하여 재설치할 수 있도록 한다.
STEP 4에서 설치하지 않은 제품도 선택이 되지만 이것들 역시 이번 과정에서는 설치하지 않도록 한다.
부연 설명하면 STEP 4를 똑같이 한번 더 수행하는 경우이다.
4) 재설치 하는 동안에 다음과 같은 Error 메세지가 보인다. '재시도'하지 말고 '무시'를 선택하여 계속 진행한다.
/oracle/app/oracle/product/8.1.7/network/lib/ins_names.mk의
install 대상을 부르는데 오류가 발생했습니다. |
5) 정상적으로 재설치까 끝나면 다시 한 번 Net8이 제대로 설치되었는지 확인한다.
[ora817@phonon 8.1.7]$ adapters
Installed Net8 Tranport Protocols are:
IPC
TCP/IP
BEQueath
SSL
RAW
Installed Net8 Naming Adapters are:
TNSnames.ora
OracleNames
LDAP
Hostname
(이하생략) |
위의 내용처럼 Net8 Protocol들이 정상적으로 설치되었다면 작업은 거의 끝났다.
STEP 6. Oracle8i 설치 II
Custom으로 설치하며 Net8이 제대로 설치되었기에 Net8만 빼고 나머지 옵션들을 설치 하면 된다.
중간중간 중요한 부분만 설명할 것이며, 과정은 STEP 4와 동일하다.
1) runInstaller 재수행
cd /usr/Disk1
./runInstaller |
2) Custom 선택, '설치 가능한 제품구성 요소' 항목에서 Net8은 이미 설치되어 있기에, 그리고 link가 재대로 이루어져 있기 때문에 Net8만 빼고 나머지 필요한 설치하고자 하는 제품들을 선택 하여 설치한다.
(Net8은 반드시 재설치하지 않도록 한다)
3) 설치가 정상적으로 끝나면 종료하고 나서 ora817 user process을 확인하고 JRE관련 process들은 다 죽인다.
STEP 7. Listener 구성
본 과정을 생략하고 싶다면 아래에 제공된 listener.ora 및 tnsnames.ora 화일을 그대로 카피해서 사용해도 상관 없다. 물론 Directory 위치 및 SID 이름 및 Host 이름등은 자기의 것으로 수정해야 한다.
1) 리스너 구성
netca
(그러면 Net8 Configuration Assistant의 창이 새롭게 뜨고 아래 내용을 참고하여 리스너를 추가한다)
리스너명: LISTENER
TCP/IP 포트: 1521 |
2) 로컬 네트 서비스 이름 구성
위의 1) 과정에 이어 계속 작업을 진행하는데, 로컬 네트 서비스 이름 구성에서 아래 내용을 참고하여 구성한다.
서비스 이름: ora817
프로토콜: TCP
호스트 이름: kimhg
TCP/IP 포트: 1521
네트 서비스 이름: ora817 |
3) 위의 과정을 거치게 되면 listener.ora 및 tnsnames.ora가 생성되는데 참고로 그 내용은 다음과 같다.
화일들의 위치는 $ORACLE_HOME/network/admin에 있다.
확인해 보기 바란다.
# LISTENER.ORA Network Configuration File:
/oracle/app/oracle/product/8.1.7/network/admin/listener.ora
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST =
kimhg.rush.co.kr)(PORT = 1521))
)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
)
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /oracle/app/oracle/product/8.1.7)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = ora817)
(ORACLE_HOME = /oracle/app/oracle/product/8.1.7)
(SID_NAME = ora817)
)
)
# TNSNAMES.ORA Network Configuration File:
/oracle/app/oracle/product/8.1.7/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
ORA817 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST =
kimhg.rush.co.kr)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = ora817)
)
)
INST1_HTTP =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST =
kimhg.rush.co.kr)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = SHARED)
(SERVICE_NAME = ora817)
(PRESENTATION = http://admin)
)
) |
4) listener 스타트
Listener가 재대로 동작하는지 확인한다.
lsnrctl start (리스너 스타트)
lsnrctl status (리스너 상태 확인)
lsnrctl stop (리스너 종료) |
STEP 8. Oracle8i Database 생성
이제는 Oracle8i Database를 생성할 수 있게 되었다. 기존에 열려 있는 창들이 있다면 모두 닫고 JRE 관련 process도 체크하여 필요하다면 다 죽인다.
시간이 많은 사람들은 XWindows를 종료했다가 다시 접속해도 괜찮다.
1) Oracle Database Configuration Assistant 수행
새로운 터미널 창을 열어 Oracle Database Configuration Assistant를 수행한다.
cd $ORACLE_HOME/bin
dbassist |
만약 여기서 dbassist가 실행이 되지 않으면
# cd /usr/Disk1/patch
# sh README.sh 를 실행후 dbassist를 실행.
2) 생성할 데이터베이스 유형 선택은 '사용자 정의'로...
3) 데이터베이스용으로 구성할 옵션 선택에서는 모두 선택해도 좋지만 생성하는데 무진장한 시간이 소요된다. 보통 Typical로 설치하게 되면 DB를 생성하는 과정이 CD에 들어있는 DB 생성 이미지를 그대로 옮겨 놓는 형태이기에 체 한시간도 걸리지 않지만 Custom으로 설치할 경우에는 새롭게 DB를 생성하기에 많은 시간이 필요하게 된다. 서너시간 정도(???)
4) 위의 과정에서 참고해야 될 정보들은 아래와 같다.
전역데이터베이스명: ora817
SID: ora817
문자집합변경
문자집합: KO16KSC5601
국가별 문자 집합: KO16KSC5601FIXED |
"Change Character Set"을 눌러서 National Character Set을 "KO16KSC5601FIXED"로 설정
(오라클 메뉴얼에 따르면 NCHAR나 NVARCHAR2및 NCLOB같은 data type을 사용하기 위해 필요하다고 나옴)
5) 마지막으로 Database를 생성하는 부분에 있어서 일단은 쉘 스크립트로 저장하자.
'쉘 스크립트에 정보 저장'을 선택하여 initORA817.sh라고 저장
6) 정상적으로 저장이 되었다면 이제 단지 위의 스크립트를 수행하는 일만 남았다.
참고로 위의 스크립트는 $ORACLE_HOME/assistant/dbca에 기본적으로 저장된다.
7) 잠자리에 들기 전에 위에서 저장된 스크립트를 수행하고 Zzzz...
cd /$ORACLE_HOME/assistants/dbca
./instORA817.sh |
이제 APM을 설치하시면 됩니다.
MySQL을 설치 하겠습니다
/usr/local에 있는 mysql-3.22.32.tar.gz의 압축을 풀어주고 환경설정을 합니다
[localhost@local]# tar xvzf mysql_3.22.32.tar.gz
[localhost@mysql-3.22.32]# ./configure --prefix=/usr/local/mysql --with-charset=euc_kr
[localhost@mysql-3.22.32]# make
[localhost@mysql-3.22.32]# make install |
설치가 성공적으로 끝났으면
[localhost@mysql-3.22.32]# cd /usr/local/mysql/bin |
mysql 기초 테이블을 생성합니다
[localhost@mysql-3.22.32]# ./mysql_install_db |
mysql 데몬을 뛰어 줍니다
[localhost@mysql-3.22.32]# ./safe_mysqld & |
GD를 설치 하겠습니다
/usr/local에 있는 gd-1.8.3.tar.gz의 압축을 풀어주고 설치를 합니다
[localhost@local]# tar xvzf gd_1.8.3.tar.gz
[localhost@gd-1.8.3]# make all |
PHP4을 설치 하겠습니다
php4를 설치하기전에 아파치를 한번 실행 시켜 줍니다
/usr/local에 있는 apache_1.3.12.tar.gz의 압축을 풀고 실행을 합니다
[localhost@local]# tar xvzf apache_1.3.12.tar.gz
[localhost@apache_1.3.12]# ./configure --prefix=/usr/local/apache |
한후 php4를 설치
/usr/local에 있는 php4.0.1pl2.tar.gz의 압축을 풀어주고 환경설정을 합니다
[localhost@local]# tar xvzf php4.0.1pl2.tar.gz
[localhost@php4.0.1pl2]# ./configure --prefix=/usr/local/php
--with-oci8=/오라클설치디렉토리(/oracle/app/oracle/product/8.1.5)
--with-apache=/usr/local/아파치설치소스디렉토리(/apache_1.3.12)
--with-mysql=/usr/local/mysql
--with-gd=/usr/local/gd-1.8.3
--enable-track-vars --enable-debug |
위의 컴파일명령어를 1줄에 입력하여 엔터.
[localhost@php4.0.1pl2]# make
[localhost@php4.0.1pl2]# make install
[localhost@php4.0.1pl2]# cp php.ini.dist /usr/local/lib/php.ini |
ZendOptimizer를 설치하실려면
/usr/local에 있는 ZendOptimizer-Beta4-Linux-glibc[1].0.tar.gz의 압축을 풉니다
[localhost@local]# tar xvzf
ZendOptimizer-Beta4-Linux-glibc[1].0.tar.gz
[localhost@local]# mkdir /usr/local/Zend
[localhost@local]# mkdir /usr/local/Zend/lib
[localhost@ZendOptimizer]# cp ZendOptimizer.so /usr/local/Zend/lib
[localhost@ZendOptimizer]# vi /usr/local/lib/php.ini
[Zend Optimizer]
zend_optimizer.optimization_level=7
zend_extension="/usr/local/Zend/lib/ZendOptimizer.so" |
를 맨 끝에 추가한다.
아파치 소스디렉으로 이동.
[localhost@apache_1.3.12]#./configure
--prefix=/usr/local/apache(아파치설치디렉토리)
--activate-module=src/modules/php4/libphp4.a
--enable-rule=SHARED_CORE
--enable-module=so [엔터] |
위의 명령어를 1줄에 입력
[localhost@apache_1.3.12]#make [엔터]
[localhost@apache_1.3.12]#make install [엔터]
[localhost@apache]#cd conf [엔터]
httpd.conf 파일을 open
#AddType application/x-httpd-php .php
#AddType application/x-httpd-php-source .phps |
라인의 주석해제.
Addtype application/x-httpd-php .php3
Addtype application/x-httpd-php .html
Addtype application/x-httpd-php .htm |
라인 추가
/usr/local/lib/php.ini 파일을 열고 다음라인을 찾아 수정
.....
magic_quotes_sybase=on (수정)
.....
include_path=.:/usr/local/bin (수정)
.....
upload_tmp_dir=/tmp (추가)
..... |
아파치설치디렉으로이동 /usr/local/apache/bin/apachectl 과 /etc/profile 파일을 열고 상단에
다음라인 추가
export ORACLE_BASE=/oracle/app/oracle
export ORACLE_HOME=/oracle/app/oracle/product/8.1.7
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
export PATH=$PATH:$ORACLE_HOME/bin
export NLS_LANG=AMERICAN_AMERICA.KO16KSC5601 |
(위 라인은 원격DB에 접속하여 insert등을 할 경우 한글을 사용하기위함으로
DB 서버쪽의 NLS_LANG 설정과 맞추어야함)
export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
export ORACLE_SID=ora817 |
위의설정은 아파치실행시 오라클함수를 물고 들어가기위해서임(굳이 전역변수 /etc/profile에는 넣을 필요는 없지만 나의 경우엔 아파치가동시 오라클함수를 물고가지를 못해 전역변수선언해서야 PHP에서 오라클함수가 인식가능) 이상과 같이 하면 설정은 제대로 setting.
아파치 재실행 과 전역변수 실행(# source /etc/profile [엔터])
php에서 OCILogon("id","pwd",[sid]) 함수를 call 할 경우 db서버쪽에서는 [sid]부분을 생략해도 가능할지 모르나 클라이언트에서는 [sid]부분에 $ORACLE_HOME/network/admin/tnsnames.ora파일 부분의 서비스이름을 반드시 써야 함.
그전에 DB서버쪽에는 $ORACLE_HOME/network/admin/listener.ora가 가동되어있어야한다.
vi test.php
<?php
$conn=OCILogon("id","pwd",@ora817("서비스이름"));
$query='insert into 테이블명 values(값1,값2....값n)";
$stmt=OCIParse($conn,$puery);
OCIexecute($stml);
OCILogOff($conn);
?> |
그전에 Table이 생성되어 있어야하며 값들중에 한글도 넣고 실행해 보시고 $sqlplus [엔터] 로 확인해 보세요.
감사합니다...