技術ブログ
技術ブログ
目次
このエントリは、JPOUG Advent Calendar 2016 の 6日目の記事です。
なお、昨日の5日目の記事は、 Yohei Azekatsu さんの シンプルでシステマチックな Oracle Database 性能分析 with AWR & OS Watcher でした。
特に脈絡も、年末との関係もないのですが、RMANの差分増分バックアップ機能とフル・トランスポータブル・エクスポート/インポート機能を活用した停止時間を極力短くしたデータベース移行の方法について書きたいと思います。
この機能、ちょっと複雑で理解しにくいわりに、見通し良く説明した図が存在していないように以前から思っていました。
いつか機会を見つけて図にまとめたいと思っていたため、このAdvent Calendarの機会に書きたいと考えた次第です。:-)
フル・トランスポータブル・エクスポート/インポート機能は、Oracle Database 12.1.0.1から導入された機能で、トランスポータブル技術を用いてデータベース移行を行うものです。
ご存じかもしれませんが、トランスポータブル技術は、データの移行をデータファイルをコピーすることで実現しようとする技術です。ただし、Oracle Databaseでは、単にデータファイルをコピーするだけでは、あるデータベースから別のデータベースへデータを移行できません。それは、メタデータと呼ばれる管理情報も必要であるためです。
トランスポータブル技術は、データファイルをコピーするだけでなく、メタデータをエクスポート+インポートすることで、データファイルに含まれるデータをあるデータベースから別のデータベースへデータを移行できるようにした技術といえます。
トランスポータブル技術を用いた移行方法にはいくつかありますが、データベース全体を移行するために使用する方法が、フル・トランスポータブル・エクスポート/インポート機能です。
トランスポータブル技術を用いた移行方法に限らない話ですが、データベースの移行においては、なんらかの方法でデータをコピーする必要があります。
トランスポータブル技術を用いた移行方法では、データファイルがコピーする対象になりますし、DataPumpなどのエクスポート系の移行方法では、ダンプファイルがコピーする対象になります。
しかし、巨大なサイズのデータベースを移行する場合には、データのコピーに非常に時間がかかりがちです。多くのデータベース移行では、移行前のデータベースが動作するマシンとは別のマシンで新しいデータベースを動作させます。マシンとマシンをつなぐネットワーク帯域には速度的な上限がありますから、巨大なサイズのデータベースのデータをコピーするために非常に時間がかかるわけです。
データのコピーに時間がかかるということは、それだけ移行作業に要する時間が長くなり、結果としてデータベースのダウンタイムが長くなることになります。
以下に、フル・トランスポータブル・エクスポート/インポート機能を用いてデータベース移行を行った場合の図を示します。
移行作業時間の短縮には、データのコピーに要する時間の短縮が鍵となります。ネットワーク帯域を増やすなどのハードウェア的な強化が可能であればよいのですが、そうそう簡単にできるものはありませんし、短縮できる時間にも限りがあります。
このため、移行作業中にデータ全体をコピーするのではなく、移行作業前にあらかじめ古いデータをコピーしておき、移行作業中には古いデータと最新のデータの「差分」をコピーする考え方がでてきます。
フル・トランスポータブル・エクスポート/インポート機能を用いたデータベース移行では、上記の「差分」を用いたデータ転送を実現するために、RMANの差分増分バックアップ機能を活用することができます。
RMANの差分増分バックアップ機能は、変更されたブロックのみをバックアップする機能です。差分増分バックアップファイルに含まれる「差分」を、バックアップファイルに適用することもできます(差分増分リカバリ)。
RMANの差分増分バックアップ機能とフル・トランスポータブル・エクスポート/インポート機能を活用した停止時間を極力短くしたデータベース移行の方法では、これを活用します。
移行作業に先立ち、移行元のデータベースの全体バックアップをオンラインバックアップで取得しておき、移行先マシンに転送しておきます。バックアップの転送には時間がかかりますが、問題にはなりません。なぜなら、まだ移行作業は始まっておらず、移行元のシステムは通常通り使用できるためです。
ある程度の時間が経過してから、移行元のデータベースの差分増分バックアップを取得して、移行先マシンに転送し、先ほど転送した全体バックアップに適用(差分増分リカバリ)しておきます。この差分増分バックアップの取得と適用を適当な回数繰り返します。この作業により、移行元データベースと移行先データベース(正確にはバックアップ)の「差分」を小さく保つことができます。
そして、移行作業が始まったら、移行元のデータベースを読み取り専用に変更して、最後の差分増分バックアップを取得します。あわせて、トランスポータブル機能のためにメタデータもエクスポートしておきます。次に移行元データベースに「差分」を適用し、メタデータとともにフル・トランスポータブル・インポート処理を実行して、移行が完了します。
先ほどの例よりも移行時間(移行元データベースを読み取り専用に変更してから、移行元データベースがOPENできるまで)を大幅に短くできることがわかるかと思います。
明日は、渡辺 剛さんです。よろしくお願いいたします 🙂