レガシー・マイグレーションのノウハウ&ドゥハウ。 計画時サービスからメインサービスまでシステムズの業務をご案内。

システムズのマイグレーションコラム

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を作成する
移行先DBを作成する

移行元をOracle11g、移行先をOracle19cで準備します。
今回は移行元もRDS for Oracleで構築しておりますが、
基本的にはオンプレでも同様の方法で移行を行えます。

RDSはフルマネージドサービスのため、
expdp/impdpコマンドを直接ホスト上で使用できませんので、
DBMS_DATAPUMPパッケージ を使用して、RDS上の領域にDumpファイルを保存した後、
Amazon S3 統合ファンクションを用いて、S3へ転送(および取得)する方法をご紹介します。

RDSインスタンス自体の作成手順は、本記事では省略します。

移行先DBのスナップショットを取得する
移行先DBのスナップショットを取得する

今回は2つの方法で移行を検証するため、
作成した直後のスナップショットを取得しておきます。

SQL Developerで移行する

SQL Developerの設定

以下のサイトから、SQL Developerをインストールします。
https://www.oracle.com/database/technologies/appdev/sql-developer.html

インストールが完了したら、
ツールを起動して、移行元DB(Oracle11g)の接続設定をしていきます。

SQL Developerの設定
SQL Developerの設定
SQL Developerの設定

接続出来ました。

SQL Developerの設定

移行先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;
移行元DBにユーザ定義やテーブル等を作成

試しにクエリを発行してみます。

select testuser.tesf(2) from dual;
移行元DBにユーザ定義やテーブル等を作成
select * from testuser.test_view;
移行元DBにユーザ定義やテーブル等を作成

問題なさそうです。

データベースコピー実施

では早速、データベースコピーを行ってみます。

データベースコピー実施
データベースコピー実施
データベースコピー実施
データベースコピー実施
データベースコピー実施

移行先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)側を確認してみます。

EMP表
EMP表
VIEW
VIEW
Function
Function

問題なくスキーマごと移行出来ました。
今回はスキーマ単位で丸ごとコピーしましたが、
表領域やオブジェクト単位、部分的なコピーも可能です。

次回は、Data Pumpでの移行をご紹介します。(次回のコラムに続く)

↓↓ システムズのAWS DBマイグレーションに関する、Webページはこちらをご覧ください。 ↓↓

【 AWS DBマイグレーション 】

コラム一覧へ戻る
pagetop