share facebook facebook twitter menu hatena pocket slack

2017.09.19 TUE

Oracle スキーマごとにデータを RDS に移行する流れ [cloudpack OSAKA blog]

那須隆

WRITTEN BY 那須隆

ナスです。

以前、DMS での DB 移行の記事を書きました。

DB を AWS に移行する [cloudpack OSAKA blog] - sorta kinda...
ナスです。 最近、DB を AWS に移行する話がちょくちょく出てきているので、ここらでどれくらい簡単に DB 移行できるのかをご紹介したいと思います。 移行の目的 他のエントリでも書いたような気がしますが、何度でも書きますね。なぜそのシステムを移行するのか?を...

nasrinjp1.hatenablog.com

この時は何も考えずに DB のデータを移行してみましたが、スキーマごとに移行したいという要件が結構あったりしますので、今回はスキーマごとにデータを移行する流れを見てみましょう。

ソースとターゲットの接続設定

ここは上に貼ってある過去記事の通りに接続設定をします。もう一回書くのがめんどいだけです…

タスク設定

ここが前回の記事と違うところです。今回は、WORK1 というスキーマの全テーブルを RDS に移行してみます。

まず、タスクのテーブルマッピングのところで、移行するスキーマ名を入力します。ここでは WORK1 と入れてます。

そしてそのすぐ下に、変換ルールを設定する箇所があります。ここで、下の図のように設定します。

ターゲットに「スキーマ」を選択、スキーマ名に今回移行するスキーマ WORK1 を入力します。そしてアクションで「名前の変更」「WORK1」を入力します。
スキーマ変換する設定なのに、WORK1 から WORK1 に変換って指示するなんて、なんか変ですよね? でもこれには理由があります。

同じスキーマ名で移行するのになぜ変換するのか?

ここで DMS を使った Oracle データ移行のベストプラクティスのドキュメントをご紹介しましょう。


docs.aws.amazon.com

Oracle をターゲットとして使用するときは、ターゲット接続に使用されるスキーマ/ユーザーにデータを移行することを前提とします。別のスキーマにデータを移行する場合は、スキーマ変換を使用する必要があります。

って書かれています。以前書いた記事の中では、ターゲット DB は MASTER ユーザで接続しました。この状態で、スキーマ WORK1 のテーブルを移行すると、ターゲット側ではスキーマ MASTER のテーブルとして移行されてしまいます。なので、同じスキーマに移行するだけでもスキーマ変換ルールが必要になる、というわけです。

ここまで設定したら、タスク設定ではこのように見えているはずです。

では移行してみましょう!

work1-all タスクを選択して「開始」ボタンを押します。しばらくすると、ステータスが「ロード完了」となり移行が完了します。テーブル統計のタブでは、移行したテーブルとデータ件数を確認できますよ。

実際にテーブルがターゲット側に移行されているかを確認してみましょう。

SQL> select OWNER,TABLE_NAME,TABLESPACE_NAME from ALL_TABLES where OWNER like 'WORK%' order by OWNER,TABLE_NAME;

OWNER TABLE_NAME TABLESPACE_NAME  
-------- --------------  ------------------------------  
WORK1 CLOBTBL1 USERS  
WORK1 TBL1   USERS

ちゃんとスキーマ WORK1 のテーブルとして移行されていますね。

この流れでわかるとは思いますが、スキーマごとに移行する場合は、スキーマ単位で DMS のタスクを作成する必要があります。スキーマ 100 個を移行しようと思ったら、タスクも 100 個作れば ok です。

かなり雑な説明ですが、やってみるととても簡単にスキーマごとにデータ移行できることがわかります。Oracle DB を RDS に移行する機会があればぜひやってみてくださいね。

元記事はこちら

Oracle スキーマごとにデータを RDS に移行する流れ [cloudpack OSAKA blog]

那須隆

那須隆

ネットワークエンジニア、SAPコンサルタントを経て、cloudpackにJOIN。Webサイトや基幹システムのインフラ構築および運用を主に行い、シェルやPythonなどでスクリプトを組んで、インフラ運用の効率化を目指している。