Installation of Oracle 9i Release 2 (9.2.0.4.0) on REDHAT 9 LINUX
(주)이씨오 개발1부 이승로
1. Linux 개요
Linux는 1991년 리누스 토발즈가 0.01을 만들고(실제로 0.01은 발표가 되지 않음), 0.02를 뉴스그룹에 포팅한 이래로, 큰 변화와 발전을 거듭해왔다. 최근 발표되어 배포판에 적용되기 시작한 Kernel 2.6.7은 지원이 제대로 되지 않아 문제가 되었던 하이퍼스레딩 테크놀로지(Hyperthreading Technology : CPU의 유휴 자원부분에 대한 활용 방법의 하나로 1개의 CPU에서 마치 2개의 CPU를 가동하는 것과 같은 효과를 내는 기술) 부분이 완벽하게 지원되는 등 그 적용범위가 날로 넓어지고 있다.
또한 이미 64bit CPU에 대한 지원은 윈도우 64bit 버전이 개발되기 전보다도 더 빨리 적용되었고 또한 그만큼 빨리 개선이 되고 있다.
물론 일부 어플리케이션이 잘 적용이 되지 않는다는 불만의 목소리도 있으나 이는 Kernel의 개발속도와 이에 따른 Linux의 버전업을 어플리케이션이 쫓아가지 못하는 것으로 Linux 문제라고 하기에는 무리가 있다. 뒤에서도 설명하겠지만 Linux 버전의 Oracle의 경우, 각 배포판을 만드는 회사의 개선점을 제대로 쫓아가지 못하는 것 때문에 오히려 낮은 버전에서 설치할 경우가 더 잘되는 경우가 있다. 실제로도, Oracle 8i의 경우, REDHAT 6.2에 최적화되어 있어 그 이상의 버전에 설치하려면 glibc package를 downgrade해야 했고, Oracle 8i 자체에 포함된 Java Runtime Environment에도 문제가 있어 JDK를 별도로 설치해야 하는 등 문제가 많았다.(이에 대해서는 지난 번에 배포한 설치문서를 참고하기 바람) Oracle 9i의 경우에는 REDHAT 7.3에서 개발된 것이다.
하지만, 저렴한 비용과 일부 Enterprise 상용버전의 경우 개발사의 전폭적인 지원을 통해 많은 부분을 해결할 수 있다는 것은 큰 장점이라 할 수 있을 것이다.
현재 Linux는 REDHAT 이외에도 Novell과 통합한 SuSE Linux, Mandrake, Debian, Slackware 등 여러가지 버전이 있다. 하지만 REDHAT의 경우, 배포판 Linux의 개발을 중단하고(이에 따른 무상 지원도 2004년 4월 30일자로 완전 중단함), 대신에 REDHAT에서 100% 지원하고 있는 Fedora Linux Project를 통해 개선된 부분을 자사의 상용 Enterprise 버전에 도입하는 방식으로 개발방향을 바꿨다. 현재 Fedora 프로젝트를 통해서 나온 버전은 core 2가 ISO 포맷으로 CD 또는 DVD 방식의 이미지 파일을 제공하고 있으며 Fedora Linux Project의 rpm은 지속적으로 Update 되고 있다.
2. REDHAT 9의 특성 및 Oracle 설치를 위한 REDHAT 9 설치 지침
(1) REDHAT 9의 특성
Redhat의 전체적인 특징으로 바로 Redhat 시스템에 최적화된 어플리케이션을 제공하고 있다는 것이다. 바로 RPM이다. RPM은 Redhat Package Manager로 일일이 컴파일하여 설치해야 할 것을 Package 형태로 곧바로 설치만 하면 사용가능하게끔 만든 파일이다.(이는 solaris에서 pkgadd 명령으로 설치하는 것과 경로명이 약간 차이나는 것과 설치명령과 옵션이 다르다는 것 이외에는 매우 유사한 과정을 거쳐 설치가 된다)
이 RPM은 국내에서 제작하고 있는 REDHAT 계열의 Linux에서도 마찬가지로 적용되고 있는 것으로, 한컴Linux나 와우Linux에서도 RPM을 사용하여 설치를 하고 있고, SuSE Linux에서도 확장자만 다를 뿐 유사한 방식에 의해 Package를 설치, 업그레이드, 제거를 하고 있다.
(2) RPM으로 어플리케이션의 추가, 업그레이드, 삭제
- 추가 : rpm -ivh *.rpm
- 업그레이드 : rpm -Uvh *.rpm
- 제거 : rpm -e *.rpm
이것이 기본이지만, 다양한 옵션이 있다. rpm의 옵션은 다양하므로, 처음에는 rpm --help를 하는 습관을 들인다.
rpm 추가는 업그레이드 옵션으로 하는 것을 권장한다. 만약 동일한 Package가 있을 경우 자동으로 업그레이드 해준다.
rpm을 제거할 경우 다른 것에 의존성이 있는 경우 --nodeps 옵션을 추가하여 다음과 같이 하면 된다.
rpm -e --nodeps *.rpm
rpm은 하나씩 설치하거나 제거할 수도 있지만, 여러 개를 한꺼번에 설치할 수도 있다. 의존성 관계에 있는 rpm의 경우 반드시 한꺼번에 설치해야 한다.
(3) REDHAT에서 중요하게 바뀐 것
REDHAT에서 가장 중요하게 바뀐 것이라면 바로 POSIX와 관련된 스레드 라이브러리(thread library)의 변경이다. 이 때문에 Oracle 어플리케이션 설치가 고도의 삽질이 되는 것이다. POSIX란 Portable Operating System Interface의 약자로써 운영체제의 공통적인 규약을 규정하고 있는 표준이다. C 프로그래밍 시에 규약이 제각각이라면 개발자가 소스코드를 이해하기 어려울 뿐더러 다른 시스템의 이식이 거의 불가능할 것이다. 이를 위해 공통된 규약을 마련하였는데 그것이 바로 POSIX인 것이다.
REDHAT 9부터는 Native POSIX Thread Library(NPTL)라는 것을 적용하기 시작했는데, Linux에서 POSIX thread의 수행능력을 강화한 것이다. 하지만 바로 이 NPTL 때문에 Oracle 9i가 제대로 설치되지 않는 문제점이 있다. 실제로 Oracle에서는 REDHAT 9에 대해서는 certification을 주지 않았다.
(4) 참고 : Enterprise 버전의 보장성
배포판을 만드는 회사는 별도의 상용 Linux를 판매한다. REDHAT의 경우, 미화 1500달러에서 1달러 모자른 1499달러에 Advanced Server가 판매된다. 같은 AS 버전도 프리미엄 에디션은 2499달러에 판매된다.
우리가 Linux에 Oracle DBMS를 포팅한다고 할 때, 중요한 문제가 있다. 바로 책임의 범위이다. 우리가 대개 하드웨어와 OS로 인한 문제가 발생할 때, 배포판의 경우에는 바로 시스템관리자에게 전적으로 책임이 있다. 따라서, OS 구입에 별도의 비용이 들지 않는다는 이유 때문에 배포판 Linux를 선택하는 경우, 시스템관리자가 유닉스/Linux에 대한 기초적인 수준만이라도 사전지식이 필요하다. Linux는 완성된 시스템이 아니고, 항상 개선이 이루어지는 오픈 소스이기 때문에 버그 등으로 인해 서버가동이 중단될 경우, 이에 대한 책임은 전적으로 시스템관리자가 져야 하는 것이다.
따라서 항구적인 DB를 구축해야 할 경우, 수요자가 Linux를 선택한다면 이런 경우는 상용 Linux를 적극적으로 고려해볼 필요가 있다.
상용 Linux의 경우, 개발회사에서 전적으로 책임을 지기 때문에, 설치자가 애초부터 설치를 잘못하지 않은 한, OS로 인한 문제에 대해 관리자가 책임이 어느 정도 경감된다.(모든 시스템이 다 그렇지만 일차적으로 시스템 관리자의 시스템 관리가 항상적으로 이루어져 함은 상식이다)
따라서 항상성을 보장해야 하는 시스템에서 특히 어떤 방식으로든 백업/복구 시스템이 구축되어 있다면 상용 Enterprise Linux 시스템도 상당히 고려해볼 만한 이점이 있다.
(5) REDHAT 9의 설치 지침
- Linux를 처음 설치한다면 전체설치를 한다.
- Linux를 처음 대하는 사람이라면 전체설치를 권한다. 이전 8i 버전에서는 KDE 환경에서만 설치가 되는 문제점이 있었는데(GNOME에서는 잘 안되고 그나마도 한컴 Linux 2.2에서만 설치가 되었다. 한컴 Linux 2.2는 한글화된 KDE를 X Window 환경으로 사용함) 테스트 결과 GNOME, KDE 관계없이 설치가 진행된다. REDHAT의 경우는 오히려 KDE보다 GNOME에서 설치가 잘 진행되었다. KDE의 경우 이에 의존성이 있는 Package들이 문제를 많이 일으켰다.
- 반드시 Package Update를 수행한다. 업데이트를 해야만 설치가 가능하다.
- 또한 반드시 최초 설치 후 모든 설치 Package들에 대해 반드시 Update를 해준다. kernel의 경우에는 Update가 꼭 필요한 것은 아니지만, 해당 Package들의 Update가 끝나면 나중에라도 Kernel Update를 해주기를 권장한다. Kernel은 시스템 기동과 입출력, CPU 제어를 담당하는 가장 기본적인 Package이므로 이에 대한 개선은 항시적으로 이루어지고 있다.
- REDHAT의 경우 update 관련 Package는 REDHATLinux의 Update 관리자에서 Update 되지 않으므로 수동으로 업그레이드 해줘야 한다.
- 다음과 같이 실행한다.
- rpm -Uvh up2date-3.1.23.2-1.i386.rpm up2date-gnome-3.1.23.2-1.i386.rpm
- rpm은 위와 같이 동시에 설치가능하며 특히 중복성이 있는 Package의 경우 필히 동시에 2개의 Package를 설치해야 한다.
- 이렇게 한 다음 Update 관리자를 통해 Red Hat Network에 접속해서 Update하는 것을 권장한다. 시간이 좀 걸리긴 하지만 일일이 Update 파일을 받아서 하는 것에 비하면 훨씬 편리하다.
- 참고 : Red Hat Linux Customization Guide 중 5장 Package Management 부분을 참조할 것.
(6) REDHAT 9 설치를 위한 하드웨어 사양
- 하드웨어는 CPU 개수가 많고, 클럭 속도가 높고, 물리적 메모리와 하드디스크의 공간이 크면 당연히 좋겠지만 그렇지 않을 경우 최소한 다음의 조건은 충족시켜야 한다.
- RAM 512MB 이상, Oracle DBMS 설치공간 최소 2.5GB(custom), 3.5GB(typical)
- REDHAT 9을 설치하기 위한 사양 :
CPU:
- Minimum: Pentium-class
- Recommended for text-mode: 200 MHz Pentium-class or better
- Recommended for graphical: 400 MHz Pentium II or better
Hard Disk Space (NOTE: Additional space will be required for user data):
- Custom Installation (minimum): 475MB
- Server (minimum): 850MB
- Personal Desktop: 1.7GB
- Workstation: 2.1GB
- Custom Installation (everything): 5.0GB
Memory:
- Minimum for text-mode: 64MB
- Minimum for graphical: 128MB
- Recommended for graphical: 192MB
3. Oracle 설치 전 준비사항
(1) user 생성
- Oracle 설치에 필요한 user를 생성한다. 다른 UNIX 시스템과 마찬가지로 dba 그룹과 oracle user를 생성한다.
- Linux에서는 Korn Shell(ksh)과 C Shell(csh)의 장점만을 모은 Borne Again Shell(bash)을 사용한다.
- bash는 형식은 Borne Shell 또는 Korn Shell과 비슷하다. 변수 선언시 Korn Shell과 완전히 동일한 형식으로 선언하지만, 실제 기능에 있어서는 C Shell의 장점도 포함된 까닭(C shell의 명령어 집합이 사용가능)에 Linux에서 가장 많이 쓰이는 쉘이다.
(2) Linux에서 user생성
- Linux에서는 user 생성이 다른 상용 유닉스 서버처럼 관리 프로그램을 사용해서 생성이 잘 되지 않는다. 대신 전통적으로 사용되는 명령어 groupadd, useradd 명령을 사용하여 생성하도록 한다. 유닉스에도 이 명령어가 있지만 그냥 관리 프로그램(Solaris의 경우 admintool, AIX의 경우 smit, 또는 smitty groups, smitty users를 사용하면 되고 그 외의 경우에는 예전에 별도로 배포한 유닉스 명령어 비교표를 참고하도록 하라.
- 다음과 같은 방법으로 생성한다.
groupadd [-g gid [-o]] [-r] [-f] group
ex) groupadd -g 101 dba
-g는 group ID(GID)를 지정하는 것으로 101번을 dba 그룹으로 지정하는 것이다.
이미 101번이 사용되고 있다면 에러가 날 것이고 그럴 때는 다른 넘버를 지정해준다. GID를 자동으로 받을 때는 -g 옵션을 빼고 groupadd dba 해도 된다.
- user의 경우에는 다음과 같은 방법으로 생성한다.
방법1 : useradd [-u uid(사용자 아이디) [-o]] [-g 그룹명][-G 그룹,...] [-d 홈디렉토리][-s 쉘][-c 적요사항][-m [-k template]] [-f 비활성화] [-e 만기] [-p passwd] [-M] [-n] [-r] name
방법2 : useradd -D [-g 그룹명][-b 초기디렉토리][-s 쉘] [-f 비활성화] [-e 만기]
ex) useradd -g 101 -u 1001 -d /oracle -s /bin/bash -m oracle
대개 이런 식으로 user를 생성한다. 여기서 중요한 옵션은 GID 지정 옵션인 -g, user ID(UID) 옵션인 -u, 기본 directory 지정 옵션인 -d, shell 지정 옵션인 -s, 그리고 디렉토리가 존재하지 않을 때 생성(make)하라는 옵션인 -m이다. 그리고 맨 뒤에 생성할 user명을 적어준다.
- 참고로 검색엔진과 검색 데몬을 소유하는 user인 kolasii는 쉘 지정 시 보통 C Shell을 사용하므로 일반 상용 UNIX와 동일하게 설정해주면 된다.
- 참고 : 다른 POSIX를 따르는 다른 시스템도 마찬가지이지만 대개 /etc 디렉토리에 보면 기본 쉘 파일이 있다. Borne Shell, Korn Shell, Borne Again Shell 등은 /etc 디렉토리의 profile을 기본 파일로 사용하며, C Shell의 경우에는 csh.cshrc와 csh.login을 사용한다. C Shell의 경우 .cshrc가 우선권이 있고 여기에 모든 환경변수를 지정하면 된다. 일반 적으로 .login 파일에까지 환경변수를 지정할 필요가 없다.
(3) 필수 Package 확인
- Oracle 인스톨 시 반드시 설치되어야만 하는 Package 목록이다. 되도록 최신 버전의 Package를 설치하도록 한다. 하나라도 누락되면 아예 설치화면 자체가 실행되지 않을 수도 있다.
- 반드시 있어야 하는 Package 목록과 버전(최소한 이 버전 이상은 되어야 한다)
- 다음의 명령어로 확인한다 :
rpm -qa gcc cpp glibc-devel binutils compat-gcc compat-libgccj compat-libgccj-devel nss_db-compat compat-libstdc++ glibc-kernheaders
- 설치되어야 하는 Package 버전(표 형태로 되어 있어 생략)
(4) Kernel Setting
- 이 부분은 매우 중요한 것으로 서버 성능을 어떻게 조절하느냐의 문제이다. Kernel은 다시 컴파일할 수도 있고 컴파일하면서 다양한 옵션을 줄 수가 있다. 또한 이를 통해서 구태여 사용하지 않는 서비스는 아예 부팅할 때부터 뺄 수가 있다. 이를 통해서 메모리를 절약할 수 있고 부팅시간을 줄임으로서 시스템의 속도개선을 꾀할 수 있다. 여기서는 다루는 범위를 벗어나므로 별도 서적을 통해서 직접 습득하기 바란다.
- Oracle에서 제시하는 설치(정확히는 Oracle 인스턴스 생성)에 필요한 Kernel 파라미터의 설정값은 다음과 같다 :
SEMMNI 100
SEMMNS 256
SEMMSL 100
SEMOPM 100
SEMVMX 32767
SHMMAX 2147483648
One-half the size of your system's physical memory. Check your system for additional restrictions.
SHMMIN 1
SHMMNI 100
SHMSEG 4096
- Linux는 Kernel 파라미터를 보수적으로 잡기 때문에 이를 늘려줘야 할 필요가 있다. 따라서 하드웨어의 specification을 잘 살펴보고, 이에 맞게 적절한 값을 설정하도록 한다.
- SHMMAX가 기본값인 33554432로 잡혀 있으면 인스턴스 생성 시 다음의 에러를 내게 된다 :
ORA-27123 : unable to attach to shared memory segment
(참고로 SHMMAX는 SGA의 잠재적인 한계가 될 수 있다)
- SHMMAX의 최대값은 (4-1)GB까지 설정할 수 있다. 대개 물리적 주소 확장없이 구축된 32bit Linux 시스템은 3GB의 사용자 공간과 1GB의 Kernel 스페이스로 구분된다
- /etc/sysctl.conf에 다음을 추가로 설정 :
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.shmall = 2097152
kernel.sem = 250 3200 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
- /etc/security/limits.conf에도 다음을 추가 설정 :
oracle soft nofile 65536
oracle hard nofile 65536
oracle soft nproc 16384
oracle hard nproc 16384
- 이렇게 한 다음 리부팅하면 적용된다.
- 이렇게 하지 않으려면 다음과 같은 방법을 사용해도 된다.
# echo 250 32000 100 128 > /proc/sys/kernel/shm
# echo 2147483648 > /proc/sys/kernel/shmmax
# echo 4096 > /proc/sys/kernel/shmmni
# echo 2097152 > /proc/sys/kernel/shmall
# echo 65536 > /proc/sys/fs/file-max
# echo 1024 65000 > /proc/sys/net/ipv4/ip_local_port_range
- 모든 shared memory의 세팅은 다음의 명령어로 확인한다 :
ipcs -lms
- 다음과 같은 결과를 보여준다 :
------ Shared Memory Limits --------
max number of segments = 4096
max seg size (kbytes) = 32768
max total shared memory (kbytes) = 8388608
min seg size (bytes) = 1
------ Semaphore Limits --------
max number of arrays = 128
max semaphores per array = 250
max semaphores system wide = 32000
max ops per semop call = 32
semaphore max value = 32767
(5) Swap Space Setting
- 인스턴스 생성 시 최소 512MB의 메모리 공간을 필요로 한다.
- 대개 Linux에서 기본 세팅은 최소 400MB 이상, 메모리의 두 배 이상을 스왑으로 설정할 것을 권장하나, Oracle에서는 1GB 이상, 메모리의 양과 동일한 크기로 잡을 것을 요구함.
- 물리적 메모리를 확인하기 위해서는 :
grep MemTotal /proc/meminfo
- 스왑 공간을 확인하기 위해서는 :
cat /proc/swaps
- 임시 스왑공간을 확보하기 위해서는 :
su - root
dd if=/dev/zero of=tmpswap bs=1k count=90000
chmod 600 tmpswap
mkswap tmpswap
swapon tmpswap
- 스왑공간을 제거하기 위해서는 :
su - root
swapoff tmpswap
rm tmpswap
(6) /tmp 공간 설정
- 최소 400MB 이상의 공간이 필요함
- tmp 디렉토리가 충분하지 않을 경우, 다음과 같이 설정한다 :
su - root
mkdir /<AnotherFilesystem>/tmp
chown -R root:root /<AnotherFilesystem>/tmp
chmod 1777 /<AnotherFilesystem>
export TEMP=/<AnotherFilesystem> # used by Oracle
export TMPDIR=/<AnotherFilesystem> # used by Linux Programs
- 제거할 때는 다음과 같이 한다 :
su - root
rmdir /<AnotherFilessystem>/tmp
unset TEMP
unset TMPDIR
4. Oracle 설치
(1) Oracle 쉘 환경 설정
- 반드시 다음의 표준 쉘을 사용하도록 한다. 이는 Oracle 8i부터 10g까지 범용으로 적용될 수 있는 환경변수 정의이다. Oracle 10g의 경우 ORACLE_BASE 변수를 지정하면 경고메시지를 보여주나 그냥 넘어가면 된다. 무시하고 넘어가도 상관없다.(계정보안에 따른 것으로 보임)
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH
unset USERNAME
umask 022
export LANG=C
# Set the LD_ASSUME_KERNEL environment variable only for Red Hat 9 and for Red Hat Enterprise #Linux Advanced Server 3 (RHEL AS 3) !!
# Use the "Linuxthreads with floating stacks" implementation instead of NPTL:
# Use old Linuxthreads with floating stacks instead of the new Native POSIX Thread Library (NPTL)
export LD_ASSUME_KERNEL=2.4.1
export THREADS_FLAG=native
#not used in oracle 9i, but used in oracle 8i because of bugs of jre :
#export JRE_LOCATION=/usr/local/java
# Oracle Environment
export ORACLE_BASE=/oracle
export ORACLE_HOME=$ORACLE_BASE
export ORACLE_SID=K2UP
export ORACLE_OWNER=oracle
#export ORACLE_TERM=vt100
export ORACLE_TERM=xterm
export NLS_DATE_FORMAT="YYYY/MM/DD"
export ORACLE_DOC=$ORACLE_BASE/doc
export TMPDIR=$ORACLE_BASE/tmp
# export TNS_ADMIN= Set if sqlnet.ora, tnsnames.ora, etc. are in $ORACLE_HOME/network/admin
export TNS_ADMIN=$ORACLE_HOME/network/admin
export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
# change this NLS settings to suit your country :
export NLS_LANG=KOREAN_KOREA.KO16MSWIN949
# Set shell search paths
export PATH=$PATH:.:$ORACLE_HOME/bin:/usr/local/java/bin:/usr/bin:/usr/openwin/bin:/usr/ucb:/etc:/sbin:/usr/ccs/bin:/usr/bin/X11:/usr/xpg4/bin:/bin:/usr/local/bin
#only AIX :
export LIBPATH=$ORACLE_HOME/lib:$ORACLE_HOME/lib32:$ORACLE_HOME/lib64:/usr/lib:/lib:/usr/ccs/lib
#all UNIX/LINUX except of AIX
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/lib32:$ORACLE_HOME/lib64:/usr/lib:/lib:/usr/ccs/lib:/usr/local/lib
#not used :
#export CLASSPATH=$ORACLE_HOME/jre:$ORACLE_HOME/JRE:$ORACLE_HOME/jre/1.3.1:$ORACLE_HOME/jre/1.3.1/bin:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib:$ORACLE_HOME/network/jlib:/usr/local/jdk/lib/classes.zip
#export DISPLAY=192.168.1.242:0.0
export DISPLAY=hostname:0.0
export LINK_CNTRL=L_PTHREADS_D7
- 처음 user를 생성하면 .bash_profile의 형식은 다음과 같다 :
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH
unset USERNAME
- 여기에 다음과 같이 추가로 변수를 지정한다 :
- umask 022 : 쉘의 권한을 지정. 디렉토리를 생성하게 되면 755로 지정된다.
- LANG=C : 문자세트를 UNIX 기본 세트로 지정. 다른 나라의 로칼(locale)을 제대로 인식못하고 자바 윈도우가 종료될 수 있기 때문에 무조건 C로 잡을 것. 이렇게 하면 모든 설치메시지는 영문으로 표기된다.
- LD_ASSUME_KERNEL=2.4.1 : 이는 REDHAT 9의 Native POSIX Thread Library(NPTL)로 인해서 발생하는 문제를 해결하기 위해서 강제로 Linuxthreads with Floating Stacks 방식을 사용하기 위한 것이다. 이렇게 하면 Kernel을 2.4.1로 인식하고 예전 방식의 Linuxthread Library를 사용할 수 있다. Floating Stack 방식마저도 제외하겠다면 그 때는 2.2.5로 설정하면 된다.
- export THREADS_FLAG=native : THREADS_FLAG는 Solaris에서 사용하는 Multithreading 옵션으로 green(디폴트값)과 native를 선택할 수 있다. native를 명시적으로 지정해야만 한다.
- JRE_LOCATION : Oracle 9i Release2에서 더 이상 JRE의 버그는 없다. 예전 8i에서는 blackdown.org에서 제대로 동작하는 자바실행환경을 별도로 받아 설치하고 Oracle 설치파일의 파라미터 파일도 직접 수정해야만 설치가 되었지만 이제는 그럴 필요가 없다. 주석처리하고 사용한다.
- ORACLE_TERM=xterm : vt100 대신 xterm으로 지정
- CLASSPATH는 JAVA의 라이브러리를 지정할 때 쓰는 변수로, 8i에서 JRE가 제대로 작동하지 않는 이유 때문에 반드시 지정을 해야만 했다. 하지만 9i Release 2에서는 JRE가 제대로 작동하므로 별도 지정이 필요없다. 지정을 하라고 하지만 지정하지 않아도 잘 설치된다.
- DISPLAY : 유닉스 명령어 hostname으로 나오는 결과를 적어준다. IP가 2개 이상 부여되어 있거나 방화벽을 통해 IP가 mapping되어 있는 경우 등으로 인해 IP를 직접 적시하는 것이 애매할 경우 hostname으로 하면 된다. 무슨 원칙이 있는 것은 아니지만 hostname을 적어주도록 한다.
(2) 설치 과정
- xhost + hostname 또는 xhost 127.0.0.1 또는 xhost + host IP : Oracle 인스톨러가 X window 상에서 실행될 수 있도록 하는 명령(root user에서 실행). hostname이나 localhost로 하는 것을 권장한다.
- su - oracle
- ./runInstaller : 인스톨러를 실행한다.
- 참고 1 : CDROM으로 설치할 경우, CDROM 마운트는 반드시 root user에서 /mnt/cdrom 등에 마운트한다. 그리고 절대로 oracle user로 CDROM을 마운트해서는 안된다. 이렇게 하게 되면 oracle user에서 CDROM을 바꿔줄 때 oracle user 소유의 모든 process를 kill해야 하고 이렇게 되면 더 이상 Oracle을 설치할 수가 없게 되므로 반드시 root user가 CDROM을 마운트하도록 한다.
- 참고 2 : 이것은 CDROM이 자동으로 마운트되는 솔라리스의 경우에도 동일하게 적용된다. Oracle user에서 설치하고 있는 창은 그대로 놓아두고 별도 창을 열어서 root user에서 eject 명령을 내리는 것과 같다.
- 인스톨을 시작하게 되면 다음과 같은 팝업 창이 뜬다.
(3) 최초 설치 안내 창
- 설치를 시작하게 되면 Oracle Universal Installer 2.2가 실행되고 위 화면이 나타난다. Next버튼을 눌러 다음 화면으로 진행한다.
(4) oraInventory 설치 위치 지정
- 설치 로그 등이 쌓이는 oraInventory 위치를 지정한다. 원래 oraInventory는 oinstall이란 유저를 별도로 만들어서 설치하는 것을 권장하고 있으나, oracle user에서 하는 것이 더 편하다. 아무 문제가 없다.
- 우리 설정파일대로 하면 위와 같이 /oracle/oraInventory로 경로가 잡힌다. OK 버튼을 눌러 다음 단계로 진행한다.
(5) UNIX 그룹명을 지정
- dba 그룹으로 지정한다. Next 버튼을 클릭한다.
(6) orainstRoot.sh 실행
- 그룹을 지정하면 root 권한으로 orainstRoot.sh를 실행해줘야 한다.
- 이 파일은 Oracle의 설치와 소유권한을 가진 그룹을 지정하는 것(dba로 지정)과 Oracle이 설치되는 디렉토리의 위치를 지정한 기록을 생성한다.
- 생성되는 파일은 oraInst.loc 파일로 대개 상용 유닉스의 경우 /var/opt/oracle 디렉토리에 생성되나 이 디렉토리를 미리 만들지 않은 경우 /etc 디렉토리에 생성된다(어디에 생성되든 상관없다)
- 별도 창을 열고 지정된 디렉토리인 /tmp/orainstRoot.sh로 가서 root user가 위 파일을 실행한다.
- 그리고 다시 위 창으로 돌아와서 Continue 버튼을 눌러 설치를 계속한다.
(7) 설치 디렉토리 지정
- Path는 .bash_profile에 지정된 경로가 나오게 된다. Next 버튼을 누른다.
(8) 설치 Package 선택
- 설치할 방식을 선택한다. 9.2.0.4.0 패치세트가 적용된 설치 파일이 Oracle Technology Network에 있다. 이 파일을 받아서 설치하게 되면 추가로 RPM을 설치할 필요없이 곧바로 설치가 가능하다. 데이터베이스를 설치할 경우는 Oracle 9i Database 9.2.0.4.0을 선택하고, 클라이언트 경우에는 두 번째 항목을 선택하면 된다.
- 하지만, Oracle을 설치하는 서버에서 웹서비스를 하는 경우에는 Oracle 9i Database 9.2.0.4.0 옵션으로 설치할 것을 권한다. REDHAT 9에 기본으로 탑재되는 Apache HTTPD Webserver 2.0.40과 PHP 4.2.2를 기동하여 phpinfo() 함수를 실행해보면 PHP 옵션에 oci 관련 헤더파일이 제외되어 있다. 그런데 Oracle 설치 시 이를 연결하기 위한 oci 관련 source가 클라이언트 옵션으로는 설치되지 않기 때문이다.
- 이 파일의 위치는 $ORACLE_HOME/rdbms/demo 또는 $ORACLE_HOME/rdbms/public(10g의 경우)가 된다.
- 참고로 UNIX/Linux 시스템에서 Apache 2.0.x를 가지고 웹서버를 구성할 경우 예전 1.3.x대에서 처럼 static compile이 불가능하다. 연결될 때마다 라이브러리를 호출하는 DSO 방식으로 설치해야 한다. 이는 아파치와 PHP를 따로따로 컴파일하여 설치하고 후에 Apache 설정파일인 httpd.conf에서 PHP 모듈을 로딩할 수 있도록 정의하면 된다.
- PHP의 경우에는 컴파일 시에 Oracle 라이브러리를 지정해서 컴파일하면 된다.
- Product Languages 버튼을 눌러 Korean을 추가해준다.
- Next 버튼을 눌러 다음 화면으로 이동한다.
(9) 설치할 타입을 선택한다.
- Enterprise Edition 옵션으로 할 것인지, 아니면 Standard 옵션으로 할 것인지 선택해야 한다.
- Custom 설치는 Enterprise 버전을 설치하는 것이다. 이에 포함될 Package를 설치자 재량에 따라 설치하는 것이지만, Standard Edition의 경우 설치자가 옵션을 선택할 권한이 없다. 이미 Standard 버전은 설치할 수 있는 Package가 지정되어 있기 때문에 Standard Edition 내에서 옵션을 customizing하는 것은 불가능하다.
- Enterprise Edition과 Standard Edition의 차이는 다음과 같다 : (표형태로 되어 있어 이 블로그에서는 생략)
- 순수하게 사용되는 공간은 위 그림에 나와 있는 바와 같지만 실제로는 인스턴스 공간까지 요구하므로 최소 약 500MB에서 1.5GB의 공간이 더 요구된다. 이 이상으로 더 잡아야 할 수도 있다. 따라서 최소 Oracle DBMS가 설치되는 경로는 10GB 이상으로 설정한다.
- Oracle 설치 시 archive log mode로 설정하게 되면 $ORACLE_HOME/oradata/K2UP/archive 디렉토리에 archive log 파일이 쌓이게 된다. 특히 개발용이 아닌 실제 데이터베이스를 운영하는 경우라면 필히 설정해야 한다.
- KOLAS II UPGRADE 버전의 경우에는 Custom을 선택하여 굳이 필요없는 옵션을 제외하고 설치할 수 있도록 한다. 그래야 조금이라도 공간이 절약된다. KOLAS II LIGHT의 경우에는 반드시 Standard Edition을 선택한다.
(10) Database 사용목적에 따른 설정 옵션을 선택한다
- Custom으로 설치하게 되면 굳이 필요하지는 않지만 습관적으로 선택해주거나 제외하는 옵션이 있다.
- 다음을 추가한다 :
Oracle Label Security
Oracle Connection Manager
Oracle Names
- 다음을 제외한다 :
Oracle Enterprise Manager Products 군 일체
Oracle 9i for UNIX Documentation
Oracle HTTP Server
- 애초부터 선택되어 있지 않는 옵션들은 무시한다.
- 원하는 옵션을 선택하고 Next 버튼을 클릭한다.
- 추가로 설치해야 하는 OUI(Oracle Universal Installer)와 JRE(Java Runtime Environment)가 설치될 위치를 보여준다. 이 파일들은 다른 데 위치해도 되는 것이나 그냥 디폴트대로 설치를 진행한다.
(11) Oracle DBA의 권한을 가지는 그룹을 지정한다.
- Oracle에서 Database Instance를 생성한다거나 권한을 제어할 수 있는 그룹을 지정한다. dba가 자동으로 선택되어 있을 것이다.
- 이를테면 한 DBMS에서 문자세트가 다른 인스턴스를 복수로 생성해야 할 경우 같은 그룹에 속하지만 다른 유저를 만들어서 인스턴스를 생성할 수 있다. 예를 들면 dba 그룹에 속하는 oracle이 모든 권한을 가지지만, 같은 그룹 내에 있는 다른 유저인 oracle1이 인스턴스를 생성할 수 있다는 것이다.
- Next 버튼을 눌러 설치를 진행한다.
(12) 데이터베이스를 생성할 것인지를 결정
- 나중에 dbca(Database Configuration Assistant)를 가지고 별도로 생성할 것이므로 여기서는 No를 선택한다.
- Next 버튼을 클릭한다.
(13) 설치할 옵션 선택결과를 보여준다.
- 주의해서 봐야 할 것이 있다 : 예전에는 Enterprise Edition만 사용했던 관계로 Standard Edition 옵션을 주의할 필요가 없었지만 ECOLAS-S, KOLAS II LIGHT 버전은 Standard Edition만을 사용해야 하므로 애초에 처음 설치 시부터 Standard Edition을 선택해야 한다. Installation Type에 따라 아래 화면에서 보이는 것처럼 Global Settings의 Installation Type에 Enterprise Edition, Standard Edition, Custom이 표시된다. 이는 /oracle/oraInventory/logs에 있는 installActions<연월일시>.log에도 그대로 기록이 남게 되므로 주의해야 한다.
- 예를 들면 다음과 같은 형식이다 :
installActions2004-07-22_01-29-32PM.log
- Oracle Products는 제품군마다 일부 기능의 차이가 있고, 이에 따른 라이선스 비용의 차이가 매우 크기 때문에 나중에 문제를 일으키지 않으려면 반드시 아래 그림의 적색 박스로 된 부분을 확인하고 설치해야 한다.
- Install 버튼을 클릭하면 인스톨이 시작된다.
(14) 설치과정 중의 에러
- 9.2.0.1.0 버전에서 발생했던 에러는 모두 수정되었다. 설치를 하면서 자동으로 이 부분을 패치를 하고 설치를 진행한다. 참고로 인스턴스 생성 중에 ORA-29807 에러가 발생하는데 다른 상용 UNIX와 마찬가지로 그냥 무시하고 지나가면 된다. 사용할 언어를 영어와 함께 한국어를 넣게 되면 메시지가 이상한 문자로 깨져 나올 것이나 무시하고 지나가면 된다.
- ORA-29807 : specified operator does not exist
Cause : The operator binding which has been specified does not exist.
Action : Ensure that the operator that has been specified does exist.
(15) root.sh의 실행
- 예전에는 /nsr 디렉토리를 만들 것인가하는 질문이 있었는데 그것은 없고 자동으로 만들어버린다. Legato 백업과 관련된 부분인데 사용하지 않는 것이므로 나중에 종료해버리면 된다.
- nsrexecd, nsrd, nsrmmdbd, nsrindexd 이 네 개의 데몬이 root 권한으로 실행된다. 이 실행파일의 위치는 /usr/sbin이다.
- coraenv, dbhome, oraenv 이 세 개 파일이 /usr/local/bin 디렉토리에 생성된다.
- 그리고 Solaris나 AIX와 달리 oraInst.loc 파일과 아래 root.sh를 실행하여 생성되는 oratab 파일은 /var/opt/oracle 디렉토리에 생성되지 않고 /etc 디렉토리에 생성된다.
- 이것으로 선택한 패키지 설치가 완료되었다.
5. 네트워크 관련 설정
DBMS 프로그램 설치가 완료되면 곧바로 리스너 설정으로 들어가게 된다.
(1) 리스너 설정
- 9i부터는 리스너 설정이 끝나면 Oracle Agent 설정을 하게 되는데 상용 UNIX를 제외하고는 Agent 설치에서는 에러가 발생한다. 사용하지 않는 것이니 Next버튼을 눌러 그냥 넘어간다.
(2) 네트워크 서비스를 설정
- Listener 이외에는 사용할 일이 없다. 기본값이나 설정을 하지 않고 넘어가면 된다.
(3) 디렉토리 서비스는 나중에 구성하는 것을 선택한다. 실제로도 할 필요가 없다.
(4) 리스너의 이름을 지정한다
- 기본값인 LISTENER 하나만 사용하면 된다. Next 버튼을 클릭한다.
(5) 사용할 프로토콜을 선택한다.
- 기본으로 TCP 프로토콜이 선택되어 있다.
(6) TCP 프로토콜이 사용할 포트를 선택한다.
- 기본값인 1521을 그대로 사용한다.
(7) 또다른 리스너를 만들 것인가를 묻는다.
- No를 선택한다. 나중에 네트워크에 부하가 많이 걸리게 되면 Listener를 여러 개 띄워야 하는 것도 고려해야 한다.
(8) 리스너 생성 완료 메시지 확인
(9) 이름 지정 메소드를 변경할 것인가를 묻는다.
- 변경할 필요없다. 변경하지 않는다를 선택한다.
(10) Oracle Listener 구성이 모두 끝났다.
(11) Oracle Agent 설치를 진행
- 설치를 진행하지만 실패한다. 무시하고 넘어간다. 사용않는다.
(12) 이로써 네트워크 설정을 포함한 전체 설치 과정이 모두 완료되었다.
6. 인스턴스 생성
(1) 인스턴스 생성 시작 화면
- dbca(Database Configuration Assistant)를 사용해서 설치를 시작하는 것이다. 우리가 설치하는 방식으로 테스트해본 결과 전혀 에러가 나지 않았다.
- 단지 에러가 나는 부분은 위에서 말한 것처럼 ORA-29807에러인데 무시하고 설치하면 된다.
- 인스턴스 생성에 문제가 없게 하려면 반드시 사전에 시스템 설정값을 적절히 변경, 적용해놓아야 한다. 또한 shared memory 설정이나 semaphore 부분은 오라클과 서버의 성능에 영향을 주게 되므로, 적절한 값을 계산하여 설정하도록 한다.
- shared memory 설정 변수와 semaphore 값의 의미는 부록을 참조하거나 관련 문서를 보기 바란다.
- Database Configuration Assistant의 시작 : Next 버튼을 클릭한다
(2) Database 작업 내용 선택
- 생성, 삭제 또는 변경 등이 가능하다.
(3) 데이터베이스 생성방식을 선택한다. 우리는 New Database를 선택한다.
(4) Global Database Name과 SID를 지정한다.
- 다르게 해도 되지만 되도록 같게 지정한다.
(5) 필요없는 옵션은 모두 제외한다
- Oracle Text를 제외한 모든 옵션을 삭제하고 관련 데이터베이스를 생성하지 않는다.
(6) 서버 모드는 전용서버모드(Dedicated Server Mode)로 한다.
- 기본적으로 서버에서 Database만 운영하므로 전용서버모드로 설정하고 경우에 따라서 인스턴스가 2개 이상 된다거나 아니면 한 서버에서 여러 서비스를 제공하는 경우라면 공유서버모드로 해도 된다. 공유서버모드로 하게 되면 하나의 프로세스를 여러 클라이언트가 공유할 수 있게 된다.
- 다음 화면에서 보겠지만 All initialization parameters라는 메뉴가 있다. 단순하게 보기만 하는 것이지만 여기에 init<SID>.ora에 설정되는 모든 설정값의 정의가 있다. 참고하기 바란다.
(7) 생성할 인스턴스에 대한 설정을 한다.
- Typical로 하게 되면 전체 메모리를 가지고 자동으로 SGA를 계산해주지만 Custom으로 하게 되면 설치자 재량에 따라 설정할 수 있다.
- 사용할 문자세트를 선택한다.
- DB 크기를 결정한다. block size는 리눅스의 경우 최대 32KB까지이므로 많은 데이터를 한꺼번에 처리하게 된다면 block size를 늘릴 필요가 있다.
- 파일이 생성될 위치를 지정한다. 그냥 디폴트 경로를 사용한다.
- archive log 사용 여부를 결정한다. 개발용이면야 구태여 archive log를 사용할 필요가 없겠지만 실수요자나 백업 소프트웨어를 사용하는 경우 반드시 설정해야 한다.
- Next 버튼을 클릭한다.
(8) Database Storage의 크기를 결정한다
- 별다른 조정없이 디폴트값을 사용해도 되지만 변경해야 한다면 여기서 미리 바꿔도 된다.
- 나중에 alter database … 구문으로 파일의 크기를 늘릴 수 있다.
- DBF 파일은 자동으로 확장되는 지만 확인하면 되고 만약 안되어 있으면 자동으로 확장될 수 있도록 설정해준다. 기본값으로 대개 640KB 정도가 잡혀 있으나 전체 프로세스와 트랜잭션을 감안하여 증가되는 크기를 10MB 이상 잡는 것을 권한다.
- 어차피 데이터가 DBF 파일을 다 채워야만 증가하는 것이므로 공간을 넉넉하게 잡아주도록 한다.
- 연필 아이콘을 눌러 DB 크기를 조정한다.
- 블록 사이즈도 조정해준다. 끝나면 Next 버튼을 클릭한다.
- DB 생성 스크립트가 필요하다면 체크해서 생성되도록 한다.(먼저 생성됨)
- Finish 버튼을 클릭한다.
- 다음과 같은 결과를 HTML로 보여준다. OK버튼을 클릭한다.
(9) 인스턴스가 생성될 때까지 기다린다.
- 그다지 많은 옵션을 준 것이 아니므로 시간이 많이 걸리지는 않는다.
- DB 생성 중에 다음과 같은 에러 메시지가 나온다. 무시하고 넘어간다. 계속 설치가 진행된다.
(10) 암호설정이 마지막 작업이다. Exit하면 DB 생성까지 종료된다.
- 이것으로 모든 설치가 종료되었다.
<< 참고>>
Setting Shared Memory
Shared memory allows processes to access common structures and data by placing them in shared memory segments. It's the fastest form of IPC (Interprocess Communication) available since no kernel involvement occurs when data is passed between the processes. In fact, data does not need to be copied between the processes.
Oracle uses shared memory segments for the SGA (Shared Global Area) which is an area of memory that is shared by all Oracle background and foreground processes. The size of the SGA has a major impact to Oracle's performance since it holds database buffer cache and much more.
To see all shared memory settings, run:
ipcs -lm
Setting SHMMAX Parameter
This parameter defines the maximum size in bytes for a shared memory segment. Since the SGA is comprised of shared memory, SHMMAX can potentially limit the size of the SGA. Ideally, SHMMAX should be large enough so that SGA can fit into one segment.
The default size on RH 2.1 AS is 33554432. With this value, the Oracle Database Configuration Assistant failed on my server with the following error message:
ORA-27123: unable to attach to shared memory segment
Setting SHMMAX to 1 GB always worked for me when I setup a medium sized database. However, it is suggested that it should be set to 2 GB; the default maximum size of the SGA is 1.7 GB which requires a larger SHMMAX. And if the available size of the SGA is set to 2.7 GB by changing "mapped base" at the Linux OS level, then SHMMAX should be set to 3 GB. The maximum value of SHMMAX can be set to 4GB-1. (A typical 32-bit Linux system without Physical Address Extension (PAE) is divided into 3 GB user space and 1 GB kernel space.)
The default shared memory limit for SHMMAX can be changed in the proc file system without reboot:
su - root
echo "2147483648" > /proc/sys/kernel/shmmax
Alternatively, you can use sysctl(8) to change it:
sysctl -w kernel.shmmax=2147483648
To make the change permanent, add the following line to the file /etc/sysctl.conf. This file is used during the boot process.
echo "kernel.shmmax=2147483648" >> /etc/sysctl.conf
Setting SHMMNI Parameter
This parameter sets the maximum number of shared memory segments system wide. The default number on RH 2.1 AS is 4096. To my knowledge this value should be sufficient.
# cat /proc/sys/kernel/shmmni
4096
Setting SHMALL Parameter
This parameter sets the total amount of shared memory in pages that can be used at one time on the system. So shmall should always be at least ceil(SHMMAX/PAGE_SIZE).
The default size for shmall on RH 2.1 AS is 2097152. This should be sufficient since it means that the total amount of shared memory available on the system is 2097152*4096 bytes (shmall*PAGE_SIZE). On i386 architectures, the PAGE_SIZE in RHAS 2.1 (UP and SMP kernel) is 4096 bytes unless you use bigpages which supports the configuration of larger memory pages.
# cat /proc/sys/kernel/shmall
2097152
Setting Semaphores
Semaphores can best be described as counters which are used to provide synchronization between processes or between threads within a process for shared resources like shared memories. System V semaphores support semaphore sets where each one is a counting semaphore. So when an application requests semaphores, the kernel releases them in "sets". The number of semaphores per set can be defined through the kernel parameter SEMMSL.
To see all semaphore settings, run:
ipcs -ls
The SEMMSL Parameter
This parameter defines the maximum number of semaphores per semaphore set.
Oracle recommends to set SEMMSL to the largest PROCESSES init.ora parameter of any database on the Linux system plus 10.
Oracle also recommends to set SEMMSL to a minimum value of 100.
The init.ora parameter PROCESSES specifies the maximum number of operating system processes that can be started by the Oracle instance. In a non MTS environment, Oracle spawns a system user process for each connection. This means that in such an environment the PROCESSES parameter defines the maximum number of simultaneous Oracle connections minus sum of all Oracle background processes.
It can also be said that the PROCESSES value should never be greater than SEMMSL.
The SEMMNI Parameter
This parameter defines the maximum number of semaphore sets in the entire Linux system.
Oracle recommends to set SEMMNI to a minimum value of 100.
The SEMMNS Parameter
This parameter defines the total number of semaphores (not semaphore set) in the entire Linux system. A semaphore set can have more than one semaphore, and according to the semget(2) man page, values greater than SEMMSL * SEMMNI makes it irrelevant.
Setting it to a minimum value of 256 is for initial Oracle installation only.
Oracle recommends to set SEMMNS to the sum of the PROCESSES parameter for each database on the system, adding the largest PROCESSES twice, and then adding 10 for each DB.
The maximum number of semaphores that can be allocated on a Linux system will be the lesser of:
SEMMNS or (SEMMSL * SEMMNI)
Setting SEMMSL and SEMMNI to 100 makes sure that SEMMNS semaphores can be allocated as determined by the above calculation.
The SEMOPM Parameter
This parameter defines the maximum number of semaphore operations that can be performed per semop(2) system call.
The semop(2) function provides the ability to do operations for multiple semaphores with one semop(2) system call. Since a semaphore set can have the maximum number of SEMMSL semaphores per semaphore set, it is often recommended to set SEMOPM equal to SEMMSL.
Oracle recommends to set SEMOPM to a minimum value of 100.
Setting the Semaphore Kernel Parameters
To determine the values of the four described semaphore parameters, run:
# cat /proc/sys/kernel/sem
250 32000 32 128
Alternatively, you can run:
ipcs -ls
All four described semaphore parameters can be changed in the proc file system without reboot:
su - root
# echo SEMMSL_value SEMMNS_value SEMOPM_value SEMMNI_value > /proc/sys/kernel/sem
# These are the values I'm using since I don't want to lower Red Hat's default
# values. The only value I raise is SEMOPM to comply with Oracle's minimum
# requirement for SEMOPM.
echo 250 32000 100 128 > /proc/sys/kernel/sem
Alternatively, you can use sysctl(8) to change it:
sysctl -w kernel.sem="250 32000 100 128"
To make the change permanent, add or change the following line in the file /etc/sysctl.conf. This file is used during the boot process.
echo "kernel.sem=250 32000 100 128" >> /etc/sysctl.conf
To see the new updated semaphore settings, run:
ipcs -ls
Copyright ⓒ 2004 Yi, Seung-Ro. All rights reserved.
'DB' 카테고리의 다른 글
[펌] Redhat Linux 9 + Oracle 9i(9.2.0.4) 설치 (0) | 2005.08.23 |
---|---|
Installing Oracle 9iR2 on Red Hat 9 (0) | 2005.08.23 |
[펌] ORACLE 9I 인스턴스 구동을 위한 SPFILE 및 INIT.ORA 파라미터 .. (0) | 2005.08.23 |