Oracle DBの移行のテストの際に、運用担当者から受領したデータを蓄積するため、ローカルにDBを構築することにした。移行元データは、複数のDBサーバから来ること、それらが同一スキーマ上の同一テーブルであることや、Oracle固有のフォーマット(Data Pumpでエクスポートしたファイル)であることから、複数のDBを同居できるマルチテナントの機能を利用することにした。
マルチテナントをおさらいすると、一つのDBサーバ上に複数のデータベースを持つことができる機能。Oracle 12以降で使える。(下図参照)
コンテナデータベース上に、複数のプラガブルデータベースを作成できる。
今回は、Windowsサーバに上にOracle DBをインストールした環境で説明。
コンテナデータベース構成とし、プラガブルデータベースを作成する手順を紹介する。
Oracleのインストール
Oracleをインストールします。(ここでは割愛)
DBCAの実行
Database Configuration Assistantを実行します。
PDBの作成(DBCA)
DBCAのメニューでデータベース操作を行います。
プラガブル・データベースの管理
プラガブル・データベースの作成
ユーザ名/パスワードの入力
PDB作成を実行するためのユーザのユーザ名/パスワードを入力
他のPDB(PDB$SEED)から新しい・ブラガブルデータベースを作成
データベース名, 管理者のID/パスワードを入力
記憶域オプション(ファイルシステム)
コマンドラインによるDB操作
各PDBに対して、コマンドラインからユーザ、テーブル、インデックス等を作成します。
SQLPlusによるDB接続
sqlplus [ID]/[パスワード]@[RDSのアドレス]:1521/ORADB01
スキーマ作成(ユーザ作成)
ここではAPLというスキーマでアプリケーションを管理・操作する想定でスキーマを作成。
CREATE USER APL IDENTIFIED BY [Password];
DB管理ユーザ(APL)に権限を付与。
grant connect, resource, dba to apl;
確認
SELECT GRANTEE, GRANTED_ROLE, ADMIN_OPTION FROM SYS.DBA_ROLE_PRIVS WHERE GRANTEE = 'APL';
テーブル作成 (SQLPlus)
SQLPlusによる接続に関しては割愛
テーブル作成(DDL)の準備
![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の実行
sqlplus [ID]/[パスワード]@localhost:1521/ORADB01
alter session set current_schema = APL;
@TABLES.SQL
サーバへのアクセス許可 (ファイルアウォールの設定)
Windowsサーバにインストールした場合、サーバ外部からDBアクセスをするためにファィアウォールの設定を変更する必要がある。