다음 글은 http://grace.chonnam.ac.kr/~melchi/lecture.html 에 올라와 있는 김영호님의 글입니다.
----
안녕하세요... 몇달던에 Oracle 9i설치기를 올렸던 관리자 입니다.
우선 기본적으로 Redhat CD에 보시면 기본적으로 Apache, php, mysql이 연동되어 설치 하실수 있습니다. 그러나 기본적으로는 Oracle 9i가 같이 설치 안되어 있죠.. 이는 php에서 oracle라이브러리를 설정해 주어야 하는데요...
우선 다음과 같은 과정을 거칩니다.
.bash_profile의 내용은 다음과 같습니다.
export ORACLE_HOME=/oracle/OraHome export JAVA_HOME=/usr/java/j2sdk1.4.0 export JSDK_HOME=/usr/java/j2sdkee1.3 export CLASSPATH=.:$JAVA_HOME/lib:.:$JSDK_HOME/lib/j2ee.jar
export TNS_ADMIN=/oracle/OraHome/network/admin/tnsnames.ora export NLS_LANG=AMERICAN_AMERICA.KO16KSC5601; export PATH=$PATH:$ORACLE_HOME/Apache/Jsdk/bin:$ORACLE_HOME/bin:$JAVA_HOME/bin:$ORACLE_HOME/Apache/Apache/bin:$JSDK_HOME/bin:/home/aladdin/ns-allinone-2.1b7a/bin export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib:$ORACLE_HOME/network/lib export ORACLE_SID=ORCL export ULIMIT=2113674 export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data export USERNAME BASH_ENV PATH
이내용에 대해서는 기본 Oracle 9i를 설치 할때 사용되는 내용들이기 때문에 따로 언급하지는 않겠습니다.
그리고 ld에 oracle이 설치된 lib를 링크하기 위해
/etc/ld.so.conf에
/자신의 Oracle Home/lib 저같은 경우
/oracle/OraHome/lib
를 추가해 줍니다.
그리고
/sbin/ldconfig
를 실행해 주어야 합니다.
그리고 Apache와 php, mysql를 설치한 상태에서 모든 devel패키지를 설치해야 합니다. 그리고 나면 php소스를 받습니다. 저는 4.1.2버전의 php를 사용했습니다. 압축을 풀어 다음과 같은 configure과정을 거칩니다. 구지 다 해줄 필요는 없지만 그래도 기존의 php와 거의 같은 기능을 해기 위해 노력 했습니다. 그리고 curl이나 pspell과 같은 devel패키지와 기타 몇가지 패키지를 요구 할수 있습니다. 필요한 부분은 configure하면서 받으시구요.. 여기의 directory를 저의 컴퓨터에 맞추어져있습니다. 기본적으로 Redhat 7.2 CD의 패키지들만을 설치 하셨다면 아래와 같은 구성으로 되어 있을것입니다.
./configure --prefix=/usr --with-apxs=/usr/sbin/apxs --with-mysql=/usr i686-redhat-linux -exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --datadir=/usr/share --includedir=/usr/include --libdir=/usr/lib --libexecdir=/usr/libexec --localstatedir=/var --sharedstatedir=/usr/com --mandir=/usr/share/man --infodir=/usr/share/info --with-config-file-path=/etc --disable-debug --enable-pic --enable-inline-optimization --with-bz2 --with-curl --with-db3 --with-dom --with-zlib --with-exec-dir=/usr/bin --with-gd --with-gdbm --with-gettext --with-jpeg-dir=/usr --with-mm --with-openssl --with-png --with-regex=system --with-ttf --with-layout=GNU --enable-debugger --enable-ftp --enable-magic-quotes --enable-safe-mode --enable-sockets --enable-sysvsem --enable-sysvshm --enable-track-vars --enable-yp --enable-wddx --without-unixODBC --with-bcmath --with-oci8=/oracle/OraHome --with-pspell --with-xml --enable-sigchild'
여기서 에러 나시는 분들은 옵션을 잘못 넣으셨거나 또는 패키지가 없는 분들입니다. 필요한 패키지를 업그레이드 해야 할경우도 있습니다. 저같은 경우 curl 패키지를 업그레이드 했더니 참으로 lib를 ln 시켜 주어야 했습니다.
make | make install
을 컴파일된 패키지가 해당 파일에 인스톨 됩니다. 그리고
/etc/init.d/httpd restart
하시면 httpd 데몬이 뜨더군요...
그리고 Oracle의 DB를 시작하고 리스너를 띄웁니다
그리고 다음과 같은 테스트 페이지를 만들어 보았습니다.
<? print "<HTML><PRE>";
$db = "(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = grace)(PORT = 1521))(CONNECT_DATA = (SID = ORCL)))";
$c1 = ocilogon("scott","tiger",$db); $c2 = ocilogon("scott","tiger",$db);
function create_table($conn) { $stmt = ociparse($conn,"create table scott.hallo (test varchar2(64))"); ociexecute($stmt); echo $conn." created table\n\n"; }
function drop_table($conn) { $stmt = ociparse($conn,"drop table scott.hallo"); ociexecute($stmt); echo $conn." dropped table\n\n"; }
function insert_data($conn) { $stmt = ociparse($conn,"insert into scott.hallo values('$conn' || ' ' || to_char(sysdate,'DD-MON-YY HH24:MI:SS'))"); ociexecute($stmt,OCI_DEFAULT); echo $conn." inserted hallo\n\n"; }
function delete_data($conn) { $stmt = ociparse($conn,"delete from scott.hallo"); ociexecute($stmt,OCI_DEFAULT); echo $conn." deleted hallo\n\n"; }
function commit($conn) { ocicommit($conn); echo $conn." committed\n\n"; }
function rollback($conn) { ocirollback($conn); echo $conn." rollback\n\n"; }
function select_data($conn) { $stmt = ociparse($conn,"select * from scott.hallo"); ociexecute($stmt,OCI_DEFAULT); echo $conn."----selecting\n\n"; while (ocifetch($stmt)) echo $conn." <".ociresult($stmt,"TEST").">\n\n"; echo $conn."----done\n\n"; }
create_table($c1); insert_data($c1); // Insert a row using c1 insert_data($c2); // Insert a row using c2
select_data($c1); // Results of both inserts are returned select_data($c2);
rollback($c1); // Rollback using c1
select_data($c1); // Both inserts have been rolled back select_data($c2);
insert_data($c2); // Insert a row using c2 commit($c2); // commit using c2
select_data($c1); // result of c2 insert is returned
delete_data($c1); // delete all rows in table using c1 select_data($c1); // no rows returned select_data($c2); // no rows returned commit($c1); // commit using c1
select_data($c1); // no rows returned select_data($c2); // no rows returned
drop_table($c1); print "</PRE></HTML>"; ?>
프로그램 다음과 같인 실행되어야 정상입니다.
Resource id #3 created table
Resource id #3 inserted hallo
Resource id #4 inserted hallo
Resource id #3----selecting
Resource id #3
Resource id #3
Resource id #3----done
Resource id #4----selecting
Resource id #4
Resource id #4
Resource id #4----done
Resource id #3 rollback
Resource id #3----selecting
Resource id #3----done
Resource id #4----selecting
Resource id #4----done
Resource id #4 inserted hallo
Resource id #4 committed
Resource id #3----selecting
Resource id #3
Resource id #3----done
Resource id #3 deleted hallo
Resource id #3----selecting
Resource id #3----done
Resource id #4----selecting
Resource id #4----done
Resource id #3 committed
Resource id #3----selecting
Resource id #3----done
Resource id #4----selecting
Resource id #4----done
Resource id #3 dropped table
그리고 실행도중 TNS 에러 번호가 나오면 Oracle은 실행되는데 DB나 사용자 패스워드가 틀리거나 없어서 그런거구요.. 있는데 안되는건 아에 OCI가 컴파일 안되었다는 겁니다. 그럼...
행운이 있으시길
|