SSJ Tech Lab - Oracle Database テクニカルラボ

Oracle Database 18c XE インストールと制限

対応バージョン

Oracle Database 18.4

RedHat Enterprise Linux 7

CentOS 7

2018-11-12記事公開

Oracle Database の無償エディションである、 Oracle Database 18c XE(Express Edition) がリリースされました。
本記事では、Linux 7へのインストールおよび制限値について確認しています。実施したのはCentOSですが、RHELも同様です。Oracle Linuxについては、基本的にデータベース向けに事前設定がされている部分などがあるため、不要な手順があるかと思います。

Oracle Database XE ダウンロード

現在バージョンは 18.4.0 となっています。12cとパッチバージョンの考え方が変わっているので注意してください。一応 12cR2 と同等のバージョンとされています。
以下のURLよりダウンロード可能です。

https://www.oracle.com/technetwork/jp/database/database-technologies/express-edition/downloads/index.html

以下の2つのファイルをダウンロードしてください。

Oracle Database 18c Express Edition for Linux x64:
-- Oracle Database 本体です。(2.5GB程度)
Oracle Database Preinstall RPM for RHEL and CentOS:
-- OS の初期設定を行うrpmです。自分で設定する場合は不要です。(18KB程度)

インストレーション・ガイドもありますが、現在(2018/11/12)は英語版のみでした。

https://docs.oracle.com/en/database/oracle/oracle-database/18/xeinl/installation-guide.html

要件と制限

インストール前の重要な要件と制限については、以下の通りです。

  • Oracle Database XEに推奨される最小スワップ領域は、2 GBまたはRAMの2倍のうちの小さい方です。
  • データベースのユーザー・データの最大量は12ギガバイトを超えることはできません。
  • データベースで使用されるRAMの最大量は、2ギガバイトを超えることはできません。
  • 自動的に2つのコアに処理を制限します。
  • ユーザーが使用可能なPDBの数は3つまでです。
  • ディスクスペースは最低10GB必要です。

インストール後、USERS表領域を12GBまで拡張したところ、OS、rpm、ユーザーデータなどを含めて27GB程度でしたので、ログやシステム表領域の拡張に備えて、ディスクは40GB程度準備するとよいと思います。(rpmインストール後:9.2G、DB作成直後:13G)

Oracle Database XE インストール

インストールについては、以下のコマンドで可能です。

# yum -y localinstall oracle-database-preinstall-18c-1.0-1.el7.x86_64.rpm
# chown -R oracle:oinstall /opt/oracle
# yum -y localinstall oracle-database-xe-18c-1.0-1.x86_64.rpm
# /etc/init.d/oracle-xe-18c configure

Oracle Database XE インストール 詳細版

3つのコマンドで変更された箇所などの詳細を記載します。この項目は詳細が知りたい人向けです。詳細不要の方は「環境変数の設定」に進んでください。

バイナリファイルのチェック

まずは、配置後のファイルが破損していないか確認です。sha256sum の値は、ダウンロードページから確認可能です。preinstallのrpmは記載が確認できなかったのですが、念のため結果だけ記載しておきます。

# ls -l
-rw-r--r--  1 root root      18244 Nov  8 16:27 oracle-database-preinstall-18c-1.0-1.el7.x86_64.rpm
-rw-r--r--  1 root root 2574155124 Nov  8 16:44 oracle-database-xe-18c-1.0-1.x86_64.rpm

# sha256sum oracle-database-preinstall-18c-1.0-1.el7.x86_64.rpm
462b2253e0e012e8211d1b6ceac0c66ecb636de1c7a27ca6a1419e3cb64d160d  oracle-database-preinstall-18c-1.0-1.el7.x86_64.rpm
# sha256sum oracle-database-xe-18c-1.0-1.x86_64.rpm
308c044444342b9a3a8d332c68b12c540edf933dc8162d8eda3225e662433f1b  oracle-database-xe-18c-1.0-1.x86_64.rpm

OS事前設定用rpmのインストール

マニュアルに従って事前設定用のrpmをインストールします。未インストールのrpm群についてもここでインストールされます。以下インストール時に追加されたパッケージ群です。

# yum -y localinstall oracle-database-preinstall-18c-1.0-1.el7.x86_64.rpm
... 省略 ...
Dependency Installed:
  compat-libcap1.x86_64 0:1.10-7.el7        compat-libstdc++-33.x86_64 0:3.2.3-72.el7       gssproxy.x86_64 0:0.7.0-17.el7
  keyutils.x86_64 0:1.5.8-3.el7             ksh.x86_64 0:20120801-137.el7                   libICE.x86_64 0:1.0.9-9.el7
  libSM.x86_64 0:1.2.2-2.el7                libXext.x86_64 0:1.3.3-3.el7                    libXi.x86_64 0:1.7.9-1.el7
  libXinerama.x86_64 0:1.1.3-2.1.el7        libXmu.x86_64 0:1.1.2-2.el7                     libXrandr.x86_64 0:1.5.1-2.el7
  libXrender.x86_64 0:0.9.10-1.el7          libXt.x86_64 0:1.1.5-3.el7                      libXtst.x86_64 0:1.2.3-1.el7
  libXv.x86_64 0:1.0.11-1.el7               libXxf86dga.x86_64 0:1.1.4-2.1.el7              libXxf86misc.x86_64 0:1.0.3-7.1.el7
  libXxf86vm.x86_64 0:1.1.4-1.el7           libaio-devel.x86_64 0:0.3.109-13.el7            libbasicobjects.x86_64 0:0.1.1-29.el7
  libcollection.x86_64 0:0.7.0-29.el7       libdmx.x86_64 0:1.1.3-3.el7                     libevent.x86_64 0:2.0.21-4.el7
  libini_config.x86_64 0:1.3.1-29.el7       libnfsidmap.x86_64 0:0.25-19.el7                libpath_utils.x86_64 0:0.2.1-29.el7
  libref_array.x86_64 0:0.1.5-29.el7        libverto-libevent.x86_64 0:0.2.5-4.el7          nfs-utils.x86_64 1:1.3.0-0.54.el7
  psmisc.x86_64 0:22.20-15.el7              xorg-x11-utils.x86_64 0:7.5-22.el7              xorg-x11-xauth.x86_64 1:1.0.9-1.el7
... 省略 ...

ユーザー、グループの追加確認

# cat /etc/passwd
... 省略 ...
oracle:x:54321:54321::/home/oracle:/bin/bash
# cat /etc/group
... 省略 ...
oinstall:x:54321:oracle
dba:x:54322:oracle
oper:x:54323:oracle
backupdba:x:54324:oracle
dgdba:x:54325:oracle
kmdba:x:54326:oracle
racdba:x:54330:oracle

カーネルパラメータの追加確認

実際は1行ごとに追加した旨のコメントがあります。
# cat /etc/sysctl.conf
... 省略 ...
fs.file-max = 6815744
kernel.sem = 250 32000 100 128
kernel.shmmni = 4096
kernel.shmall = 1073741824
kernel.shmmax = 4398046511104
kernel.panic_on_oops = 1
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
net.ipv4.conf.all.rp_filter = 2
net.ipv4.conf.default.rp_filter = 2
fs.aio-max-nr = 1048576
net.ipv4.ip_local_port_range = 9000 65500
# diff /etc/sysctl.conf /etc/sysctl.d/99-oracle-database-preinstall-18c-sysctl.conf

※ diff結果無し(99-initial-sysctl.confというファイル名で、変更前のバックアップがありました)

他エディションのインストール・ガイドでは /etc/sysctl.d/97-oracle-database-sysctl.conf に設定する旨が記載されていますが、rpmでは99番で設定しているようでした。

APIPAの無効化設定確認

# cat /etc/sysconfig/network
... 省略 ...
# oracle-database-preinstall-18c : Add NOZEROCONF=yes
NOZEROCONF=yes

透過的ヒュージページおよび、NUMAの無効化確認

# cat /etc/default/grub
... 省略 ...
GRUB_CMDLINE_LINUX="vconsole.font=latarcyrheb-sun16 consoleblank=0 nomodeset elevator=noop net.ifnames=0 biosdevname=0 console=tty1 console=ttyS0,115200 numa=off transparent_hugepage=never"
... 省略 ...

元ファイルから numa=off transparent_hugepage=never の2つのパラメータが追加されていました。

ユーザーリミットの設定確認

実際は1行ごとに追加した旨のコメントがあります。
# cat /etc/security/limits.d/oracle-database-preinstall-18c.conf
oracle   soft   nofile    1024
oracle   hard   nofile    65536
# oracle-database-preinstall-18c setting for nproc soft limit is 16384
# refer orabug15971421 for more info.
oracle   soft   nproc    16384
oracle   hard   nproc    16384
oracle   soft   stack    10240
oracle   hard   stack    32768
# oracle-database-preinstall-18c setting for memlock hard limit is maximum of 128GB on x86_64 or 3GB on x86 OR 90 % of RAM
oracle   hard   memlock    134217728
# oracle-database-preinstall-18c setting for memlock soft limit is maximum of 128GB on x86_64 or 3GB on x86 OR 90% of RAM
oracle   soft   memlock    134217728

カーネルパラメータ、OS起動時のパラメータ変更を行っているため、念のためOSの再起動をしておくことをお勧めします。

# shutdown -r now

データベースのインストール(runInstaller)

runInstallerに当たる部分の操作を実施します。ORACLE_HOMEの作成をします。

# yum -y localinstall oracle-database-xe-18c-1.0-1.x86_64.rpm
... 省略 ..

データベースのインストール(NETCA/DBCA)

NETCA/DBCAに当たる部分の操作を実施します。一部パラメータを/etc/sysconfig/oracle-xe-18c.confから設定できます。リスナーのポート番号変更や、データファイル出力位置(デフォルト:/opt/oracle/oradata)を変更したい場合などに使用してください。

# cat /etc/sysconfig/oracle-xe-18c.conf
#This is a configuration file to setup the Oracle Database.
#It is used when running '/etc/init.d/oracle-xe-18c configure'.

# LISTENER PORT used Database listener, Leave empty for automatic port assignment
LISTENER_PORT=

# EM_EXPRESS_PORT Oracle EM Express URL port
EM_EXPRESS_PORT=5500

# Character set of the database
CHARSET=AL32UTF8

# Database file directory
# If not specified, database files are stored under Oracle base/oradata
DBFILE_DEST=

# SKIP Validations, memory, space
SKIP_VALIDATIONS=false
# /etc/init.d/oracle-xe-18c configure
... 省略 ...

環境変数の設定

インストール後に環境変数の設定を行います。マニュアルを見ると、毎回コマンドを実行して設定するようになっていましたが、面倒かと思いますので、.bashrcか.bash_profileに記載します。

# echo "ORACLE_SID=XE" >> ~oracle/.bash_profile
# echo "ORACLE_BASE=/opt/oracle" >> ~oracle/.bash_profile
# echo "ORACLE_HOME=/opt/oracle/product/18c/dbhomeXE" >> ~oracle/.bash_profile
# echo "PATH=\${ORACLE_HOME}/bin:\${PATH}" >> ~oracle/.bash_profile
# echo "export ORACLE_SID ORACLE_BASE ORACLE_HOME PATH" >> ~oracle/.bash_profile
# su - oracle -c "env | grep ORACLE_"
ORACLE_SID=XE
ORACLE_BASE=/opt/oracle
ORACLE_HOME=/opt/oracle/product/18c/dbhomeXE
# su - oracle -c "env | grep PATH="
PATH=/opt/oracle/product/18c/dbhomeXE/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/oracle/.local/bin:/home/oracle/bin

データベースの起動

データベースの作成が終わったら、起動を行います。最初からPDBが一つ作られています。

# su - oracle
$ sqlplus / as sysdba
SQL*Plus: Release 18.0.0.0.0 - Production on Mon Nov 12 22:29:43 2018
Version 18.4.0.0.0

Copyright (c) 1982, 2018, Oracle.  All rights reserved.


Connected to:
Oracle Database 18c Express Edition Release 18.0.0.0.0 - Production
Version 18.4.0.0.0

SQL> startup
SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 XEPDB1                         MOUNTED
SQL> alter session set container = XEPDB1;
SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         3 XEPDB1                         MOUNTED
SQL> startup
Pluggable Database opened.
SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         3 XEPDB1                         READ WRITE NO

本記事では割愛しますが、自動起動スクリプトなど仕込んでおくと便利かと思います。

データベースの制限確認

ここでは実際にメモリの制限、PDBの制限、ファイルサイズの制限について確認しています。

メモリの制限

初期状態では以下のメモリ設定がされていました。リソースマネージャなどの利用をしない場合、全てのPDBでメモリ領域を共有しますので、全体で2GBまでというのが確認できます。

SQL> conn / as sysdba
SQL> show parameter sga_target

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
sga_target                           big integer 1200M
SQL> show parameter pga_aggregate_target

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_target                 big integer 395M
SQL> show parameter pga_aggregate_limit

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_limit                  big integer 2G
SQL> alter system set pga_aggregate_target = 1000M;
alter system set pga_aggregate_target = 1000M
*
ERROR at line 1:
ORA-02097: parameter cannot be modified because specified value is invalid
ORA-56752: Oracle Database Express Edition (XE) memory parameter invalid or not
specified

SGAとPGA合わせて2GBを超えた値を指定しているためエラーが発生しました。

PDBの制限

ユーザーが使用できるPDBの数は3つまでです。以下実際に作ってみようとしたところ、ORA-65010が発生しました。

SQL> CREATE PLUGGABLE DATABASE xepdb2
  2    ADMIN USER PDBSYS IDENTIFIED BY &&inputPassword.
  3    ROLES = (dba)
  4    DEFAULT TABLESPACE USERS
  5      DATAFILE '/opt/oracle/oradata/XE/XEPDB2/users01.dbf' SIZE 256M AUTOEXTEND ON NEXT 10M
  6    FILE_NAME_CONVERT = ('/opt/oracle/oradata/XE/pdbseed/'
  7                        ,'/opt/oracle/oradata/XE/XEPDB2/')
  8    STORAGE UNLIMITED;

SQL> CREATE PLUGGABLE DATABASE xepdb3
  2    ADMIN USER PDBSYS IDENTIFIED BY &&inputPassword.
  3    ROLES = (dba)
  4    DEFAULT TABLESPACE USERS
  5      DATAFILE '/opt/oracle/oradata/XE/XEPDB3/users01.dbf' SIZE 10M AUTOEXTEND ON NEXT 10M
  6    FILE_NAME_CONVERT = ('/opt/oracle/oradata/XE/pdbseed/'
  7                        ,'/opt/oracle/oradata/XE/XEPDB3/')
  8    STORAGE UNLIMITED;

Pluggable database created.


SQL> CREATE PLUGGABLE DATABASE xepdb4
  2    ADMIN USER PDBSYS IDENTIFIED BY &&inputPassword.
  3    ROLES = (dba)
  4    DEFAULT TABLESPACE USERS
  5      DATAFILE '/opt/oracle/oradata/XE/XEPDB4/users01.dbf' SIZE 10M AUTOEXTEND ON NEXT 10M
  6    FILE_NAME_CONVERT = ('/opt/oracle/oradata/XE/pdbseed/'
  7                        ,'/opt/oracle/oradata/XE/XEPDB4/')
  8    STORAGE UNLIMITED;
CREATE PLUGGABLE DATABASE xepdb4
                          *
ERROR at line 1:
ORA-65010: maximum number of pluggable databases created


SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 XEPDB1                         READ WRITE NO
         4 XEPDB2                         MOUNTED
         5 XEPDB3                         MOUNTED
SQL>

作ったPDBを削除する場合は以下のコマンドで削除できます。

SQL> drop pluggable database xepdb3 including datafiles;

Pluggable database dropped.

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 XEPDB1                         READ WRITE NO
         4 XEPDB2                         MOUNTED

ファイルサイズの制限

ファイルサイズの制限を確認します。

ファイルサイズを超えた後にPDBを再起動しようとしたところ、起動しなくなりましたので注意して下さい。復旧自体ができなくなります。(制限のない他のDBにリストアするなどの処置で戻るかもしれませんが、試していません。)

まずは12GBを超過したファイルサイズの拡張を試します。

$ sqlplus / as sysdba
SQL> set pagesize 1000 line 120 trim on
SQL> col FILE_NAME for a45
SQL> col TABLESPACE_NAME for a10
SQL> select CON_ID, TABLESPACE_NAME
  2       , FILE_NAME, BYTES/1024/1024 as FILE_MB
  3       , MAXBYTES/1024/1024 as FILE_MAX_MB
  4       , AUTOEXTENSIBLE
  5    from cdb_data_files
  6   where tablespace_name = 'USERS'
  7   order by 1,2;

    CON_ID TABLESPACE FILE_NAME                                        FILE_MB FILE_MAX_MB AUT
---------- ---------- --------------------------------------------- ---------- ----------- ---
         1 USERS      /opt/oracle/oradata/XE/users01.dbf                     5  32767.9844 YES
         3 USERS      /opt/oracle/oradata/XE/XEPDB1/users01.dbf          142.5  32767.9844 YES

SQL> alter session set container = XEPDB1;
SQL> alter database datafile '/opt/oracle/oradata/XE/XEPDB1/users01.dbf' resize 20G;
alter database datafile '/opt/oracle/oradata/XE/XEPDB1/users01.dbf' resize 20G
*
ERROR at line 1:
ORA-12954: The request exceeds the maximum allowed database size of 12 GB.

ORA-12954(ファイルサイズの制限を超えた旨)が発生することが確認できました。12GBまで拡張してみます。

SQL> alter database datafile '/opt/oracle/oradata/XE/XEPDB1/users01.dbf' resize 12G;

Database altered.

成功しましたが、DB全体で制限がかかっているため、実は 12GB + α が実際の制限値となっています。他の表領域を増やしたのち、12GBに拡張しようとするとORA-12954が発生します。このまま停止・起動を行うと、CDB$ROOTの拡張などが伴った場合に冒頭の通りPDB自体起動できなくなることがあります。

実際利用する場合は、以下くらいで制限をかけておくことをお勧めします。

SQL> alter session set container = 
SQL> alter database tempfile '/opt/oracle/oradata/XE/XEPDB1/temp01yyyy-mm-dd_hh-mi-ss-nnn-PM.dbf' autoextend on next 16M maxsize 1G;
SQL> alter database datafile '/opt/oracle/oradata/XE/XEPDB1/sysaux01.dbf' autoextend on next 16M maxsize 2G;
SQL> alter database datafile '/opt/oracle/oradata/XE/XEPDB1/system01.dbf' autoextend on next 16M maxsize 1G;
SQL> alter database datafile '/opt/oracle/oradata/XE/XEPDB1/undotbs01.dbf' autoextend on next 16M maxsize 2G;
SQL> alter database datafile '/opt/oracle/oradata/XE/XEPDB1/users01.dbf' autoextend on next 16M maxsize 7G;

XEPDB1が一杯の状態でも他にPDBの作成は可能ですが、作成したPDBは起動しようとするとORA-12954が発生します。CDBで稼働しているPDB全体で12GBを超えないように留意する必要があります。

SQL> CREATE PLUGGABLE DATABASE xepdb3
  2    ADMIN USER PDBSYS IDENTIFIED BY &inputPassword.
  3    ROLES = (dba)
  4    DEFAULT TABLESPACE USERS
  5      DATAFILE '/opt/oracle/oradata/XE/XEPDB3/users01.dbf' SIZE 10M AUTOEXTEND ON NEXT 10M
  6    FILE_NAME_CONVERT = ('/opt/oracle/oradata/XE/pdbseed/'
  7                        ,'/opt/oracle/oradata/XE/XEPDB3/')
  8    STORAGE UNLIMITED;

Pluggable database created.

SQL> alter session set container = XEPDB3;

Session altered.

SQL> startup
ORA-12954: The request exceeds the maximum allowed database size of 12 GB.

その他所感など

使ってみるのはこれからですが、CPU2つまで可能となったのは大きいと思います。11gR2の時は、CPU1つを使い切るSQLを実行すると終わりでしたので・・。

Excelをアプリケーション化して少し拡張するくらいであれば問題ないですが、やはりディスクサイズが小さいので圧縮処理も検討してもよいと思います。

Oracle APEXを利用しようとしてデータベースのインストールを行ったのですが、Oracle APEXがデフォルトで導入されていませんでした。Oracle APEXを利用する場合は別途インストールする必要があります。

Oracle APEXのインストールについては以下に記事を記載しています。ご参考にどうぞ。

Oracle APEXのインストール(Oracle Application Express)(CDB環境)

関連記事

関連記事が存在しません