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 -
'Technical > DBMS' 카테고리의 다른 글
Mariadb galera cluster 로 구성하는 MySQL 호환 Multimaster DBMS, on Ubuntu (7) | 2015.07.13 |
---|---|
mongodb ttl collection 사용에 관하여(pymongo 추가) (0) | 2012.11.10 |
MongoDB 백업(dump)와 복구(restore) (0) | 2012.09.18 |
HammerOra로 DBMS 성능 측정하기(TPC-C) -2 (2) | 2012.09.14 |
HammerOra로 DBMS 성능 측정하기(TPC-C) -1 (0) | 2012.09.05 |