2009. 7. 14. 02:26

레드헷 계열 리눅스에서 오라클11설치하기

레드헷계열의 리눅스중 대표적인것이 엔터프라이즈와 CentOS, Fedora이다.
이 세개는 모습이나 쓰는방법이 거의 동일하다. 다만 엔터프라이즈는 돈을 내야 yum이라든지 기술적 지원을 받을수 있다. 돈을 내기 싫다면 안정버젼 엔터프라이즈의 클론 버젼인 CentOS를 사용하면 된다.

오라클은 왜 써야하는가? 하는 생각을 많이 해보았다.
우선 오라클을 써보지 않은 DB유져들은 취직이 힘들다는 점이다. 1980년대부터 서버용 DB를 선점해온 Oracle은 MS의 MSSQL의 어떠한 공격에도 임베디드시장에서의 1위자리를 내준적이 없다.

그만큼 많은 DB서버중 기업체에서 가장 널리 쓰인다고 말할수 있다. 이 말은 즉 오라클을 모르면 DB설계자로서 DBMS관리자로서 취직이 어렵다는 이야기가 된다.

우리가 많이 쓰는 MySQL은 접하기도 쉽고, 구성도 어떤 SQL보다 쉽다. 많은 프로젝트들이 MySQL로도 실현 가능하다. 하지만, MySQL을 이용하지 않고, 오라클만을 고집하며 DB를 구성하는 회사들이 많다.

뭔가 있어보이고, 뭔가 틀려보이는 착각때문일까? 아니면 트랜잭션에 롤백시스템..이라면서 거들먹 거리며 알아듣지도 못하는 영어를 써대며 오라클을 칭송하는 기존 관리자들의 자만심때문일까?

어쨋든, DB manager로서 반드시 오라클을 배워 차후의 프로젝트에서는 오라클을 이용한 DB구성을 해보자는 일념하에 이 포스팅을 시작한다.

오라클의 마지막버젼은 11g로서 오라클의 개발은 리눅스 엔터프라이즈 하에서 이루어진다고 한다.
그 소스들을 가지고 유닉스버젼과 윈도우즈버젼으로 재포팅한다고 하니..
아마도 오라클을 사용하기에 가장 좋은 배포본은 레드헷 계열인듯 싶다. 실제로 금융사나 대형 증권사같은 회사들은 Linux For SYSTEM Z하에서 오라클로 DB구성을 한다고 한다. (보진 못했지만)
돈이 왔다갔다 하는 시스템이니 안정성과 기능,보안에서는 오라클이 가장 알맞은 시스템인것만은 틀림없다.

잡소리는 때려치우고...

오라클은 리소스를 굉장히 많이 잡아먹는 DBMS이다. 최소 Require 물리적 메모리가 1기가에 달한다. 또한 스왑파일의 크기도 최소 1기가를 요구하니 실제적으로 실무에 사용하기 위해서는 적어도 오라클용으로 물리적 메모리로 2기가정도 되는 메모리를 활당해야 겠다. 테스트하는 vmware용 레드헷머신에 과감히 1기가의 메모리를 활당하고 테스트 머신이라 할지라도 disk durid에서 스왑파일로 2기가의 용량을 주기로 하였다.

80기가 하드 노트북에 20기가를 테스트용 리눅스머신에 하드디스크를 활당하고 2기가 램 윈도우시스템에 vmware에 1기가램을 활당하면 상당히 버벅거림을 느낄정도가 되겠다.

그래서 이번 포스팅에서는 가급적 스샷을 자제한다. 난 시스템이 느려지면 작업을 안하는 스타일이라..
기획하고 있는 실무서버에는 4기가 램에 2테라의 하드를 붙일 생각이다. DB로 구성한 스토리지 데이타서버를 만들어 네트워크상에서 언제든 불러올수 있어야 하니..

OS환경 : CentOS 5.3
물리적메모리 : 1G
스왑 : 2기가
하드디스크 : 20기가
오라클버젼 : oracle 11g for linux(i386)
오라클 설치에 필요한 용량 : 3.5기가 이상..
download : 오라클홈페이지 ( 상당히 느리다. 알아서 딴곳에서 받자.)


우선 시스템의 용량에 4기가정도 되는 용량이 있어야 한다. df명령으로 확인하여 보자

[root@localhost ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/hda1              18G  4.8G   12G  29% /
tmpfs                 506M     0  506M   0% /dev/shm
[root@localhost ~]#

용량은 충분하다. 오라클사이트에 가서 다운을 받자.
http://www.oracle.com/technology/software/products/database/oracle11g/111060_linuxsoft.html

그런데 여기서 다운받으면 우리나라의 경우 약 14시간정도 걸린다. 아마도 웹브라우져가 도중에 서버릴것이다. 다운로드 속도가 매우 느리다.  무료로 다운받게한 오라클이지만, 아마도 자신들의 웹사이트외의 업로드는 금지시켜놓은듯 하다. 북한이나 이란등의 미국의 적대국가에서 강력하게 사용할수 없다고 전제도 하고 있는것보면 무상이지만, 마음대로 자료실에 올리면 안되는듯 싶다. 알아서 찾자.

*오라클은 무료소프트웨어가 아니다. 다만 개인이 학습용이나 개발용으로 다운받아 사용하는것은 허용된다. 이말은 실무에 있어서는 반드시 오라클 라이센스를 취득해야 한다는 말이다.


<다운받은 오라클 리눅스 i386용> 

이제 의존성을 체크하자. 오라클을 설치하기 위한 의존성 프로그램들은 아래와 같다. 일일히 체크할것 없이 yum으로 한번에 설치하자.

* 의존성 체크
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

yum -y install binutils compat-db control-center gcc glibc gcc-c++ glibc-common gnome-libs libstdc++ libstdc++-devel make pdksh sysstat xscreensaver

[root@localhost ~]# yum -y install binutils compat-db control-center gcc glibc gcc-c++ glibc-common gn                                                                                                          ome-libs libstdc++ libstdc++-devel make pdksh sysstat xscreensaver
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * extras: centos.mirror.cdnetworks.com
 * updates: centos.mirror.cdnetworks.com
 * base: centos.mirror.cdnetworks.com
 * addons: centos.mirror.cdnetworks.com
Setting up Install Process
Parsing package install arguments
Package binutils-2.17.50.0.6-9.el5.i386 already installed and latest version
Package 1:control-center-2.16.0-16.el5.i386 already installed and latest version
Package gcc-4.1.2-44.el5.i386 already installed and latest version
Package glibc-2.5-34.i686 already installed and latest version
Package gcc-c++-4.1.2-44.el5.i386 already installed and latest version
Package glibc-common-2.5-34.i386 already installed and latest version
No package gnome-libs available.
Package libstdc++-4.1.2-44.el5.i386 already installed and latest version
Package libstdc++-devel-4.1.2-44.el5.i386 already installed and latest version
Package 1:make-3.81-3.el5.i386 already installed and latest version
No package pdksh available.
Package xscreensaver is obsoleted by gnome-screensaver, trying to install gnome-screensaver-2.16.1-8.el5.i386 instead
Package gnome-screensaver-2.16.1-8.el5.i386 already installed and latest version
Resolving Dependencies
--> Running transaction check
---> Package sysstat.i386 0:7.0.2-3.el5 set to be updated
---> Package compat-db.i386 0:4.2.52-5.1 set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

======================================================================================================
 Package                  Arch                Version                       Repository           Size
======================================================================================================
Installing:
 compat-db                i386                4.2.52-5.1                    base                1.7 M
 sysstat                  i386                7.0.2-3.el5                   base                169 k

Transaction Summary
======================================================================================================
Install      2 Package(s)
Update       0 Package(s)
Remove       0 Package(s)

Total download size: 1.8 M
Downloading Packages:
(1/2): sysstat-7.0.2-3.el5.i386.rpm                                                                                                                                                      | 169 kB     00:00
(2/2): compat-db-4.2.52-5.1.i386.rpm                                                                                                                                                     | 1.7 MB     00:00
----------------------------------------------------------------------------------------------------------------------
Total                                                                                                                                                                           2.8 MB/s | 1.8 MB     00:00
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing     : sysstat                                           [1/2]
  Installing     : compat-db                                         [2/2]

Installed: compat-db.i386 0:4.2.52-5.1 sysstat.i386 0:7.0.2-3.el5
Complete!


배포본을 최신버젼을 설치하였더니, 없는 프로그램의 두개이다.

1. 오라클 설치용 계정만들기

[root@localhost ~]# groupadd -g 5000 dba
[root@localhost ~]# useradd -g dba oracle
[root@localhost ~]# passwd oracle
Changing password for user oracle.
New UNIX password:
BAD PASSWORD: it is based on a dictionary word
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
[root@localhost ~]# mkdir -p /home/oracle/oracle11
[root@localhost ~]# chmod 775 -R /home/oracle/oracle11
[root@localhost ~]# chown oracle:dba /home/oracle/


2. 커널 매개변수를 변경한다.

[root@localhost backup]# sysctl -a | grep kernel.shmall
kernel.shmall = 2097152
[root@localhost backup]# sysctl -a | grep kernel.shmmax
kernel.shmmax = 33554432
[root@localhost backup]# sysctl -a | grep kernel.shmmni
kernel.shmmni = 4096
[root@localhost backup]# sysctl -a | grep kernel.sem
kernel.sem = 250        32000   32      128
[root@localhost backup]# sysctl -a | grep fs.file-max
fs.file-max = 24589
[root@localhost backup]# sysctl -a | grep net.ipv4.ip_local_port_range
net.ipv4.ip_local_port_range = 32768    61000
[root@localhost backup]# sysctl -a | grep kernel.msgmni
kernel.msgmni = 16
[root@localhost backup]# sysctl -a | grep kernel.msgmax
kernel.msgmax = 8192
[root@localhost backup]# sysctl -a | grep kernel.msgmnb
kernel.msgmnb = 16384

 /etc/sysctl.conf

# Kernel sysctl configuration file for Red Hat Linux
#
# For binary values, 0 is disabled, 1 is enabled.  See sysctl(8) and
# sysctl.conf(5) for more details.

# Controls IP packet forwarding
net.ipv4.ip_forward = 0

# Controls source route verification
net.ipv4.conf.default.rp_filter = 1

# Do not accept source routing
net.ipv4.conf.default.accept_source_route = 0

# Controls the System Request debugging functionality of the kernel
kernel.sysrq = 0

# Controls whether core dumps will append the PID to the core filename
# Useful for debugging multi-threaded applications
kernel.core_uses_pid = 1

# Controls the use of TCP syncookies
net.ipv4.tcp_syncookies = 1

# Controls the maximum size of a message, in bytes
kernel.msgmnb = 65536

# Controls the default maxmimum size of a mesage queue
kernel.msgmax = 65536

# Controls the maximum shared segment size, in bytes
kernel.shmmax = 536870912

# Controls the maximum number of shared memory segments, in pages
kernel.shmall = 268435456

#For Installing Oracle Setting
kernel.shmmni = 4096

kernel.sem = 250 32000 100 128

fs.file-max = 65536

net.ipv4.ip_local_port_range = 1024 65000

net.core.rmem_default=4194304
net.core.wmem_default=262144
net.core.rmem_max=4194304
net.core.wmem_max=262144


커널 매개변수 변경을 위하여 vi /etc/sysctl.conf를 실행하여 위와 같이 편집한다.

변경후 아래와 같이 실행
[root@localhost ~]# /sbin/sysctl -p
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 536870912
kernel.shmall = 268435456
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default = 4194304
net.core.wmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_max = 262144



3. /etc/security/limits.conf변경

Linux 계정 별로 실행되는 프로세스와 열린 파일 수를 제한해야 한다.. /etc/security/limits.conf 를 열고 아래의 내용과 같이 추가한다.

#<domain>      <type>  <item>         <value>
#
  oracle        soft    nproc          2047
  oracle        hard    nproc          16384
  oracle        soft    nofile         1024
  oracle        hard    nofile         65536

#*               soft    core            0
#*               hard    rss             10000


4. /etc/pam.d/login변경
[root@localhost ~]# vi /etc/pam.d/login
#%PAM-1.0
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
auth       include      system-auth
account    required     pam_nologin.so
account    include      system-auth
password   include      system-auth
# pam_selinux.so close should be the first session rule
session    required     pam_selinux.so close
session    required     pam_loginuid.so
session    optional     pam_console.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session    required     pam_selinux.so open
session    required     pam_namespace.so
session    optional     pam_keyinit.so force revoke
session    include      system-auth
session    optional     pam_ck_connector.so

session    required    /lib/security/pam_limits.so
황색 마크 부분을 추가한다.

5. /home/oracle/.bash_profile의 변경
[root@localhost ~]# vi /home/oracle/.bash_profile
export ORACLE_BASE=/home/oracle/oracle11
export ORACLE_SID=ORCL
export ORACLE_HOME=$ORACLE_BASE/product/11.1.0/db_1
export PATH=$PATH:$ORACLE_HOME/bin
export DISPLAY=:0.

파란마크 부분을 추가한다.

6. 압축을 푼다.
루트 계정으로 받은 오라클 db를 오라클 계정으로 이동하여 퍼미션을 오라클로 변경하고 압축을 풀어준다.
[root@localhost ~]# cd /root/Desktop/
[root@localhost Desktop]# ls
gnome-terminal.desktop  hadjaha-009b9e425c.desktop  linux_11gR1_database.zip
[root@localhost Desktop]# mv linux_11gR1_database.zip /home/oracle/
[root@localhost Desktop]# ls -la /home/oracle/
합계 1803100
drwx------ 4 oracle dba        4096  7월 14 20:12 .
drwxr-xr-x 4 root   root       4096  7월 14 19:44 ..
-rw-r--r-- 1 oracle dba          33  7월 14 19:44 .bash_logout
-rw-r--r-- 1 oracle dba         346  7월 14 20:10 .bash_profile
-rw-r--r-- 1 oracle dba         124  7월 14 19:44 .bashrc
drwxr-xr-x 4 oracle dba        4096  7월 14 19:44 .mozilla
-rw-r--r-- 1 root   root 1844533232  7월 14 19:26 linux_11gR1_database.zip
drwxrwxr-x 2 root   root       4096  7월 14 19:45 oracle11
[root@localhost Desktop]# chown oracle.dba /home/oracle/linux_11gR1_database.zip
합계 1803100
drwx------ 4 oracle dba        4096  7월 14 20:12 .
drwxr-xr-x 4 root   root       4096  7월 14 19:44 ..
-rw-r--r-- 1 oracle dba          33  7월 14 19:44 .bash_logout
-rw-r--r-- 1 oracle dba         346  7월 14 20:10 .bash_profile
-rw-r--r-- 1 oracle dba         124  7월 14 19:44 .bashrc
drwxr-xr-x 4 oracle dba        4096  7월 14 19:44 .mozilla
-rw-r--r-- 1 oracle dba  1844533232  7월 14 19:26 linux_11gR1_database.zip
drwxrwxr-x 2 root   root       4096  7월 14 19:45 oracle11
[root@localhost Desktop]#


사용자 변경과 압축풀기
[root@localhost Desktop]# su oracle
[oracle@localhost Desktop]$ cd [oracle@localhost ~]$ ls
linux_11gR1_database.zip  oracle11
[oracle@localhost ~]$ unzip linux_11gR1_database.zip/home/oracle/
[oracle@localhost ~]$ ls
database  linux_11gR1_database.zip  oracle11
[oracle@localhost ~]$ cd database

7. 설치시작
Xwindows
로 oracle계정으로  다시 로그인한다.
설치시에 xWindows가 한글세팅이라면, 오라클은 EUC_KR용 설치화면을 뿌리기 때문에 인코딩이 깨져나오는 현상이 발생할것이다.
이럴경우는 당황하지 말고 영문으로 설치하도록 한다.
콘솔상에서 export LANG=C 를 입력하면 인스턴트 영문모드가 된다.
[oracle@localhost database]$cd /home/oracle/database
[oracle@localhost database]$ export LANG=c
[oracle@localhost database]$ ./runInstaller
Starting Oracle Universal Installer...

Checking Temp space: must be greater than 80 MB.   Actual 9276 MB    Passed
Checking swap space: must be greater than 150 MB.   Actual 2047 MB    Passed
Checking monitor: must be configured to display at least 256 colors.    Actual 16777216    Passed
Preparing to launch Oracle Universal Installer from /tmp/OraInstall2009-07-14_08-44-33PM. Please wait ...[oracle@localhost database]$
[oracle@localhost database]$


설치화면이 시작된다.


<맨처음 화면 - Gimp에서 편집된 이미지임..김프도 쓸만하군>


Oracle Basic Location : /home/oracle
Oracle Home Location : /home/oracle/prdouct/11.1.0/db_1
UNIX DBA Group : dba
를 입력한다. 입력하지 않아도 기본으로 나올것이다.
여기서 Location에 Oracle의 권한이 없는 디렉토리를 선택하면 아래와 같은 에러메세지가 나오므로, 로케이션은 앞의 .bash_profile에서 설정한대로 해주어야 한다.


Advanced Install버튼을 그리고 넥스트를 선택하자.



Inventory Directory가 /home/oracle/oracle11/oralInventory로 변경하고 Next하자.
만약 퍼미션 에러가 난다면 터미날에서 루트로 접속하여 oracle11디렉토리를 oracle.dba에게 준다.


언어를 추가한다.
Enterprise Edition - product Language

한국어와 쓰일 일본어를 정도를 영어와 함께 추가한다.


Install Location을 변경하는 부분이다. .bash_profile에서 설정해준것이 나올것이다. Next!

check mode- 시스템이 사양이 올바른가에 대한 체크를 한다. 설치에서 Warning 1개와 Not Excute부분이 1개 나왔다.  사설ip를 쓰는것이 문제가 되었다. 이것은 /etc/hosts부분에 사설ip domain명 별칭 등을 넣어서 해결할수 있다.

Create Database항목을 체크한후 Next

Select General Purpose


데이타베이스 이름과 SID값을 위와 같이 입력

메모리와 인코딩과 샘플 스키마등에 대해서 설정하여 준다.
메모리는 테스트 서버이니 디폴트인 403MB으로 잡았다.
인코딩은 UTF-8로 잡아줬다.
나머지는 디폴트로 NEXT

Management Option 별다른 체크없이 Next

file System  - /home/oracle/oracle11/oradata

Do not Enable Automated backups 자동백업 하지 않는다에 체크..

패스워드는 실무에서는 별도로 각기 관리 비번을 준다.
구찮으므로 모두 통일된 패스워드 발급

디폴트된 값으로 Next
이후 오라클에 사용등록하라는 메세지가 나오는데 등록안할것이므로 Next
설치 환경에 대한 설정을 보여준다. Summary- Next Installing



이제 설치모드 돌입.. 꽤 시간이 흘러야 다음 장면을 볼수 있다.

설치가 다 끝나면 다음과 같은 메세지가 출력된다.
터미널을 열어 루트로 로그인하여 위의 sh파일들을 실행하자. 실행후 OK버튼


설치가 끝이 났다. 이제 오라클이 제대로 제대로 설치되어 움직이는지 확인하여 보자.

[oracle@localhost bin]$ ./lsnrctl start

LSNRCTL for Linux: Version 11.1.0.6.0 - Production on 15-JUL-2009 00:08:15

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

TNS-01106: Listener using listener name LISTENER has already been started
[oracle@localhost bin]$ ./lsnrctl status

LSNRCTL for Linux: Version 11.1.0.6.0 - Production on 15-JUL-2009 00:08:58

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

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.1.0.6.0 - Production
Start Date                14-JUL-2009 22:09:41
Uptime                    0 days 1 hr. 59 min. 46 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /home/oracle/oracle11/product/11.1.0/db_1/network/admin/listener.ora
Listener Log File         /home/oracle/oracle11/diag/tnslsnr/localhost/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost.localdomain)(PORT=1521)))
Services Summary...
Service "ORACLE11" has 1 instance(s).
  Instance "ORCL", status READY, has 1 handler(s) for this service...
Service "ORACLE11_XPT" has 1 instance(s).
  Instance "ORCL", status READY, has 1 handler(s) for this service...
Service "ORCLXDB" has 1 instance(s).
  Instance "ORCL", status READY, has 1 handler(s) for this service...
The command completed successfully

[oracle@localhost bin]$ sqlplus /nolog

SQL*Plus: Release 11.1.0.6.0 - Production on Wed Jul 15 00:13:47 2009

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

SQL> connect orcl as sysdba
Enter password:
Connected.

설치 성공 이제 php에서 오라클을 쓸수있게 하는 포스팅과 연동법에 대해 알아보고, jsp에서도 오라클을 다뤄봐야 겠다.