본문 바로가기

Technical/DBMS

Silent mode Oracle 11gr2 설치 - CentOS 5.5 x64, cloudn VM에서

 

LGU+ 회사의 클라우드(cloudN) 환경의 가상머신(VM,Virtual Machine)에 oracle 11gR2를 설치해 보았다. 대개 서버 설치시에 X-window를 포함하지 않는 경우가 많으므로, java 와 GUI가 제공되는 그래피컬 환경(일반적으로 주로 사용하는 OUI 모드)이 아닌, 텍스트 기반의 서버 환경에서 설치를 진행한다(구글은 이 Silent mode를 침묵 모드라는 말로 멋지게 번역해 준다).


이론은 간단한 듯 하지만, 실제로 해 보면 결코 그렇지만은 않다. 특히 response 파일 설정에서, 다소의 시행착오와 installer 재실행을 몇 번 해 보아야 한다. 일단 한 번 해 보면 어렵지 않게 누구나 따라서 설치 가능하도록 소상하게 과정을 다루도록 하겠다.

 

다만, 서버에 오라클을 설치할 정도의 엔지니어라면 기본적인 Linux 서버의 사용법이나 소프트웨어 설치, 운영에 어느 정도는 기본 지식이 있을 것이라는 전제하에 기초에 해당하는 지식은 과감히 설명없이 넘어가려 함에 유의해 주자.


[사전 작업 - Prerequisites]


반드시 거쳐야 할 작업으로, 스킵하면 installer가 validate시에 칞젏하게 뱉어내 주며, 다음 단계로 진행할 수가 없다.


1. 커널 파라미터 조정

Oracle이 구동되기 위한 기본 설정이므로 아래와 같이 /etc/sysctl.conf 내에 설정하고 root 계정에서 sysctl -p로 실행해야 함을 잊지 말자.


# Mandatory prerequisite conditions


# semaphores: semmsl, semmns, semopm, semmni

kernel.sem = 250 32000 100 128


fs.file-max = 6815744

fs.aio-max-nr = 1048576


net.ipv4.ip_local_port_range = 9000 65500


net.core.rmem_default = 262144

net.core.wmem_default = 262144


kernel.core_uses_pid = 1

fs.suid_dumpable = 1


이 값은 최소한의 값이며 시스템의 상황에 따라 별도로 튜닝을 해 주어야 할 경우도 발생한다.

파라미터들의 값이 적절하지 않으면 installer가 log 파일을 통해서 상세하게 투덜거려 주므로 tail로 log 파일을 반드시 모니터링 하도록 한다.


fs.suid_dumpable 설정은 CentOS 버전에 따라 deprecated 되었을 수도 있으니 참고로 알아두자.


2. 의존하는 패키지 설치


yum install 명령으로 아래의 패키지들을 설치한다. x64 OS라 하더라도 i386에 해당되는 필수 패키지는 반드시 설치하여야 함에 유의한다.


zip.x86_64 unzip.x86_64

ksh.x86_64

perl.x86_64

binutils.x86_64 binutils220.x86_64

libaio.x86_64 libaio-devel.x86_64

libaio.i386 libaio-devel.i386

pdksh.x86_64

compat-libstdc++-33.x86_64

compat-gcc-34.x86_64

libstdc++.i386

libgcc.i386

elfutils.x86_64 elfutils-libelf.x86_64

elfutils-libelf-devel.x86_64

sysstat

unixODBC.x86_64 unixODBC-devel.x86_64

unixODBC.i386 unixODBC-devel.i386


3. VM 방화벽 설정


my.cloudn.co.kr 에 접속하여, Network Filter 메뉴에서 Oracle_sec_rule 와 같은 rule을 정의하고 등록한다. 기본적으로 linux VM이므로 ssh용 TCP 22, ICMP 등을 개방하여야 하며, 이에 덧붙여 Oracle에 접속할 PC나 서버의 IP와 TCP port(1521)를 등록하고 저장한다.


Security Group 메뉴에서 보안그룹을 등록하고, VM NIC그룹맵 수정 기능을 선택, Oracle이 설치되는 VM을 선택하고, 보안관리 드롭다운에서 위에서 등록한 rule을 선택, 운영대상여부를 체크하고 저장, 적용 여부를 묻는 질문에 '예'를 선택하면 방화벽 설정이 종료된다.


접속이 허용되도록 설정된 PC 등에서  telnet oracle_server_ip 1521 와 같이 명령을 실행하여 TCP 포트가 잘 개방되었는지 확인해 보자.


[설치 파일 다운로드, VM에 복사]


www.oracle.com 사이트에 가입하고 oracle 11gr2 에 해당하는 파일들을 다운로드 받는다.


linux.x64_11gR2_database_1of2.zip

linux.x64_11gR2_database_2of2.zip


* 참고: 보통은 오라클 설치 후 패치 파일 또는 패치셋을 애드온 개념으로 설치해야 하지만, 11gr2 linux판의 패치셋은 10g와 같은 이전 버전과 달리 '패치'가 아닌 '재설치', 즉 전체 설치방식(애들 말로 완전체...)이므로 만약 적용할 경우 기존 데이터를 반드시 백업해야 한다.


설치할 VM에 /home/data 디렉토리로 추가 디스크인 /dev/sdb1 을 마운트(/etc/fstab 파일에 설정)해 두고, oracle_zip_file 와 같은 서브디렉토리를 만들고 local PC에서 VM으로 복사해 넣는다. windows 계열의 PC에서 다운로드 받았다면 winscp 같은 훌륭한 무료 프로그램으로 linux 서버에 업로드 해 넣을 수 있다.

 

oraserver# mount -t ext3 /dev/sdb1 /home/data

mypc# scp -i ~/sec_key/mykey.pem linux.x64_11gr2_database_* root@vm_ip:/home/data/oracle_zip_files


[설치 준비]


root 계정으로 oracle계정과 그룹을 다음과 같이 생성한다.

# groupadd -g 5000 dba

# useradd -g dba oracle

# passwd oracle


Oracle inventory(log, 설치 실행을 위한 임시 작업 디렉토리)는 /home/oracle/oraInventory 로 하기로 한다.

# vi /etc/oraInst.loc

inventory_loc=/home/oracle/oraInventory

inst_group=dba


# chown oracle.dba /etc/oraInst.loc


# vi /etc/pam.d/login (라인 추가)

session    required     pam_limits.so


# vi /etc/security/limits.conf (라인 추가)

oracle       soft    nproc   2047

oracle       hard    nproc   16384

oracle       soft    nofile  1024

oracle       hard    nofile  65536


Oracle 데이터베이스의 실제 설치 위치(ORACLE_BASE)는 /home/data/oracle 로, 데이터베이스명(Global database name, ORACLE_SID)은 gdbora1으로 하기로 하자.

# su - oracle

# vi .bash_profile

export PS1="[\u@\H \w]\$ " # CentOS의 prompt를 바꿔둔다

export EDITOR=vi

export ORACLE_BASE=/home/data/oracle

export ORACLE_HOME=$ORACLE_BASE/product/11.2.0

export ORACLE_SID=gdbora1

export ORACLE_TERM=xterm

export NLS_LANG=AMERICAN_AMERICA.KO16MSWIN949

export ORA_NLS10=$ORACLE_HOME/nls/data

export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:/usr/local/lib

export PATH=$PATH:$ORACLE_HOME/bin

export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib

export LANG=C


Oracle 설치를 위한 프로그램 파일, 스크립트, 설정 및 response 파일등을 저장할 위치는 /home/oracle/database 로 한다.

# cd

# unzip /home/data/oracle_zip_files/linux.x64_11gR2_database_1of2.zip

# unzip /home/data/oracle_zip_files/linux.x64_11gR2_database_2of2.zip # 현재 디렉토리에 database 디렉토리가 생성된다


[response(응답) 파일 작성 및 엔진 설치]


# cd ~/database/response

# cp db_install.rsp myresp.rsp


# vi myresp.rsp (아래에 해당하는 라인을 찾아서 편집한다)

oracle.install.option=INSTALL_DB_AND_CONFIG

UNIX_GROUP_NAME=dba

INVENTORY_LOCATION=/home/oracle/OraInventory

SELECTED_LANGUAGES=en,ko

ORACLE_HOME=/home/data/oracle/product/11.2.0

ORACLE_BASE=/home/data/oracle

oracle.install.db.InstallEdition=EE

oracle.install.db.DBA_GROUP=dba

oracle.install.db.OPER_GROUP=dba

oracle.install.db.config.starterdb.globalDBName=gdbora1

oracle.install.db.config.starterdb.SID=gdbora1

oracle.install.db.config.starterdb.memoryLimit=512

oracle.install.db.config.starterdb.installExampleSchemas=true

oracle.install.db.config.starterdb.enableSecuritySettings=true

oracle.install.db.config.starterdb.password.ALL=Oracle123

oracle.install.db.config.starterdb.password.SYS=Oracle123

oracle.install.db.config.starterdb.password.SYSTEM=Oracle123

oracle.install.db.config.starterdb.password.SYSMAN=Oracle123

oracle.install.db.config.starterdb.password.DBSNMP=Oracle123

oracle.install.db.config.starterdb.storageType=FILE_SYSTEM_STORAGE

oracle.install.db.config.starterdb.fileSystemStorage.dataLocation=/home/data/oracle/datadir

oracle.install.db.config.starterdb.fileSystemStorage.recoveryLocation=/home/data/oracle/backupdir

DECLINE_SECURITY_UPDATES=true


2개의 터미널창에서 동시에 작업한다

# cd ~/database

# ./runInstaller -noconsole -silent -force -waitforcompletion -responseFile /home/oracle/database/response/myresp.rsp


다른 하나의 터미널창에서 runInstaller 가 보여 주는 로그 파일을 tail -f /home/oracle/oraInventory/logs/installAction....log 명령으로 관찰한다.


runInstaller가 성공적으로 동작하여 데이터베이스 엔진이 설치되었다면

......

INFO: Completed executing action at state <finish>

INFO: Waiting for completion of background operations

INFO: Completed background operations

INFO: Moved to state <finish>

INFO: Waiting for completion of background operations

INFO: Completed background operations

INFO: Validating state <finish>

WARNING: Validation disabled for the state finish

INFO: Completed validating state <finish>

INFO: Terminating all background operations

INFO: Terminated all background operations

INFO: Successfully executed the flow in SILENT mode

INFO: Finding the most appropriate exit status for the current application

INFO: Exit Status is -3

INFO: Shutdown Oracle Database 11g Release 2 Installer

와 같은 결과가 확인될 것이다.


[데이터베이스 기동 및 리스너 설정]


root 계정으로 작업한다.

# /home/data/oracle/product/11.2.0/root.sh


oracle 계정으로 DBA 상태로 접속해 본다

# su - oracle

# sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Wed Sep 26 15:55:58 2012


Copyright (c) 1982, 2009, Oracle.  All rights reserved.


Connected to an idle instance.


SQL> 


리스너를 기동할 준비를 아래와 같이 한다

# vi ~/database/response/netca.rsp (해당 라인 편집)

SHOW_GUI=false

LOG_FILE=""/home/data/oracle/product/11.2.0/log/netca.log""


# cd /home/data/oracle/product/11.2.0/bin/

# ./netca /silent /log /home/data/oracle/product/11.2.0/log/netca.log /responseFile /home/oracle/database/response/netca.rsp


리스너를 기동/정지해 보고 프로세스 상태를 점검하자

# lsnrctl stop

# lsnrctl start

# lsnrctl status

# ps -eaf | grep -v grep | grep oracle


[데이터베이스 스키마 생성, 연결 설정]


oracle 계정으로 작업한다.


# vi /home/oracle/database/response/dbca.rsp (해당 라인 편집)

GDBNAME = "gdbora1"

SID = "gdbora1"

SYSPASSWORD = "Oracle123"

SYSTEMPASSWORD = "Oracle123"

NATIONALCHARACTERSET= "UTF8"


# cd /home/data/oracle/product/11.2.0/bin/

# ./dbca -silent -templateName /home/data/oracle/product/11.2.0/assistants/dbca/templates/General_Purpose.dbc -responseFile /home/oracle/database/response/dbca.rsp

Copying database files

1% complete

3% complete

11% complete

18% complete

26% complete

37% complete

Creating and starting Oracle instance

40% complete

45% complete

50% complete

55% complete

56% complete

60% complete

62% complete

Completing Database Creation

66% complete

70% complete

73% complete

85% complete

96% complete

100% complete

Look at the log file "/home/data/oracle/cfgtoollogs/dbca/gdbora1/gdbora1.log" for further details.


수행결과를 log 파일을 통해 확인해 보자

# cat /home/data/oracle/cfgtoollogs/dbca/gdbora1/gdbora1.log


리스너가 정상 작동하는지 확인한다

# lsnrctl status

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 26-SEP-2012 16:50:24


Copyright (c) 1991, 2009, Oracle.  All rights reserved.


Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))

STATUS of the LISTENER

------------------------

Alias                     LISTENER

Version                   TNSLSNR for Linux: Version 11.2.0.1.0 - Production

Start Date                26-SEP-2012 16:40:38

Uptime                    0 days 0 hr. 9 min. 45 sec

Trace Level               off

Security                  ON: Local OS Authentication

SNMP                      OFF

Listener Parameter File   /home/data/oracle/product/11.2.0/network/admin/listener.ora

Listener Log File         /home/data/oracle/diag/tnslsnr/vm00046-1/listener/alert/log.xml

Listening Endpoints Summary...

  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))

  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=host_ip_address)(PORT=1521)))

Services Summary...

Service "gdbora1" has 1 instance(s).

  Instance "gdbora1", status READY, has 1 handler(s) for this service...

Service "gdbora1XDB" has 1 instance(s).

  Instance "gdbora1", status READY, has 1 handler(s) for this service...

The command completed successfully


# sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Wed Sep 26 15:55:58 2012


Copyright (c) 1982, 2009, Oracle.  All rights reserved.


Connected to:

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options


SQL> connect / as sysdba

Connected.

SQL> select status from v$instance;


STATUS

------------------------

OPEN


SQL> 



[클라이언트 접속 환경 설정과 그 이후...]


아래 링크를 통해 'instant client'를 다운로드 받고 OCI 를 설치하여야 한다.

http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html


 설치 가능한 풀 버전은 아래 링크를 통해 다운로드 받을 수 있다.

http://www.oracle.com/technetwork/database/enterprise-edition/downloads/112010-win64soft-094461.html


<주> Windows에서 Toad for oracle을 사용한다면 64bit용 instant client를 다운로드 받으면 oci.dll 이 로딩되지 않고 toad에서 oracle 접속이 되지 않는다. 이는  Quest software에서 여전히 32bit 버전의 toad.exe를 고수하고 있기 때문인데, 구글링 해 보면 registry 를 조작하는 방법으로 잘 정리한 문서들이 많이 있으니 참조해서 문제를 해결하자.


TNSNAMES.ora 편집 및 데이터베이스 접속에 대해서는 개발자 입장의 지식이고, 이미 많은 개발자들이 다루고 있는 부분이므로 본 포스팅의 성격과 맞지 않아서 생략한다.



- Barracuda -