Oracle Linux 7.9にOracle Databaseを導入する(シングル構成)

# 1. はじめに

本記事では、Oracle Linux 7.9にOracle Database Enterprise Editionを導入する手順を記載します。
ここで導入するOracle Databaseは、OTNの範囲での作業、かつ検証目的のため、以下については記載していません。
* OSやDBのパラメーターチューニング
* Oracle Databaseのパッチ適用方法

:::note warn
Oracle Linux 8系の導入手順は、現時点では公開の予定はありません。
Oracle Linux 8系やRed Hat 8系にOracle Database 19cを導入する場合、Release Updateパッチが必要になります。Grid Infrastructure 19cも同様です。
Release Updateパッチを入手するためにはOTNの範囲を逸脱するためです。
:::

:::note
Oracle Linux 8, Red Hat 8系にOracle Database 19cを導入する件について、@plusultra さんの記事が詳しいです。
[Red Hat Enterprise Linux 8 に Oracle Database 19c をインストール](https://qiita.com/plusultra/items/7dae26a702e3aa9ab059 "Red Hat Enterprise Linux 8 に Oracle Database 19c をインストール")
:::

# 2. 前提条件

本記事は下記のハードウェア・ソフトウェアを前提としています。

## 2.1. ハードウェア

* HW : Virtual Box仮想マシン
* CPU : 4Core
* Mem : 8GB
* HDD : 50GB(OS), 50GB(DB)

## 2.2. ソフトウェア

* OS : Oracle Linux 7.9 (Virtual BOX)
* DB : Oracle Database 19c Enterprise Edition

## 2.3. ソフトウェア入手先

ソフトウェアは下記から入手できます(要アカウント)
* [Oracle Linux 7.9](https://edelivery.oracle.com/ "Oracle Software Delivery Cloud")
  * V1009690-01.iso (Oracle Linux Release 7 Update 9 for x86 (64bit))
* [Oracle Database 19c](https://www.oracle.com/jp/database/technologies/oracle-database-software-downloads.html#19c "Oracle Database ソフトウェア・ダウンロード")
  * LINUX.X64_193000_db_home.zip

# 3. 仮想マシンの作成

仮想マシンは次のように作成します。※ 詳細は省略します。
* 仮想マシン名 : db19cs01
* タイプ : Linux
* バージョン : Oracle (64-bit)
* プロセッサー : 4CPU
* メモリーサイズ : 8GB (8,192 MB)
* ストレージ : 50GB(OS), 50GB(DB)

# 4. Oracle Linux 7.9 のインストール

Oracle Linux 7.9のインストールは次のように行います。 

※ 詳細は省略します。太字はデフォルトから変更する箇所です。
1. Oracle Linux 7.9 → Install Oracle Linux 7.9
2. インストール時に使用する言語 → **日本語**
3. インストールの概要
   1. 地域設定
      1. 日付と時刻 → アジア/東京
      2. キーボード → 日本語
      3. 言語サポート → 日本語
   2. ソフトウェア
      1. インストールソース → ローカルメディア
      2. ソフトウェアの選択 → **サーバー(GUI使用)**
   3. システム
      1. インストール先 → パーティションを自分で構成する
**sda1 : /boot (xfs, 1GiB)**
**sda2 : swap (16GiB)**
**sda3 : / (xfs, 33GiB)**
      2. KDUMP → Kdumpが有効になります
      3. ネットワークとホスト名 → 接続していません
      4. セキュリティーポリシー → プロファイルが設定されていません
4. ユーザーの設定
ROOTパスワード : 適宜設定
ユーザーの作成 : 適宜設定
5. 再起動後の初期セットアップ
   1. LICENSING
      1. LICENSE INFROMATION → **ライセンスに同意**
   2. システム
      1. Subscription Manager → このシステムは現在登録されていません

# 5. Oracle Linux 7.9 の設定

本章の設定では、指定がない限り全てrootユーザーで実行します。

## 5-1. ネットワーク設定

nmcliコマンドを使用して、ネットワーク設定を行います。設定内容は次の通りです。
|#|設定項目|設定値|
|-:|--|--|
|1|IPアドレス|192.168.2.11/24|
|2|DNSサーバー|192.168.2.3|
|3|DNS名|example.com|

```bash
nmcli connection modify enp0s3 connection.autoconnect yes
nmcli connection modify enp0s3 ipv4.addresses 192.168.2.11/24
nmcli connection modify enp0s3 ipv4.dns 192.168.2.3
nmcli connection modify enp0s3 ipv4.method manual
nmcli connection modify enp0s3 ipv4.dns-search example.com
nmcli connection modify enp0s3 ipv4.routes "192.168.0.0/16 192.168.2.129"
systemctl restart NetworkManager.service
```

IPアドレスが正しく設定されているか確認します。

```bash
ip addr show dev enp0s3
```

## 5-2. ホスト名設定

ホスト名を設定します。
```bash
hostnamectl set-hostname db19cs01.example.com
```
コマンド実行後、ホスト名が設定されたことを確認します。
```bash
uname -n
```

## 5-3. SELinux設定

SELinuxを無効化するため、rootユーザーで/etc/selinux/configファイルを下記のように編集します。
```diff:/etc/selinux/config
- 7 SELINUX=enforcing
+ 7 SELINUX=disabled 
```
その後、OSを再起動します。
```bash
shutdown -r now
```
再起動後に下記コマンドを実行し、SELinuxが無効化されていること(Disabledと表示される)を確認します。
```bash
getenforce
```

## 5-4. SSH設定(sshd_config)

sshサーバーの設定を行います。sshの接続が遅い場合、本設定を試してください。
```diff:/etc/ssh/sshd_config
- 38 #PermitRootLogin yes
+ 38 PermitRootLogin no
- 115 #UseDNS yes
+ 115 UseDNS no
```
設定後、sshdサービスを再起動します。
```bash
systemctl restart sshd.service
```

## 5-5. SSH設定(ssh_config)

sshクライアントの設定を行います。sshの接続が遅い場合、本設定を試してください。
```diff:/etc/ssh/ssh_config
- 59          GSSAPIAuthentication yes
+ 59          GSSAPIAuthentication no
```

## 5-6. firewalldの無効化

firewalldを無効化(masked)します。
```bash
systemctl stop    firewalld.service
systemctl disable firewalld.service
systemctl mask    firewalld.service
```
設定後、下記コマンドで無効化された(maskedと表示される)ことを確認します。
```bash
systemctl list-unit-files firewalld.service
```

## 5-7. ローカルyumの構成

Oracle DatabaseやOEMで必要なパッケージをDVDから導入するため、ローカルのリポジトリを定義します。
```file:/etc/yum.repos.d/local.repo
[local]
name=local
baseurl=file:///media
gpgcheck=0
gpgkey=file:///media/RPM-GPG-KEY
enabled=1
```
ローカルリポジトリが利用可能であることを確認します。
```bash
mount /dev/cdrom /media
yum --disablerepo=* --enablerepo=local list
```

## 5-8. 必須パッケージの導入

Oracle Database 19c Enterprise Editionの動作で必要なパッケージを導入します。

```bash
yum --disablerepo=* --enablerepo=local -y install bc
yum --disablerepo=* --enablerepo=local -y install binutils
yum --disablerepo=* --enablerepo=local -y install compat-libcap1
yum --disablerepo=* --enablerepo=local -y install compat-libstdc++-33
yum --disablerepo=* --enablerepo=local -y install elfutils-libelf
yum --disablerepo=* --enablerepo=local -y install elfutils-libelf-devel
yum --disablerepo=* --enablerepo=local -y install fontconfig-devel
yum --disablerepo=* --enablerepo=local -y install glibc
yum --disablerepo=* --enablerepo=local -y install glibc-devel
yum --disablerepo=* --enablerepo=local -y install ksh
yum --disablerepo=* --enablerepo=local -y install libaio
yum --disablerepo=* --enablerepo=local -y install libaio-devel
yum --disablerepo=* --enablerepo=local -y install libXrender
yum --disablerepo=* --enablerepo=local -y install libXrender-devel
yum --disablerepo=* --enablerepo=local -y install libX11
yum --disablerepo=* --enablerepo=local -y install libXau
yum --disablerepo=* --enablerepo=local -y install libXi
yum --disablerepo=* --enablerepo=local -y install libXtst
yum --disablerepo=* --enablerepo=local -y install libgcc
yum --disablerepo=* --enablerepo=local -y install libstdc++
yum --disablerepo=* --enablerepo=local -y install libstdc++-devel
yum --disablerepo=* --enablerepo=local -y install libxcb
yum --disablerepo=* --enablerepo=local -y install make
yum --disablerepo=* --enablerepo=local -y install policycoreutils
yum --disablerepo=* --enablerepo=local -y install policycoreutils-python
yum --disablerepo=* --enablerepo=local -y install smartmontools
yum --disablerepo=* --enablerepo=local -y install sysstat
```

下記コマンドを実行し、必要なパッケージが導入されているかを確認します。
```bash
rpm -qa | sort
```
:::note
Database19cで必要なパッケージは、下記マニュアルから確認できます。
[[19c] Databaseインストレーション・ガイドfor Linux - x86-64でサポートされているOracle Linux 7のディストリビューション](https://docs.oracle.com/cd/F19136_01/ladbi/supported-oracle-linux-7-distributions-for-x86-64.html#GUID-3E82890D-2552-4924-B458-70FFF02315F7 "x86-64でサポートされているOracle Linux 7のディストリビューション")
:::

## 5-9. ユーザー、グループの作成

oracleユーザーとoracleユーザーの主グループであるoinstall, 補助グループであるdba, oper, backupdba, dgdba, kmdba, racdbaを作成します。

### 5-9-1. グループの作成

```bash
groupadd -g 54321 oinstall
groupadd -g 54322 dba
groupadd -g 54323 oper
groupadd -g 54324 backupdba
groupadd -g 54325 dgdba
groupadd -g 54326 kmdba
groupadd -g 54330 racdba
```

### 5-9-2. ユーザーの作成

```bash
useradd -u 54321 -g oinstall -G dba,oper,backupdba,dgdba,kmdba,racdba oracle
```

### 5-9-3. ユーザー・パスワードの設定

```bash
passwd oracle
```

### 5-9-4. oracleユーザーのumask設定

```bash
echo "umask 022" >> ~oracle/.bash_profile
cat ~oracle/.bash_profile
```

### 5-9-5. ユーザー・グループの確認

```bash
id -a oracle
```
:::note
上記ユーザー・グループの作成で使用しているユーザーID, グループIDは下記マニュアルを参考にしています。
[[19c] Databaseインストレーション・ガイドfor Linux - オペレーティング・システム権限のグループの作成](https://docs.oracle.com/cd/F19136_01/ladbi/creating-operating-system-privileges-groups.html#GUID-164A7218-166D-4B58-9A86-88149E8FCB83 "オペレーティング・システム権限のグループの作成")
[[19c] Databaseインストレーション・ガイドfor Linux - オペレーティング・システムのOracleインストール・ユーザー・アカウントの作成](https://docs.oracle.com/cd/F19136_01/ladbi/creating-operating-system-oracle-installation-user-accounts.html#GUID-4DA71FFA-AB5B-49AA-B21D-92C952C8A3FC "オペレーティング・システムのOracleインストール・ユーザー・アカウントの作成")
:::

## 5-10. カーネル・パラメーターの設定

カーネル・パラメーターをマニュアルに沿って設定します。ここで設定する値は、マニュアルの値をそのまま使用します。

### 5-10-1. カーネル・パラメーター・ファイルの設定

Oracle Databaseの動作に必要なカーネル・パラメーターの値を設定します。

```file:/etc/sysctl.d/99-oracledb.conf
# Oracle Database kernel parameter
kernel.sem = 250 32000 100 128
kernel.shmall = 2097152
kernel.shmmax = 8589934592
kernel.shmmni = 4096
kernel.panic_on_oops = 1
fs.file-max = 6815744
fs.aio-max-nr = 1048576
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
```

### 5-10-2. カーネル・パラメーター反映

```bash
sysctl --system
```

### 5-10-3. カーネル・パラメーター値確認

```bash
sysctl -a | sort
```
:::note
カーネル・パラメーターの設定値は、下記マニュアルを参考にしています。
[[19c] データベース・インストレーション・ガイドfor Linux - Linuxのカーネル・パラメーターの構成](https://docs.oracle.com/cd/F19136_01/ladbi/configuring-kernel-parameters-for-linux.html#GUID-6127884D-FB27-45FA-9498-B2540632CBD5 "Linuxのカーネル・パラメーターの構成")
:::

:::note
kernel.shmallを設定する際、メモリー・ページ・サイズは4KiB(4096Byte)としています。
:::

## 5-11. Oracleソフトウェア・インストール・ユーザーのリソース制限設定

Oracleソフトウェア・インストール・ユーザーとは、ここではoracleユーザーを指します。oracleユーザーのリソース制限を設定します。

### 5-11-1. Oracleソフトウェア・インストール・ユーザーのリソース制限設定手順

```file:/etc/security/limits.d/oracle.conf
oracle soft nofile  1024
oracle hard nofile  65536
oracle soft nproc   4098
oracle hard nproc   16384
oracle soft stack   10240
oracle hard stack   32768
oracle hard memlock 15099500
oracle soft memlock 15099500
```

### 5-11-2. Oracleソフトウェア・インストール・ユーザーのリソース制限設定確認

下記コマンドをoracleユーザーで実行します。
```bash
# ソフト・リミットの確認
ulimit -aS
# ハード・リミットの確認
ulimit -aH
```

:::note
リソース制限の設定値は、下記マニュアルを参考にしています。
[[19c] データベース・インストレーション・ガイドfor Linux - Oracleソフトウェア・インストール・ユーザーのリソース制限の確認](https://docs.oracle.com/cd/F19136_01/ladbi/checking-resource-limits-for-oracle-software-installation-users.html#GUID-293874BD-8069-470F-BEBF-A77C06618D5A "Oracleソフトウェア・インストール・ユーザーのリソース制限の確認")
:::

## 5-12. 透過的なHugePagesの無効化

推奨設定である、透過的なHugePagesを無効化します。

### 5-12-1. 透過的なHugePagesの無効化設定

```diff:/etc/default/grub
- 6  GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet"
+ 6  GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet transparent_hugepage=never"
```

上記設定後、grub2-mkconfigコマンドで反映後、OSを再起動します。

```bash
# BIOS版
grub2-mkconfig -o /boot/grub2/grub.cfg
# UEFI版
grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
shutdown -r now
```

### 5-12-2. 透過的なHugePagesの無効化確認

再起動後、透過的なHugePagesが無効化(always madvise [never] と表示)されることを確認します。

```bash
cat /sys/kernel/mm/transparent_hugepage/enabled
```

:::note
透過的なHugePagesの無効化設定は、下記マニュアルを参考にしています。
[[19c] データベース管理者リファレンスfor Linux and UNIX System-Based Operating Systems - A.7.6 透過的なHugePagesの無効化](https://docs.oracle.com/cd/F19136_01/unxar/administering-oracle-database-on-linux.html#GUID-02E9147D-D565-4AF8-B12A-8E6E9F74BEEA "A.7.6 透過的なHugePagesの無効化")
[Deploying Oracle Database 12c Release 2 on Red Hat Enterprise Linux 7 - 3.4.6. Optimizing Database Storage using Automatic System Tuning](https://access.redhat.com/documentation/en-us/reference_architectures/2017/html-single/deploying_oracle_database_12c_release_2_on_red_hat_enterprise_linux_7/index "3.4.6. Optimizing Database Storage using Automatic System Tuning")
:::
:::note
HugePagesの設定は、データベース作成後に設定します。
:::

## 5-13. DB用ディスクの作成

DB用ディスク /dev/sdb にパーティションを作成し、xfsでフォーマットします。

### 5-13-1. パーティションの作成

partedでパーティションを作成します。/dev/sdb全体を1つのパーティションとして使用します。

```bash
parted -s /dev/sdb mklabel gpt
parted -s /dev/sdb -- mkpart primary 1 -1
```

### 5-13-2. xfsファイルシステムの作成

/dev/sdb1上にxfsファイルシステムを作成します。

```bash
mkfs.xfs /dev/sdb1
```

## 5-14. ディレクトリーの作成

Oracle Enterprise managerを構成するにあたり、必要なディレクトリーを作成し、権限を付与します。

```bash
mkdir -p /u01/app/oracle/oradata
chown -R oracle:oinstall /u01/app
chmod -R 775 /u01/app
ls -lR /u01
```

## 5-15. /etc/fstab設定

/etc/fstabを設定します。

```bash
printf "%-42s%-24s%-8s%-16s%-2s%-2s\n" $(blkid /dev/sdb1 | gawk '{print $2}' | tr -d '"') /u01/app/oracle/oradata xfs defaults 0 0 >> /etc/fstab
printf "%-42s%-24s%-8s%-16s%2s%2s\n" /dev/cdrom /media iso9660 defaults,noauto,ro 0 0 >> /etc/fstab
cat /etc/fstab
```

その後、/u01/app/oracle/oradataをマウントし、権限を変更します。

```bash
mount /u01/app/oracle/oradata
df -k
chown oracle:oinstall /u01/app/oracle/oradata
ls -ld /u01/app/oracle/oradata
```

# 6. Oracle Database 19c のインストール

本章の設定では、指定がない限り全てoracleユーザーで実行します。

## 6-1. Oracle Database 19c Enterprise Edition を展開

ORACLE_HOME(/u01/app/oracle/product/19.3.0/dbhome_1)ディレクトリーを作成し、Oracle Database Enterprise Edition 19cを展開します。

```bash
mkdir -p /u01/app/oracle/oradata/lib

###ここで、LINUX.X64_193000_db_home.zip をsftp等で/u01/app/oracle/oradata/libに格納します。
mkdir -p /u01/app/oracle/product/19.3.0/dbhome_1
unzip /u01/app/oracle/oradata/lib/LINUX.X64_193000_db_home.zip -d /u01/app/oracle/product/19.3.0/dbhome_1
rm /u01/app/oracle/oradata/lib/LINUX.X64_193000_db_home.zip
```

## 6-2. Oracle Database 19c Enterprise Editionの導入

下記コマンドでインストーラーを起動し、OUIのウィザードに沿ってインストールします。
※ 詳細は省略します。太字はデフォルトから変更する箇所です。

```bash
/u01/app/oracle/product/19.3.0/dbhome_1/runInstaller
```

1. 構成オプションの選択 → **ソフトウェアのみの設定**
2. データベース・インストール・オプションの選択 → 単一インスタンス・データベースのインストール
3. データベース・エディションの選択 → Enterprise Edition
4. インストール場所の指定
   1. Oracleベース → /u01/app/oracle
5. インベントリの作成 :
   1. インベントリ・ディレクトリ → /u01/app/oraInventory
   2. oraInventoryグループ名 → oinstall
6. 権限のあるオペレーティング・システム・グループ
   1. データベース管理者(OSDBA)グループ → dba
   2. データベース・オペレータ(OSOPER)グループ(オプション) → oper
   3. データベースのバックアップおよびリカバリ(OSDBACKUPDBA)グループ → backupdba
   4. Data Guard管理者(OSDGDBA)グループ → dgdba
   5. 暗号化鍵管理(OSKMDBA)グループ → kmdba
   6. Real Application Cluster管理(OSRACDBA)グループ → racdba
7. rootスクリプトの実行構成
   1. 構成スクリプトを自動的に実行 → 無効
8. サマリー : **レスポンス・ファイルの保存 (/home/oracle/db.rsp)**
9. 構成スクリプトの実行 (ここだけrootユーザーで実行)

```bash
/u01/app/oraInventory/orainstRoot.sh
/u01/app/oracle/product/19.3.0/dbhome_1/root.sh
```

## 6-3. oracleユーザーの環境変数を設定

oracleユーザーの環境変数を設定するため、.bash_profileに下記の行を追記します。

```file:/home/oracle/.bash_profile
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1
export PATH=${PATH}:${ORACLE_HOME}/bin:${ORACLE_HOME}/jdk/bin
export LD_LIBRARY_PATH=${ORACLE_HOME}/lib
export NLS_LANG=JAPANESE_JAPAN.AL32UTF8
export LANG=ja_JP.UTF-8
```
.bash_profileに設定後、下記コマンドで.bash_profileを読み込みます。

```bash
. /home/oracle/.bash_profile
```

# 7. データベースの作成

DBCAを使用してデータベースを作成します。非CDBデータベースとCDBデータベースの2パターンを記載します。

## 7-1. 非CDBデータベース

DBCAを起動し、ウィザードに沿って作成します。
主な構成は次の通りです。

|#|設定項目|設定値|
|-:|--|--|
|1|DB名|ncdb1|
|2|ブロックサイズ|8kByte(8,192Byte)|
|3|データベース・キャラクタ・セット|Unicode(AL32UTF8)|
|4|非CDB/CDB構成|非CDB構成|

※ 詳細は省略します。太字はデフォルトから変更する箇所です。

```bash
${ORACLE_HOME}/bin/dbca
```

1. データベース操作の選択 → データベースの作成
2. データベース作成モードの選択 → **拡張構成**
3. データベース・デプロイメント・タイプの選択
   1. データベース・タイプ → Oracle単一インスタンス・データベース
   2. データベースのテンプレート → **カスタム・データベース**
4. データべースIDの詳細の指定
   1. グローバル・データベース名 → **ncdb1.example.com**
   2. SID → **ncdb1**
   3. コンテナ・データベースとして作成 → **無効**
5. データベース記憶域オプションの選択
   1. データベース記憶域属性にテンプレート・ファイルを使用 → **未選択**
   2. データベース記憶域属性に次を使用 → **選択**
      1. データベース・ファイルの記憶域タイプ → ファイルシステム
      2. データベース・ファイルの位置 → {ORACLE_BASE}/oradata/{DB_UNIQUE_NAME}
      3. Oracle Managed Filesの使用(OMF) → 無効
6. 高速リカバリ・オプションの選択
   1. 高速リカバリ領域の指定 → 無効
   2. アーカイブ有効化 → 無効
7. ネットワーク構成詳細の指定
   1. 新規リスナーの作成 → **有効**
      1. リスナー名 → **LISTENER**
      2. リスナー・ポート → **1521**
8. データベース・オプションの選択
   1. Oracle JVM → **無効**
   2. Oracle Text → **無効**
   3. Oracle Multimedia → **無効**
   4. Oracle OLAP → **無効**
   5. Oracle Spatial → **無効**
   6. Oracle Label Security → 無効
   7. Oracle Application Express → 無効
   8. Oracle Database Vault → 無効
9. 構成オプションの指定
   1. メモリー → 自動共有メモリー管理を使用
      1. SGAサイズ → **2048 MB**
      2. PGAサイズ → **1024 MB**
   2. サイズ指定
      1. ブロック・サイズ → 8192 BYTES
      2. 処理 → 320
   3. キャラクターセット → Unicode(AL32UTF8)を使用
      1. 各国語文字セット → AL16UTF16 - Unicode UTF-16汎用キャラクタ・セット
      2. デフォルト言語 → 日本語
      3. デフォルト地域 → 日本
   4. 接続モード → 専用サーバー・モード
   5. サンプル・スキーマ
      1. データベースにサンプル・スキーマを追加 → 無効
10. 管理オプションの指定
    1. Enterprise Manager (EM) Database Expressの構成 → **無効**
    2. Enterprise Manager (EM) Cloud Controlへの登録 → 無効
11. データベース・ユーザー資格証明の指定 → **適宜設定**
12. データベース作成オプションの選択
    1. データベースの作成 → 有効
    2.  データベース・テンプレートとして保存 → 無効
    3.  データベース作成スクリプトの生成 → **有効**
       1. 宛先ディレクトリー → {ORACLE_BASE}/admin/{DB_UNIQUE_NAME}/scripts
13. サマリー → **レスポンス・ファイルの保存 (/home/oracle/dbca_ncdb.rsp)**

## 7-2. CDBデータベース

DBCAを起動し、ウィザードに沿って作成します。
主な構成は次の通りです。

|#|設定項目|設定値|
|-:|--|--|
|1|DB名|cdb1|
|2|ブロックサイズ|8kByte(8,192Byte)|
|3|データベース・キャラクタ・セット|Unicode(AL32UTF8)|
|4|非CDB/CDB構成|CDB構成|

※ 詳細は省略します。太字はデフォルトから変更する箇所です。

```bash
${ORACLE_HOME}/bin/dbca
```

1. データベース操作の選択 → データベースの作成
2. データベース作成モードの選択 → **拡張構成**
3. データベース・デプロイメント・タイプの選択
   1. データベース・タイプ → Oracle単一インスタンス・データベース
   2. データベースのテンプレート → **カスタム・データベース**
4. データべースIDの詳細の指定
   1. グローバル・データベース名 → **cdb1.example.com**
   2. SID → **cdb1**
   3. コンテナ・データベースとして作成 → 有効
      1. PDB用のローカルUNDO表領域の使用 → 有効
      2. 空のコンテナ・データベースの作成 → 選択
5. データベース記憶域オプションの選択
   1. データベース記憶域属性にテンプレート・ファイルを使用 → **未選択**
   2. データベース記憶域属性に次を使用 → **選択**
      1. データベース・ファイルの記憶域タイプ → ファイルシステム
      2. データベース・ファイルの位置 → {ORACLE_BASE}/oradata/{DB_UNIQUE_NAME}
      3. Oracle Managed Filesの使用(OMF) → 無効
6. 高速リカバリ・オプションの選択
   1. 高速リカバリ領域の指定 → 無効
   2. アーカイブ有効化 → 無効
7. ネットワーク構成詳細の指定
   1. 新規リスナーの作成 → 無効
8. データベース・オプションの選択
   1. Oracle JVM → **無効**
   2. Oracle Text → **無効**
   3. Oracle Multimedia → **無効**
   4. Oracle OLAP → **無効**
   5. Oracle Spatial → **無効**
   6. Oracle Label Security → 無効
   7. Oracle Application Express → 無効
   8. Oracle Database Vault → 無効
9. 構成オプションの指定
   1. メモリー → 自動共有メモリー管理を使用
      1. SGAサイズ → **2048 MB**
      2. PGAサイズ → **1024 MB**
   2. サイズ指定
      1. ブロック・サイズ → 8192 BYTES
      2. 処理 → 320
   3. キャラクターセット → Unicode(AL32UTF8)を使用
      1. 各国語文字セット → AL16UTF16 - Unicode UTF-16汎用キャラクタ・セット
      2. デフォルト言語 → 日本語
      3. デフォルト地域 → 日本
   4. 接続モード → 専用サーバー・モード
10. 管理オプションの指定
    1. Enterprise Manager (EM) Database Expressの構成 → **無効**
    2. Enterprise Manager (EM) Cloud Controlへの登録 → 無効
11. データベース・ユーザー資格証明の指定 → **適宜設定**
12. データベース作成オプションの選択
    1. データベースの作成 → 有効
    2.  データベース・テンプレートとして保存 → 無効
    3.  データベース作成スクリプトの生成 → **有効**
       1. 宛先ディレクトリー → {ORACLE_BASE}/admin/{DB_UNIQUE_NAME}/scripts
13. サマリー → **レスポンス・ファイルの保存 (/home/oracle/dbca_cdb.rsp)**

:::note
Oracle DatabaseのRelease Updateパッチを適用する場合、OPatchの最新化と合わせて7-2.の後で実施します。
:::

## 7-3. CDB上のPDBの作成(pdb$seedから)

SQL*Plusでcdb1に接続し、pdb$seedからPDBを作成します。

```sql
create pluggable database pdb1_1
  admin user pdb1_1_admin identified by oracle
  roles = (dba)
  file_name_convert = ( '/u01/app/oracle/oradata/CDB1/pdbseed/', '/u01/app/oracle/oradata/CDB1/pdb1_1/' )
;
alter pluggable database pdb1_1 open;
```

pdb1_1がオープンしたことを確認します。

```sql
show pdbs
```

## 7-4. HugePagesの設定

データベースが起動している状態で、必要なHugePagesのサイズを確認し、カーネルパラメーターに登録します。HugePagesのサイズは下記コマンドを実行して推奨値を算出します(oracleユーザーで実行します)。

```bash
HPG_SZ=`grep Hugepagesize /proc/meminfo | awk {'print $2'}`
NUM_PG=1
for SEG_BYTES in `ipcs -m | awk {'print $5'} | grep "[0-9][0-9]*"`
do
   MIN_PG=`echo "$SEG_BYTES/($HPG_SZ*1024)" | bc -q`
   if [ $MIN_PG -gt 0 ]; then
      NUM_PG=`echo "$NUM_PG+$MIN_PG+1" | bc -q`
   fi
done
echo $NUM_PG
```

ここで出力された値(仮に2055とします)を、/etc/sysctl.d/99-oracledb.confに追記します(rootユーザーで実施)。

```diff:/etc/sysctl.d/99-oracledb.conf
+ 14
+ 15 # HugePages
+ 26 vm.nr_hugepages = 2055
```

:::note
HugePagesのサイズは、hugepages_settings.shというスクリプトで推奨値を計算できます。
本スクリプトはMy Oracle Support 401749.1から入手可能ですが、今回はOTNの範囲で作成のため、以下マニュアルを流用します。
[[12cR1] データベース管理者リファレンスfor Linux and UNIX System-Based Operating Systems - G.1.2 LinuxでのHugePagesの構成](https://docs.oracle.com/cd/E57425_01/121/UNXAR/appi_vlm.htm#CACFIHHA "G.1.2 LinuxでのHugePagesの構成")
このマニュアル内では、カーネル・バージョンが3.8までしか対応していませんが(Oracle Linux 7.9のデフォルトは5.4)、いくつかのサイトを確認するに、カーネル・バージョンが3.8と5.4の時で算出方法に変更ないと判断し、上記コマンドの算出としています。
:::

# 8. Oracle Database の初期設定

データベーを手動で起動・停止を行うスクリプトを記載します。
本章の設定では、指定がない限り全てoracleユーザーで実行します。

## 8-1. Oracle Database起動スクリプト(手動実行用)
Oracle Database起動スクリプト(/home/oracle/start_oracledb.sh)を次の内容で保存します。

```bash:/home/oracle/start_oracledb.sh
#!/bin/bash
export ORAENV_ASK=NO
export NLS_LANG=american_america

egrep -v '^(#|$)' /etc/oratab | while read def
do
  sid=$(echo $def | awk -F: '{ print $1 }')
  export ORACLE_SID=$sid
  . oraenv
  sqlplus -S / as sysdba << _EOF_
    startup
_EOF_

  lsnrctl status > /dev/null 2>&1
  if [ $? -ne 0 ] ; then lsnrctl start ; fi
done
```

## 8-2. Oracle Database停止スクリプト(手動実行用)

Oracle Database停止スクリプト(/home/oracle/stop_oracledb.sh)を次の内容で保存します。

```bash:/home/oracle/stop_oracledb.sh
#!/bin/bash
export ORAENV_ASK=NO
export NLS_LANG=american_america

egrep -v '^(#|$)' /etc/oratab | while read def
do
  sid=$(echo $def | awk -F: '{ print $1 }')
  export ORACLE_SID=$sid
  . oraenv
  sqlplus -S / as sysdba << _EOF_
    shutdown immediate
_EOF_

  lsnrctl status > /dev/null 2>&1
  if [ $? -eq 0 ] ; then lsnrctl stop ; fi
done
```

# 9. サンプル・スキーマの投入(オマケ)

Oracle Databaseの学習・検証を行う際、検証用のユーザーやそのデータ必要になります。
マニュアル記載のユーザー、データが含まれているサンプル・スキーマの投入方法を記載します。
本省の設定では、指定がない限り全てoracleユーザーで実行します。

:::note
サンプル・スキーマについては下記を参照下さい。
[[19c] Databaseサンプル・スキーマ](https://docs.oracle.com/cd/F19136_01/comsc/index.html "Databaseサンプル・スキーマ")
以下導入手順は下記を参考にしています。
[GitHub - oracle-samples/db-sample-schemas](https://github.com/oracle-samples/db-sample-schemas "oracle-samples / db-sample-schemas")
:::

## 9.1. サンプル・スキーマの展開

サンプル・スキーマを入手後、展開します。

```bash
mkdir -p /u01/app/oracle/oradata/lib

### ここで、2022年6月時点の最新のdb-sample-schemas-21.1.zipを
### sftp等で/u01/app/oracle/oradata/libに格納します。
cd /u01/app/oracle/oradata/lib
unzip db-sample-schemas-21.1.zip
```

:::note
サンプル・スキーマはこちらから入手してください。
[Release Oracle Database Sample Schemas](https://github.com/oracle-samples/db-sample-schemas/releases/latest "Release Oracle Database Sample Schemas")
:::

## 9-2. スクリプトの一部修正

README.mdやREADME.txtを参考に、スクリプト内の文字列を展開した先のディレクトリ名に変更します。

```bash
cd db-sample-schemas-21.1
perl -p -i.bak -e 's#__SUB__CWD__#'$(pwd)'#g' *.sql */*.sql */*.dat
```

## 9-3. ncdb1データベースにサンプル・スキーマを作成

ncdb1にサンプル・スキーマを登録します。
example表領域を作成し、サンプル・スキーマをexample表領域上に作成します。

```bash
export ORACLE_SID=ncdb1
sqlplus -S / as sysdba << _EOF_
  create tablespace example
    datafile '/u01/app/oracle/oradata/NCDB1/example01.dbf'
    size 10M autoextend on;
  select name, con_id from v\$tablespace order by con_id, ts#;
_EOF_
```

次にサンプル・スキーマを作成します。

```bash
export _logfile_dir=$(pwd)/ncdb1_log/
mkdir -p ${_logfile_dir}

sqlplus -S / as sysdba << _EOF_
  define password_system  = ******
  define password_sys     = ******
  define password_hr      = hr
  define password_oe      = oe
  define password_pm      = pm
  define password_ix      = ix
  define password_sh      = sh
  define password_bi      = bi
  define default_ts       = example
  define temp_ts          = temp
  define logfile_dir      = \${_logfile_dir}
  define connect_string   = db19cs01.example.com:1521/ncdb1.example.com

  @mksample.sql &password_system &password_sys &password_hr &password_oe &password_pm &password_ix &password_sh &password_bi &default_ts &temp_ts &logfile_dir &connect_string
_EOF_
```

念のために、パスワードの有効期限を無期限にします。

```sql
sqlplus / as sysdba << _EOF_
  alter profile default limit failed_login_attempts unlimited;
  alter profile default limit password_grace_time   unlimited;
  alter profile default limit password_life_time    unlimited;
  alter profile default limit password_lock_time    unlimited;

  set pagesize 50000
  set linesize 120
  column profile       format a16
  column resource_name format a25
  column resource_type format a15
  column limit         format a27

  select profile, resource_name, resource_type, limit from dba_profiles order by profile, resource_type, resource_name;
_EOF_
```

## 9-4. cdb1上のプラガブル・データベースpdb1_1上にサンプル・スキーマを作成

pdb1_1にサンプル・スキーマを登録します。
example表領域を作成し、サンプル・スキーマをexample表領域上に作成します。

```bash
export ORACLE_SID=cdb1
sqlplus -S / as sysdba << _EOF_
  alter session set container = pdb1_1;
  create tablespace example
    datafile '/u01/app/oracle/oradata/CDB1/pdb1_1/example01.dbf'
    size 10M autoextend on;
  select name, con_id from v\$tablespace order by con_id, ts#;
_EOF_
```

次にサンプル・スキーマを作成します。

```bash
export _logfile_dir=$(pwd)/pdb1_1_log/
mkdir -p ${_logfile_dir}

sqlplus -S / as sysdba << _EOF_
  define password_system  = ******
  define password_sys     = ******
  define password_hr      = hr
  define password_oe      = oe
  define password_pm      = pm
  define password_ix      = ix
  define password_sh      = sh
  define password_bi      = bi
  define default_ts       = example
  define temp_ts          = temp
  define logfile_dir      = \${_logfile_dir}
  define connect_string   = db19cs01.example.com:1521/pdb1_1.example.com

  @mksample.sql &password_system &password_sys &password_hr &password_oe &password_pm &password_ix &password_sh &password_bi &default_ts &temp_ts &logfile_dir &connect_string
_EOF_
```

念のために、パスワードの有効期限を無期限にします。

```sql
sqlplus / as sysdba << _EOF_
  alter session set container = pdb1_1;

  alter profile default limit failed_login_attempts unlimited;
  alter profile default limit password_grace_time   unlimited;
  alter profile default limit password_life_time    unlimited;
  alter profile default limit password_lock_time    unlimited;

  set pagesize 50000
  set linesize 120
  column profile       format a16
  column resource_name format a25
  column resource_type format a15
  column limit         format a27

  select profile, resource_name, resource_type, limit from dba_profiles order by profile, resource_type, resource_name;
_EOF_
```