1. Overview
Oracle DB가 필요하게 되어, 19c 설치를 하며 작성을 한다.
정확도가 떨어지는 가이드의 문서가 될 수 있겠다.
다음의 게시물을 기초로 하였다.
2. 문서 작성 기준이 되는 테스트 환경
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| $ cat /etc/*release
Oracle Linux Server release 8.7
NAME="Oracle Linux Server"
VERSION="8.7"
ID="ol"
ID_LIKE="fedora"
VARIANT="Server"
VARIANT_ID="server"
VERSION_ID="8.7"
PLATFORM_ID="platform:el8"
PRETTY_NAME="Oracle Linux Server 8.7"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:oracle:linux:8:7:server"
HOME_URL="https://linux.oracle.com/"
BUG_REPORT_URL="https://bugzilla.oracle.com/"
ORACLE_BUGZILLA_PRODUCT="Oracle Linux 8"
ORACLE_BUGZILLA_PRODUCT_VERSION=8.7
ORACLE_SUPPORT_PRODUCT="Oracle Linux"
ORACLE_SUPPORT_PRODUCT_VERSION=8.7
Red Hat Enterprise Linux release 8.7 (Ootpa)
Oracle Linux Server release 8.7
|
3. 사전 준비사항
3.1 설치 파일
Oracle Database 19c에서 Linux x86-64 (ZIP, 2.8GB)
를 받았다.
3.2 Packages
Operating System Checklist for Oracle Database Installation on Linux 참고
위 문서를 보았지만 기존 시스템에 WLS, OHS 등 다양한 설치를 진행해왔던 터라 실제 Yum 을 진행하지 않고 넘어갔다.
4. 소프트웨어 설치
4.1 기본 환경 구성
1
2
3
4
5
| # === Oracle env ===
export ORACLE_BASE=/sw/databases/oracle-19c
export ORACLE_HOME=/sw/databases/oracle-19c/product/19.3/dbhome_1
export ORACLE_SID=ORCL # CDB SID (dbca로 만든 값)
export PATH="$ORACLE_HOME/bin:$PATH"
|
1
2
3
| mkdir -p $ORACLE_HOME
cp LINUX.X64_193000_db_home.zip ${ORACLE_HOME}
cd ${ORACLE_HOME} && unzip ${ORACLE_HOME}/LINUX.X64_193000_db_home.zip
|
4.2 응답 파일 작성
기본적으로 $ORACLE_HOME/inventory/response/db_install.rsp
위치한 기본 응답파일을 사용하면 된다.
아래는 위 파일을 내 환경에 맞게 변경하였고, 주석을 제거하였다.
oracle.install.responseFileVersion
은 그대로 사용해야 되는것으로 보인다.
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
31
32
33
| cat << EOF > $ORACLE_HOME/install/response/db_install.rsp
oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v19.0.0
oracle.install.option=INSTALL_DB_SWONLY
UNIX_GROUP_NAME=weblogic
INVENTORY_LOCATION=/sw/databases/oracle-19c/inventory
ORACLE_BASE=/sw/databases/oracle-19c
ORACLE_HOME=/sw/databases/oracle-19c/product/19.3/dbhome_1
# 에디션: EE | SE2 중 선택
oracle.install.db.InstallEdition=SE2
# OS 그룹 (분리 필요 없으면 모두 dba 로 통일 가능)
oracle.install.db.OSDBA_GROUP=weblogic
oracle.install.db.OSOPER_GROUP=weblogic
oracle.install.db.OSBACKUPDBA_GROUP=weblogic
oracle.install.db.OSDGDBA_GROUP=weblogic
oracle.install.db.OSKMDBA_GROUP=weblogic
oracle.install.db.OSRACDBA_GROUP=weblogic
# 루트 스크립트를 sudo로 자동 실행하려면 (선택)
oracle.install.db.rootconfig.executeRootScript=true
oracle.install.db.rootconfig.configMethod=SUDO
oracle.install.db.rootconfig.sudoPath=/usr/bin/sudo
oracle.install.db.rootconfig.sudoUserName=weblogic
EOF
# /etc/oraInst.loc는 root:root 소유자이고 기존 다른 DB를 가리키므로 주의
cat << EOF > /etc/oraInst.loc
inventory_loc=/sw/databases/oracle-19c/inventory
inst_group=weblogic
EOF
|
4.3 설치 실행
1
2
3
4
5
6
7
8
| $ $ORACLE_HOME/runInstaller -silent -responseFile $ORACLE_HOME/install/response/db_install.rsp
Launching Oracle Database Setup Wizard...
[WARNING] [INS-08101] Unexpected error while executing the action at state: 'supportedOSCheck'
CAUSE: No additional information available.
ACTION: Contact Oracle Support Services or refer to the software manual.
SUMMARY:
- java.lang.NullPointerException
|
내 환경과 같이 OS Pass에 실패할 경우, 다음과 같이 진행한다. 참고
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| $ export CV_ASSUME_DISTID=RHEL7.6
$ $ORACLE_HOME/runInstaller -silent -responseFile $ORACLE_HOME/install/response/db_install.rsp
Launching Oracle Database Setup Wizard...
[WARNING] [INS-32056] The specified Oracle Base contains the existing Central Inventory location: /sw/databases/oracle-19c/inventory.
ACTION: Oracle recommends that the Central Inventory location is outside the Oracle Base directory. Specify a different location for the Oracle Base.
Enter password for user <***> :
The response file for this session can be found at:
/sw/databases/oracle-19c/product/19.3/dbhome_1/install/response/db_2022-12-29_02-58-41PM.rsp
You can find the log of this install session at:
/sw/databases/oracle-19c/inventory/logs/InstallActions2022-12-29_02-58-41PM/installActions2022-12-29_02-58-41PM.log
Successfully Setup Software.
|
4.4 설치 확인
1
2
3
4
5
6
7
8
9
10
| $ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on Thu Dec 29 15:06:11 2022
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Connected to an idle instance.
SQL>
|
4.5 리스너 구성 및 확인
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| $ netca -silent -responseFile $ORACLE_HOME/assistants/netca/netca.rsp
Parsing command line arguments:
Parameter "silent" = true
Parameter "responsefile" = /sw/databases/oracle-19c/product/19.3/dbhome_1/assistants/netca/netca.rsp
Done parsing command line arguments.
Oracle Net Services Configuration:
Profile configuration complete.
Oracle Net Listener Startup:
Running Listener Control:
/sw/databases/oracle-19c/product/19.3/dbhome_1/bin/lsnrctl start LISTENER
Listener Control complete.
Listener started successfully.
Listener configuration complete.
Oracle Net Services configuration successful. The exit code is 0
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| $ lsnrctl status
LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 29-DEC-2022 15:09:17
Copyright (c) 1991, 2019, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=wls.local)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 19.0.0.0.0 - Production
Start Date 29-DEC-2022 15:08:43
Uptime 0 days 0 hr. 0 min. 33 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /sw/databases/oracle-19c/product/19.3/dbhome_1/network/admin/listener.ora
Listener Log File /sw/databases/oracle-19c/diag/tnslsnr/wls/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=wls.local)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
The listener supports no services
The command completed successfully
|
4.6 CDB 및 기본 PDB 생성
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
| cat << EOF > $ORACLE_HOME/assistants/dbca/dbca.rsp
gdbName=GLOBAL_ORCL
sid=ORCL
createAsContainerDatabase=true
numberOfPDBs=1
pdbName=ORCLPDB
pdbAdminPassword=weblogic1
templateName=General_Purpose.dbc
characterSet=AL32UTF8
nationalCharacterSet=AL16UTF16
databaseConfigType=SI
storageType=FS
listeners=LISTENER
databaseType=MULTIPURPOSE
emConfiguration=NONE
sysPassword=weblogic1
systemPassword=weblogic1
totalMemory=2048
EOF
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| $ dbca -silent -createDatabase -responsefile $ORACLE_HOME/assistants/dbca/dbca.rsp
...
54% complete
Creating Pluggable Databases
58% complete
77% complete
Executing Post Configuration Actions
100% complete
Database creation complete. For details check the logfiles at:
/sw/databases/oracle-19c/cfgtoollogs/dbca/GLOBAL_ORCL.
Database Information:
Global Database Name:GLOBAL_ORCL
System Identifier(SID):ORCL
Look at the log file "/sw/databases/oracle-19c/cfgtoollogs/dbca/GLOBAL_ORCL/GLOBAL_ORCL.log" for further details.
|
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
| $ sqlplus / as sysdba
SQL> select NAME,CDB from v$database;
NAME CDB
--------- ---
GLOBAL_O YES
SQL> show con_name;
CON_NAME
------------------------------
CDB$ROOT
SQL> alter session set container=ORCLPDB;
Session altered.
SQL> show con_name;
CON_NAME
------------------------------
ORCLPDB
! lsnrctl status
LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 30-DEC-2022 10:25:00
Copyright (c) 1991, 2019, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=wls.local)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 19.0.0.0.0 - Production
Start Date 29-DEC-2022 15:08:43
Uptime 0 days 19 hr. 16 min. 16 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /sw/databases/oracle-19c/product/19.3/dbhome_1/network/admin/listener.ora
Listener Log File /sw/databases/oracle-19c/diag/tnslsnr/wls/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=wls.local)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
Services Summary...
Service "GLOBAL_ORCL" has 1 instance(s).
Instance "ORCL", status READY, has 1 handler(s) for this service...
Service "ORCLXDB" has 1 instance(s).
Instance "ORCL", status READY, has 1 handler(s) for this service...
Service "f1023596eb1af8a5e053f522410aa522" has 1 instance(s).
Instance "ORCL", status READY, has 1 handler(s) for this service...
Service "orclpdb" has 1 instance(s).
Instance "ORCL", status READY, has 1 handler(s) for this service...
The command completed successfully
|
데이터베이스 삭제는 dbca -silent -deleteDatabase -sourceDB ORCL
4.7 스크립트 생성
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
| # --------------
# start_DB.sh, stop_DB.sh : CDB 기동과 함께 모든 PDB Open
# --------------
cat << EOF > start_DB.sh
#!/usr/bin/env bash
source ./env_PDB_WLS.sh
sqlplus -s / as sysdba <<SQL
startup;
alter pluggable database all open;
exit
SQL
EOF
cat << EOF > stop_DB.sh
#!/usr/bin/env bash
source ./env_PDB_WLS.sh
sqlplus -s / as sysdba <<SQL
alter pluggable database all close immediate;
shutdown immediate;
exit
SQL
EOF
# --------------
# start_listener.sh, stop_listener.sh, status_listener.sh : 말안해도 알제?
# --------------
cat << EOF > start_listener.sh
#!/usr/bin/env bash
source ./env_PDB_WLS.sh
exec lsnrctl start LISTENER
EOF
cat << EOF > stop_listener.sh
#!/usr/bin/env bash
source ./env_PDB_WLS.sh
exec lsnrctl stop LISTENER
EOF
cat << EOF > stop_listener.sh
#!/usr/bin/env bash
source ./env_PDB_WLS.sh
exec lsnrctl status LISTENER
EOF
# --------------
# env_PDB_WLS.sh : 전용 PDB 환경변수 셋업 스크립트
# --------------
cat << EOF > env_PDB_WLS.sh
#!/usr/bin/env bash
# WLS 전용 PDB 환경
export ORACLE_BASE=/sw/databases/oracle-19c
export ORACLE_HOME=/sw/databases/oracle-19c/product/19.3/dbhome_1
export ORACLE_SID=ORCL
export PATH=$ORACLE_HOME/bin:$PATH
# Listener 접속 정보
export ORA_HOST=wls.local
export ORA_PORT=1521
# 생성할 PDB와 PDB 관리자 계정/암호
export PDB_NAME=PDB_WLS
export PDBADMIN_USER=PDBADMIN
export PDBADMIN_PASS=PDBADMIN1
# 애플리케이션 계정/암호 + 전용 테이블스페이스
export APP_USER=weblogic
export APP_PASS=weblogic1
export APP_TS=WLS_TS
EOF
# --------------
# create_PDB_WLS.sh : 전용 PDB 생성 / PDB 계정 생성 / PDB 테이블 생성
# --------------
cat << EOF > create_PDB_WLS.sh
#!/usr/bin/env bash
source ./env_PDB_WLS.sh
# CDB 데이터파일 베이스 디렉터리 (pdbseed가 있는 곳의 상위)
BASE_DIR=$ORACLE_BASE/oradata/GLOBAL_ORCL
# ======== [자동 파생 경로] ========
SEED_DIR="$BASE_DIR/pdbseed"
PDB_DIR="$BASE_DIR/$PDB_NAME"
APP_DF="$PDB_DIR/${APP_TS}01.dbf"
# ======== [실행] ========
sqlplus -s / as sysdba <<SQL
set echo on
whenever sqlerror exit 1
-- 1) PDB 생성 (seed -> 새 PDB 디렉터리로 파일 매핑)
CREATE PLUGGABLE DATABASE $PDB_NAME
ADMIN USER $PDBADMIN_USER IDENTIFIED BY "$PDBADMIN_PASS"
FILE_NAME_CONVERT = (
'$SEED_DIR',
'$PDB_DIR'
);
-- 2) PDB OPEN + 재기동 시 자동 OPEN 저장
ALTER PLUGGABLE DATABASE $PDB_NAME OPEN;
ALTER PLUGGABLE DATABASE ALL SAVE STATE;
-- 3) 새 PDB로 전환
ALTER SESSION SET CONTAINER=$PDB_NAME;
-- 4) 전용 테이블스페이스 + 애플리케이션 계정/권한
CREATE TABLESPACE $APP_TS
DATAFILE '$APP_DF' SIZE 2G AUTOEXTEND ON NEXT 512M MAXSIZE UNLIMITED;
CREATE USER $APP_USER IDENTIFIED BY "$APP_PASS"
DEFAULT TABLESPACE $APP_TS
QUOTA UNLIMITED ON $APP_TS;
GRANT CREATE SESSION, CREATE TABLE, CREATE VIEW, CREATE SEQUENCE, CREATE PROCEDURE TO $APP_USER;
-- 확인 (옵션)
SHOW CON_NAME;
SELECT username, default_tablespace FROM dba_users WHERE username=UPPER('$APP_USER');
SQL
echo "[OK] $PDB_NAME 생성 및 $APP_USER 계정/권한 설정 완료"
echo "접속: sqlplus $APP_USER/$APP_PASS@$ORA_HOST:$ORA_PORT/$PDB_NAME"
EOF
# --------------
# sqlplus_sysdba.sh : CDB 관리자 접속
# sqlplus_PDB_WLS.sh : 해당 PDB 접속
# --------------
cat << EOF > sqlplus_sysdba.sh
#!/usr/bin/env bash
source ./env_PDB_WLS.sh
exec sqlplus / as sysdba
EOF
cat << EOF > sqlplus_PDB_WLS.sh
#!/usr/bin/env bash
source ./env_PDB_WLS.sh
exec sqlplus "${APP_USER}/${APP_PASS}@${ORA_HOST}:${ORA_PORT}/${PDB_NAME}"
EOF
|
CDB = 전체 DB
PDB = 목적별 사용할 DB로써 별도로 만들어 사용할 수 있다.
5. 기본 SQL Query
1
| CREATE TABLE emp (empno NUMBER(4) NOT NULL, ename VARCHAR2(10));
|
1
| INSERT INTO emp (empno, ename) VALUES (1, 'jane');
|