솔라리스 9 IA 9/04, 10 IA 3/05에서 Oracle 설치

설치할 Oracle 버전

Oracle 10g Release 1

들어가기 전에

최종 갱신일: 2005-09-30

이 문서는 http://www.solanara.net/ 에서 최신버전을 구할 수 있다.

1. 설치 전에

전부 설치를 선택한다.

Software 1/2, Software 2/2, Language 시디를 모두 설치한다.

Oracle은 모두 /export/home/oracle에 설치할 것이다. 필자는 /export/home/oracle을 4GB 주었다.

오라클사에서 말하는 오라클 인스톨을 위한 필수 패키지는 SUNWarc SUNWlibms SUNWi1of SUNWbtool SUNWsprot SUNWi1cs SUNWhea SUNWsprox SUNWi15cs SUNWlibm SUNWtoo SUNWxwfnt 이다. 전체 설치시 모두 설치되어있다. 또한 솔라리스 9의 경우 최신의 커널 패치와 최신의 libm 패치를 해야 한다. 물론 솔라리스 9 9/04에서는 이미 설치되어있다.

오라클에서 권장하는 사양은 512MB이상의 램, 1GB이상의 스왑공간, /tmp이 400MB이상 남아있어야 한다. 임시공간이 문제될 것이라 생각되면 TEMP환경변수와 TMPDIR 환경변수를 수정해준다. 예) export TEMP=/disk2/tmp

시스템 커널 파라메터 변경해야 한다. 주로 공유메모리와 관련된 파라미터를 늘려주어야 한다. 자세한 사항은 솔라리스 매뉴얼의 Tunable Parameter부분을 참고한다. /etc/system 파일은 매우 중요하므로 백업받은 후 수정하자.

root@wl ~ # cp /etc/system /etc/systemold

root@wl ~ # vi /etc/system

set semsys:seminfo_semmni=100

set semsys:seminfo_semmns=1024

set semsys:seminfo_semmsl=256

set semsys:seminfo_semvmx=32767

set shmsys:shminfo_shmmax=4294967295

set shmsys:shminfo_shmmin=1

set shmsys:shminfo_shmmni=100

set shmsys:shminfo_shmseg=10

root@wl ~ # sync; sync; reboot


오라클 계정을 생성한다. 오라클은 root로 설치할 수 없다. 오라클에서는 설치를 위해 oinstall 그룹, dba 그룹, oracle 유저를 생성하는 것을 권하고 있다.

root@wl ~ # groupadd -g 101 oinstall

root@wl ~ # groupadd -g 102 dba

root@wl ~ # useradd -d /export/home/oracle -g oinstall -G dba -m -u 103 -s /bin/bash oracle

root@wl ~ # passwd oracle


오라클 계정의 환경을 설정한다. ORACLE_HOME과 같은 중요한 환경 변수를 설정한다.

root@wl ~ # /usr/openwin/bin/xhost + # 빼먹지 말자

root@wl ~ # su - oracle

oracle@wl ~ $ mkdir oraapp # 오라클 어플리케이션이 설치될 곳. 2.5GB정도 필요

oracle@wl ~ $ mkdir oradata # 오라클 데이터가 설치될 곳. 1.2GB이상 필요

oracle@wl ~ $ chmod -R 775 oraapp

oracle@wl ~ $ vi .profile

DISPLAY=localhost:0.0; export DISPLAY # 다른 호스트의 X윈도우를 사용하려면 해당 호스트의 IP를 localhost대신 적는다.

DISPLAY=192.168.0.8:0.0; export DISPLAY

ORACLE_BASE=/export/home/oracle/oraapp; export ORACLE_BASE

ORACLE_SID=orcl; export ORACLE_SID

if [ -x /usr/local/bin/dbhome ] # 오라클 설치시 root.sh를 실행하면 dbhome이 존재하며 실행 가능하게 된다.

then

  ORACLE_HOME=`dbhome orcl`; export ORACLE_HOME

  PATH=$PATH:$ORACLE_HOME/bin; export PATH

  LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib

fi

# TNS_ADMIN 환경변수는 설정하지 않는다.

oracle@wl ~ $ . .profile

oracle@wl ~ $ cksum solarisx86_DB_10_1_0_3_Disk1.cpio.gz

3520147492      634888056       solarisx86_DB_10_1_0_3_Disk1.cpio.gz

oracle@wl ~ $ gunzip solarisx86_DB_10_1_0_3_Disk1.cpio.gz # 파일은 오라클 다운로드 페이지에서 받는다. 주1)

oracle@wl ~ $ cpio -idcmv < solarisx86_DB_10_1_0_3_Disk1.cpio

# Solaris 10에서는 oraparam.ini 와 oraparam.var 를 수정해야 한다.

oracle@wl ~ $ vi /Disk1/install/oraparam.ini

Solaris=5.6,5.7,5.8,5.9,5.10

oracle@wl ~ $ vi /Disk1/install/oraparam.var

Solaris=5.8,5.9,5.10

oracle@wl ~ $ cd Disk1

oracle@wl ~/Disk1 $ ./runInstaller


주1) 오라클 다운로드 사이트: 가기

~DB~.cpio.gz: Oracle 10g 데이터베이스

~CCD~.cpio.gz: Oracle 10g 컴패니언 시디

~CLIENT~.cpio.gz: Oracle 10g 클라이언트

~CRS~.cpio.gz: Oracle 10g 클러스터링(Cluster Ready Services)

가 있는데 이중 ~DB~와 ~CCD~를 받는다. cksum (CRC32유틸. 솔라리스 기본 제공)으로 다운로드 한 파일의 이상 유무를 반드시 확인해본다.

2. 오라클 및 오라클 컴패니언 설치

위와같이 한후 마지막에 runInstaller를 실행했다면 GUI화면이 뜰 것이다. 자바로 되어있어 썩 모양이 좋지는 않지만 그럭저럭 봐줄만 한다. 각각의 화면마다 선택해야할 것은 다음과 같다. 빠른 설치를 위해 설정은 대부분 기본값으로 해 놓았다. (필요한 설정은 이전에 .profile을 수정할 때 모두 했다) 또한 이 내용은 Oracle Quick Installation Guide의 내용이기도 하다. 스크린 제목 내용


Welcome Next를 클릭한다.


Specify Inventory Directory and Credentials 오라클 인벤토리설정 화면이다. 기본값으로 놔둔다. Next를 클릭하면 루트 권한으로 orainstRoot.sh를 실행하라고 나오는데 화면을 참조해 실행해준다.


Specify File Locations 파일이 설치될 디렉토리이다. $ORACLE_BASE/product/10.1.0/db_1에 설치된다. Next를 클릭한다.


Select Installation Type Enterprise Edition을 선택하고 Next를 클릭한다.


Select Database Configuration Next를 클릭한다.


Specify Database Configuration Options Global Database Name이 orcl로 되어있는 것을 확인한다. Database Character Set은 KO16KSC5601(완성형)으로 선택되어있는데, 필요하다면 KO16MSWIN949 (확장완성형)로 수정한다. 예제 스키마를 생성할 것인가를 물어보는데 체크하는 것이 테스트용으로 설치하는 목적에 부합할 것이다. Next를 클릭한다.


Select Database Management Option Next를 클릭한다.


Specify Database File Storage Option 위에서 생성한 디렉토리를 선택해준다. 기본값은 $ORACLE_BASE/oradata 이다.


Specify Backup and Recovery Options Next를 클릭한다.


Specify Database Schema Passwords 각각의 계정에 대해 암호를 입력한 후 Next를 클릭한다.


Summary 이제까지 설정한 것을 보여준다. 확인 후 Next를 클릭한다.


Install 인스톨 화면이다. 기다리면 다음 화면으로 자동으로 넘어간다.


Configuration Assistants 설정 화면이다. 데이터 베이스 생성이 끝나면 안내 메시지가 나오는데, 전역데이터베이스이름, SID식별자, http://localhost:5500/em 과 SYS,SYSTEM암호는 반드시 외워놓는다. OK를 클릭한 후 Next를 클릭하면 다음 화면으로 넘어간다.


Setup Privileges 루트 유저로 $ORACLE_HOME/root.sh 을 실행하라는 메시지가 나온다. 루트로 실행해준다. 나오는 메시지 중에서 필요한 것은 다음과 같다.

ORACLE_OWNER= oracle

ORACLE_HOME=/export/home/oracle/oraapp/product/10.1.0/Db_1



End of Installation 주어진 내용을 읽어본 후 Exit를 클릭해 인스톨러를 마친다. (포트 리스트는 $ORACLE_HOME/install/portlist.ini 에 있다.) 이것으로 인스톨을 모두 끝냈다.

Ultra Search URL: http://localhost:5620/ultrasearch

Ultra Search Administration Tool URL: http://localhost:5620/ultrasearch/admin

iSQL*Plus URL: http://localhost:5560/isqlplus

iSQL*Plus DBA URL: http://localhost:5560/isqlplus/dba

Enteprise Manager 10g Database Control URL: http://localhost:5500/em



여기까지 하면 오라클의 설치가 끝난것이다. 여기까지만 설치하더라도 오라클의 운영에는 문제 없지만, 좀 더 편한 관리를 위해 컴패니언을 설치한다. (필자는 오라클은 컴패니언까지 인스톨해야 한다고 보고 있다)

oracle@wl ~ $ cksum solarisx86_CCD_10_1_0_3_Disk1.cpio.gz

4119132538      438221549       solarisx86_CCD_10_1_0_3_Disk1.cpio.gz

oracle@wl ~ $ rm -rf Disk1 # 기존에 압축 풀었던 오라클 데이터베이스 인스톨 파일을 지운다

oracle@wl ~ $ gunzip solarisx86_CCD_10_1_0_3_Disk1.cpio.gz

oracle@wl ~ $ cpio -idcmv < solarisx86_CCD_10_1_0_3_Disk1.cpio

oracle@wl ~/Disk1 $ ./runInstaller


3. 오라클 패치

오라클 패치는 오라클을 구매했을때 주는 CID를 이용해 메타링크(http://metalink.oracle.com) 에 가입한 후 받을 수 있다. 직접 패치하는것도 좋지만, 오라클 전문가의 도움을 받는것도 좋을 것이다.

다음은 패치# 2617419(OPatch 1.0.0.0.55), 4751926 (CPUJan2006)를 설치하는 예를 보인 것이다.

oracle@saturn4 ~ $ echo $ORACLE_HOME

/export/home/oracle/oraapp/OraHome_1

oracle@saturn4 ~ $ echo $PATH

/usr/local/bin:/usr/sfw/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/ccs/bin:/export/home/oracle/oraapp/OraHome_1/bin

oracle@saturn4 ~ $ echo $LD_LIBRARY_PATH

/usr/local/xml/lib:/usr/lib:/usr/local/lib:/usr/ucblib:/usr/ccs/lib:/usr/sfw/lib:/export/home/oracle/oraapp/OraHome_1/lib

oracle@saturn4 ~ $ unzip p2617419_10102_GENERIC.zip

... # OPatch 디렉토리 생성됨

oracle@saturn4 ~ $ cp -r OPatch/ ./oraapp/OraHome_1/

oracle@saturn4 ~ $ unzip p4751926_10103_SOLARISx86.zip

... # README.html, 4751926 디렉토리 생성됨. README.html은 읽어볼것.

oracle@saturn4 ~ $ cd 4751926

oracle@saturn4 ~/4751926 $ /export/home/oracle/oraapp/OraHome_1/OPatch/opatch apply


Oracle Interim Patch Installer version 1.0.0.0.55

Copyright (c) 2006 Oracle Corporation. All Rights Reserved..


We recommend you refer to the OPatch documentation under

OPatch/docs for usage reference. We also recommend using

the latest OPatch version. For the latest OPatch version

and other support related issues, please refer to document

293369.1 which is viewable from metalink.oracle.com


Oracle Home = /export/home/oracle/oraapp/OraHome_1

Location of Oracle Universal Installer components = /export/home/oracle/oraapp/OraHome_1/oui

Location of OraInstaller.jar  = "/export/home/oracle/oraapp/OraHome_1/oui/jlib"

Oracle Universal Installer shared library = /export/home/oracle/oraapp/OraHome_1/oui/lib/intelsolaris/liboraInstaller.so

Location of Oracle Inventory Pointer = /var/opt/oracle/oraInst.loc

Location of Oracle Inventory = /export/home/oracle/oraapp/OraHome_1/inventory

Path to Java = /export/home/oracle/oraapp/OraHome_1/jre/1.4.2/bin/java

Log file = /export/home/oracle/oraapp/OraHome_1/.patch_storage//*.log


Creating log file "/export/home/oracle/oraapp/OraHome_1/.patch_storage/4751926/Apply_4751926_03-21-2006_11-49-00.log"


Invoking fuser to check for active processes.


Invoking fuser on "/export/home/oracle/oraapp/OraHome_1/bin/oracle"

Invoking fuser on "/export/home/oracle/oraapp/OraHome_1/bin/lsnrctl"

Invoking fuser on "/export/home/oracle/oraapp/OraHome_1/bin/tnslsnr"

Backing up comps.xml ...


OPatch detected non-cluster Oracle Home from the inventory and will patch the local system only.



Please shut down Oracle instances running out of this ORACLE_HOME

(Oracle Home = /export/home/oracle/oraapp/OraHome_1)

Is this system ready for updating?

Please respond Y|N >

Y 1)

Executing the Apply pre-patch script (/export/home/oracle/4751926/custom/scripts/pre)...

Applying patch 4751926...


Patching archive files...


Patching jar files...


Patching copy files...


Creating new directory "/export/home/oracle/oraapp/OraHome_1/cpu/CPUJan2006/MODPLSQL/owa_all/90"

Creating new directory "/export/home/oracle/oraapp/OraHome_1/olap/admin"

Creating new directory "/export/home/oracle/oraapp/OraHome_1/cpu/CPUJan2006/MODPLSQL/owa_all/30"

Creating file to hold list of directories that were mkdir'ed: "/export/home/oracle/oraapp/OraHome_1/.patch_storage/4751926/opatch_dirs_created.lst"

Running make for target client_sharedlib.


Running make for target ioracle.


Running make for target iexp.


Running make for target iimp.


Running make for target iexpdp.


Running make for target iimpdp.


Running make for target libnmuc.


Running make for target libnmemso.


Running make for target ilsnrctl.


Running make for target itnslsnr.


Running make for target ictxload.




Inventory is good and does not have any dangling patches.



Updating inventory...


Verifying patch...

  Verifying that patch ID is in Oracle Home inventory.


  Verifying copy files.


  Verifying jar files.


  Verifying archive files.


OPATCH_VERIFY_OK: Patch has been applied.


Backing up comps.xml ...


********************************************************************************

********************************************************************************

**                                ATTENTION                                   **

**                                                                            **

** Please note that the Security Patch Installation (Patch Deinstallation) is **

** not complete until all the Post Installation (Post Deinstallation)         **

** instructions noted in the Readme accompanying this patch, have been        **

** successfully completed.                                                    **

**                                                                            **

********************************************************************************

********************************************************************************

Executing the Apply post-patch script (/export/home/oracle/4751926/custom/scripts/post)...


OPatch succeeded.

oracle@saturn4 ~/4751926 $ cd $ORACLE_HOME/cpu/CPUJan2006

oracle@saturn4 ~/oraapp/OraHome_1/cpu/CPUJan2006 $ sqlplus /nolog

SQL> connect / as sysdba

SQL> STARTUP

SQL> @catcpu.sql 2)

SQL> QUIT

oracle@saturn4 ~/oraapp/OraHome_1/cpu/CPUJan2006 $ cd $ORACLE_HOME/rdbms/admin

oracle@saturn4 ~/oraapp/OraHome_1/rdbms/admin $ sqlplus /nolog

SQL> connect / as sysdba

SQL> STARTUP

SQL> @utlrp.sql 3)

SQL> select OBJECT_NAME from DBA_OBJECTS where status = 'INVALID'; 4)


no rows selected


SQL> QUIT

oracle@saturn4 ~/oraapp/OraHome_1/rdbms/admin $


1) 오라클관련 인스턴스가 모두 종료되었는지 물어보는 프롬프트. 준비되었으면 Y를 입력하고 엔터를 친다.

2) 오랫동안 걸리는 패치가 끝났다. 패치 이후 스크립트를 실행시킨다.

3) 만약 있을지도 모르는 INVALID 객체를 제거하기 위해 실행한다.

4) no rows selected 가 나오면 정상이다.


4. 오라클 인스턴트 클라이언트 설치

Oracle Instant Client는 오라클 10g에서 새롭게 선 보이는 배포버전이다. 오라클 OCI 라이브러리와 SDK, SQL*Plus, JDBC드라이버만을 지원해준다.

파일이름                                                 크기(바이트)   CRC32

instantclient-basic-solarisx86-10.1.0.3-20050404.zip     30,141,480     4208528557

instantclient-jdbc-solarisx86-10.1.0.3-20050404.zip       4,572,527      556902813

instantclient-sqlplus-solarisx86-10.1.0.3-20050404.zip      266,435      793421160

instantclient-sdk-solarisx86-10.1.0.3-20050404.zip          293,993     1919831458


root@wl ~ # unzip instantclient-basic-solarisx86-10.1.0.3-20050404.zip

root@wl ~ # unzip instantclient-sqlplus-solarisx86-10.1.0.3-20050404.zip

root@wl ~ # unzip instantclient-sdk-solarisx86-10.1.0.3-20050404.zip

root@wl ~ # unzip instantclient-jdbc-solarisx86-10.1.0.3-20050404.zip

root@wl ~ # mv instantclient10_1 /usr/local/instantclient10_1

root@wl ~ # vi /usr/local/instantclient10_1/tnsnames.ora

ORCL =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.100)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = orcl)

    )

  )

root@wl ~ # vi /etc/profile

# for Oracle Instant Client

if [ -d /usr/local/instantclient10_1 ]

then

  LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/instantclient10_1; export LD_LIBRARY_PATH

  PATH=$PATH:/usr/local/instantclient10_1; export PATH;

  NLS_LANG=Korean_Korea.KO16KSC5601; export NLS_LANG;

  TNS_ADMIN=/usr/local/instantclient10_1; export TNS_ADMIN;

  SQLPATH=/usr/local/instantclient10_1; export SQLPATH;

fi

root@wl ~ # sqlplus 사용자아이디/사용자패스워드@//호스트주소:포트/DB이름


* 오라클 인스턴트 클라이언트는 라이브러리 파일 크기가 크기 때문에, 가상 메모리를 많이 소모한다.

5. 오라클 관련 어플리케이션 설정

모든 오라클 관련 어플리케이션은 ORACLE_HOME 환경변수가 있어야 동작한다. 따라서 톰캣이나 아파치/PHP을 사용할 때에도 웹서버를 띄우기 전에 ORACLE_HOME이 환경변수에 존재하는지 확인해야 한다.

한글문제 해결의 기본은 NLS_LANG 환경 변수를 지정해주는 것이다. NLS_LANG=Korean_Korea.KO16KSC5601 또는 NLS_LANG=American_America.KO16MSWIN949 의 조합으로도 사용할 수 있다. 오라클 데이터베이스에 접속하기 전에 NLS_LANG 환경 변수가 존재하며, 올바르게 설정되었는지 반드시 확인해야 한다.

오라클 시작/종료


# 오라클 데이터베이스 시작.

oracle@wl ~ $ sqlplus /nolog # 'dbstart' 스크립트를 이용할 수도 있다.

SQL> connect sys/패스워드 as sysdba

SQL> startup

SQL> exit

oracle@wl ~ $ lsnrctl start # 리스너 시작 (외부에서 접속하기 위해서는 필요하다)

oracle@wl ~ $ searchctl start # Ultra Search 시작

oracle@wl ~ $ isqlplusctl start # iSQL*Plus 시작

oracle@wl ~ $ emctl start dbconsole # OEM(Oracle Enterprise Manager) 시작


# 인스톨 이후. 오라클을 시작한 상태에서 실행한다.

# PL/SQL 모듈 재 컴파일

oracle@wl ~ $ sqlplus "/ AS SYSDBA"

SQL> @?/rdbms/admin/utlrp.sql

# 스태틱 라이브러리 생성

oracle@wl ~ $ $ORACLE_HOME/bin/genclntst


# 종료

oracle@wl ~ $ emctl stop dbconsole

oracle@wl ~ $ isqlplusctl stop

oracle@wl ~ $ searchctl stop

oracle@wl ~ $ lsnrctl stop

oracle@wl ~ $ sqlplus /nolog # 'dbshut' 스크립트를 이용할 수도 있다.

SQL> connect sys/패스워드 as sysdba

SQL> shutdown immediate

SQL> exit

oracle@wl ~ $


Java와 Oracle연동

* 자바용 오라클 JDBC드라이버는 크게 두가지가 있다. 하나는 THIN을 지원해주는 드라이버고 다른 하나는 OCI기반의 드라이버이다. THIN드라이버의 경우 오라클 라이브러리를 설치할 필요 없다는 장점이있다. (성능은 비슷한것으로 판단된다) 아래는 THIN드라이버를 기준으로 한다.

* Java 1.4인 경우 $ORACLE_HOME/jdbc/lib/ojdbc14.jar 과 $ORACLE_HOME/jdbc/lib/orai18n.jar 를 CLASS_PATH 에 환경변수 넣어준다.

* Java 1.2, Java 1.3인 경우 $ORACLE_HOME/jdbc/lib/classes12.jar 과 $ORACLE_HOME/jdbc/lib/nls_charset12.jar 를 환경변수 CLASS_PATH에 넣어준다.


PHP 와 Orale연동

* PHP컴파일시 ./configure부분을 다음으로 대체한다. 반드시 설치하기 전에 오라클에 설치되어있어야 하며 컴파일 할때 환경 변수 ORACLE_HOME 이 설정되어있어야 한다.

root@wl ~/php-5.0.4 # . ~oracle/.profile

root@wl ~/php-5.0.4 # ./configure \

 --prefix=/usr/local/php \

 --with-apxs2=/usr/local/apache2/bin/apxs \

 --with-mysql=/usr/local/mysql \

 --with-mysqli=/usr/local/mysql/bin/mysql_config \

 --with-oci8 \

 --enable-sigchild \

 --with-iconv \

 --with-libxml-dir=/usr/local/xml \

 --enable-modules=so \

 --enable-mbstring \

 --enable-mbregex \

 --with-gd \

 --enable-gd-native-ttf \

 --with-jpeg-dir=/usr/sfw \

 --with-png-dir=/usr/sfw \

 --with-zlib-dir=/usr/local

root@wl ~/php-5.0.4 # make

root@wl ~/php-5.0.4 # make install


* PHP 4.3.11, PHP 5.0.4부터 오라클 인스턴트 클라이언트(Oracle Instant Client)를 공식 지원한다. 아래는 PHP 5.2.x에서의 인스턴트 클라이언트를 이용한 방법이다. 4.3.x, 5.0.x에서는 설정 방법이 약간 다르다.


root@wl ~/php-5.2.3 # ./configure \

 --prefix=/usr/local/php \

 --with-apxs2=/usr/local/apache2/bin/apxs \

 --with-mysql=/usr/local/mysql \

 --with-mysqli=/usr/local/mysql/bin/mysql_config \

 --with-oci8=instantclient,/usr/local/instantclient10_1 \

 --enable-sigchild \

 --with-iconv \

 --with-libxml-dir=/usr/local/xml \

 --enable-modules=so \

 --enable-mbstring \

 --enable-mbregex \

 --with-gd \

 --enable-gd-native-ttf \

 --with-jpeg-dir=/usr/sfw \

 --with-png-dir=/usr/sfw \

 --with-zlib-dir=/usr/local

root@wl ~/php-5.2.3 # make

root@wl ~/php-5.2.3 # make install


* 필자가 확인한 결과 PHP 5.0.x에서는 오라클의 커넥션이 끊어지지 않는 현상이 있다. 꼭 솔라리스에 국한된 문제는 아니며, OCI라이브러리를 사용하던 인스턴트 클라이언트를 사용하던 결과는 같다. 상용 서비스에서 오라클이 필요하다면 PHP 4.4.x를 사용하도록 한다. 설치방법은 PHP 5.0.x와 같다. 꼭 PHP 5를 사용해야 한다면, PHP 4.4.0의 OCI익스텐션 소스를 PHP 5.0.x소스에 덮어써 해결할 수 있다고 한다. PHP버그ID 32361 번 (http://bugs.php.net/bug.php?id=32361)에서 확인할 수 있다. 이는 PHP 5.1.2에서 해결되었다.

Posted by 행복한 프로그래머 궁금쟁이박

댓글을 달아 주세요