$ 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
티스토리 뷰
Ubuntu 18.04 에 Oracle 12c 설치
설치 환경
Ubuntu : 18.04 LTS
Oracle : 12c Enterprise
Oracle 설치 파일 다운로드
아래의 링크를 클릭해 Oracle 12c Enterprise/Standard Editions를 클릭해 Linux x86-64를 클릭해 다운로드 합니다.
오라클 데이터베이스 그룹/유저 추가
먼저 관리자계정으로 접속한 후 필요한 그룹과 oracle계정을 추가합니다.
이제 필요한 그룹과 계정을 모두 생성 했습니다.
필수 패키지(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 .
다음은 커널 파라미터 설정입니다.
#### 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 계정 셋팅을 맨 끝 줄에 추가해줍니다.
#### 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
이제 호스트 이름을 정하도록 하겠습니다.
자신의IP 원하는호스트네임
다음 display 접속을 허용한 후 오라클 계정으로 전환합니다.
오라클은 CUI가 아닌 GUI로 설치를 하기 때문에 꼭 display접속 허용을 해야 합니다.
$ xhost +
$ su oracle
이제 oracle 계정에 대해 환경변수를 지정합니다.
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
이제 설치가 시작 됩니다.
email주소는 넣지 않아도 됩니다.
Install database software only를 선택한 후 Next를 클릭합니다.
Grid Installation Options에선 single instance database installation을 클릭후 Next를 클릭합니다.
Database Edition에서 Enterprise Edition선택 후 Next
계속 Next
패키지, 링크 걸기, 커널 파라미터를 잘 설정했다면 오류없이 깔리게 되는데
Error in invoking target '??' 형식의 에러가 난다면
$ 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화면이 나오게 됩니다.
그러면 터미널을 켜고 해당 스크립트를 실행시켜주면 됩니다.
$ /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
Listener Configuration 다음
Listener name 지정 다음
finish
데이터베이스 생성
이제 dbca명령어를 사용해 데이터베이스를 생성해 보도록 하겠습니다.
그냥 단순히 $ORACLE_HOME/bin으로 이동후 dbca를 실행하면 되지만 저는 LOST CONTACT에러가 발생해 다른 방법을 사용했습니다.
dbca는 $ORACLE_HOME/assistants/dbca 밑에 dbca.rsp라는 파일을 참고해 데이터베이스를 생성하게 되는데 이 dbca.rsp 파일을 oracle계정 홈디렉토리로 가져와 dbca.rsp파일 내용을 고치겠습니다.
$ mv $ORACLE_HOME/assistants/dbca/dbca.rsp ~/
$ vi dbca.rsp
vi 편집기로 열고 밑에 있는 내용을 자신의 정보에 맞게 추가해 줍니다.
[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%가 된다면 데이터베이스 생성이 정상적으로 된걸 확인 할 수 있습니다.