[CentOS] Oracle 설치하기
- Computer/기타
- 2023. 8. 29.
Oracle 설치하기 전 사전준비
💿 운영 환경
- 운영체제: RHEL 7
- 아키텍처: x86_64
- 펌웨어 모드: UEFI
💾 최소 사양
- RAM: 4GB 이상
- Storage: 30GB 이상 (OS + ORACLE 설치 시, 약 20GB 사용)
📝 Oracle 사양
- 제품명: Oracle Database 19c
- 버전: 19.3.0.0
- 설치 파일: LINUX.X64_19300_db_home.zip ( ORACLE 정식 사이트 제공 )
🖥️ 서버 환경
인터넷 가능
root 계정 사용
ORACLE 설치파일 다운로드
https://www.oracle.com/kr/database/technologies/oracle19c-linux-downloads.html
Oracle을 설치하기 위해서는 linux용 Oracle Database를 설치해야 한다.
✔️ 본 글의 설명은 Oracle 파일을 풀어서 사용한다.
윈도우에서 설치받은 Oracle은 다양한 SFTP 프로그램을 이용해서 파일을 이동시키면 된다.
파일의 위치는 /tmp로 지정하였다.
✔️ /tmp 파일은 OS 재시작할 경우, tmp에 속한 파일들이 지워지는 특징이 있다.
OS 사전 설정
📕 SELinux 설정
📢 SELinux 설정을 Permissive 변경
sed -i 's/^SELINUX=.*/SELINUX=permissive/g' /etc/selinux/config
📢 SELinux 모드를 Permissive 변경
setenforce 0
해당 명령어는 사실 좋은 예시는 아니다.
핸드폰 경고 알림 창이 귀찮다고 경고 알림 창 설정을 끄듯이, 리눅스에 대해 보안이 위험이 발생되더라도 알람을 종료하기 때문이다.
그래서 이 부분은 추천하는 방법은 아니지만, SELinux설정을 바꾸는 방법 또한 알아야 하기 때문에 이 방법을 선택하게 되었다.
✔️ 이 방법은 보안에 취약하다.
✔️ 해당 방법을 피할 수 있다면, 피하는 것이 매우 바람직하다.
📢 Hostname, 호스트 설정하기
echo '172.30.1.93 oracle.localdomain' | tee -a /etc/hosts
ORACLE을 설정할 때, 해당 설정을 하는 것을 추천한다.
listener.ora 설치할 때 oracle.localdomain을 참조하게 되는데, 해당 도메인이 없으면 ORACLE 설치 시 실패가 발생하기 때문이다. 그러나 이 부분은 사용자마다 설정이 다르므로, 이에 대한 방법이 반드시 정답은 아니다.
❓ IP 설정을 127.0.0.1로 하면 어떨까?
사실 이 부분에 대해 정답을 말하기는 어렵다. 일단, ip를 해당 os의 ip로 지정한다 해서 문제 될 것은 없었다.
다만, 127.0.0.1로 하게 되면 oracle 설정과 설명하기가 매우 간결해질 듯한데, 외부에서 접속이 가능할지를 아직 테스트를 안 했기 때문에 정답이라고 확신하기가 어렵다.
✔️ 해당 설정은, 본 글에 대한 설정 방법의 과정이다.
✔️ oracle.localdomain을 참조하는 부분에서, IP를 입력하면 되므로 반드시 설정할 필요는 없다.
📢 YUM 캐시 초기화
yum clean all
📢 OS 패키지 설치
yum install chrony curl gcc-c++ net-tools lsof tar tcpdump telnet unzip wget
oracle의 의존성을 해결하기 위해 yum을 통해 새롭게 설치한다. 그리고 oracle 외에 linux에 설정해서 나쁠 것이 없으므로 몇 가지도 추가작성하였다.
📢 ORACLE 사전 패키지 설치 ( PreInstall 하기 위해 필요)
yum install bc binutils compat-libcap1 compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel fontconfig-devel glibc glibc-devel ksh libaio libaio-devel libX11 libXau libXi libXtst libXrender libXrender-devel libgcc libstdc++ libstdc++-devel libxcb make smartmontools sysstat bind-utils net-tools nfs-utils psmisc unzip xorg-x11-utils xorg-x11-xauth
📢 패키지 다운로드
curl -o /tmp/oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm https://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm
📢 패키지 설치
rpm -ivh /tmp/oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm
ORACLE에 대한 사전 설정 패키지가 설정이 완료되었다.
정상적으로 완료가 되었을 때, oracle 계정이 생성된 것을 확인할 수 있다.
ORACLE 계정, 환경 변수 설정
su - oracle -c 'vi ~/.bash_profile'
# Oracle Database 19c
export TMP=/tmp
export TMPDIR=$TMP
export ORACLE_HOSTNAME=oracle.localdomain
export ORACLE_UNQNAME=cdb1
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19.0.0/dbhome_1
export ORA_INVENTORY=/u01/app/oraInventory
export ORACLE_SID=cdb1
export PDB_NAME=pdb1
export DATA_DIR=$ORACLE_BASE/oradata
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
export TNS_ADMIN=$ORACLE_HOME/network/admin
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
oracle 계정에 접속할 때, profile 설정을 변경한다.
경로설정을 환경변수에다가 두면, 나중에 수정하기가 매우 용이하다.
ORACLE 디렉터리 생성
#디렉터리 생성
mkdir -p /u01/app/{oracle,oraInventory}
# 소유자 및 그룹 변경
chown -R oracle:oinstall /u01/app/{oracle,oraInventory}
# 권한 변경
chmod -R 775 /u01/app/{oracle,oraInventory}
디렉터리에 대한 권한 및 소유자를 변경하는 작업을 진행한다.
oracle 관련된 부분은 모두 oracle계정이 관리를 하는 것이 바람직해서이다.
권한 변경을 위해서는 root 계정 혹은 권한을 부여할 수 있는 계정이 필요하다.
ORACLE 19c Database 설치하기, Silent 모드
#oracle 계정 전환
su - oracle
📢 ORACLE 홈 디렉터리 생성
mkdir -p /u01/app/oracle/product/19.0.0/dbhome_1
📢 바이너리 파일 압축 해제
unzip /tmp/LINUX.X64_193000_db_home.zip -d $ORACLE_HOME
시작하기 전, 사전작업에서 받은 LINUX 파일을 압축 해제하면 된다.
파일에 대해 명령어가 달라질 수도 있으므로, 설치한 zip 파일명을 입력하면 된다.
✔️ ORACLE 파일은 해당, ORACLE 정식 사이트에서 받을 수 있다.
✔️ 설치 방법은 해당 글 맨 위에 작성되어 있다.
📢 Database Response 생성
vi /tmp/db_install.rsp
oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v19.0.0
oracle.install.option=INSTALL_DB_SWONLY
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/u01/app/oraInventory
ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
ORACLE_BASE=/u01/app/oracle
oracle.install.db.InstallEdition=EE
oracle.install.db.OSDBA_GROUP=dba
oracle.install.db.OSOPER_GROUP=oper
oracle.install.db.OSBACKUPDBA_GROUP=backupdba
oracle.install.db.OSDGDBA_GROUP=dgdba
oracle.install.db.OSKMDBA_GROUP=kmdba
oracle.install.db.OSRACDBA_GROUP=racdba
oracle.install.db.rootconfig.executeRootScript=false
설치를 하기 전, 필요한 설정 파일들이다.
📢설치 전 검증
$ORACLE_HOME/runInstaller -silent -responseFile /tmp/db_install.rsp -executePrereqs
설치를 할 때, 문제가 생기면 안 되므로 설치와 동일한 동작을 하지만 버그테스트를 위한 동작 단계이다.
✔️ 여기서 오류가 발생된다면, 설치를 진행하기 전에 원인파악하는 것이 우선이다.
✔️ 아무 문제없을 경우, 다음으로 진행하면 된다.
📢 로그 삭제
rm -rf $ORA_INVENTORY/logs
✔️ 만약, 해당 경로에 아무것도 없이 명령어를 치더라도 문제가 발생되지 않으므로 그냥 명령어 쳐보는 것이 안전해 보인다.
📢 설치 진행, runInstaller 실행
$ORACLE_HOME/runInstaller -silent -responseFile /tmp/db_install.rsp -waitForCompletion
위에서 테스트를 했다면, 여기서는 진행을 한다고 보면 된다.
여기서 나온 문구는 ORACLE 설치할 때 참조용으로 알려주는 몇 안 되는 힌트 문구들이다.
📢 ORACLE 계정 로그아웃
exit
ORACLE에서 알려준 문구를 이용하기 위해 root 계정을 사용하도록 하자.
root 권한으로 root Script 실행
📢 orainstRoot.sh 실행
/u01/app/oraInventory/orainstRoot.sh
📢 root.sh 실행
/u01/app/oracle/product/19.0.0/dbhome_1/root.sh
해당 명령어는 ORACLE에서 알려준 명령어이다.
listener.ora, sqlnet.ora 생성
📢 oracle 계정 전환
su - oracle
다시 ORACLE의 설정을 하기 위해 oracle 계정으로 접속을 하였다.
📢 listener.ora, sqlnet.ora 생성
netca -silent -responsefile $ORACLE_HOME/assistants/netca/netca.rsp
위에서 /etc/hosts에 설정을 진행하였다.
여기서 domain을 불러오게 되는데, 기존의 도메인을 OS가 알아먹지 못해서 timeout 오류를 일으킨다.
따라서, 계속해서 실패한다면 /etc/hosts의 설정을 의심해 보자.
📢 listener.ora, sqlnet.ora 파일 설치 확인
ls -al $TNS_ADMIN/*.ora
📢 oracle 계정 로그아웃
exit
ORACLE 서비스 생성
📢 ORACLE 서비스 생성
vi /usr/lib/systemd/system/dbora.service
📢 dbora.service 입력
[Unit]
Description=Oracle Database Service
After=network.target
[Service]
Type=forking
ExecStart=/u01/app/oracle/product/19.0.0/dbhome_1/bin/dbstart /u01/app/oracle/product/19.0.0/dbhome_1
ExecStop=/u01/app/oracle/product/19.0.0/dbhome_1/bin/dbshut /u01/app/oracle/product/19.0.0/dbhome_1
User=oracle
TimeoutSec=300s
[Install]
WantedBy=multi-user.target
📢 SystemD daemon 새로고침
# 데몬 새로고침
systemctl daemon-reload
# 서비스 등록 및 활성화
systemctl enable --now dbora
# 서비스 상태 확인
systemctl status dbora
그러나 이 또한, 약간의 버그로 상태가 실행되지 않는 문제가 발생되지만 위에 설명해 주는 enable 명령어를 한 번 더 입력하면 사진과 같이 active 상태로 전환되는 모습을 볼 수 있다.
Oracle 19c 멀티테넌트 Database 생성
📢 oracle 계정 전환
su - oracle
✔️ 리눅스에서 ORACLE 접속하기 위해서는 oracle 계정을 사용해야 한다.
📢 Database 생성
dbca -silent -createDatabase -templateName General_Purpose.dbc -gdbname ${ORACLE_SID} -sid ${ORACLE_SID} -responseFile NO_VALUE -characterSet AL32UTF8 -sysPassword Oracle@19c -systemPassword Oracle@19c -createAsContainerDatabase true -numberOfPDBs 1 -pdbName ${PDB_NAME} -pdbAdminPassword Oracle@19c -databaseType MULTIPURPOSE -automaticMemoryManagement false -totalMemory 800 -storageType FS -datafileDestination "${DATA_DIR}" -redoLogFileSize 50 -emConfiguration NONE -ignorePreReqs
✔️ 이 과정에서 소요시간이 약 15분 - 20분 소요되었다.
✔️ 기다리다 보면, 사진처럼 완료되는 것을 알 수 있다.
📕 SQL 설정
📢 리스너 설정하기
sqlplus / as sysdba
✔️ oracle 계정에서 sqlplus 접속되는 모습
-- Oracle 관리 파일(OMF)을 활성화
ALTER SYSTEM SET DB_CREATE_FILE_DEST='/u01/app/oracle/oradata' SCOPE=BOTH;
-- RDB1 데이터베이스 상태 저장
ALTER PLUGGABLE DATABASE PDB1 SAVE STATE;
📢 ORACLE 종료
exit
ORACLE 자동 시작 설정 ( root 계정)
sed -i 's/:N$/:Y/g' /etc/oratab
✔️ 자동시작이 싫다면, 'Y' 설정을 안 하면 된다.
📢 ORACLE 실행 확인
netstat -ntlup | grep tnslsnr
✔️ ORACLE이 정상 실행 된 것을 확인할 수 있다.
'Computer > 기타' 카테고리의 다른 글
PowerShell 설치하기 (0) | 2023.11.08 |
---|---|
[Android] 네이티브 vs 모바일 웹앱 vs 하이브리드 앱 (0) | 2023.11.05 |
[CentOS] IP 설정 및 SSH 연결하기 (0) | 2023.08.27 |
[CentOS] Apache 기본위치 (0) | 2023.06.24 |
VM의 OS 설정하기 (0) | 2023.06.24 |