The truth will set you free

sunyzero.egloos.com

포토로그



Oracle 11g on Fedora11 (or Fedora9) Com. Science

Oracle 11g R2를 설치한 과정을 자세한 그림과 함께 살펴보도록 하겠다.
* 목차
0. 설치전 확인
1. 오라클 설치 프로그램 실행
2. 데이터베이스 보안 갱신 구성
3. 데이터베이스 설치 옵션
4. 시스템 클래스 설정
    (4-A) 데스크탑 클래스를 지정한 경우
    (4-B) 서버 클래스를 지정한 경우
5. 필요 조건 검사 수행
6. 설치 옵션 요약
7. 제품 설치 시작 (or 데이터베이스 생성)
8. 오라클 엔터프라이즈 매니저
9. 오라클 환경 변수의 수정


우선 오라클을 설치한 테스트 플랫폼은 다음과 같다.

  • 호스트 1: Fedora 9
  • 호스트 2: Fedora 11
오라클 설치 프로그램은 X윈도우 기반이므로 X윈도우가 일단 설치되어있어야 한다. 그리고 GNOME환경을 추천하는데 이는 간혹 KDE나 OpenGL의 compiz에서는 메시지 창이 먹통이 되는 경우가 있기 때문이다. 설치 과정은 시스템에 따라서 다르지만 테스트한 E8400 CPU에서는 프로그램 설치에 약 50여분, DB생성에 약 40여분이 걸렸었다. 따라서 넉넉하게 2시간 걸렸다.


0. 설치전 확인

첫번째로 SELINUX 설정을 Permissive로 바꿔야 한다.(enforcing레벨에서 디렉토리, 리소스 권한 조절이 가능하면 해도 된다. 하지만 그 정도 기술이 있으면 최소한 expert 레벨이므로 이런 글을 보지 않을 것이라고 확신하기에 permissive로 바꾸는 것부터 하겠다.) SELINUX 설정의 확인은 sestatus로 확인가능하고 현재 설정을 바꾸는 것은 setenforce를 사용한다. 아래 예를 보자.

[root@localhost ~]# sestatus
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: enforcing
Mode from config file: enforcing
Policy version: 24
Policy from config file: targeted
[root@localhost ~]# setenforce permissive
[root@localhost ~]# sestatus
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: permissive
Mode from config file: enforcing
Policy version: 24
Policy from config file: targeted
"setenforce permissive"대신에 "setenforce 0"으로 명령해도 결과는 같다. 길게 permissive로 치는게 더 직관적일 것 같아서 예제는 길게 타이핑했다. 그런데 Current mode가 permissive로 바뀌었지만 여전히 Mode from config file이 enforcing이므로 재부팅하면 다시 enforcing이 된다. 따라서 설정 파일을 바꿔야 한다. 설정 파일은 /etc/sysconfig/selinux이다. vim 에디터로 열어보자.

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
중간에 "SELINUX=enforcing"의 부분을 "SELINUX=permissive"로 고쳐놓으면 다음번에 재부팅할때도 permissive로 보이게 된다. 설정후 다시 sestatus를 실행하면 Current mode와 Mode from config file 부분이 둘다 permissive로 되어 있을 것이다.

두번째로 오라클 설치에 필요한 공간을 확보해야 한다. 우선 RAM 공간부터 확인하자.
  • RAM 메모리 : 2G 이상 (최소 1G이지만 2G는 되어야 한다.)
  • SWAP 메모리 : RAM 크기 or 최대 2배 (RAM이 2G이면 SWAP도 2G정도면 충분하다.)

이제는 디스크 공간을 확인해야 한다.

  • Oracle 11g 압축을 풀어놓을 임시 공간 : 약 3G
  • Oracle 11g 프로그램을 설치할 공간 : 약 7G
  • Oracle 데이터베이스를 구축할 공간 : 약 4G
  • /tmp 디렉토리 : 최소 400M 정도의 빈 공간
위의 공간은 조금 여유있게 잡은 크기이다. 설치할 공간과 DB구축의 공간을 최소로 잡으면 약 8G정도에도 가능하다.(하지만 넉넉하게 잡기를 권장한다) 오라클은 일반적으로 /u01, /u02 이런 식의 디렉토리에 설치한다. 꼭 그래야 되는 것은 아니지만 이왕이면 관습적으로 /u01 디렉토리에 10G이상의 공간을 확보해서 DB까지 같은 곳에 넣어두면 간편하긴 하다. (하지만 제대로 설치해서 사용할 요령이라면 DB공간은 프로그램 설치 공간과 다른 파티션이나 디스크로 분리하는 것이 좋다.)

세번째로 오라클 설치에 필요한 각종 패키지의 버전을 확인해야 한다. 그러나 여기서는 확인하지 않고 넘어가도록 하겠다. 왜냐하면 설치 프로그램이 자동으로 패키지의 버전을 확인해주기 때문에 그때 가서 경고가 뜨는 패키지를 골라 설치해도 늦지 않기 때문이다.

네번째로 오라클 설치에 필요한 각종 시스템 자원의 커널 파라메터를 조정해야 한다. 오라클은 세마포어 개수, 공유메모리 제한 등등 여러가지를 조정해야 하는데 위와 마찬가지로 오라클 설치 프로그램이 자동으로 확인해준다. 더군다나 확인 후 부족한 자원의 파라메터를 조정할 수 있는 쉘 스크립트 프로그램을 작성해 주므로 그때 가서 간단하게 실행해서 설정하도록 한다.(귀찮게 미리 타이핑 하는 것은 시간 낭비다.)

다섯번째로 오라클 설치 및 구동에 필요한 그룹명과 유저를 만들어야 한다. 우선 root로 로그인 한다.
# groupadd oinstall
# groupadd dba
# useradd -g oinstall -G dba oracle
# passwd oracle
설치에 필요한 그룹은 oinstall, dba이며 유저명은 oracle 이다. oracle유저의 primay group은 oinstall이고, suppliment group은 dba이다. oracle 유저의 암호는 알아서 정하자. 유저가 만들어 졌으면 이번에는 /etc/pam.d/login 파일을 손봐야 한다.
참고로 /etc/pam.d/login 파일은 유저가 로그인 할 때 각종 테스트할 기능들을 정의하는 파일이다.

이 파일에 추가할 PAM 기능은 pam_limits.so 로서 유저가 로그인할 때 /etc/security/limits.conf에 정의된 자원제한값을 적용하는 기능이다. 오라클은 유저가 사용가능한 최대프로세스 개수, 최대 파일 개수를 기본값보다 크게 잡아줘야 하기 때문에 이 기능을 설정해줘야 한다. 주의할 점은 /etc/pam.d/login파일을 잘못 건드리면 새롭게 로그인이 안되는 불상사가 발생하므로 root 유저로 로그인된 terminal을 1개 여분으로 열어두자.

이제 /etc/pam.d/login을 열어서 "session   required  pam_limits.so" 라는 행이 있는지 확인하고, 없다면 맨 아래에 추가해두자. 설정이 완료된 /etc/pam.d/login 파일은 다음과 같다. 내용은 약간 다를수 있다. 맨 끝에 pam_limits.so 기능이 들어있는 행만 있으면 된다. (최근의 리눅스는 기본적으로 pam_limits.so가 적용되어있으므로 이 과정이 필요없다.)

# cat /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 pam_limits.so
설정이 다 되었으면 확인을 위해서 CTRL+ALT+F2를 눌러 콘솔로 나가든지, 혹은 ssh를 통해 자신의 서버에 oracle 유저로 로그인 해보자. 만일 로그인이 실패했다면 위의 설정중에 어딘가를 잘못 타이핑한 것이다. 미리 로그인해둔 터미널에서 재확인해보자.(만일 설정을 잘못했는데 실수로 로그아웃했다면 정상적인 방법으로는 로그인이 불가능해진다. 따라서 설치용 CD/DVD로 복구 모드로 들어가서 /etc/pam.d/login 파일을 다시 수정해야 한다.)

여섯번째로 오라클을 설치할 디렉토리와 권한을 조정해둬야 한다. 여기서는 /u01에 오라클을 설치하는 것으로 진행하겠다.(여기서는 미리 /u01에 충분한 파티션을 할당해 둔 것을 전제한다.)
# mkdir /u01/app
# chown -R oracle:oinstall /u01
이제 본격적인 설치를 위해서 X 윈도우를 다시 oracle 유저로 로그인 하자. 이제부터 특별한 언급이 없으면 모든 작업은 oracle 유저로 작업하는 것이다.

일곱번째로 오라클 환경변수를 설정해야 한다. 환경변수는 관습적으로 ~/.oraenv 파일명으로 만든다. 파일 내용은 다음과 같다.
ORACLE_BASE=/u01/app/oracle
ORACLE_SID=orcl
export ORACLE_BASE ORACLE_SID

ORACLE_SID는 오라클 데이터베이스 SID 값인데, 주고 싶은 값을 사용하면 된다. 최대 30자까지 가능하다. (설치시 기본 값은 orcl을 사용한다.) 파일을 만들었으면 로그인 할 때 반영되게 해야 하므로 bash runtime configuration인 .bashrc에 넣어줘야 한다. "echo ". ~/.oraenv >> ~.bashrc"라고 명령하면 된다.


1. 오라클 설치 프로그램 실행
오라클 설치 프로그램은 여러 개의 zip 파일로 압축되어있는데 다 합쳐서 약 2G가 좀 넘는다. 압축을 풀면 database 디렉토리가 보이는데 들어가보면 runInstaller 라는 실행파일이 있다. 실행해보자.

[oracle@localhost database]$ ./runInstaller 
Oracle Universal Installer 시작 중...

임시 공간 확인 중: 80MB 이상이어야 합니다.. 실제 728MB 성공
스왑 공간 확인 중: 150MB 이상이어야 합니다.. 실제 511MB 성공
모니터 확인 중: 최소 256 색상을 표시하도록 구성되어 있어야 합니다.. 실제 16777216 성공
다음에서 Oracle Universal Installer의 시작을 준비하는 중 /tmp/OraInstall2009-10-06_03-39-30PM. 기다리십시오.
위와 같은 메시지가 나오면 좀 기다려주자. 설치 프로그램 화면이 나오기 까지는 시스템에 따라서 수 분이 걸리는 경우도 있으니 다운되었다고 착각하여 터미널을 닫아버리는 잘못을 범하지는 말자.

간혹 폰트때문에 깨지는 경우가 있는데, 이는 jre버전때문이다. 예를 들어 아래와 같이 폰트가 깨지는 경우인지 확인하자.


이 경우에는 일단 오른쪽 맨 아래의 버튼을 눌러서 취소로 빠져나온뒤에 다음 그림처럼 jre 위치를 직접 지정하는 명령어로 다시 실행한다.

우선 jre의 위치를 파악해야 하는데, OpenJDK 패키지로 설치되어있다면 /usr/lib/jvm/jre에 있을 것이다. 이제 명령어를 ./runInstaller -jreLoc /usr/lib/jvm/jre 로 실행하면 한글이 제대로 나올 것이다. (참고로 아래 그림은 CentOS 6.4 이다.)




2. 데이터베이스 보안 갱신 구성


보안 설정에 대한 알림 메일을 받으려면 email 주소를 넣어주면 된다. Oracle Support에 유저를 등록한 경우라면 더 편리하지만 이도저도 아닌 그냥 테스트용으로 설치하는 경우는 "다음"으로 진행하면 된다.


3. 데이터베이스 설치 옵션

설치옵션에서는 3가지 설치옵션을 지정할 수 있다. 여기서는 데이터베이스 생성 및 구성으로 진행하는 것을 보이도록 하겠다.

- 데이터베이스 생성 및 구성 : 소프트웨어 설치 후 데이터베이스를 생성해준다.
- 데이터베이스 소프트웨어만 설치 : 소프트웨어만 설치하고 데이터베이스는 생성하지 않는다.
- 기존 데이터베이스 업그레이드 : 말그대로 업그레이드다. 구버전의 오라클이 설치되어있다면 업그레이드 시켜준다.



4. 시스템 클래스 설정
시스템 클래스 설정은 데이터베이스를 어떤 목적으로 구성할 것인지를 결정한다. 데스크탑용인지 서버용인지를 선택할 수 있다.

- 데스크톱 클래스 : 작은 규모용으로 설치한다.
- 서버 클래스 : 자동 백업 및 분산 복제등 여러가지 기능이 추가된다.

(4-A) 데스크톱 클래스를 지정한 경우 : 총 9개의 필드를 가진 설치 구성화면으로 넘어간다.
- Oracle Base : Oracle software가 설치될 기준 디렉토리이다. OUI(Oracle Universal Installer)가 자동으로 인식하기 위해서는 /u0[1-9]/app로 시작해야 한다.
- 소프트웨어 위치 : 오라클 DB 소프트웨어가 위치할 디렉토리로서 ORACLE_BASE/product/<버전>/dbhome_1로 자동 결정됩니다.
- 데이터베이스 파일 위치 : DB파일이 저장되는 곳
- 데이터베이스 버전 : Enterprise Edition, Standard Edition, Standard Edition One중에 하나로 설정한다.(각 버전의 특징은 Help참고)
- 문자 집합 : DB내에서 사용할 문자세트 = 국제화 규격에 따라 UTF-8 유니코드(AL32UTF8)로 변경하는 것을 추천
- OSDBA 그룹 : DBA 그룹
- 전역 데이터베이스 이름 : DB이름+도메인으로 구성된 전역 데이터베이스 이름
- 관리 비밀번호, 비밀번호 확인 : 비밀번호 8~30자가 되어야 하며, 대소문자와 숫자가 혼합되어야만 한다.(또한 사전상의 단어를 사용하면 안된다.)

문자집합을 KO16MSWIN949로 선택하면, Linux characterset인 UTF8과 충돌이 나서 화면에 한글이 제대로 표시되지 않으니, 주의해야 한다.

(4-B) 서버 클래스를 지정한 경우 : 우선 "단일 인스턴스 데이터베이스"와 "Real Application Clusters" 중에 하나를 선택해야 한다.
서버 클래스 설치에서는 저장 영역 유형과 ASMSNMP 비밀번호를 지정할 수 있게 된다.
- 저장 영역 유형 : 파일시스템, 원시 블록 장치 중에 선택할 수 있다.



5. 필요 조건 검사 수행
기본 설치를 지정한 뒤에는 필요조건 검사를 행하게 된다. 여기서 커널 파라메터, 사용자 자원 제한, 패키지 버전들을 검사해준다.
커널 파라메터와 사용자 자원 제한은 "수정 및 다시 확인"버튼을 누르면 자동으로 수정가능한 스크립트를 만들어 주기 때문에 패키지 버전이나 없는 패키지만 설치해주면 된다.


"수정 및 다시 확인" 버튼을 누르면 "수정 스크립트 실행"화면이 나타난다. 위의 경로의 runfixup.sh 파일을 root 계정의 권한으로 실행하면 된다.
위와 같이 runfixup.sh를 실행하면 각종 설정을 고쳐주게 된다. 수정되는 파일은 /etc/sysctl.conf와 /etc/security/limits.conf이다. runfixup.sh가 실행한 뒤에 "다시 확인"을 누르면 재검사를 하게 된다.
위에 그림을 보면 실패 상태가 3개가 나오는데 교체크기(스왑 공간), /tmp, pdksh 패키지가 실패라고 나온다. 현재 설치하려는 시스템은 RAM이 2GB이상이므로 설치중에 굳이 스왑 공간이 사용하지 않으므로 그냥 무시해도 된다. /tmp 디렉토리도 300MB이상이면 그냥 넘어가도 된다. 페도라에서는 pdksh대신에 mksh를 사용하므로 대신 mksh를 설치하면 된다.



6. 설치 옵션 요약
여기까지 설정한 것을 요약화면으로 보여준다. 이상한 점이 있다면 뒤로 가서 수정하고 오면 된다.
이상이 없다면 "완료"버튼을 눌러 설치를 시작한다.


7. 제품 설치 시작 (or 데이터베이스 생성)


처음 설치할때 데이터베이스 구성을 선택했다면 파일 복사가 끝나고 dbca가 작동하여 데이터베이스를 구성하게 된다. 테스트한 호스트인 E8400에서는 거의 50여분을 걸렸다.


데이터베이스를 구성하다보면 DB 유저의 암호를 정하는 창이 뜬다.

SYS와 SYSTEM 암호를 설정하고, 스크롤바를 더 내리면 SCOTT 유저가 있으므로 예제나 뭐 그런 것을 수행하려면 SCOTT유저의 암호도 넣어주자.

DB구성이 끝나면 root 유저로 해야할 작업을 root.sh란 쉘 스크립트로 만들어 준다. 이를 실행하고 원래 창으로 들어와서 확인을 하면 끝난다.
[root@localhost ~]# /opt/app/oracle/product/11.2.0/dbhome_1/root.sh 
Running Oracle 11g root.sh script...

The following environment variables are set as:
ORACLE_OWNER= oracle
ORACLE_HOME= /opt/app/oracle/product/11.2.0/dbhome_1

Enter the full pathname of the local bin directory: [/usr/local/bin]:
Copying dbhome to /usr/local/bin ...
Copying oraenv to /usr/local/bin ...
Copying coraenv to /usr/local/bin ...

Creating /etc/oratab file...
Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root.sh script.
Now product-specific root actions will be performed.
Finished product-specific root actions.

이제 DB 설치와 구성이 모두 끝났다. 위의 Enterprise Manager Database Control URL이 보인다. 웹 브라우저를 열어서 접속해보자.(간혹 접속이 안되는 경우는 방화벽 문제일 수 있다.)



8. 오라클 엔터프라이즈 매니저
EM에 관리목적으로 접속할 때는 sys유저의 SYSDBA권한으로 접속해야 한다.

emca화면은 웹 페이지이므로 직관적이다. 참고로 사용자 추가나 조정은 "서버">>"사용자"에서 하면 된다.

그리고 항상 주의할 점은 서버 끌때는 위의 화면에서 DB를 "작동 중지" 시킨 후에 꺼야한다. 안그러면 다음번 DB 기동시에 문제가 발생할 수 있다.


9. 오라클 환경 변수의 수정
앞에서 오라클 환경변수를 설정하기 위해서 ~/.oraenv 파일을 사용했는데, 설치후에는 이 파일을 수정해둬야 한다. 이유는 오라클의 바이너리 디렉토리를 PATH에 추가하고, Pro*C 컴파일등을 위한 라이브러리 경로를 추가해야 하기 때문이다. 따라서 앞의 3줄짜리 .oraenv를 다음과 같이 적절하게 수정한다.

ORACLE_BASE=/u01/app/oracle
ORACLE_SID=orcl
ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
export ORACLE_BASE ORACLE_HOME ORACLE_SID

if [ x`echo $PATH | grep $ORACLE_HOME/bin` = 'x' ]; then
echo "Setting oracle binary path: $ORACLE_HOME/bin"
PATH=$PATH:$ORACLE_HOME/bin
export PATH
fi

if [ x`echo $LD_LIBRARY_PATH | grep $ORACLE_HOME/lib` = 'x' ]; then
echo "Setting oracle LD_LIBRARY_PATH : $ORACLE_HOME/lib"
if [ x$LD_LIBRARY_PATH = 'x' ]; then
LD_LIBRARY_PATH=$ORACLE_HOME/lib
else
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
fi
export LD_LIBRARY_PATH
fi


수정 후에 로그인을 다시 해보면 Setting oracle binary path: /u01/app/oracle/product/11.2.0/dbhome_1/bin 와 Setting oracle LD_LIBRARY_PATH : /u01/app/oracle/product/11.2.0/dbhome_1/lib 메시지가 보일 것이다. 이제 어느 경로든지 sqlplus를 실행할 수 있게 될 것이다.


* 그 외 오라클 관련 문서는 아래의 웹 사이트에서 볼 수 있다.
http://www.oracle.com/technology/documentation

* History
2014.02.18 "1. 오라클 설치 프로그램 실행"에 runInstaller의 jreLoc 옵션 추가로 한글 깨짐 해결
2009.10.10 "9. 오라클 환경 변수의 수정" 추가
2009.10.07 첫번째 초안 작성

덧글

  • 비케이 2013/04/22 15:12 # 삭제 답글

    안녕하세요. 버츄얼박스에서 페도라 16을 설치하여 따라하였습니다.
    단 환경변수를 oraenv에 안하고 ~/.bashrc에 바로 입력하였습니다.
    그리고 다시 로그인하면 -bash: [: missing `]'라고 메시지가 출력됩니다.
    어디가 문제인지 모르겠습니다. 가르쳐주세요.
  • SY Kim 2013/05/01 22:40 #

    제가 천리안 능력이 없어서 비케이님의 .bashrc를 볼 수 없네요.
    코드를 보지 않는 한 해결해 드릴 수 없을 것 같네요. ^^

    (이글루스는 거의 사용을 안합니다. 티스토리 방명록이나 메일로 주세요)
댓글 입력 영역