Oracle DBサーバのマルチテナント管理 (オンプレミス)

Oracle DBの移行のテストの際に、運用担当者から受領したデータを蓄積するため、ローカルにDBを構築することにした。移行元データは、複数のDBサーバから来ること、それらが同一スキーマ上の同一テーブルであることや、Oracle固有のフォーマット(Data Pumpでエクスポートしたファイル)であることから、複数のDBを同居できるマルチテナントの機能を利用することにした。
マルチテナントをおさらいすると、一つのDBサーバ上に複数のデータベースを持つことができる機能。Oracle 12以降で使える。(下図参照)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/7444c721-97a3-e560-1d52-220a1f62e4f1.png)


コンテナデータベース上に、複数のプラガブルデータベースを作成できる。


今回は、Windowsサーバに上にOracle DBをインストールした環境で説明。
コンテナデータベース構成とし、プラガブルデータベースを作成する手順を紹介する。

# Oracleのインストール
Oracleをインストールします。(ここでは割愛)
# DBCAの実行
Database Configuration Assistantを実行します。
## PDBの作成(DBCA)
DBCAのメニューでデータベース操作を行います。
### プラガブル・データベースの管理
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/1eb8f858-7c51-8e89-d88f-3a00291d4d01.png)

### プラガブル・データベースの作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/4e93d820-40e2-646c-1690-96f134fa0f0f.png)

### ユーザ名/パスワードの入力
PDB作成を実行するためのユーザのユーザ名/パスワードを入力
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/3f2f9b6f-e9bb-a7af-7e3c-ec31a0271e8b.png)

### 他のPDB(PDB$SEED)から新しい・ブラガブルデータベースを作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/53d76631-0311-162c-4f79-bafc11137c14.png)

### データベース名, 管理者のID/パスワードを入力
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/b8f1e718-0273-b99b-9ece-e380dc2379f0.png)

### 記憶域オプション(ファイルシステム)
ファイルシステムを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/c57a5861-f8ec-87eb-07a7-790cb3fa4c36.png)
サマリー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/02f00718-aa6f-70ad-d2db-c6b2e4388d02.png)
インストール進行中
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/ad1cd2e8-8a7e-7489-74ab-d41808eb54d3.png)
完了
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/bb738537-260f-6f9c-3836-36e7e2645ae9.png)



# コマンドラインによるDB操作
各PDBに対して、コマンドラインからユーザ、テーブル、インデックス等を作成します。
## SQLPlusによるDB接続
```sql:SQLPlus ログイン 
sqlplus [ID]/[パスワード]@[RDSのアドレス]:1521/ORADB01
```
## スキーマ作成(ユーザ作成)
ここではAPLというスキーマでアプリケーションを管理・操作する想定でスキーマを作成。
```sql:ユーザ作成 
CREATE USER APL IDENTIFIED BY [Password];
```
DB管理ユーザ(APL)に権限を付与。
```sql:ユーザへの権限設定 
grant connect, resource, dba to apl;
```
確認
```sql:確認
SELECT GRANTEE, GRANTED_ROLE, ADMIN_OPTION  FROM SYS.DBA_ROLE_PRIVS WHERE GRANTEE = 'APL';
```

# テーブル作成 (SQLPlus)
SQLPlusによる接続に関しては割愛
## テーブル作成(DDL)の準備
``` SQL:テーブル作成のDDL例 (tables.sql)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/2b59146c-f7e9-2ba8-fa50-7897f4a5131e.png)--------------------------------------------------------
--  DDL for Table TBL0001
--------------------------------------------------------
CREATE TABLE "APL"."TBL0001"
 (DEPTNO NUMBER(2),
 DNAME VARCHAR2(14),
 LOC VARCHAR2(13));

 COMMENT ON TABLE "APL"."TBL0001"  IS 'Dept Table';

--------------------------------------------------------
--  DDL for Table TBL0002
--------------------------------------------------------
CREATE TABLE "APL"."TBL0002"
 (EMPNO NUMBER(4) primary key,
 ENAME VARCHAR2(10),
 JOB VARCHAR2(9),
 MGR NUMBER(4),
 HIREDATE DATE,
 SAL NUMBER(7,2),
 COMM NUMBER(7,2),
 DEPTNO NUMBER(2));

 COMMENT ON TABLE "APL"."TBL0002"  IS 'EMP Table';

```
## DDLの実行
```sql:SQLPlus ログイン 
sqlplus [ID]/[パスワード]@localhost:1521/ORADB01
```
```sql:スキーマの切り替え
alter session set current_schema = APL;
```
```sql:テーブル作成用DDL (TABLES.SQL)の実行
@TABLES.SQL
```

# サーバへのアクセス許可 (ファイルアウォールの設定)
Windowsサーバにインストールした場合、サーバ外部からDBアクセスをするためにファィアウォールの設定を変更する必要がある。
## Windowsサーバへのサインイン
## Windowsセキュリティ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/692ba8de-c916-ebcc-7d65-ebfaebf9ad76.png)

## ネットワークファイアウォールの設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/fc7312ee-8dbe-29b8-f098-51fa942b5622.png)

### 新しい規制 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/cb69dc4e-633a-05ee-fc02-a7175f6f8643.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/b3a5d928-106b-3f2b-4fa0-0b52924eccf6.png)

### Oracleのポート(TCP/IP ポート 1521)を定義
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/d91bf95b-7dd6-1aa0-1055-63db64fb934c.png)
### Oracleのポートを許可
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/7883c65d-856e-66b1-7889-7b0251cf7e75.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/bb7b141d-ff52-b1e4-e6b1-4c3c1ebbeb17.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/e682692d-0464-67f3-b6fc-728153cd0ae4.png)