#はじめに
今更、オンプレでOracle DBを構築するなんて、奇特な環境×奇特なDB=かなり奇特な構築だとは思うが、メモとして書き残しておく。
ProxmoxはKVMとLXCコンテナをWeb UIで構築、管理ができて便利。しかも無料。
VMのまるごとバックアップもWeb UIでクリックだけで出来るので運用も楽。
LXCのテンプレートもたくさんあり、環境づくりが簡単に出来るのである。
しかし、Oracle DBのテンプレートは存在しないので、今回作ってみることにした。
Oracle Linux8で環境を作りたかったが、どうやっても上手く行かず断念。
Oracle Linux8だとなぜか、リスナがインストール中に落ちる。
バージョン | |
---|---|
Proxmox VE | 7.0 |
Oracle Database XE | 18c |
Oracle Linux | 7.9 |
#cgroupv1モードに変更
cgroupv2では、Oracle Linux7は起動しないため、Proxmox VE7のカーネルパラメーターを変更しcgroupv1モードにする
$ nano /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
↓
#GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX_DEFAULT="quiet systemd.unified_cgroup_hierarchy=0"
$ update-grub
$ reboot
#Oracle Linux7のテンプテートをダウンロード
ストレージのCTテンプレートから、「Download from Link」をクリックする
開く画面で以下のように入力
名称 | 設定値 |
---|---|
URL | https://uk.lxd.images.canonical.com/images/oracle/7/amd64/default/20220601_07:46/rootfs.tar.xz |
File Name | oracle-linux-7.tar.xz |
URLは3日しか有効でないため、ローカルのブラウザで以下のURLを開き、下層にあるrootfs.tar.xzを探して下さい。
https://uk.lxd.images.canonical.com/images/oracle/7/amd64/default/
ProxmoxにSSHでログインしているなら以下のコマンドを実行してください
wget -O /var/lib/vz/template/cache/oracle-linux-7.tar.xz https://uk.lxd.images.canonical.com/images/oracle/7/amd64/default/20220601_07:46/rootfs.tar.xz
#Oracle Linux7のLXCコンテナを作成
右上のCT作成からコンテナを作成。
CentOS7のコンテナのIPアドレスは固定してください。(IPv4は固定。IPv6はStaticにして空白に。)しないと、DB作成の際に失敗します。
#oracle-database-preinstallをインストール
レポジトリがはじめから入っているため、そのままyumでインストール
yum -y update
yum -y install oracle-database-preinstall-18c
このまま、Oracle DBをインストールすると、エラーで落ちるため対策
VMが使えるメモリを算出しようとするとエラーが出てしまうため、以下のファイルを編集しコメントアウト。
nano /etc/security/limits.d/oracle-database-preinstall-18c.conf
下記2行をコメントアウト
# 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
#Oracle DBをインストール
XEは無料のため、Oracleのサーバーから直接ダウンロード&インストール可能です。
yum -y install https://download.oracle.com/otn-pub/otn_software/db-express/oracle-database-xe-18c-1.0-1.x86_64.rpm
#DB構築
途中SYSとSYSTEMのパスワードを聞いてくるため入力。
/etc/init.d/oracle-xe-18c configure
Specify a password to be used for database accounts. Oracle recommends that the password entered should be at least 8 characters in length, contain at least 1 uppercase character, 1 lower case character and 1 digit [0-9]. Note that the same password will be used for SYS, SYSTEM and PDBADMIN accounts:
Confirm the password:
#リスナと接続先変更
listener.oraのHOST名をIPアドレスに変更する
nano /opt/oracle/product/18c/dbhomeXE/network/admin/listener.ora
# listener.ora Network Configuration File: /opt/oracle/product/18c/dbhomeXE/network/admin/listener.ora
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
tnsnames.oraも同様にHOST名もIPアドレスに変更する。
nano /opt/oracle/product/18c/dbhomeXE/network/admin/tnsnames.ora
# tnsnames.ora Network Configuration File: /opt/oracle/product/18c/dbhomeXE/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
ORCLCDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ORCLCDB)
)
)
LISTENER_ORCLCDB =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521))
#サービスを起動
systemctl daemon-reload
systemctl enable oracle-xe-18c
systemctl start oracle-xe-18c
#Oracle DBを自動起動するように設定
nano /etc/oratab
XE:/opt/oracle/product/18c/dbhomeXE:Y
#oracleユーザーに移行
su - oracle
#oracleユーザーの環境変数を設定
nano .bash_profile
# User specific environment and startup programs
PATH=$PATH:$HOME/.local/bin:$HOME/bin
export ORACLE_SID=XE
export ORACLE_BASE=/opt/oracle
export ORACLE_HOME=$ORACLE_BASE/product/18c/dbhomeXE
export NLS_LANG=Japanese_Japan.AL32UTF8
PATH=$PATH:$ORACLE_HOME/bin
export PATH
#oracleユーザーの環境変数を反映
source .bash_profile
#今までの設定が正しいか確認
環境変数が正しいか。サービスが起動しているかの確認のため、リスナを見てみる。
接続中になればOK。
lsnrctl status
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=LXC_NAME)(PORT=1539)))に接続中
#PDBを自動起動するように設定。
sqlplus / as sysdba
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 XEPDB1 MOUNT NO
SQL> alter pluggable database XEPDB1 open;
SQL> alter pluggable database all save state;
メモリ割当を増やした場合は以下のコマンドを実行割当を増やす
SQL> alter system set memory_max_target = 3G scope=spfile;
SQL> alter system set memory_target = 3G scope=spfile;
SQL> alter system set inmemory_size= 1G scope=spfile;
SQL> alter system set inmemory_clause_default = 'INMEMORY MEMCOMPRESS FOR QUERY LOW PRIORITY MEDIUM' scope=spfile;
SQL> shutdown immediate
SQL> startup
#DBに接続してみる
接続文字列の形式:[ユーザー名]/[パスワード]@//[ホスト名]:[ポート]/[DBサービス名] [AS SYSDBA]
-- Container Database (CDB) に接続する場合:
sqlplus sys/GetStarted18c@//localhost:1539/XE as sysdba
-- Pluggable Database (PDB) に初めて接続する場合:
sqlplus sys/GetStarted18c@//localhost:1539/XEPDB1 as sysdba