Cloud Control 活用例 ~スキーマの同期~

2017.03.24

こんにちは。 YDCの さだお です。
今回のトピックは、Oracle Enterprise Manager (以下、OEM)です。
OEMは、ブラウザ画面からデータベースを管理できるツールです。

Oracle Database 11g R2 までの OEM には、次の2種類がありました。
  1. Grid Control:複数システムを統合管理
  2. Database Control:単一データベースを管理

Oracle Database 12cから、Grid Control は Cloud Control という名前に変わり、引き続き同じ機能が提供されます。
Database Control は EM Express に置き換わり、監視・管理対象が制限されました。
EM Expressで制限された機能は、すべて Cloud Control で使用することができます。
それぞれの管理対象は、下のURLから確認してください。
http://www.oracle.com/jp/store/oemlicense-function-tool-170294-ja.pdf

今回は、Cloud Control のスキーマ同期という機能を使って
異なるデータベース間でオブジェクトの差異を比較し、足りないオブジェクトをターゲット・データベースに作成する方法を紹介します。この方法は、テスト環境と本番環境の特定スキーマ内のオブジェクトを統一したいときに活用できますね。

以下は、データベース orcl (ターゲット)の HR スキーマ内のオブジェクトを、データベース orclst (ソース) と 同じにしたい場合の例です。

1. スキーマ同期の定義をつくります

まずは、スキーマ同期を定義したいと思います。

1. Oracle Enterprise Manager Cloud Control 12c にログインし、「ターゲット」から「データベース」の手順で画面を開きます。
ここでは、データベース orclorclst が管理対象となっています。

CloudControlSync1-1.png

2.「スキーマ」から「スキーマの同期」を選択します。

CloudControlSync1-2.png

3. 「スキーマの同期」画面では「作成」をクリックします。

CloudControlSync1-3.png

4.「データベース・インスタンス」にソースとなるデータベースの情報を入力し、「次へ」をクリックします。

CloudControlSync1-4.png

5. ターゲットとなる「データベース・インスタンス」情報を入力します。

CloudControlSync1-5.png

6. 比較対象となるオブジェクトを選択します。
ここでは対象スキーマとして HR が選択されています。
対象オブジェクトを絞り込みたい場合は、「オブジェクト・タイプ」や「オブジェクト名の接頭辞」を設定します。

CloudControlSync1-6.png

7. 「スキーマの同期化の作成:ルール」画面では同期ルールを設定し「次へ」をクリックします。
ここでは、デフォルトのままにします。

CloudControlSync1-7.png

8. 同期化処理の実行モードを選択します。
各ステップごとに処理を分けて実行したいため、ここでは「インタラクティブ同期化モードを使用」を選択しています。

CloudControlSync1-8.png

9. 認証情報を入力し、定義内容を確認してから「発行」をクリックします。
しばらくすると、下の画面が表示されます。

CloudControlSync1-9.png

2. 同期スクリプトを生成します

次に、同期を行う際にデータベースで実行されるスクリプトを生成します。

1. 上の画面で「スクリプトの生成」をクリックします。
すると、orclorclstHR スキーマ間の差異が表示されます。
ここでは
orclst にだけ EMP_DETAIL テーブルがある
・データベース間で JOB_DETAIL テーブルの定義が異なる
という2点が画面から分かります。

CloudControlSync2-1-1.png

JOB_DETAIL をクリックすると、TITLE 列の定義が異なることが分かります。

CloudControlSync2-1-2.png

2. 「同期化:スクリプト生成の続行」画面で、「続行」をクリックします。
認証情報を入力し、「発行」をクリックしてしばらくすると次のような画面になります。

CloudControlSync2-2.png

3. スキーマ同期を実行します

では、生成したスクリプトを実行し、同期を行いましょう。

1. 上の画面で「スクリプトの実行」をクリックすると、下のように「同期化:スクリプトを実行」画面が表示されます。
もしエラーがある場合は、ここでエラーメッセージが表示されます。

CloudControlSync3-1.png

同じ画面上の「スクリプト」タブでは、実際のスクリプトが表示されます。
実行する前に必ず確認し、問題がなければ「続行」をクリックします。

CloudControlSync3-1-2.png

2. 認証情報を入力し「発行」をクリックすると、下のような画面が表示されます。

CloudControlSync3-2.png

4. 同期結果を確認します

最後に同期されたかを確認してみましょう。

1. 「スキーマの同期」画面で先ほど定義した Sync_HR を選択し「再同期化」クリックします。
ジョブが実行され、再度スキーマが比較されます。

CloudControlSync4-1.png

2.「比較に成功しました」をクリックすると、比較結果が表示されます。
下の画面で差分は1つも表示されていません。同期されたことがわかります。

CloudControlSync4-2.png

実際に EMP_DETAILJOB_DETAIL テーブルを見てみましょう。
こちらも Cloud Control の画面です。
orclEMP_DETAIL が作成され、JOB_DETAILTITLE 列に NOT NULL とデフォルト値の定義が追加されています。

CloudControlSync4-3.png CloudControlSync4-4.png

なお、もしターゲットの JOB_DETAILTITLE 列に NULL データが存在する場合は、
スクリプトを実行すると ORA-02296 (NULL 値が見つかりました)で NOT NULL 制約をつけられず、同期は失敗します。
「スキーマの同期化の作成:ルール」画面で「ソースからデータをコピー」オプションを選択すると、テーブルを再作成してからデータをコピーしますので、エラー無く同期されます。参考までに、下の画面は「ソースからデータをコピー」オプションを利用時の JOB_DETAIL テーブルの同期スクリプトです。

CloudControlSync4-5.png

こんな場合はどうなる?

ソースとターゲットでテーブルのカラムの位置が異なるケースを考えましょう。

CloudControlSync5-1.png

カラムの位置をそろえたい場合、REF カラムをターゲット側に追加することになりますが、
ALTER TABLE 文では DENAME カラムと LOC カラムの間に追加できません。

スキーマ同期では、どのように同期されるのでしょうか。

実際に実行されるスクリプトは、下の通りです。
生成されたスクリプトを確認すると、テーブルをリネームして再作成する仕様となっていることがわかります。

CloudControlSync5-2.png

「スキーマの同期化の作成:ルール」画面で「表の列位置を無視」オプションを選択すると、カラム位置を無視します。
カラム位置を無視した場合は、REF カラムは LOC カラムの後ろに追加されます。

CloudControlSync5-3-2.png


以上、スキーマ同期をご紹介しました。
Cloud Control には他にもたくさんの機能があります。他の機能については、次回以降にご紹介しますね。
では。

Standby Expressに関するお問合わせ

  • TEL 042-333-6217
  • FAX 042-352-6101
  • LINE
  • Mail