티스토리 뷰

Database/ORACLE

우분투 18.04 Oracle 12c 설치

서보민 2018. 9. 20. 21:26

Ubuntu 18.04 에 Oracle 12c 설치

설치 환경

Ubuntu : 18.04 LTS
Oracle : 12c Enterprise

Oracle 설치 파일 다운로드

아래의 링크를 클릭해 Oracle 12c Enterprise/Standard Editions를 클릭해 Linux x86-64를 클릭해 다운로드 합니다.

오라클 데이터베이스 그룹/유저 추가

먼저 관리자계정으로 접속한 후 필요한 그룹과 oracle계정을 추가합니다.

$ sudo su
$ groupadd -g 502 oinstall
$ groupadd -g 503 dba
$ groupadd -g 504 oper
$ groupadd -g 505 asmadmin
$ useradd -u 502 -g oinstall -G dba,asmadmin,oper -s /bin/bash -m oracle
$ passwd

이제 필요한 그룹과 계정을 모두 생성 했습니다.

필수 패키지(package)설치

리눅스에 오라클을 설치하면서 제일 고생했던 부분중 하나가 바로 이 부분 필수 패키지 설치입니다. 여기서 하나라도(?) 설치가 잘 안되면 뒤에 가서 무조건 고생합니다. 그래서 여러번 설치 결과 찾아 낸 방법은 아래 3개의 링크에서 소개하는 패키지들을 모두 설치하고 진행했습니다.

문제가 된다면 삭제하도록 하겠습니다.

위 3 개의 페이지에서 모두 가져온 패키지들이라 밑에 있는 패키지들을 설치하시면 됩니다.

$ apt install unixodbc unixodbc-dev unzip lsb-cxx pdksh sysstat gcc g++-multilib \
lib32ncurses5 lib32z1 ksh lesstif2 zlibc rpm libc6 libc6-dev libc6-dev-i386 libc6-i386 \
gcc-multilib less lib32z1 libelf-dev binutils libodbcinstq4-1 libpth-dev zenity \
libpthread-stubs0 libstdc++5 autotools-dev bzip2 elfutils g++ rlwrap libltdl-dev \
libxm4:i386 libuil4:i386 libmrm4:i386 libxm4 libuil4 libmrm4 libmotif-common \
libpthread-stubs0-dev build-essential expat gawk alien autoconf automake \
lesstif2-dev

$ apt install alien autoconf automake autotools-dev binutils doxygen
elfutils expat gawk gcc gcc-multilib g++-multilib libstdc++6 ksh less libtiff4
libtiff4-dev lib32z1 libaio1 libaio-dev libc6-dev libc6-dev-i386 libc6-i386
libelf-dev libltdl-dev libmotif4 libodbcinstq4-1 libodbcinstq4-1
libpthread-stubs0 libpth-dev libstdc++5 lsb-cxx make
pdksh openssh-server rlwrap rpm sysstat unixodbc unixodbc-dev x11-utils
zlibc unity-control-center libglu1-mesa libqt4-opengl
libpthread-workqueue0 libpthread-workqueue-dev libzthread-2.3-2 libzthread-dev
libegl1-mesa libegl1-mesa-drivers libgl1-mesa-dri
libglapi-mesa libpthread-stubs0-dev libaio-dev

$ apt install libc6-i386
gcc-multilib g++-multilib libc6-dev-i386 libstdc++6:i386
alien autoconf automake autotools-dev elfutils rpm rpm-common
build-essential debhelper expat gawk gsfonts-x11 html2text sysstat
unixodbc unixodbc-dev doxygen ksh openssh-server pax perl-doc rlwrap
lsb lsb-core zlibc
lib32z1-dev lib32ncurses5 libaio1 libaio-dev
libelf-dev libodbcinstq4-1 libpth-dev libpthread-stubs0-dev libpthread-workqueue0 libpthread-workqueue-dev
libtiff5-dev libzthread-dev libqt4-opengl:i386 libodbcinstq4-1:i386 libglu1-mesa:i386
sudo apt-get install -s cabextract
sudo add-apt-repository ppa:nilarimogard/webupd8
sudo apt update
sudo apt install wimtools libwim-dev -s libbz2-dev:i386

사전 설정 작업

먼저 위에 설치 했던 패키지들 중 일부를 심볼릭 링크를 걸어줍니다. 이 링크들은 오라클에서 참조하는 링크들입니다.

$ ln -s /usr/bin/basename /bin/basename
$ ln -s bin/bash /usr/bin/bash
$ ln -sf /bin/bash /bin/sh
$ ln -s /usr/bin/rpm /bin/rpm
$ ln -s /usr/bin/awk /bin/awk
$ ln -s /usr/lib/x86_64-linux-gnu /usr/lib64
$ ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 /lib64/libstdc++.so.6
$ ln -s /lib/x86_64-linux-gnu/libgcc_s.so.1 /lib64/libgcc_s.so.1
$ ln -s /usr/lib/i386-linux-gnu/libpthread_nonshared.a /usr/lib/libpthread_nonshared.a
$ ln -s /lib/lsb/init-functions /etc/init.d/functions
$ cd /lib64
$ sudo ln -s /lib/x86_64-linux-gnu/libgcc_s.so.1 .

다음은 커널 파라미터 설정입니다.

/etc/sysctl.conf
#### Oracle 12c 커널 파라미터들 ####
fs.suid_dumpable = 1
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 536870912
kernel.shmmni = 4096
# semaphores: semmsl, semmns, semopm, semmni
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default=4194304
net.core.rmem_max=4194304
net.core.wmem_default=262144
net.core.wmem_max=1048586

위 내용들은 자신의 PC사양에 맞게 설정해줘야 합니다. 꼭 자신의 PC사양에 맞게 설정해주세요.

밑 링크를 들어가면 어떻게 설정하는지 참고 하시면 됩니다.

다음은 /etc/security/limits.conf 에 oracle 계정 셋팅을 맨 끝 줄에 추가해줍니다.

/etc/security/limits.conf
#### oracle User Settings 4 Oracle 12c R2 ####
oracle       soft  nproc  2047
oracle       hard  nproc  16384
oracle       soft  nofile 1024
oracle       hard  nofile 65536
oracle       soft  stack  10240

다음 명령어를 통해 커널 파라미터 값들을 확인합니다.

$ /sbin/sysctl -p

이제 호스트 이름을 정하도록 하겠습니다.

vi /etc/hosts
자신의IP 원하는호스트네임

다음 display 접속을 허용한 후 오라클 계정으로 전환합니다.
오라클은 CUI가 아닌 GUI로 설치를 하기 때문에 꼭 display접속 허용을 해야 합니다.

$ xhost +
$ su oracle

이제 oracle 계정에 대해 환경변수를 지정합니다.

~/.bashrc
TMP=/tmp;
export TMP TMPDIR=$TMP;
export TMPDIR ORACLE_HOSTNAME=127.0.0.1;
export ORACLE_HOSTNAME
ORACLE_UNQNAME=DB12C;
export ORACLE_UNQNAME
ORACLE_BASE=/u01/app/oracle;
export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/12/dbhome_1;
export ORACLE_HOME
ORACLE_SID=SID;
export ORACLE_SID
PATH=/usr/sbin:$PATH;
export PATH
PATH=$ORACLE_HOME/bin:$PATH;
export PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:/usr/lib64;
export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib;
export CLASSPATH

ORACLE_HOSTNAME에는 자신의 IP와 SID는 원하는 SID를 지정해줍니다.

.bashrc 파일 수정내용이 반영이 되도록 다시 로드합니다.
$ source ~/.bashrc

위 과정은 CUI로 진행해도 됩니다. 이제부터는 설치 하기 때문에 GUI로 접속하면 됩니다.

이제 oracle 계정으로 맨 처음 다운로드 받았던 oracle 설치 파일을 oracle계정 홈으로 가져 와서 설치합니다.

당연히 oracle계정에는 sudo권한이 없기 때문에 관리자로 변경한뒤 복사해옵니다.

$ sudo su
$ mv or cp 해당경로 oracle계정/home/
$ unzip linuxx64_12201_database.zip ## database라는 디렉토리가 생깁니다.
$ mv database /tmp/
$ chown -R oracle:oinstall /tmp/database
$ chmod -R +x /tmp/database
$ sudo su oracle
$ /tmp/database/runInstaller

이제 설치가 시작 됩니다.

  1. email주소는 넣지 않아도 됩니다.

  2. Install database software only를 선택한 후 Next를 클릭합니다.

  3. Grid Installation Options에선 single instance database installation을 클릭후 Next를 클릭합니다.

  4. Database Edition에서 Enterprise Edition선택 후 Next

  5. 계속 Next

패키지, 링크 걸기, 커널 파라미터를 잘 설정했다면 오류없이 깔리게 되는데

Error in invoking target '??' 형식의 에러가 난다면

Error 해결
$ sudo ln -s $ORACLE_HOME/lib/libclntshcore.so.12.1 /usr/lib
$ sudo ln -s $ORACLE_HOME/lib/libclntsh.so.12.1 /usr/lib

$ cp $ORACLE_HOME/rdbms/lib/ins_rdbms.mk $ORACLE_HOME/rdbms/lib/ins_rdbms.bkp
$ cp $ORACLE_HOME/rdbms/lib/env_rdbms.mk $ORACLE_HOME/rdbms/lib/env_rdbms.bkp

$ sed -i 's/\$(ORAPWD_LINKLINE)/\$(ORAPWD_LINKLINE) -lnnz12/' $ORACLE_HOME/rdbms/lib/ins_rdbms.mk
$ sed -i 's/\$(HSOTS_LINKLINE)/\$(HSOTS_LINKLINE) -lagtsh/' $ORACLE_HOME/rdbms/lib/ins_rdbms.mk
$ sed -i 's/\$(EXTPROC_LINKLINE)/\$(EXTPROC_LINKLINE) -lagtsh/' $ORACLE_HOME/rdbms/lib/ins_rdbms.mk
$ sed -i 's/\$(OPT) \$(HSOTSMAI)/\$(OPT) -Wl,--no-as-needed \$(HSOTSMAI)/' $ORACLE_HOME/rdbms/lib/env_rdbms.mk
$ sed -i 's/\$(OPT) \$(HSDEPMAI)/\$(OPT) -Wl,--no-as-needed \$(HSDEPMAI)/' $ORACLE_HOME/rdbms/lib/env_rdbms.mk
$ sed -i 's/\$(OPT) \$(EXTPMAI)/\$(OPT) -Wl,--no-as-needed \$(EXTPMAI)/' $ORACLE_HOME/rdbms/lib/env_rdbms.mk
$ sed -i 's/^\(TNSLSNR_LINKLINE.*\$(TNSLSNR_OFILES)\) \(\$(LINKTTLIBS)\)/\1 -Wl,--no-as-needed \2/g' $ORACLE_HOME/network/lib/env_network.mk
$ sed -i 's/\$(SPOBJS) \$(LLIBSERVER)/\$(SPOBJS) -Wl,--no-as-needed \$(LLIBSERVER)/' $ORACLE_HOME/rdbms/lib/env_rdbms.mk
$ sed -i 's/\$(S0MAIN) \$(SSKFEDED)/\$(S0MAIN) -Wl,--no-as-needed \$(SSKFEDED)/' $ORACLE_HOME/rdbms/lib/env_rdbms.mk
$ sed -i 's/\$(S0MAIN) \$(SSKFODED)/\$(S0MAIN) -Wl,--no-as-needed \$(SSKFODED)/' $ORACLE_HOME/rdbms/lib/env_rdbms.mk
$ sed -i 's/\$(S0MAIN) \$(SSKFNDGED)/\$(S0MAIN) -Wl,--no-as-needed \$(SSKFNDGED)/' $ORACLE_HOME/rdbms/lib/env_rdbms.mk
$ sed -i 's/\$(S0MAIN) \$(SSKFMUED)/\$(S0MAIN) -Wl,--no-as-needed \$(SSKFMUED)/' $ORACLE_HOME/rdbms/lib/env_rdbms.mk
$ sed -i 's/^\(ORACLE_LINKLINE.*\$(ORACLE_LINKER)\) \($(PL_FLAGS)\)/\1 -Wl,--no-as-needed \2/g' $ORACLE_HOME/rdbms/lib/env_rdbms.mk
$ sed -i 's/\$LD \$LD_RUNTIME/$LD -Wl,--no-as-needed \$LD_RUNTIME/' $ORACLE_HOME/bin/genorasdksh
$ sed -i 's/\$(GETCRSHOME_OBJ1) \$(OCRLIBS_DEFAULT)/\$(GETCRSHOME_OBJ1) -Wl,--no-as-needed \$(OCRLIBS_DEFAULT)/' $ORACLE_HOME/srvm/lib/env_srvm.mk

$ sed -i 's/LDDISABLENEWDTAGS=-Wl,--disable-new-dtags/LDDISABLENEWDTAGS=-Wl,--no-as-needed,--disable-new-dtags/' $ORACLE_HOME/rdbms/lib/env_rdbms.mk
$ sed -i 's/LDDISABLENEWDTAGS=-Wl,--disable-new-dtags/LDDISABLENEWDTAGS=-Wl,--no-as-needed,--disable-new-dtags/' $ORACLE_HOME/crs/lib/env_has.mk;
$ sed -i 's/LDDISABLENEWDTAGS=-Wl,--disable-new-dtags/LDDISABLENEWDTAGS=-Wl,--no-as-needed,--disable-new-dtags/' $ORACLE_HOME/odbc/lib/env_odbc.mk;
$ sed -i 's/LDDISABLENEWDTAGS=-Wl,--disable-new-dtags/LDDISABLENEWDTAGS=-Wl,--no-as-needed,--disable-new-dtags/' $ORACLE_HOME/precomp/lib/env_precomp.mk;
$ sed -i 's/LDDISABLENEWDTAGS=-Wl,--disable-new-dtags/LDDISABLENEWDTAGS=-Wl,--no-as-needed,--disable-new-dtags/' $ORACLE_HOME/srvm/lib/env_srvm.mk;
$ sed -i 's/LDDISABLENEWDTAGS=-Wl,--disable-new-dtags/LDDISABLENEWDTAGS=-Wl,--no-as-needed,--disable-new-dtags/' $ORACLE_HOME/network/lib/env_network.mk;
$ sed -i 's/LDDISABLENEWDTAGS=-Wl,--disable-new-dtags/LDDISABLENEWDTAGS=-Wl,--no-as-needed,--disable-new-dtags/' $ORACLE_HOME/ldap/lib/env_ldap.mk;
$ sed -i 's/LDDISABLENEWDTAGS=-Wl,--disable-new-dtags/LDDISABLENEWDTAGS=-Wl,--no-as-needed,--disable-new-dtags/' $ORACLE_HOME/ord/im/lib/env_ordim.mk;
$ sed -i 's/LDDISABLENEWDTAGS=-Wl,--disable-new-dtags/LDDISABLENEWDTAGS=-Wl,--no-as-needed,--disable-new-dtags/' $ORACLE_HOME/plsql/lib/env_plsql.mk;
$ sed -i 's/LDDISABLENEWDTAGS=-Wl,--disable-new-dtags/LDDISABLENEWDTAGS=-Wl,--no-as-needed,--disable-new-dtags/' $ORACLE_HOME/ctx/lib/env_ctx.mk;
$ sed -i 's/LDDISABLENEWDTAGS=-Wl,--disable-new-dtags/LDDISABLENEWDTAGS=-Wl,--no-as-needed,--disable-new-dtags/' $ORACLE_HOME/sqlplus/lib/env_sqlplus.mk;

위 스크립트를 실행하고 재시도나 다시 설치하기를 진행하면 됩니다.

에러 없이 설치가 되면 설치 도중에 Execute Configuration scripts화면이 나오게 됩니다.

그러면 터미널을 켜고 해당 스크립트를 실행시켜주면 됩니다.

Execute Configuration scripts
$ /u01/app/oraInventory/orainstRoot.sh
$ /u01/app/oracle/product/12/dbhome_1/root.sh

스크립트를 실행후 다시 설치 화면으로 돌아와 OK를 클릭합니다.

그럼 이제 설치가 완료 되었습니다!

리스너 설정

일단 오라클 관련 명령어가 모여 있는 $ORACLE_HOME/bin으로 이동한 후 netca 명령어를 사용해 Listener 설정을 합니다.

$ cd $ORACLE_HOME/bin
$ ./netca
  1. Listener Configuration 다음

  2. Listener name 지정 다음

  3. finish

데이터베이스 생성

이제 dbca명령어를 사용해 데이터베이스를 생성해 보도록 하겠습니다.

그냥 단순히 $ORACLE_HOME/bin으로 이동후 dbca를 실행하면 되지만 저는 LOST CONTACT에러가 발생해 다른 방법을 사용했습니다.

dbca는 $ORACLE_HOME/assistants/dbca 밑에 dbca.rsp라는 파일을 참고해 데이터베이스를 생성하게 되는데 이 dbca.rsp 파일을 oracle계정 홈디렉토리로 가져와 dbca.rsp파일 내용을 고치겠습니다.

dbca.rsp
$ mv $ORACLE_HOME/assistants/dbca/dbca.rsp ~/
$ vi dbca.rsp

vi 편집기로 열고 밑에 있는 내용을 자신의 정보에 맞게 추가해 줍니다.

dbca.rsp
[GENERAL]
RESPONSEFILE_VERSION = "12.1.0"
OPERATION_TYPE = "createDatabase"
[CREATEDATABASE]
GDBNAME = "???"
DATABASECONFTYPE  = "SI"
SID = "???"
CREATEASCONTAINERDATABASE = "TRUE"
NUMBEROFPDBS = "1"
PDBNAME = "orapdb"
PDBADMINPASSWORD = "?????"
TEMPLATENAME = "General_Purpose.dbc"
SYSPASSWORD = "????"
SYSTEMPASSWORD = "????"
DATAFILEDESTINATION = "/oradata"
RECOVERYAREADESTINATION = "/FRA"
STORAGETYPE = "FS"
CHARACTERSET = "AL32UTF8"
NATIONALCHARACTERSET= "AL16UTF16"
LISTENERS = "LISTENER"
DATABASETYPE = "MULTIPURPOSE"
AUTOMATICMEMORYMANAGEMENT = "FALSE"
TOTALMEMORY = "1024"

설정을 마쳤으면 저장하고 밖으로 나옵니다.

dbca는 $ORACLE_HOME/assistants/dbca/dbca.rsp를 참조해 실행 한다고 했습니다. 하지만 저는 LOST CONTACT의 문제로 직접 고친 ~/dbca.rsp를 참조해 데이터베이스를 생성하도록 하겠습니다.

$ dbca -silent -createDatabase -responseFile ~/dbca.rsp

위 명령어를 실행하게 되면 1% 완료, 13%완료 등 진행상황이 나오게 되고 100%가 된다면 데이터베이스 생성이 정상적으로 된걸 확인 할 수 있습니다.


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2024/06   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
글 보관함