【初心者】いまさら Amazon RDS for Oracle に入門する

# 1. はじめに
- オンプレのOracleをAWSにマイグレする仕事があり、検証環境を作ることにした。10年以上Oracleに触れていなかったため、超基本的な環境構築について復習しつつまとめる。

# 2. やったこと
- RDS for Oracle をなるべく最小構成で作成する。
- クライアント(sqlplus)から接続、操作ができるようにする。

# 3. 構成図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/66862bcd-7446-1ac7-14fc-040f33ca2d22.png)

# 4. 手順

## 4.1 VPCなどの準備
- 構成図のVPC(パブリック／プライベートサブネット2つずつ)を作成する。
- プライベートサブネット2つを含むRDS DBサブネットグループを作成する。

## 4.2 RDS for Oracleの作成
- なるべく低コストな設定でRDS for Oracleを作成する。ただし系切替の試験をしたいため、スタンバイインスタンスは有りにする。
- 設定項目は以下の通り。
    - データベース作成方法：　標準作成
    - エンジンのオプション：　Oracle
    - データベース管理タイプ：　Amazon RDS
    - エディション：　Oracle Standard Edition Two
    - ライセンス：　License Included
    - エンジンバージョン：　Oracle 19.0.0.0.ru-2024-10.rur-2024-10.r1 (2024/12時点最新)
    - テンプレート：　開発/テスト
    - 認証情報管理：　セルフマネージド
    - DBインスタンスクラス：　db.t3.small (最も小さいインスタンスに変更)
    - ストレージタイプ： gp3
    - ストレージ割り当て： 20GiB (デフォルトの200GiBから変更)
    - マルチAZ配置：　スタンバイインスタンスを作成する　（ここだけ低コスト設定ではない）
    - コンピューティングリソース：　EC2コンピューティングリソースに接続しない（後で個別設定）
    - ネットワークタイプ：　IPv4
    - VPC：　作成したVPC
    - DBサブネットグループ：　作成したDBサブネットグループ
    - パブリックアクセス：　なし
    - VPCセキュリティグループ：　同一VPCからの管理ポート(1521/tcp)の許可
    - AZ：　指定なし（DBサブネットグループのどちらかのAZで起動）
    - Performance Insights：　チェックを外す
    - 拡張モニタリング：　チェックを外す

## 4.3 クライアント環境の作成

- Amazon Linux 2023 のインスタンスを起動し、必要なパッケージをインストールする。Oracle社のLinux用の資材ダウンロードサイトは[こちら](https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html)。※Oracle Linux 9 / RHEL9 用と書いてはあるが、、

```
# 資材をダウンロード
[ec2-user@ip-10-0-0-130 ~]$ wget https://download.oracle.com/otn_software/linux/instantclient/1919000/oracle-instantclient19.19-basic-19.19.0.0.0-1.el9.x86_64.rpm
[ec2-user@ip-10-0-0-130 ~]$ wget https://download.oracle.com/otn_software/linux/instantclient/1919000/oracle-instantclient19.19-sqlplus-19.19.0.0.0-1.el9.x86_64.rpm

# インストール (依存関係があり、3つをこの順番でインストールする必要あり）
[ec2-user@ip-10-0-0-130 ~]$ sudo dnf install -y libnsl
[ec2-user@ip-10-0-0-130 ~]$ sudo rpm -ivph oracle-instantclient19.19-basic-19.19.0.0.0-1.el9.x86_64.rpm 
[ec2-user@ip-10-0-0-130 ~]$ sudo rpm -ivph oracle-instantclient19.19-sqlplus-19.19.0.0.0-1.el9.x86_64.rpm

# 接続確認
# ORCLはデフォルトのデータベース名
[ec2-user@ip-10-0-0-130 ~]$ sqlplus admin/[password]@//[RDSエンドポイント]:1521/ORCL

SQL*Plus: Release 19.0.0.0.0 - Production on Wed Dec 25 05:18:10 2024
Version 19.19.0.0.0

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

Last Successful login time: Mon Dec 23 2024 08:59:30 +00:00

Connected to:
Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production
Version 19.25.0.0.0

SQL> 
```

## 4.4 クライアントからの基本的な操作

```
# テーブル作成
SQL> CREATE TABLE animals (
  2  id NUMBER,
  3  name VARCHAR2(50)
  4  );
Table created.

# データ追加
SQL> INSERT INTO animals VALUES(1, 'cat');
1 row created.
SQL> INSERT INTO animals VALUES(2, 'dog');
1 row created.
SQL> COMMIT;
Commit complete.

# データ確認
SQL> SELECT * FROM animals;
        ID NAME
---------- --------------------------------------------------
         1 cat
         2 dog
```


# 5. 参考URL
- [Oracle Databaseにログインし、テーブル作成してみた](https://cloud5.jp/oracle-database-login-table/)
- [RDS for Oracle のハンズオン (Immersion Day) をやってみて気づきを整理してみた](https://qiita.com/sugimount-a/items/1a8ae772d79fc52686ee)
- [SQL *Plus を使用した DB インスタンスへの接続](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_ConnectToOracleInstance.SQLPlus.html)  

# 6. 所感
- 本当に久しぶりにOracleを触ってすごく新鮮な気持ちになった。後続の検証を頑張りたい。