18c XE는 우분투를 지원하지 않는다. 우분투에서 오라클을 사용하려면, 11g 혹은 12g로 해야 한다.
Ubuntu 20.04 64bit 환경에서 진행.
https://dudaji.tistory.com/entry/ 블로그의 내용임.
1. 오라클 다운로드
오라클 홈페이지에서 Linux용 패키지를 다운로드 받는다. 링크
11gR2 Express Edition을 다운받는다.
ubuntu 콘솔에서 'uname -i' 입력시 'x86_64'가 나오면 64bit 버전이다.
zip 파일 압축 해제
$ unzip oracle-xe-11.2.0-1.0.x86_64.rpm.zip
Archive: oracle-xe-11.2.0-1.0.x86_64.rpm.zip
creating: Disk1/
creating: Disk1/upgrade/
inflating: Disk1/upgrade/gen_inst.sql
creating: Disk1/response/
inflating: Disk1/response/xe.rsp
inflating: Disk1/oracle-xe-11.2.0-1.0.x86_64.rpm
2. 필요 패키지 설치
Ubuntu에서는 rpm 파일을 사용하여 패키지 설치를 할 수 없으므로, RPM을 Debian의 deb 패키지로 변경이 필요하다. 변경 및 설치를 위해 필요한 패키지는 아래와 같다.
- alien : RPM 패키지를 Debian 패키지로 변환
- libaio1 : Linux 커널 AIOAsynchronous I/O 엑세스 라이브러리
- unixodbc : ODBC (Open Database Connectivity ) 라이브러리
$ sudo apt-get install -y alien libaiol unixodbc
3. RPM -> DEB 변환
다운받은 rpm 파일을 alien을 이용 deb 파일로 변환
$ sudo alien --scripts -d oracle-database-xe-18c_1.0-2_amd64.rpm
명령 실행 후, 동일 이름의 deb파일이 생성된다.(시간이 좀 걸림)
4. 환경 설정
4.1 /sbin/chkconfig
Redhat 패키지들은 설치시 /sbin/chkconfig를 시용해야 하지만, Ubuntu에는 해당 파일이 없기 때문에 /bin/chkconfig 파일을 생성
$ sudo vi /sbin/chkconfig
#!/bin/bash
# Oracle 11gR2 XE installer chkconfig hack for Ubuntu
file=/etc/init.d/oracle-xe
if [[ ! `tail -n1 $file | grep INIT` ]]; then
echo >> $file
echo '### BEGIN INIT INFO' >> $file
echo '# Provides: OracleXE' >> $file
echo '# Required-Start: $remote_fs $syslog' >> $file
echo '# Required-Stop: $remote_fs $syslog' >> $file
echo '# Default-Start: 2 3 4 5' >> $file
echo '# Default-Stop: 0 1 6' >> $file
echo '# Short-Description: Oracle 11g Express Edition' >> $file
echo '### END INIT INFO' >> $file
fi
update-rc.d oracle-xe defaults 80 01
#EOF
파일 생성 후 실행할 수 있도록 755 권한 설정
$ sudo chmod 755 /sbin/chkconfig
4.2 Kernel 파라미터 설정
Oracle이 Linux 커널의 파라미터를 사용하여 운영되기 때문에 Oracle 서버를 운영하기 우해서는 커널 파라미터 설정이 필요하다. 시스템 컨트롤 데몬에 시스템 파라미터 설정을 저장하여 등록한다.
- file.file-max
: 오픈하는 파일의 수를 지정하는 커널 파라미터
(각 오라클 인스턴스는 512 * Process만큼 file descriptor를 갖음.)- net.ipv4.iplocalport_range
: TCP와 UDP 트랙픽을 위한 범위를 설정하는 커널 파라미터- kernel.sem
: 세마포를 지정하는 커널 파라미터- kernel.shmmax
: 공유 메모리 페이지를 지정하는 커널 파라미터
$ sudo vi /etc/sysctl.d/60-oracle.conf
# Oracle 11g XE kernel parameters
fs.file-max=6815744
net.ipv4.ip_local_port_range=9000 65000
kernel.sem=250 32000 100 128
kernel.shmmax=536870912
커널 파리미터 로드.
$ sudo service procps start
4.3 Oracle XE용 파일 추가
Oracle XE는 /bin/awk를 사용하지만, Ubuntu에서는 /usr/bin/awk에 설치되기 때문에 심볼릭 링크를 만들어 줌.
$ sudo ln -s /usr/bin/awk /bin/awk
Oracle XE의 리스터가 사용할 lock 파일 생성
$ sudo mkdir /var/lock/subsys
$ sudo touch /var/lock/subsys/listener
4.4 (오류 발생시) 메모리 설정
Oracle XE를 설치하고 나서 특별한 에러 없이 Oracle 프로세스가 리스너만 시작되고 다른 프로세스가 실행되지 않는 문제를 만날 수 있다. Oralce XE를 설치할 때 정상적으로 설치가 되지 않거나 오류가 발생하게되면 $ORACL_HOME안의 log 디렉토리를 살펴보면 된다. 설치가 정상적으로 되지 않거나, 설치는 되었는데 에러 없이 Oracle이 정상적으로 시작이 되지 않을 경우 로그를 살펴보면ORA-000845:MEMORY_TARGET 에러가 발생하게 되는 경우가 있는데 메모리의 설정이 잘못되거나 사이즈가 부족해서 그런 경우이다. 이런 경우 메모리 설정을 위해서 다음 과정을 진행한다.
현재 설정된 shared memeory 삭제
$ sudo rm -rf /dev/shm
새로운 SHM을 생성하여 mount
$ sudo mkdir /dev/shm
$ sudo mount -t tmpfs shmfs -o -size=4096m /dev/shm
shm 설정을 데몬에 등록, 로드하기 위해 아래 내용을 파일로 생성
$ sudo vi /etc/rc2.d/S01shm_load
#!/bin/sh
case "$1" in
start) mkdir /var/lock/subsys 2>/dev/null
touch /var/lock/subsys/listener
rm /dev/shm 2>/dev/null
mkdir /dev/shm 2>/dev/null
mount -t tmpfs shmfs -o size=4096m /dev/shm ;;
*) echo error
exit 1 ;;
esac
$ sudo chmod 755 /etc/rc2.d/S01shm_load
5. Oracle XE 패키지 설치
deb 패키지 설치
$ sudo dpkg --install oracle-xe_11.2.0-2_amd64.deb
정상적으로 설치되면 아래와 같이 나오고 데몬이 자동으로 등록된다.
Selecting previously unselected package oracle-xe.
(데이터베이스 읽는중 ...현재 205338개의 파일과 디렉터리가 설치되어 있습니다.)
Preparing to unpack oracle-xe_11.2.0-2_amd64.deb ...
Unpacking oracle-xe (11.2.0-2) ...
oracle-xe (11.2.0-2) 설정하는 중입니다 ...
Executing post-install steps...
You must run '/etc/init.d/oracle-xe configure' as the root user to configure the database.
Processing triggers for libc-bin (2.31-0ubuntu9) ...
Processing triggers for systemd (245.4-4ubuntu3.1) ...
Processing triggers for gnome-menus (3.36.0-1ubuntu1) ...
Processing triggers for desktop-file-utils (0.24-1ubuntu2) ...
Processing triggers for mime-support (3.64ubuntu1) ...
설치 후 Oracle XE 사용을 위해 Oracle 최초 설정을 /etc/init.d/oracle-xe configure로 설정한다..
$ sudo /etc/init.d/oracle-xe configure
최초 설정 내용은 아래와 같은 서비스 포트와 패스워드 설정이다.
Specify the HTTP port that will be used for Oracle Application Express [8080]:
Specify a port that will be used for the database listener [1521]:
Specify a password to be used for database accounts. Note that the same password will be used for SYS and SYSTEM. Oracle recommends the use of different passwords for each database account. This can be done after initial configuration:
<<password 입력>>
Do you want Oracle Database 11g Express Edition to be started on boot (y/n) [y]:
Starting Oracle Net Listener...Done
Configuring database...Done
Starting Oracle Database 11g Express Edition instance...Done
Installation completed successfully.
6. 환경변수 설정
Oracle 관련 환경변수 추가
$ vi ~/.barshrc
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/xe
export ORACLE_SID=XE
export NLS_LANG=`$ORACLE_HOME/bin/nls_lang.sh`
export ORACLE_BASE=/u01/app/oracle
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export PATH=$ORACLE_HOME/bin:$PATH
변경사항 반영
$ source ~/.bachrc
7. 상태확인
Oracle의 네티워크 상태 확인을 위해 리스너 확인
$ lsnrctl status
LSNRCTL for Linux: Version 11.2.0.2.0 - Production on 29-5월 -2020 14:09:30
Copyright (c) 1991, 2011, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC_FOR_XE)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 11.2.0.2.0 - Production
Start Date 29-5월 -2020 13:16:50
Uptime 0 days 0 hr. 52 min. 40 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Default Service XE
Listener Parameter File /u01/app/oracle/product/11.2.0/xe/network/admin/listener.ora
Listener Log File /u01/app/oracle/diag/tnslsnr/miris-A320M-H/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC_FOR_XE)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=miris-A320M-H)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=miris-A320M-H)(PORT=8080))(Presentation=HTTP)(Session=RAW))
Services Summary...
Service "PLSExtProc" has 1 instance(s).
Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
Service "XE" has 1 instance(s).
Instance "XE", status READY, has 1 handler(s) for this service...
Service "XEXDB" has 1 instance(s).
Instance "XE", status READY, has 1 handler(s) for this service...
The command completed successfully
Sqlplus 테스트 접속
$ sqlplus system
SQL*Plus: Release 11.2.0.2.0 Production on 금 5월 29 14:13:56 2020
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Enter password:
Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
SQL>
7. Oracle XE 작업 준비
Tablespace 및 사용자 등의 추가 작업 : 이 부분은 각자 상황에 따라 다르게 적용되며, SQL로 작업한다.
7.1 Tablespace 생성
우선 테이블 스페이스가 저장되는 경로 확인을 위해 테이블스페이스 파일 데이블을 조회한다.
> SELECT * FROM DBA_DATA_FILES;
...
> CREATE TABLESPACE "TESTSP"
datafile '/u01/app/oracle/oradata/XE/testsp.dbf'
SIZE 100M
reuse autoextend ON;
CREATE TABLESPACE [이름]
DATAFILE [데이터 파일 경로]
SIZE[파일 사이즈][K | M]
AUTOEXTEND [ON | OFF]
[ONLINE | OFFLINE]
[PERMANENT | TEMPORARY]
EXTENT MANAGEMENT [DICTIONARY | LOCAL [AUTOALLOCATE | UNIFORM]]
BLOCKSIZE [사이즈][K | M]
- TABLESPACE : 테이블 스페이스의 이름을 지정한다.
- DATAFILE : 테이블 스페이스를 저장할 데이터 파일의 이름과 경로를 지정한다.
- SIZE : 데이터 파일의 용량을 지정한다. 단위는 K(킬로바이트) 또는 M(메가 바이트) 사용
- AUTOEXTEND : 공간이 부족할 때 자동으로 확장할지 여부를 지정한다.
- ONLINE | OFFLINE : 테이블 스페이스를 즉시 사용할지 여부를 지정한다. (Default : ONLINE)
- PERMANENT | TEMPORARY : 저장할 정보가 영구적인지 임시인지를 지정한다. (Default : PERMANENT)
- EXTENT MANAGEMENT DICTIONARY | LOCAL
◈ DICTIONARY : 테이블 스페이스 내의 EXTENT들이 DICTIONARY TABLE에서 관리된다. (기본값)
◈ LOCAL : 테이블 스페이스 내의 EXTENT들이 각 DATAFILE 내에서 BITMAP으로 관리된다.
⊙ AUTOALLOCATE : 시스템에서 관리함. 사용자가 EXTENT SIZE를 지정할 수 없음.
⊙ UNIFORM : 사용자가 지정한 일정한 사이즈로 생성됨. (Default : 1M)
LOCAL 절을 사용하면서 AUTOALLOCATE 또는 UNIFORM을 명시하지 않으면 AUTOALLOCATE이 기본값 - BLOCKSIZE : 인스턴스를 구성하는 블록의 사이즈를 지정한다.
7.2 사용자 생성
> CREATE USER testadmin IDENTIFIED BY testpw
DEFAULT TABLESPACE "TESTSP"
TEMPORARY TABLESPACE temp;
> CREATE USER test01 IDENTIFIED BY testpw
DEFAULT TABLESPACE "TESTSP"
TEMPORARY TABLESPACE temp;
> CREATE USER test02 IDENTIFIED BY testpw
DEFAULT TABLESPACE "TESTSP"
TEMPORARY TABLESPACE temp;
계정삭제는
> DROP USER userid CASCADE;
7.3 사용자 권한 부여
권한 부여는 GRANT, 취소는 REVOKE
> GRANT connect, resource, dba to testadmin;
> GRANT CREATE SESSION, SELECT ANY TABLE to test01;
> GRANT CREATE SESSION, SELECT ANY TABLE to test01;
역할 (기본적으로 사용자를 생성하면 CONNECT, RESOUCE 역할을 준다.)
- CONNECT ROLE : 세션 생성 및 테이블 생성, 조회 등의 가장 일반적인 권한들로 이루어진다.
- RESOURCE ROLE : Store Procedure 또는 Trigger와 같은 PL/SQL을 사용할 수 있는 권한들로 이루어진다.
- DBA ROLE : 모든 시스템 권한이 부여된 역할이다
- CRATE USER : 데이터 베이스 유저 생성 권한
- SELECT ANY TABLE : 모든 유저의 테이블 조회 권한
- CREATE ANY TABLE : 모든 유저의 테이블 생성 권한
- CREATE SESSION : 데이터베이스 접속 권한
- CREATE TABLE : 테이블 생성 권한
- CREATE PROCEDURE : 프로시져 생성 권한
- CREATE SEQUENCE : 시퀀스 생성 권한
- SYSDBA : 데이터베이스를 관리하는 최고 권한
- SYSOPER : 데이터베이스를 관리하는 권한
7.4 테스트용 테이블 생성 (testadmin으로 로그인)
> CREATE TABLE test_tb (
name varchar2(10),
cont varchar2(20)
);
> insert into test_tb values("test01", "test contents");
7.5 사용자별 테이블 권한 부여
권한 부여는 GRANT, 취소는 REVOKE
> grant select on test_tb to test01;
> grant insert on test_tb to test01;
> grant delete on test_tb to test01;
> grant update on test_tb to test01;
> grant select, insert, delete, update on test_tb to test02;
여기서 테이블에 대한 권한은 7.3의 사용자 권한을 넘어서는 권한을 부여할 수 없다.
7.6 기타 참고용 SQL
현재 생성된 계정 확인
> SELECT * FROM DBA_USERS;
> SELECT * FROM ALL_USERS;
사용자에게 부여된 시스템 권한 확인
> SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE='userid';
사용자에게 부여된 Role 확인
> SELECT * FROM DBA_ROLE_PRIVS WHERE GRANTEE='userid';
Role에 부여된 시스템 권한 확인
> SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = 'rolename';
다른 사용자에게 부여된 객체(테이블 등) 권한 확인
> SELECT * FROM DBA_SYS_PRIVS
WHERE OWNER = '테이블소유자명';
> SELECT * FROM DBA_SYS_PRIVS
WHERE GRANTEE = '권한부여자명';
사용자가 소유한 모든 테이블 조회
> SELECT * FROM USER_TABLES;
8. Oracle XE 삭제
8.1 Oracle XE 서비스 정지
$ sudo service oracle-xe stop
8.2 Oracle XE 패키지 삭제
$ sudo dpkg --purge oracle-xe
8.3 Oracle 디렉토리 삭제
$ sudo rm -rf /u01/app
8.4 Oracle XE 데목 삭제 및 갱신
$ sudo rm /etc/default/oracle-xe
$ sudo update-rc.d oracle-xe remove
8.5 Ubuntu 설정 파일 삭제
$ sudo rm /sbin/chkconfig
$ sudo rm /etc/rc2.d/s01shm_load
$ sudo rm /etc/sysctl.d/60-oracle.conf
8.6 Oracle XE Ubuntu 계정 삭제
$ sudo userdel -r oracle
$ sudo delgroup dba