Linux에 Oracle 19c 설치하기 [rpm] {23년4월18일}
참고한 블로그
https://hapajay.tistory.com/63
[ORACLE] 오라클 19c 설치(CentOS 7, Virtualbox)
안녕하세요~~~ 하파제이 입니다😊 이번에는 ORACLE 19c를 리눅스에 설치해보는 내용입니다! 오라클 19c 설치하기에 앞서 가상환경 셋팅은 스펙에 맞게 다 준비되어 있으니 참고하시면 됩니다! https:
hapajay.tistory.com
이번에는 Linux에 Oracle 19c 버전을 설치해보려 하는데 rpm을 이용해서 진행해볼 예정이다.
원래는 zip을 통해서 진행해보고자 했지만, 현시점에서는 우선 순위로 블로그를 통해 공부하고 있는 입장이기 때문에 rpm으로 하는 방법에 대해서 진행해보도록 하겠다.
참고로 두가지 상황을 봐야하는데 첫번째는 AWS EC2 환경에서 진행하는 사람들의 경우 yum의 기능을 제대로 수행할 수 있기 때문에 문제없이 install이 가능하게 되겠지만, 회사측에서 진행할 경우에는 나의 경우는 red hat os에서 진행을 하고 있었기 때문에 백지 상태이므로 백지 상태인 경우의 사람들은 yum을 진행하기가 어려움을 많이 느낄 수 있을 것이다.
그렇기 때문에 아래의 블로그 정리글을 한번 읽어보고 실천해서 진행해보는 것을 추천한다.
https://widm2240.tistory.com/31
Linux에 Oracle 설치 진행 시 문제 해결 방법
현재 VMware를 통해 가상환경을 만든 상황에서 MobaXterm을 통해 Oracle을 설치하고자 하는 중이다. 내 이해가 맞다면 VMware에서만으로도 진행이 가능하지만, 현재 공부를 하고 있는 입장이기 때문에
widm2240.tistory.com
자 그럼 문제 없이 yum이 제대로 실행한다는 가정하에 oracle 19c를 진행해보도록 하겠다.
oracle-database-preinstall 설치 및 환경설정 확인{RPM}
처음에는 hosts를 설정을 잡아주고 가야하는데
[root@localhost ~]# vi /etc/hosts
[root@localhost ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.2.14 oracle ## 이부분을 추가해줘야 한다.
## 위의 10.0.2.14 의 경우는 등록할 필요가 없는 것으로 파악되었다. 오히려 있었을때 나중에 문제점이 발생되었다.
19c 자체에서는 rpm을 제공하기 때문에 어려운 수작업을 할 필요가 없어서 조금 수월하다는 것 같다.
#-y가 붙는 이유는 없이 설치할 경우 수동으로 yes 즉, y로 입력을 통해 수작업을 자동화 해주는 것.
yum -y install https://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm
처음에는 This system is not registered with an entitlement server. You can use subscription-manager to register. 라는 문장을 보고 아 또 뭐가 잘못된거 아냐? 라고 생각을 했었지만, 다행스럽게도 문제없이 설치가 진행되었으며,
마지막 문장에 comlete! 라는 단어 하나로 나를 매우 기쁘게 해주었다.
어느 한 블로그에서는 여러가지 명령어를 사용하였는데 아마 제대로 설치 여부에 대해서 확인차 입력을 한 것이지 않을까라는 그런 생각을 가지는데 혹시 모르니 사용했던 명령어를 적어보도록 하겠다.
# 해당 입력들은 나중에 공부를 하여 뜻을 이해해보고 난뒤에 수정으로 무슨뜻이 적어보도록 하겠다.
# cat이라는 명령어 자체는 실행이라는 느낌보다는 이런게 '존재한다'라는 느낌의 출력문을 나태내는 것.
cat /etc/sysctl.conf
# cat을 통해 etc/sysctl.conf 의 출력문을 표기
/sbin/sysctl -p
cat /etc/security/limits.d/oracle-database-preinstall-19c.conf
Oracle이 제대로 설치가 되었으니 학원에서도 리눅스에서 설정을 먼저 잡았을 당시에 oracle user를 생성했던 기억이 있는데 한가지 의문점이라는 것은 그냥 일반으로 설치를 한뒤에 그때 서야 생성해도 되지 않을까 라는 의구심을 가지게 되는데 아직 이부분에 대해서는 아는 부분이 없기 때문에 절차대로 해보려고 한다.
Oracle User 생성
아래의 코드 내용을 하는 이유는 현재 root는 최고권한자 인데 만약 새로운 사람이 존재할 경우에 usermod를 활용해 계정을 생성할 수 있다.
하지만 아직 -g 와 -G의 구분점은 잘 모르겠다.
## grep이라는 명령어에 대해 간단히 설명을 하자면, 찾기 기능같은 즉, ctrl + f 같은 존재라고 생각해주면 된다.
그래서 아래의 내용을 설명하자면, cat 은 출력문인데, /etc/passwd 폴더에서 oracle 이라는 것을 찾아라 하는 것이다.
[root@localhost ~]# usermod -g dba -G dba oracle
[root@localhost ~]#
[root@localhost ~]# cat /etc/passwd | grep oracle
oracle:x:54321:1900::/home/oracle:/bin/bash
[root@localhost ~]#
이렇게 생성된 oracle 이라는 것에 대해서는 즉 DB인데 보안 업체 즉 내가 현재 입사한 곳이기도 하지만, 보안이라는 것은 개인정보인 것이고 해당 정보를 통해 회원관리와 함께 여러가지가 필요로 한다는 것은 누구나 잘 알고 있는 부분인데, 문제가 만약 오픈되어 있는 상황이라면, 보안은 쉽게 뚫릴 수 밖에 없을 것이다.
그렇기 때문에 필요로 하는 것이 바로 보안을 강화 즉, 비밀번호를 설정해주는 것이다.
# oracle 유저에 대한 비밀번호 설정
[root@localhost ~]# passwd oracle
Changing password for user oracle.
New password: #새 비밀번호
Retype new password: # 새 비밀번호 확인
Sorry, passwords do not match. # 새 비밀번호와 새 비밀번호 확인이 다를 경우
New password:
Retype new password:
passwd: all authentication tokens updated successfully. # 제대로 완료
비밀번호 설정이 된다는 것을 알았다면, 차라리 처음부터 이렇게 하면 되지 않을까라는 생각에 서버 계정이었던 것을 입력했을때 비밀번호 입력부분이 나왔으나, 해당 가상환경 내에 오라클이든 서버 계정이든 상관없이 존재하지 않은 계정일 경우에는 Unknown user라 하며 입력 거부를 당하게 된다.
방화벽 해제하기
이제 유저가 생성되었으니 제대로 구동을 하기 전에 방화벽을 해제를 해줘야 한다.
내 생각은 외부에서 침투하지 말라는 뜻으로 기본적으로 방화벽이 설치되어 있을 것이다라는 추측을 하고 있었으나 업무를 보는 엔지니어의 입장에서 직접 방문이 아닌 외부에서 처리를 하느 경우가 있기 때문에 외부에서 접속을 하고자 할때 모든 차단을 제외하고 몇가지 차단을 하겠다는 의미로 받아들이면 될듯 싶다.
방화벽을 해제하기 위해서는 다음과 같다.
vi /etc/selinux/config
# 입력하고 나면 vi 상황이 나오는데 기존에는
---------------------------------------------------------------------------------------------
# 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 three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
---------------------------------------------------------------------------------------------
# 중간 SELINUX=enforcing
# 이것을 추가 > SELINUX=permissive
---------------------------------------------------------------------------------------------
# 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
SELINUX=permissive
# SELINUXTYPE= can take one of three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
---------------------------------------------------------------------------------------------
## 만약 내가 제대로 작성했는지 vi를 들어가기 귀찮다면 vi 대신에 cat 입력으로 명시된 것을 확인해볼 수 있다.
SELinux란? 보안이 강화된 리눅스를 말하는 것인데, 기존에 enforcing은 시행을 뜻하는데 permissive 관대하게 변화를 준 것이다.
방화벽을 해제한 것이 아닌 현재는 시스템에 대한 환경설정을 관대함으로 변경한 것이다.
이제 firewalld(방화벽)을 stop(멈춤) 작업을 시작할 예정이다.
systemctl stop firewalld
systemctl의 경우는 실행하는 명령어다.
## 공부를 하면서 느낀 것이지만, 학원에서 배웠던 것보다 많은 명령어들을 사용하게 되는데 한번 명령어에 대해서 공부를 해봐야 할것 같다는 생각이 든다. 공부를 한다는 것은 포스팅을 한다는 뜻!
[root@localhost ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@localhost ~]#
아마도 방화벽이 진행되고 있으니 stop으로 먼저 멈춘 후에 disable로 장애를 준다는 뜻으로 받아들이는 것인데 맞는지는 모르겠다.
Oracle 설치경로 설정하기
이제 오라클 설치 경로를 생성해야하는데 아마도 처음에 설치를 한게 아닌 해당 파일에 대해서 압축파일을 해제한 것 밖에 안된 것으로 보인다. 그렇기에 이제 폴더를 생성하고 하는데 exe 파일의 경우에는 자동으로 윈도우에 알아서 쑥쑥 설치를 해주지만, linux의 경우에는 참으로... 참... 불편한 녀석...
[root@localhost ~]# mkdir -p /ora19/app/oracle/product/19.0.0/db_home_1
[root@localhost ~]# mkdir -p /ora19/app/oradata
[root@localhost ~]# chown -R oracle.oinstall /ora19
[root@localhost ~]# chmod -R 775 /ora19
위의 코드 식들은 왜 해야하는지 명확히 알려지지 않았다.
https://victorydntmd.tistory.com/214
[CentOS] 권한 ( Permission ) 개념
리눅스는 multi user 시스템이기 때문에 여러 사용자가 파일을 공동으로 사용할 수 있습니다.그런데 자신의 비밀 파일을 다른 누군가가 접근하는 것은 원치 않을 수 있으며,또는 어떤 파일을 다른
victorydntmd.tistory.com
자세한 것은 위의 블로그를 통해서 확인해볼 수 있을 것 같다. 아마 이부분은 좀더 깊숙히 공부를 해야할 부분인것 같다.
사수님의 말로는 위의 명령어들이 생성하고 설정잡아주는 역할이라고 하는데 아직 배워야할 점이 참 많은 것 같다는 생각이 든다.
[root@localhost ~]# ls -lart LINUX.X64_193000_db_home.zip
ls: cannot access LINUX.X64_193000_db_home.zip: No such file or directory
위의 코드를 입력하게 된다면 보이는 것과 같이 찾을 수 없다는 메세지를 받아볼 수 있는데 이는 참고한 자료에서는 바로 such가 되었지만, 나의 경우는 그렇지 않았던 이유가 root라는 절대경로 그리고 상대경로가 따로 있는데 MobaXterm은 이전에 말했던 것처럼 filezila가 합쳐져 있기 때문에 보이기 쉽지만 거기서도 절대경로 상대경로 이런게 명시되어 있지 않아서 어려움을 많이 겪었다. 우선 나의 경우는 해당 절대경로에 파일을 넣고 싶어도 넣을 수 없었으며, 상대경로에 폴더를 넣어둔 상황이다.
그래서 root 상황에서 상대경로에 있는 zip파일을 아까 경로 설정때 만들었던 경로에 집어넣을 예정이다.
먼저 내가 넣어둔 zip파일이 있는 폴더로 옮겨서 들어가서 그곳에서 zip을 아래의 코드로 옮겨 넣는다.
# 나의 기존 zip파일은 /home/jslee2라는 폴더에 존재했었기 때문에 cd를 통해 이동하였다.
[root@localhost jslee2]# mv LINUX.X64_193000_db_home.zip /ora19/app/oracle/product/19.0.0/db_home_1/
# mv는 옮긴다는 뜻이며 옮긴 주소지는 생성경로를 설정한 곳이다.
[root@localhost jslee2]# cd /ora19/app/oracle/product/19.0.0/db_home_1/
[root@localhost db_home_1]# ls
LINUX.X64_193000_db_home.zip
[root@localhost db_home_1]# ls -lart
total 2987996
-rw-rw-r--. 1 jslee2 jslee2 3059705302 Apr 17 00:09 LINUX.X64_193000_db_home.zip
drwxrwxr-x. 3 oracle oinstall 23 Apr 17 22:40 ..
drwxrwxr-x. 2 oracle oinstall 42 Apr 17 23:25 .
현재 보면 위의 내용에서는 zip 파일에 대한 권한이 없는 것이기 때문에 여기서 권한을 부여해 줘야 한다.
# chown oracle.oinstall LINUX.X64_193000_db_home.zip
# ls -lart
-rw-r--r--. 1 oracle oinstall 3059705302 Apr 19 09:33 LINUX.X64_193000_db_home.zip
drwxrwxr-x. 3 oracle oinstall 23 Apr 20 09:22 ..
drwxrwxr-x. 68 oracle oinstall 4096 Apr 20 10:08 .
이렇게 해야 나중에 알집을 풀었을때 알집에 풀린 내용들의 권한을 oracle 계정이 가질 수 있게 되는 것이다.
해당 zip파일을 옮겼으니 다음 단계가 있다.
.bash_profile 설정하기
주의 해야할 것은 oracle의 계정이지만 본인의 서비스 계정으로 하면 되고 root가 아니니 주의를 하자.
root는 기본적인 설정으로만 잡혀있으므로 삭제를 한다거나 하면 expert LANG=C부터 윗줄까지만 남겨야 한다.
진짜 무슨 내용인지는 모르겠으나 공부가 필요한 부분이다.
[oracle@localhost ~]# vi .bash_profile
[oracle@localhost ~]# cat .bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/.local/bin:$HOME/bin
export PATH
export LANG=C
export ORACLE_HOSTNAME=oracle
export ORACLE_UNQNAME=oracle19
export ORACLE_BASE=/ora19/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19.0.0/db_home_1
export ORA_INVENTORY=/ora19/oraInventory
export ORACLE_SID=oracle19
export DATA_DIR=/ora19/app/oradata
export PATH=/usr/sbin:/usr/local/bin:$PATH
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/jlib:/$ORACLE_HOME/rdbms/jlib
export DISPLAY=xxx.xxx.xxx.xxx
# 본인의 pc ip 입력하기 < 복사하여 진행시 이부분 잊지말고 지우기
위의 코드를 입력하게 되면 cd $ORACLE_HOME을 입력시 db_home_1로 이동이 되는 것인데 나는 그게 안되었던 이유가 root에 적용이 되었기 때문에 문제가 발생되었던 것이다. 그러니 반드시 root에서 설정을 잡는게 아닌 서비스계정에서 진행을 다시 하는게 가장 좋다.
이제는 현재 ZIP파일이 저장되어 있는 db_home_1 폴더로 들어가서
## zip을 풀기전에 root를 통해 해당 폴더에 권한을 먼줘 주고 진행을 해줘야하는데 그렇지 않고 압축부터 풀게 된다면 해당 권한을 주지 않은 것으로 적용 되기 때문에 주의를 해줘야 한다. 필자의 경우는 db_home_1이라는 폴더에 압축풀기 및 프로그램을 설치할 예정이기 때문에 Oracle 설치경로 부분을 다시 한번 봐주길 바란다.
[oracle@localhost db_home_1]# unzip LINUX.X64_193000_db_home.zip
unzip 즉 압축풀기를 통해 zip파일을 풀어준다. 풀어준 후 제대로 권한 설정이 되었는지 확인을 하면 되는데
[root@localhost db_home_1]# ls -lart
total 2988068
-rw-r--r--. 1 oracle dba 852 Aug 18 2015 env.ora
-rw-r--r--. 1 oracle dba 2927 Oct 15 2016 schagent.conf
-rwxr-x---. 1 oracle dba 1783 Mar 9 2017 runInstaller
drwxr-x---. 14 oracle dba 4096 Apr 12 2019 OPatch
drwxr-x---. 7 oracle dba 69 Apr 17 2019 xdk
drwxr-xr-x. 3 oracle dba 19 Apr 17 2019 wwg
drwxr-xr-x. 4 oracle dba 31 Apr 17 2019 usm
drwxr-xr-x. 5 oracle dba 45 Apr 17 2019 suptools
drwxr-xr-x. 6 oracle dba 54 Apr 17 2019 srvm
drwxr-xr-x. 3 oracle dba 17 Apr 17 2019 sqlj
drwxr-xr-x. 4 oracle dba 41 Apr 17 2019 sqldeveloper
drwxr-xr-x. 3 oracle dba 18 Apr 17 2019 slax
-rw-r-----. 1 oracle dba 10 Apr 17 2019 root.sh.old.1
drwxr-xr-x. 3 oracle dba 21 Apr 17 2019 relnotes
drwxr-xr-x. 4 oracle dba 29 Apr 17 2019 racg
drwxr-xr-x. 5 oracle dba 39 Apr 17 2019 perl
drwxr-xr-x. 4 oracle dba 33 Apr 17 2019 owm
drwxr-xr-x. 3 oracle dba 19 Apr 17 2019 oss
drwxr-xr-x. 6 oracle dba 52 Apr 17 2019 ord
drwxr-xr-x. 4 oracle dba 34 Apr 17 2019 oracore
drwxr-xr-x. 7 oracle dba 65 Apr 17 2019 opmn
drwxr-xr-x. 5 oracle dba 42 Apr 17 2019 olap
drwxr-xr-x. 5 oracle dba 46 Apr 17 2019 nls
drwxr-xr-x. 4 oracle dba 31 Apr 17 2019 mgw
drwxr-xr-x. 9 oracle dba 98 Apr 17 2019 md
drwxr-xr-x. 10 oracle dba 112 Apr 17 2019 ldap
drwxr-xr-x. 3 oracle dba 18 Apr 17 2019 has
drwxr-xr-x. 3 oracle dba 19 Apr 17 2019 dv
drwxr-xr-x. 3 oracle dba 20 Apr 17 2019 diagnostics
drwxr-xr-x. 3 oracle dba 20 Apr 17 2019 demo
drwxr-xr-x. 3 oracle dba 19 Apr 17 2019 dbjava
drwxr-xr-x. 3 oracle dba 20 Apr 17 2019 data
drwxr-xr-x. 7 oracle dba 71 Apr 17 2019 cv
drwxr-xr-x. 3 oracle dba 18 Apr 17 2019 css
drwxr-xr-x. 6 oracle dba 55 Apr 17 2019 crs
drwxr-xr-x. 5 oracle dba 52 Apr 17 2019 R
drwxr-xr-x. 6 oracle dba 78 Apr 17 2019 plsql
drwxr-xr-x. 2 oracle dba 22 Apr 17 2019 dbs
drwxr-xr-x. 2 oracle dba 33 Apr 17 2019 utl
drwxr-xr-x. 2 oracle dba 29 Apr 17 2019 instantclient
drwxr-xr-x. 13 oracle dba 198 Apr 17 2019 dmu
drwxr-xr-x. 3 oracle dba 35 Apr 17 2019 ucp
drwxr-xr-x. 3 oracle dba 35 Apr 17 2019 jdbc
drwxr-xr-x. 2 oracle dba 26 Apr 17 2019 QOpatch
drwxr-xr-x. 4 oracle dba 66 Apr 17 2019 ords
drwxr-xr-x. 5 oracle dba 119 Apr 17 2019 sdk
drwxr-xr-x. 6 oracle dba 4096 Apr 17 2019 apex
drwxr-xr-x. 8 oracle dba 101 Apr 17 2019 odbc
drwxr-xr-x. 2 oracle dba 4096 Apr 17 2019 jlib
drwxr-xr-x. 4 oracle dba 30 Apr 17 2019 drdaas
drwxr-xr-x. 11 oracle dba 119 Apr 17 2019 ctx
-rwx------. 1 oracle dba 786 Apr 17 2019 root.sh.old
drwxr-xr-x. 10 oracle dba 106 Apr 17 2019 network
drwxr-xr-x. 5 oracle dba 41 Apr 17 2019 hs
drwxr-xr-x. 9 oracle dba 93 Apr 17 2019 assistants
drwxr-xr-x. 6 oracle dba 53 Apr 18 2019 sqlplus
-rwx------. 1 oracle dba 638 Apr 18 2019 root.sh
drwxr-xr-x. 8 oracle dba 226 Apr 18 2019 oui
drwxr-xr-x. 5 oracle dba 191 Apr 18 2019 deinstall
drwxr-xr-x. 4 oracle dba 87 Apr 18 2019 clone
drwxr-xr-x. 2 oracle dba 102 Apr 18 2019 addnode
drwxr-xr-x. 4 oracle dba 236 Apr 18 2019 sqlpatch
drwxr-xr-x. 3 oracle dba 28 Apr 18 2019 .opatchauto_storage
drwxr-xr-x. 5 oracle dba 188 Apr 18 2019 .patch_storage
drwxr-xr-x. 13 oracle dba 140 Apr 18 2019 rdbms
drwxr-xr-x. 6 oracle dba 56 Apr 18 2019 precomp
drwxr-xr-x. 4 oracle dba 12288 Apr 18 2019 lib
drwxr-xr-x. 6 oracle dba 219 Apr 18 2019 jdk
drwxr-xr-x. 8 oracle dba 82 Apr 18 2019 javavm
drwxr-x---. 13 oracle dba 219 Apr 18 2019 inventory
drwxr-xr-x. 2 oracle dba 8192 Apr 18 2019 bin
drwxr-xr-x. 10 oracle dba 4096 Apr 18 2019 install
-rw-r--r--. 1 oracle oinstall 3059705302 Apr 19 09:33 LINUX.X64_193000_db_home.zip
drwxrwxr-x. 3 oracle oinstall 23 Apr 20 09:22 ..
drwxrwxr-x. 68 oracle oinstall 4096 Apr 20 10:08 .
[root@localhost db_home_1]#
여기까지 했다면 모든 사전 작업은 끝난 샘이니 이제 windows에서의 exe 프로그램을 실행하듯이 install 진행을 다음 포스팅에 적어보도록 하겠다.