문서는
http://www.oracle.com/technology/pub/articles/smiley_rac10g_install.html
http://www.oracle-base.com/articles/10g/OracleAS10gInstallationOnFedora2.php
참조.
시스템 환경 점검
2.6.9-11 이상의 커널이 필요하다.
# uname -r
필요한 패키지 버전(그 이상도 당연히 가능) -> 대부분 설치되어 있다.
binutils-2.15.92.0.2-10
compat-db-4.1.25-9
control-center-2.8.0-12
gcc-3.4.3-9
gcc-c++-3.4.3-9
glibc-2.3.4-2
glibc-common-2.3.4-2
gnome-libs-1.4.1.2.90-44.1
libstdc++-3.4.3-9
libstdc++-devel-3.4.3-9
make-3.80-5
pdksh-5.2.14-30
sysstat-5.0.5-1
xscreensaver-4.18-5
libaio-devel-0.3.106 <- 2009.1.8 설치 중 발견.
compat-libstdc++-33-3.2.3-i386 <-2009.1.8 설치 중 발견.
실제로 요구사항으로 체크되는 패키지의 목록은 다음과 같다. <- 2009.1.8 update
make-3.81
binutils-2.17.50.0.6
gcc-4.1.1
libaio-0.3.106
libaio-devel-0.3.106
libstdc++-4.1.1
libstdc++-devel-4.1.1
sysstat-7.0.0
libgcc-4.1.1
elfutils-libelf-0.125
elfutils-libelf-devel-0.125
glibc-common-2.5
glibc-devel-2.5
gcc-c++-4.1.1
compat-libstdc++-33-3.2.3
시스템 요구사항 검증
# grep MemTotal /proc/meminfo
MemTotal : xxxxxx KB
# grep SwapTotal /proc/meminfo
SwamTotal : xxxxx KB
계정 생성
# groupadd oinstall
# groupadd dba
# useradd -m -g oinstall -G dba oracle
# passwd oracle
디렉토리 생성
# mkdir /oracle
# chown -R oracle.dba /oracle
# chmod -R 755 /oracle
hosts 파일
/etc/hosts 파일이 제대로 설정되어 있는지 확인.
# cat /etc/hosts
<IP-address> <fully-qualified-machine-name> <machine-name>
커널 파라미터 설정
Oracle 11g? 가 요구하는 커널 매개변수 설정이다. 아래의 수치는 최소값이며 /etc/sysctl.conf에 적혀있는 값이
아래의 값보다 높을 경우에는 변경하지 않아도 된다. 물론 낮을 경우에는 /etc/sysctl.conf 에 추가해준다.
# sysctl -a | grep ... 으로 확인할 수 있다.
#kernel.shmall = 2097152
#kernel.shmmax = 2147483648
#kernel.shmmni = 4096 <- 수정했음.
# semaphores: semmsl, semmns, semopm, semmni
#kernel.sem = 250 32000 100 128
#fs.file-max = 131072
net.ipv4.ip_local_port_range = 1024 65000
kernel.msgmni = 2878
#kernel.msgmax = 8192
#kernel.msgmnb = 65535
net.core.rmem_default = 4194304
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 262144
(#처리는 서버에서 해당값보다 크거나 같은 경우이다. 적다면 주석 풀고 붙여넣는다.)
2009.1.8 update
실제 확인하는 커널 매개변수와 값. (물론 값이 큰건 성공으로 표시된다.)
semmsl=250
semmns=32000
semopm=100
semmni=128
shmmax=536870912
shmmni=4096
shmall=2097152
file-max=65536
VERSION=2.6.18
ip_local_port_range=1024 - 65000
rmem_default=4194304
rmem_max=4194304
wmem_default=262144
wmem_max=262144
실제로 적어줘야하는 형식은 위에 적혀있는 것을 따르거나 google it.
Base Location Inventory Directory와 Group Name을 지정하는데 Inventory는 적당한 곳에 위치시키고.. 이제는 설치전 요구사항에 대해서 검사를 하는데. 11g에서는 다음 화면이 추가로 생겼다. 환경설정 관리자 등록 화면인데.. 등록하면 뭔가 귀찮으니까 -_- 패스 Install 버튼을 눌러서 계속 진행한다. 와우. 별일 없이 쭉 넘어갔다. 8i 시절 부터 10g까지 리눅스에 설치시 끈질기게 괴롭히던 Link Error가 사라졌다. scott 을 추가해준다. 설치가 완료 되었다. ----------------------------------------------------------------------
----------------------------------------------------------------------
변경이 완료되면
# /sbin/sysctl -p 로 변경된 설정을 적용한다.
oracle 사용자 계정의 shell limit 설정
Linux 계정 별로 실행되는 프로세스와 열린 파일 수를 제한한다. 이를 위해 /etc/security/limits.conf 를 편집한다.
아래에 추가하자. (간격은 tab으로 조정하던지.. 알아서 )
#<domain> <type> <item> <value>
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
그리고 /etc/pam.d/login 에 다음을 추가하자.
session required /lib/security/pam_limits.so
oracle 계정을 위한 환경변수
DB 서버에서 설정해야하는 환경변수는 다음과 같다.
ORACLE_BASE
ORACLE_HOME
ORACLE_SID
PATH
위의 변수를 추가하기 위해서 oracle 계정의 .bash_profile에 다음을 추가한다.
ORACLE_BASE=/oracle; export ORACLE_BASE
ORACLE_HOME=/oracle/11g; export ORACLE_HOME
ORACLE_SID=orcl; export ORACLE_SID
PATH=$PATH:$ORACLE_HOME/bin
오라클 배포판 다운받기
배포판을 다운받아서 특정 디렉토리에 압축을 풀어놓는다. 물론 디렉토리는 oracle 계정의 소유여야한다.
루트로 작업하고 나중에 chown을 사용해도 상관없다.
# unzip linux.x64_11gR1_database.zip <물론 zip파일의 이름은 다를 수도 있다 -_->
# chown -R oracle.oinstall ./database
설치 전에..
oracle 계정으로 로그인 해서 설치 파일들을 풀어놓은 디렉토리에서 runInstaller를 실행하기 전에..
# xhost +
(+까지 쳐야한다. 이걸 해줘야 루트로 로그인 한 X윈도에서 터미널로 su - oracle을 이용해서
oracle 계정을 사용 xwindow 창을 띄울 수 있다. 궁금하다면 man xhost 를 참고할 것)
예전에는 /etc/redhat-release를 수정해주곤 했는데 안해줘도 잘 나온다.
oracle 11g도 한글이 다 깨져서 나온다. runInstaller 전에 다음을 실행한다.
# export LANG=C
그리고 나서 runInstaller를 실행하면 깨지지 않고 나올 것이다. 물론 영어로 -_-;
이제 runInstaller를 실행해보자.
Home Location 을 profile과 동일하게 맞춰주고..
Global Database Name 도 SID 와 맞춰준다.
Advanced Installation으로 들어가면 이것저것 만질 수 있는게 많다. 귀찮으므로 패스.
자.. 이제 다음 화면이다.
group name도 dba로 설정해준다.
Warning도 뜨고.. not execute(Network 설정)도 뜬다. 그냥 User Verify 로 선택하고 넘어가자.
자 이제 Summary 를 볼 수 있다.
다음은 패스워드 설정이다. 11g 에서는 sys / system / dbsnmp / sysman 을 제외한 모든 계정이 잠겨있다.
여기서 풀어줄 수 있다. scott 정도는 풀어주자.
항상 해오던 루트로 실행해줄 스크립트다. 터미널을 하나 열어서 적혀있는 스크립트를 루트권한으로 실행해준다.
오라클 자동 시작/종료 설정
# vi /etc/oratab
orcl:/oracle/11g:N <- N을 Y로 수정한다.
orcl:/oracle/11g:Y
에러처리
다음과 같은 에러가 날 것이다.
error while loading shared libraries libnnz11.so: cannot restore segment prot after reloc Permission denied
뭔가 퍼미션이 없다는 얘긴데.. 이건 SELinux를 disable 시켜주면 된다. SELinux disble 시키는 방법은
/etc/selinux/config 파일을 잘 읽어보고 고치면 된다. (모르면 구글에 검색)
또 이런 에러가 날 수도 있다.
$ ./lsnrctl start
LSNRCTL for Linux: Version 11.1.0.6.0 - Production on 18-FEB-2008 19:14:37
Copyright (c) 1991, 2007, Oracle. All rights reserved.
Message 1070 not found; No message file for product=network, facility=TNSTNS-12545: Message 12545 not found; No message file for product=network, facility=TNS
TNS-12560: Message 12560 not found; No message file for product=network, facility=TNS
TNS-00515: Message 515 not found; No message file for product=network, facility=TNS
Linux Error: 2: No such file or directory
이런 경우는 포트가 열려있지 않은 경우니까.. 방화벽에서 1521번 포트를 열어주자.
오라클 실행과 종료
oracle 계정에서
$ lsnrctl start <리스너 스타트>
리스너 시작 후에..
$ sqlplus /nolog
sqlplus> connect orcl as sysdba
...
sqlplus> startup
서비스 스크립트 작성
# vi /etc/init.d/oracle
다음의 내용을 파일에 쓴다.
#!/bin/bash
ORA_HOME="/oracle/11g/"
ORA_OWNER="oracle"
if [ ! -f $ORA_HOME/bin/dbstart -o ! -d $ORA_HOME ]
then
echo "Oracle Startup: failed"
exit 1
fi
case "$1" in
start)
echo -n "Oracle Start: "
su - $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl start"
su - $ORA_OWNER -c $ORA_HOME/bin/dbstart
touch /var/lock/subsys/oracle
echo "OK"
;;
stop)
echo -n "ORACLE Shutdown: "
su - $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl stop"
su - $ORA_OWNER -c $ORA_HOME/bin/dbshut
rm -f /var/lock/subsys/oracle
echo "OK"
;;
restart)
$0 stop
$0 start
;;
*)
echo "Usage: $0 start|stop|restart"
exit 1
esac
exit 0
사용은 /etc/rc.d/init.d/oracle start | stop | restart ~