システムズのマイグレーションコラム
Vol.21 Oracle DBのレプリケーション移行 (その1)
2020.03.27
AWSで実践!RDSへのDBマイグレーション(Oracle to Oracle編)
世界的なクラウド化の流れの中で、商用データベース[以下、DB](特に Oracle DB)のクラウド化は一つの課題となっています。長年 Oracle DB 上で基幹系システムを運用してきた企業にとっては、大規模化・複雑化したDBの、クラウド環境への移行は難易度の高いマイグレーションに位置づけられます。
ほとんどの場合、こうした企業は本番環境のDBへの影響を最小限に抑えるため、現行環境のDump情報等を取得して、クラウド等 別環境にOracleを再構築して進めて行くケースが多いのではないでしょうか。
本連載では、DBマイグレーションをテーマに、代表的なDBマイグレーションの方法論や具体的な実装方法についてご紹介していきます。
ぜひ、お付き合いください。
目次
はじめに
本記事では、システムのAWS移行の一環として、
既存のOracle環境を、RDS for OracleへDB移行する方法をご紹介します。
移行方法の概要
まずは、RDSへの主な移行方法を表で示します。
移行方法 | メタデータの移行 | 簡易性 | コスト |
---|---|---|---|
SQL Developer | 〇 | 〇 | 無償 |
Data Pump | 〇 | △ | 無償 |
Database Migration Service(DMS) | △(一部のみ) | △ | 有償 |
SQL*Loader | × | △ | 無償 |
Oracle同士の移行の場合は、
基本的には、Data Pumpを使用する事を推奨します。
小規模なDBの場合は、SQL Developerツールの「Database Copy」が便利です。
また、注意点としましては、DMSやSQL*Loaderを選択する場合は、
それらのツールだけでは、以下のようなメタデータは移行できません。
別の方法(AWS Schema Conversion Tool など)で移行する必要があるのでご注意ください。
- ビュー、ストアドプロシージャ・トリガ・シノニムなどのオブジェクト
- 表領域・ユーザ・ロールなどのスキーマ定義
それでは実際に、SQL Developerと、 Data Pumpを用いて移行してみます。
準備
移行先DBを作成する
移行元をOracle11g、移行先をOracle19cで準備します。
今回は移行元もRDS for Oracleで構築しておりますが、
基本的にはオンプレでも同様の方法で移行を行えます。
RDSはフルマネージドサービスのため、
expdp/impdpコマンドを直接ホスト上で使用できませんので、
DBMS_DATAPUMPパッケージ を使用して、RDS上の領域にDumpファイルを保存した後、
Amazon S3 統合ファンクションを用いて、S3へ転送(および取得)する方法をご紹介します。
RDSインスタンス自体の作成手順は、本記事では省略します。
移行先DBのスナップショットを取得する
今回は2つの方法で移行を検証するため、
作成した直後のスナップショットを取得しておきます。
SQL Developerで移行する
SQL Developerの設定
以下のサイトから、SQL Developerをインストールします。
https://www.oracle.com/database/technologies/appdev/sql-developer.html
インストールが完了したら、
ツールを起動して、移行元DB(Oracle11g)の接続設定をしていきます。
接続出来ました。
移行先DB(Oracle19c)も同様に接続設定しておきます。
移行元DBにユーザ定義やテーブル等を作成
初期状態では、移行出来ているか確認しづらいため、
表領域、ユーザ、テーブル、ビュー、ファンクションを作成します。
-- テーブルスペース作成
CREATE TABLESPACE ts1 DATAFILE SIZE 200M AUTOEXTEND ON MAXSIZE 1G;
-- ユーザ作成
CREATE USER testuser IDENTIFIED BY "PASSWORD" DEFAULT TABLESPACE ts1;
-- 表領域割り当て
ALTER USER testuser QUOTA 10M ON ts1;
-- EMP表作成
CREATE TABLE testuser.emp
(
emp_no VARCHAR2(10),
emp_name VARCHAR2(50),
gender_f NUMBER(1,0),
CONSTRAINT pk1 PRIMARY KEY(emp_no)
)
TABLESPACE ts1;
-- レコード作成
INSERT INTO testuser.emp (emp_no, emp_name, gender_f) VALUES ('A001', 'test1', 0);
INSERT INTO testuser.emp (emp_no, emp_name, gender_f) VALUES ('A002', 'test2', 1);
-- ファンクションを作成
CREATE FUNCTION testuser.tesf(dt IN NUMBER) RETURN NUMBER
IS
d NUMBER;
BEGIN
d := dt * 2;
RETURN d;
END;
/
-- ビューの作成
CREATE VIEW testuser.test_view AS
SELECT
A.emp_no || '_V' AS v_emp_no,
A.emp_name || '_V' v_emp_name,
A.gender_f
FROM
emp A
WITH READ ONLY;
試しにクエリを発行してみます。
select testuser.tesf(2) from dual;
select * from testuser.test_view;
問題なさそうです。
データベースコピー実施
では早速、データベースコピーを行ってみます。
移行先DBでもスキーマを事前に作成する必要があるため、
テーブルスペース、ユーザの作成(および表領域の割り当て)を行います。
-- テーブルスペース作成
CREATE TABLESPACE ts1 DATAFILE SIZE 200M AUTOEXTEND ON MAXSIZE 1G;
-- ユーザ作成
CREATE USER testuser IDENTIFIED BY "PASSWORD" DEFAULT TABLESPACE ts1;
-- 表領域割り当て
ALTER USER testuser QUOTA 10M ON ts1;
-- 権限付与
GRANT CONNECT, RESOURCE TO testuser;
GRANT UNLIMITED TABLESPACE TO testuser;
先に進めました。 参照(K)ボタンを押すと、作成済のオブジェクトが表示されるので、 移行したい対象を(>>)で、右側に移動します。
これで完了です。とても簡単ですね。
結果確認
移行先DB(Oracle19c)側を確認してみます。
問題なくスキーマごと移行出来ました。
今回はスキーマ単位で丸ごとコピーしましたが、
表領域やオブジェクト単位、部分的なコピーも可能です。
次回は、Data Pumpでの移行をご紹介します。(次回のコラムに続く)
AWSで実践!OracleデータベースのDBマイグレーション 連載一覧
- Vol.25
- AWSで実践!DBマイグレーション時のRDS利用コスト削減
~ AWSのサービス 自動起動・停止を活用し使わない時間の料金を削減する ~ - Vol.24
- AWSで実践!異種間DBマイグレーション(Oracle to PostgreSQL編)
~ DMSでレコードを移行する ~ - Vol.23
- AWSで実践!異種間DBマイグレーション(Oracle to PostgreSQL編)
~ SCTでメタデータを移行する ~ - Vol.22
- AWSで実践!RDSへのDBマイグレーション(Oracle to Oracle編)
~ Data Pumpで移行する ~ - Vol.21
- AWSで実践!RDSへのDBマイグレーション(Oracle to Oracle編)
~ SQL Developerで移行する ~
↓↓ システムズのAWS DBマイグレーションに関する、Webページはこちらをご覧ください。 ↓↓