• 워드프레스 → 라이믹스 블로그 이전 완료 일주일 동안 열지 않기
  • 목록
  • 아래로
  • 위로
  • 검색

Oracle Ubuntu 22.04 Oracle XE 11g 설치 및 DB, 계정 생성

키큰난쟁이 키큰난쟁이
44 0 0

Oracle.jpg


 

들어가며

 

✅ Ubuntu 22.04 64bit 환경에서 Oracle 11g 설치하기

 


 

Oracle XE 다운로드 링크

 

Ubuntu 22.04 Oracle XE 11g 설치.png.jpg

​​​​​​↑ Linux 버전을 다운받는다.

 


 

Oracle XE 파일 업로드 및 압축 해제

 

wget을 이용해 파일 다운로드

wget https://download.oracle.com/otn/linux/oracle11g/xe/oracle-xe-11.2.0-1.0.x86_64.rpm.zip

↓ wget 실행 안될 경우 wget 패키지 설치

sudo apt-get install wget

 

zip 파일 압축 해제

unzip oracle-xe-11.2.0-1.0.x86_64.rpm.zip

 


 

Oracle XE 설치 시 필요한 패키지 설치

 

패키지 목록

 

Ubuntu에서는 rpm 파일을 사용하여 패키지 설치를 할 수 없으므로, RPM을 Debian의 deb 패키지로 변경이 필요하다. 변경 및 설치를 위해 필요한 패키지는 아래와 같다.

  • alien : RPM 패키지를 Debian 패키지로 변환
  • libaio1 : Linux 커널 AIOAsynchronous I/O 엑세스 라이브러리
  • unixodbc : ODBC (Open Database Connectivity ) 라이브러리
sudo apt-get install -y alien libaio1 unixodbc

 


 

Oracle XE RPM → DEB 변환

 

다운받은 rpm 파일을 alien을 이용해 deb 파일로 변환

alien --scripts -d  oracle-database-xe-18c_1.0-2_amd64.rpm

 


 

Oracle XE 환경설정

 

경로 /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

 

Kernel 파라미터 설정

  1. 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 systemctl start procps

## procps 패키지 설치가 안되있다면
sudo apt-get install procps

 

Oracle XE용 파일 추가

  • Oracle XE는 /bin/awk를 사용하지만, Ubuntu에서는 /usr/bin/awk에 설치되기 때문에 심볼릭 링크를 만들어 줌.
sudo ln -s /usr/bin/awk /bin/awk
## ubuntu 22.04 /bin/awk 존재하고있어 심볼릭 링크를 따로 만들필요없음
## 혹시 모르니 확인 필요
  • Oracle XE의 리스터가 사용할 lock 파일 생성
sudo mkdir /var/lock/subsys
## ubuntu 22.04 /var/lock/subsys 존재하고있어 따로 폴더를 만들필요없음
## 혹시 모르니 확인 필요
sudo touch /var/lock/subsys/listener

 

(오류 발생 시) 메모리 설정

 

 

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

 


 

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:
Enter password : <<password 입력>>
Confirm the password : <<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.

→ 포트 번호 설정은 건드리지 않고 패스워드만 설정한다. (필요 시 포트번호 변경)

 


 

Oracle XE 환경 변수 설정

 

Oracle XE 관련 환경 변수 추가

 

리눅스 계정마다 환경 변수 설정해줘야된다. 필자는 testid 라는 계정으로 접속 하여 설정

  • 첫번째 방법 (필자는 두번째 방법으로 함)
su - testid
vi ~/.bashrc
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
  • 두번째 방법 (필자는 이 방법으로 함)

↓ /u01/app/oracle/product/11.2.0/xe/bin/oracle_env.sh ~/.bashrc 파일에 oracle_env.sh 파일 내용을 추가하고 저장한다.

## 아래 명령어 실행 후 해당 명령어 복사
. /u01/app/oracle/product/11.2.0/xe/bin/oracle_env.sh
vi ~/.bashrc

↓ ~/.bashrc 맨 아래 복사 한 명령어를 작성하고 저장해준다.

# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

# don't put duplicate lines or lines starting with space in the history.
# See bash(1) for more options
HISTCONTROL=ignoreboth

# append to the history file, don't overwrite it
shopt -s histappend

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000

# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize

# If set, the pattern "**" used in a pathname expansion context will
# match all files and zero or more directories and subdirectories.
#shopt -s globstar

# make less more friendly for non-text input files, see lesspipe(1)
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"

# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
    debian_chroot=$(cat /etc/debian_chroot)
fi

# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
    xterm-color|*-256color) color_prompt=yes;;
esac

# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
#force_color_prompt=yes

if [ -n "$force_color_prompt" ]; then
    if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
        # We have color support; assume it's compliant with Ecma-48
        # (ISO/IEC-6429). (Lack of such support is extremely rare, and such
        # a case would tend to support setf rather than setaf.)
        color_prompt=yes
    else
        color_prompt=
    fi
fi

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
    ;;
*)
    ;;
esac

# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
    alias ls='ls --color=auto'
    #alias dir='dir --color=auto'
    #alias vdir='vdir --color=auto'

    alias grep='grep --color=auto'
    alias fgrep='fgrep --color=auto'
    alias egrep='egrep --color=auto'
fi

# colored GCC warnings and errors
#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'

# some more ls aliases
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'

# Add an "alert" alias for long running commands.  Use like so:
#   sleep 10; alert
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'

# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
  if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
  fi
fi

## 복사한 명령어를 맨아래 추가
. /u01/app/oracle/product/11.2.0/xe/bin/oracle_env.sh
## oracle_env.sh 파일 내용
##----start--------
   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 PATH=$ORACLE_HOME/bin:$PATH
##----end----------

↓ 변경 사항 반영

source ~/.bashrc

 


 

Oracle XE 상태 확인

 

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>

 


 

Oracle XE 작업 준비

 

 

Tablespace 및 사용자 등의 추가 작업 : 이 부분은 각자 상황에 따라 다르게 적용되며, SQL로 작업한다.

 

Tablespace 생성

 

↓ 우선 테이블 스페이스가 저장되는 경로 확인을 위해 테이블스페이스 파일 테이블을 조회한다.

> SELECT * FROM DBA_DATA_FILES;
    ...
> CREATE TABLESPACE Tablespace명
  datafile '/u01/app/oracle/oradata/XE/Tablespace명.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]
**********************/

## 테이블 스페이스 삭제
> DROP TABLESPACE 테이블스페이스명 INCLUDING CONTENTS;
  • 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 : 인스턴스를 구성하는 블록의 사이즈를 지정한다.

 

사용자 생성

## 사용자 생성
> CREATE USER User명 IDENTIFIED BY User비밀번호
  DEFAULT TABLESPACE Tablespace명
  TEMPORARY TABLESPACE temp;

## 사용자 삭제
> DROP USER UserId CASCADE;

 

사용자 권한 부여

 

↓ 권한 부여는 GRANT, 취소는 REVOKE

## 사용자 권한 부여
> GRANT CONNECT, RESOURCE, DBA to User명;


## 역할 (기본적으로 사용자를 생성하면 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 : 데이터베이스를 관리하는 권한

 

테스트용 테이블 생성 (생선된 UserID로 로그인)

> CREATE TABLE test_tb (
        name varchar2(10),
        age number(3)
  );
> insert into test_tb values("test", 13);
  • 사용자별 테이블 권한 부여

↓ 권한 부여는 GRANT, 취소는 REVOKE

> grant select, insert, delete, update on 권한부여할Table명 to User명;

 

기타 참고용 SQL

  • 현재 생성된 계정 확인
> SELECT * FROM DBA_USERS;
> SELECT * FROM ALL_USERS;
  • 사용자에게 부여된 시스템 권한 확인
> SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE='User명';
  • 사용자에게 부여된 Role 확인
> SELECT * FROM DBA_ROLE_PRIVS WHERE GRANTEE='User명';
  • Role에 부여된 시스템 권한 확인
> SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = 'Role명';
  • 다른 사용자에게 부여된 객체(테이블 등) 권한 확인
> SELECT 
* 
FROM DBA_SYS_PRIVS
WHERE OWNER = '테이블소유자명';
> SELECT 
* 
FROM DBA_SYS_PRIVS
  WHERE GRANTEE = '권한부여자명';
  • 사용자가 소유한 모든 테이블 조회
> SELECT * FROM USER_TABLES;
  • 유저들의 DEFAULT TEMP TABLESPACE 확인
> SELECT USERNAME, DEFAULT_TABLESPACE, TEMPORARY_TABLESPACE FROM DBA_USERS;
  • Default Temp Tablespace 를 TEMP 에서 TEMP2로 변경
> ALTER DATABASE DEFAULT TEMPORARY TABLESPACE TEMP2;

 

 


 

Oracle XE 삭제

 

Oracle XE 서비스 정지

sudo systemctl stop oracle-xe

 

Oracle XE 패키지 삭제

sudo dpkg --purge oracle-xe

 

Oracle XE 디렉토리 삭제

sudo rm -rf /u01/app

 

Oracle XE 데몬 삭제 및 갱신

sudo rm /etc/default/oracle-xe
sudo update-rc.d oracle-xe remove

 

Ubuntu 설정 파일 삭제

sudo rm /sbin/chkconfig
sudo rm /etc/rc2.d/s01shm_load
sudo rm /etc/sysctl.d/60-oracle.conf

 

Oracle XE Ubuntu 계정 삭제

sudo userdel -r oracle
sudo delgroup dba

 


 

신고공유스크랩

댓글 0

댓글 쓰기
에디터 모드

신고

"님의 댓글"

이 댓글을 신고하시겠습니까?

댓글 삭제

"님의 댓글"

이 댓글을 삭제하시겠습니까?

공유

퍼머링크