일반 RedHat8.0 + Oracle 9i

황제낙엽 2003.10.07 13:41 조회 수 : 90 추천:101

sitelink1  
sitelink2  
extra_vars5  
extra_vars6  
1. Oracle9.2.0 for RedHat8.0 설치

(1) 서버로 선택해 설치 했고 사용언어 선택은 영어와 한국어을 선택해준 다음 오라클을 설치할 때 만 일단 영어를 기본언어로 설정해주고 인스톨이 끝나면 다시 기본언어를 한글로 바꾸었다.
  이는 확인되진 안았지만 한글로 설치하는 경우 오라클 인스톨의 후반부에서 Oracle Database Configuration Assistant 에서 에러가 난다는 걸 들었기 때문이다.
  패키지 그룹 선택은 X윈도우 시스템, GNOME 데스크탑 환경, 편집기, 그래픽 인터넷, 텍스트 기반 인터넷, 서버설정도구, Windows 파일 서버, FTP 서버, SQL데이터베이스서버, 네트워크 서버, 개발용 도구(이걸 설치하면 아래의 오라클을 위한 필수 RPM 5개중 4개가 설치가 미리 되므로 조금은 수고를 덜 수 있을 것이다.), 커널 개발, 관리도구, 시스템도구, 인쇄지원 이다.
  파티션은 디스크 드루이드에서 스왑 파티션 1기가 /tmp 디렉토리에 1기가를 주고 나머진 /로 할당했다. 왜냐하면 오라클을 사용하기 위해서이다. 그리고 오라클을 다운 받자.
  주소는 http://otn.oracle.com/software/products/oracle9i/htdocs/linuxsoft.html 이다.
  파일명은 lnx_920_disk1.cpio.gz, lnx_920_disk2.cpio.gz(2), lnx_920_disk3.cpio.gz 이다.
  다운 받은 파일의 압축을 풀자.

  zcat lnx_920_disk1.cpio.gz | cpio -idmv
  zcat lnx_920_disk2.cpio.gz | cpio -idmv
  zcat lnx_920_disk3.cpio.gz | cpio -idmv

  이렇게 하면 각각 Disk1 Disk2 Disk3 라는 디렉터리가 생기며 압축이 풀린다.
  위처럼 하면 오직 하드디스크에 복사해서 인스톨 할 수밖에 없지만 mkisofs 라는 유틸을 사용하면 위의 Disk1 Disk2 Disk3 각각의 디렉토리를 iso 파일로 변환시킨후 그걸 윈도우에서 cd 로 구울수 있다. ( http://rpmfind.net 에서 mkisofs 라고 검색하면 구할수 있다.)
  명령어는 mkisofs -r -o /디렉토리/이미지화일명img /백업할 디렉토리 예를 들어 /moviez/movie.avi를 iso 이미지화 시키려면 mkisofs -r -o /cd-img/movie.img /moviez/ 라고 치면 된다. (이거 이 화면에서 깨져 보이는데 그냥 말로 설명하겠습니다. mkisofs 다음에 한칸 띄고 그냥 슬래쉬 하고 알파벳 알 한 칸 띄고 또 슬래쉬 하시고 알파벳 오 라고 치신뒤 한 칸 띄고 이미지화일명 한 칸 띄고 백업할 디렉토리를 치시면 됩니다.)
  그리고 리눅스에서 만들어진 iso 파일을(리눅스와 윈도우의 Dual부팅 환경이라는 전제하에) 윈도우의 파티션을 mount 한 다음 윈도우 파티션으로 복사한 후에 cd로 레코딩 하면 된다.

  이렇게 해서 만들어진 CD 에서도 오라클을 인스톨 할 수 있는데 반드시 gui 그래픽화면에서 ./runInstaller 을 실행해야만 한다. 그 다음 cd 를 교체하라는 메시지가 나올 때 root 권한으로 터미널 창에서 umount 시킨뒤 cd 교체하고 다시 mount 시켜주면 된다.
  만일 text 환경의 /mnt/cdrom 에서 ./runInstaller을 실행시키면 cd 를 교체하지 못해 인스톨을 못하게 된다.

(2) 오라클을 설치하기 위한 준비

  필수 RPM 화일들 설치순서::::::::::::::::::
   1) cpp-3.2-7
   2) binutils-2.13.90.0.2-2
   3) kernel-headers-2.4.19-5cl
   4) glibc-devel-2.2.93-5
   5) gcc-3.2-7
  :::::::::::::::::::::::::::::::::::::::::::::::::::::

  리눅스용 오라클은 설치시에 Linking 까지 같이 하므로 반드시 그에 따른 Library 가 필요하다. 위의 RPM 들이 그것인데 만일 설치 안 한 RPM 들이 있다면 Linking 할 때 Invoke 에러를 접하게 될 것이다. 위의 RPM 들은 RedHat8.0 CD나 http://rpmfind.net 에서 구할수 있다. 여기서 위의 것들을 설치할 때 의존성이 문제가 되므로 설치 순서를 따르는 게 편리할 것이다. 참고로 rpm 설치 명령어는 #rpm -i 패키지 이름이다. 그리고 내 리눅스 서버에는 kernel-headers가 설치되어 있지 않았고 kernel-headers 인스톨시 glibc-kernheaders-2.4-7.20 과 충돌하여 에러가 났는데 #rpm -e --nodeps glibc-kernheaders-2.4-7.20 명령을 내려 삭제한 후 다시 rpm -i kernel-headers-2.4.19-5cl.i386.rpm 을 해라. 이제 잘 될 것이다. 위의 것들이 제대로 설치 되었는지 확인하려면 다음의 명령을 사용한다.

  rpm -q gcc cpp glibc-devel kernel-headers binutils

(3) 설치가 끝나면 sun에서 리눅스용 j2sdk-1_4_1_01-linux-i586-rpm.bin 파일을 구해서 Terminal 창에서 위의 파일을 sh ./j2sdk-1_4_1_01-linux-i586-rpm.bin 이라고 치면 sun의 자바사용 약관이 나오는데 마지막에 yes라고 치면 압축이 풀리며 j2sdk의 rpm 파일이 나온다.
  여기서 rpm -i 파일 명을 치면 인스톨이 되는데 /usr/java 에 있다. 이걸 /usr/local/ 로 이동시킨 뒤에 ln -s /usr/local/j2sdk1.4.1_01 /usr/local/java로 심볼릭 링크(윈도우의 바로 가기와 유사)를 걸어주었는데 이유는 나중에 JVM을 업그레이드할 때 설정 파일의 변경을 미연에 방지하기 위해서이다.(어쨌거나 나중에 버전이 어떻게 바뀌든지 디렉토리명은 무조건 Java 아닌가..)
  그리고 path를 잡아주어야 된다.
  /etc/profile은 전체 시스템을 위한 환경설정파일이다. vi /etc/profile 이라고 치면 편집이 가능하다.

  # /etc/profile

  #System wide environment and startup programs, for login setup
  #Functions and aliases go in /etc/bashrc
  -RedHat8.0을 설치한 뒤 /etc/profile을 열면 위의 내용이 보일 것이다. 위의 줄에 바로 이어서 다음과 같이 적어준다.-

  # For Java
  export JAVA_HOME=”/usr/java/j2sdk1.4.2_01”
  export PATH=$JAVA_HOME/bin:.:$PATH

  # For Oracle
  export ORACLE_HOME=/opt/oracle/product/9.2.0
  export PATH=$PATH:$ORACLE_HOME/bin

  # For bash shell
  export CLASSPATH=$CLASSPATH:/java/classes:/home/tchin/myclasses

  (만일 Path에 추가할 디렉터리가 있다면 export PATH=$JAVA_HOME/bin: .:$PATH ) 밑줄친 부분에 추가해주고 끝에 : 만 붙여주면 된다. 예를 들어 export PATH=$JAVA_HOME/bin:$ORACLE_HOME/bin:.:$PATH 이런 식으로 하면 된다.)
  source /etc/profile 라고 치면 리부팅 없이 곧바로 변경내용을 반영할 수 있다.
  저장하고 빠져나온 뒤 java -version 이라고 쳐서 제대로 나오는지 확인해 보자.

(4) 오라클이 작동하기 위해선 리눅스의 공유메모리를 확장해야만 된다.
  # cat /proc/sys/kernel/shmmax 라고 치면 33554432 라는 수치가 나올 것이다.이걸 확장하려면 echo ‘expr 1024 * 1024 * 1024’ > /proc/sys/kernel/shmmax 라고 하면 된다.
  그러나 매번 리눅스를 부팅할 때 마다 이렇게 하는 건 너무 번거롭다. 따라서 아래 처럼
  /etc/sysctl.conf에서 kernel.sysrq = 0 밑에 kernel.shmmax=1073741824 을 추가한다.

  kernel.sysrq = 0
  kernel.shmmax = 1073741824

  이렇게 말이다. 그러면 시스템이 부팅할 때 마다 자동으로 위의 수치가 적용이 된다.
  그 다음에 root 권한으로 다음을 수행한다.

  groupadd oinstall
  groupadd dba
  useradd -g oinstall -G dba oracle
  passwd oracle
  (oracle 계정을 위한 암호설정을 하라.)

  mkdir /opt/oracle (오라클만을 위한 디렉터리를 하나 생성하는 게 좋다.)

  그 다음 소유권을 Root에서 oracle 계정으로 이전 해 주어야 된다. 왜냐하면 Root 권한으로 생성된 /opt/oracle 폴더는 oracle 계정에서만 실행되는 UniversalInsaller 가 Access 할수 없기 때문이다.

  chown -R oracle.oinstall /opt (오라클계정으로 권한 양도)
  chown -R oracle.oinstall /opt/oracle (오라클계정으로 권한 양도)

  ls -l opt 와 ls -l oracle 을 해서 소유자와 소유그룹이 다음과 같은지 꼭 확인하라.
  drwxr-xr-x 2 oracle(소유자) oinstall(소유그룹) 4096 Jan 23 02:00 oracle

  그렇지 않으면 중간에 오라클의 UniversalInstaller가 oracle 폴더에 폴더를 생성할 수 없다는 에러를 낸다. 이 에러를 한번 내면 UniversalInsaller를 빠져나와 다시 인스톨을 해도 *.loc 에러를 낸다. 그러므로 /opt/oracle 폴더를 아예 지우고 처음부터 다시 폴더를 만들자.
  나는 실험적으로 그냥 무시 버튼을 누르고 계속 설치했다. 이게 어떤 영향을 미치는지 지켜보았는데 Configuration Tools 과정에서 Oracle Database Configuration Assistant가 경로를 못 찾고 에러를 내었다. 그런데 내 경험으로는 위처럼 권한을 양도해도 에러가 나는 수가 있다.
  그럴 때는 그냥 마음 편하게

  chmod 777 /opt
  chmod 777 /opt/oracle

  을 해서 아무나 읽고 쓰게 만들고 인스톨이 다 끝난 후에 다시 오라클 계정으로 권한을 양도해주자.


(5) /home/oracle밑의 .bash_profile를 Texteditor로 불러 아래를 추가한다. 만일 미리 작성해 둔 TXT파일이 있어 그걸 열고 마우스로 Drag 해서 추가했다면 vi에디터로 다시 .bash_profile을 열어보면 복사된 각각의 행의 끝에 " ^M " 이 있을 것이다.
  이걸 다 지우자. 참고로 vi 에디터에서 글자를 입력하려면 i 를 누르면 되고 작업이 끝나면 esc를 누르고 wq! 를 쳐야 저장이 되며 빠져 나온다. 그냥 저장 없이 나오려면 q! 라고 친다.

  # Oracle Environment

  export ORACLE_BASE=/opt/oracle
  export ORACLE_HOME=/opt/oracle/product/9.2.0
  export ORACLE_SID=jx239
  export ORACLE_TERM=xterm
  # export TNS_ADMIN = Set if sqlnet.ora, tnsnames.ora, etc. are not in $ORACLE_HOME/network/admin
  export NLS_LANG=AMERICAN_AMERICA.US7ASCII 또는 KO16KSC5601
  export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
  LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
  LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
  export LD_LIBRARY_PATH

  # Set shell search paths
  export PATH=$PATH:$ORACLE_HOME/bin

  #CLASSPATH
  CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
  CLASSPATH=$CLASSPATH:$ORACLE_HOME/network/jlib

  여기까지 했으면 shutdown -h now 명령으로 컴퓨터를 끈 뒤 다시 시작한다. 그리고 oracle 계정으로 로그인 한다. Terminal을 띄운 뒤 su 명령으로 root로 로그인 하자.
  그리고 rpm -q gcc cpp glibc-devel kernel-headers binutils을 실행해서 위에서 언급한 rpm 패키지들이 다 있는지 확인하고 cat /proc/sys/kernel/shmmax 명령을 해서 1073741824 인지 확인하자. 그리고 oracle계정으로 Disk1/밑의 ./runInstaller을 실행하자
  인스톨 화면이 뜨면 지시에 따르면 된다. UNIX Group Name은 oinstall을 넣는다. dba도 한때 사용되었으나 보안상의 문제로 oinstall 을 쓴다.
  orainstRoot.sh라는 스크립트를 실행하라는 메세지가 나오면 한텀을 띄워서 su root하여 root권한으로 sh /tmp/orainstRoot.sh를 실행시킨다.
  중간에 Available Products 에서 Product Languages를 눌러 반드시 한국어를 추가하도록 한다. Database identification 에선 SID가 등장한다. 이건 하나의 물리적 시스템 내에서 오라클 데이터베이스를 식별할수 있도록 유일한 이름으로 지어준다. 한마디로 한대의 컴퓨터에 여러 개의 오라클 데이터베이스를 생성할 경우 각각을 구분해주기 위해서 그러는 것이다. 나는 SID는 ora1 이라 하고 Global Database Name은 ora1.yountaesik.com으로 해주었다. 대개 SID에 도메인 네임을 덧붙여 Global Database Name을 구성한다.
  그 다음 데이터베이스에서 사용할 문자SET을 지정하는 항목이 나온다. 보통은 US7ASCII를 많이 사용한다. 왜냐하면 호환성이 제일 우수하기 때문이다. 순수하게 한글만 쓸 거라면 O16KSC5601를 선택하라. 그러면 Table 이름까지 한글로 만들 수 있다.
  jdk홈 디렉토리를 설정하고 next하면 Install & Linking시작...   만일 실수로 한글을 추가하지 못하고 그냥 지나쳤다면 아래 분이 적은 방법이 있다.

  오라클816 언어셑 변경방법 (한글이 ????로 나올때)
  언어셑(characterset)은 설치때 선택을 합니다.
  그런데 뭐 항상 사람일이 그러하듯이 그게 안먹힐 경우도 있습니다.
  (이번의 경우와 같이 ㅡㅡ^)

  원칙적으로는 변경이 안되도록 되어 있습니다.
  꼼수가 있더군요. 하지만 새로 지우고 깔기를 원장하는 .. ^^;;
  하튼 이런 방법도 있습니다.

  PHP로 오라클 연동할때 한글이 ???? 로 보이면 다음과 같이 확인을 해보시기 바랍니다.

  1./etc/profile 과 /root/.bash_profile 과 오라클 DBA 계정의 .bash_profile 에 다음의 라인이 적용되어 있는지

  export NLS_LANG=AMERICAN_AMERICA.KO16KSC5601


  2. 부팅순서가 오라클->아파치 순으로 되었는지

  3. DB자체의 언어셋의 설정에 문제가 없었는지


  저는 3번에서 걸렸더군요.. 푸푸푸푸
  DB자체의 언어셑의 확인 및 수정법은 다음과 같습니다.

  ------------------------------------------------------------
  확인
  ------------------------------------------------------------
  $svrmgrl
  SVRMGRL> connect internal
  SVRMGRL> select * from v$nls_parameters;

  PARAMETER VALUE
  -------------------------- -------------------------
  NLS_CHARACTERSET KO16KSC5601 (or US7ASCII)


  쭈욱 나오고 파라메타 중에서 NSL_CHARACTERSET 부분을 봅니다.
  이거이 자신이 .profile 에 적어넣은 언어셑의 뒷부분과 일치하는지 봅니다. 이게 다를 경우에는 둘중에 하나를 일치하게 변경을 해야겠죠?
  저는 그냥 심심풀이로 DB의 내용을 UPDATE 했습니다.
  
  ------------------------------------------------------------
  수정
  ------------------------------------------------------------
  SVRMGR> startup
  SVRMGR> connect intenral
  SVRMGR> update sys.props$ set value$='KO16KSC5601' where name='NLS_CHARACTERSET';
  SVRMGR> update sys.props$ set value$='KO16KSC5601' where name='NLS_NCHAR_CHARACTERSET';
  SVRMGR> commit;
  SVRMGR> shutdown
  SVRMGRL>startup


  이렇게 하니깐 한글이 정상적으로 출력이 됩니다.
  기쁩니다.. 푸헤헤헤헤헤



(6) 설치하는 중에 아래와 같은 에러가 발생할 것이다.
  "Error in invoking target install of makefile /opt/oracle/product/9.2.0/ctx/lib/ins_ctx.mk"
  이 에러가 발생하면 /opt/oacle/product/9.2.0/ctx/lib/env_ctx.mk파일을 열어 INSO_LINK를 찾아 $(LDLIBFLAG)dl을 추가한다. 아래처럼 말이다.

  INSO_LINK = -L$(CTXLIB) $(LDLIBFLAG)m $(LDLIBFLAG)dl $(LDLIBFLAG)sc_ca $(LDLIBFLAG)sc_fa $(LDLIBFLAG)sc_ex $(LDLIBFLAG)sc_da $(LDLIBFLAG)sc_ut $(LDLIBFLAG)sc_ch $(LDLIBFLAG)sc_fi $(LLIBCTXHX) $(LDLIBFLAG)c -Wl,-rpath,$(CTXHOME)lib $(CORELIBS) $(COMPEOBJS)

  주의할 것은 만일 Text Editor로 했을 경우 띄어쓰기를 해도 표시가 안되는데 반드시 띄어 쓰는 것을 철저히 해야 한다. 이렇게 스페이스 바 누르고 $(LDLIBFLAG)dl를 쓰고 다시 스페이스 바를 눌러 띄어쓰기를 해준다. 그리고 에러메시지의 retry를 누른다. 주의할 점은 에러를 수정할 때 한번에 성공해야 한다. 만일 retry 를 1번이상 누르면 버튼이 오버라이딩이 되어버려 수정한 것을 제대로 반영 못해 오라클을 다시 깔아야 된다.
끝나면 /opt/oracle/product/9.2.0/root.sh스크립트를 실행하라는 Setup Privileges창을 보게 된다. 실행하고 OK버튼 클릭. (난 파일이 없었다 ㅜ_ㅜ)
  이렇게 하고 설치가 다 되면 다시 리부팅 한 뒤에 ORACLE 계정으로 로그인 한 뒤
  # sqlplus /nolog
  SQL> connect / as sysdba
  SQL> startup => 오라클 DB 의 시작
  SQL>select * from v$version; => 오라클 DB의 인스턴스의 버전 확인

  오라클을 종료하려면
  # sqlplus /nolog
  SQL> connect / as sysdba
  SQL> shutdown immediate

  오라클을 시작하고 종료하려면 반드시 oracle 계정으로 로그인 해야만 된다. 그리고 일단 시작되면 다른 계정의 유저들도 오라클을 사용할 수 있다.
  여기까지만 하면 일단 오라클은 사용이 가능하다. 하지만 외부에서 오라클에 접속하기를 원한다면 오라클에 리스너를 달아주어야 한다. 또한 컴퓨터를 켤 때와 끌 때 자동으로 오라클이 시작되고 종료되게도 할 수 있다.

  리스너 띄우기
  #lsnrctl start
  리스너 죽이기
  #lsnrctl stop