データ移行を計画するためのワークフローは何ですか?


23

ソフトウェア開発作業の最後に何度も連れてきて、「大丈夫、この新しいコードはすべて揃っているので、テーブルを変更し、データを移行する必要があります」と言われました。

一度限りの、ヒップからのシュート、最高の推測のシナリオのようです。これはDBAとしての私の最も弱いスキルセットだと感じています。

データ移行へのアプローチ、管理、テストのためのいくつかのパターンに入りたいと思います

いくつかのベストプラクティスや、この分野の改善に役立つ教材を入手できる場所を教えてください。

回答:


14

私がそれをするたびに、私たちは2つのパスに行きました...

  1. スナップショットを取得し、別のサーバーで作業し、それを使用して移行のために何を行う必要があるかを判断し、スクリプトを作成します。
  2. スクリプトが手元にあれば、スナップショップがテストシステムに復元され、必要な時間内に実行されるかどうかを確認するタイミングが取られるか、可能な限り調整および変更されます。
  3. 利害関係者に、テストシステムのデータに問題がないように見えることを承認してもらいます。

それから、週末に、あなたは予定された停止を持っています:

  1. 金曜日の夜、データベースを使用するシステムがダウンし、完全なコールドバックアップが作成され、データへの移行/変更/なんでもするためにスクリプトが実行されます
  2. システムは、何らかのプライベートアドレスの下で再起動されるか、何らかの方法でセットアップされ、受け入れテストのために利害関係者以外には公開されません。
  3. 利害関係者が承認すると、システムがオンラインになり公開されます。そうでない場合、データベースは金曜日の夜に作成されたバックアップから復元され、プロセスを最初からやり直します。

私たちのスケジュールでは、データベース担当者は通常、金曜日の午後6時から土曜日の午前10時までバックアップおよび移行スクリプトを実行していました。したがって、私たちの目標は8時間以内に実行することでした(そのうち6回はバックアップでした)。 d利害関係者にリリースされる前に、テストと修正のための時間があります。

利害関係者には事前に時間枠が与えられていたため、時間枠の最初に週末をテスト用に開いておくことがわかっていました。また、ウィンドウの終わり、通常は日曜日の午後に通知され、誰もがサインオフしなかった場合、ロールバックを開始する必要があります。

ああ、もちろん...受け入れテストのいずれかで誰かが変更を加え、変更を加えた場合、利害関係者のサインオフはすべて無効になり、再テストが必要になりました...一度に1つずつ適用するのではなく、問題を探して修正をバッチとして実行するために、しばらくそれらを提供するようにします。

幸いなことに、ダウンタイムを大幅に減らすことができない状況の1つになったのは、移行するシステムがユーザー入力ではなくスクリプトから供給されていたため、2つの並列システムを実行して、それらを交換することでした。物事がサインオフされたとき。(問題が発生したのは一度だけで、上司が私たちが完全なバックアップを取ると主張したとき、全体が別のIPでまだオンラインになっていることを理解していなかったので...悪い日は5時間の停止になりました。)


6

それはすべて、データベースをサポートするハードウェアの能力とシステムの可用性に関する合意と比較したデータ量に依存します。ダウンタイムが発生しますか、それともすべてオンラインで行う必要がありますか?データのクリーニングを開始し、古くなった行を可能な限り消去します。これは、それ自体のプロジェクトです。データがクリーンで価値がある場合は、ユーザーにダウンタイムを決定してもらいます。ダウンタイムが利用可能な場合、既存のデータに適用して更新されたコレクションを形成する必要がある既知の変換であれば、かなり簡単です。ダウンタイムがまったくない、またはほとんどない場合、チャレンジが開始されます。Oracleは、オンラインのテーブル再定義や11gの新機能、エディションベースの再定義など、いくつかの方法でこれをサポートしています。オンラインの表の再定義を使用すると、表を準備して新しい形式にすることができます。これは、アプリケーションが古い形式のテーブルで実行されているときに実行できます。すべての準備が整ったら、新しい形式のテーブルに切り替えることができます。これは、新しいアプリケーションコードを導入する瞬間でもあり、同時に新しいアプリケーションを配置するために必要なダウンタイムの始まりを示します。Oracle Golden Gateなどのツールを使用して、ライブデータを移行する前に古い履歴データを準備し、同期を保つことができます。このようなシナリオでは、古いデータベースの役割を引き継ぐ新しいデータベースを効果的に構築します。エディションベースの再定義は、テーブルの変更が不要な場合に適しています。考慮すべきオプションは山ほどありますが、常に機能する良いルールを与えるのは難しいと思います。これは、新しいアプリケーションコードを導入する瞬間でもあり、同時に新しいアプリケーションを配置するために必要なダウンタイムの始まりを示します。Oracle Golden Gateなどのツールを使用して、ライブデータを移行する前に古い履歴データを準備し、同期を保つことができます。このようなシナリオでは、古いデータベースの役割を引き継ぐ新しいデータベースを効果的に構築します。エディションベースの再定義は、テーブルの変更が不要な場合に適しています。考慮すべきオプションは山ほどありますが、常に機能する良いルールを与えるのは難しいと思います。これは、新しいアプリケーションコードを導入する瞬間でもあり、同時に新しいアプリケーションを配置するために必要なダウンタイムの始まりを示します。Oracle Golden Gateなどのツールを使用して、ライブデータを移行する前に古い履歴データを準備し、同期を保つことができます。このようなシナリオでは、古いデータベースの役割を引き継ぐ新しいデータベースを効果的に構築します。エディションベースの再定義は、テーブルの変更が不要な場合に適しています。考慮すべきオプションは山ほどありますが、常に機能する良いルールを与えるのは難しいと思います。Oracle Golden Gateなどのツールを使用して、ライブデータを移行する前に古い履歴データを準備し、同期を保つことができます。このようなシナリオでは、古いデータベースの役割を引き継ぐ新しいデータベースを効果的に構築します。エディションベースの再定義は、テーブルの変更が不要な場合に適しています。考慮すべきオプションは山ほどありますが、常に機能する良いルールを与えるのは難しいと思います。Oracle Golden Gateなどのツールを使用して、ライブデータを移行する前に古い履歴データを準備し、同期を保つことができます。このようなシナリオでは、古いデータベースの役割を引き継ぐ新しいデータベースを効果的に構築します。エディションベースの再定義は、テーブルの変更が不要な場合に適しています。考慮すべきオプションは山ほどありますが、常に機能する良いルールを与えるのは難しいと思います。

興味深いテーマです、ロナルド。


5

これまでのところ良い答えです。考慮すべき点をさらにいくつか追加します。

まず、単純なSQL DMLを使用して移行を実行できる場合、SQLエンジンに大きく依存して、すべての行が正常に処理されることを確認できます。ただし、移行には多少複雑で、データの新しい構造への移行に伴い実際のデータ変換が行われた移行にも関わってきました。これらの場合、次の項目を処理できるプロセスがあることが重要です。

  • 処理されたレコードに対するレコードをカウントします。
  • 変換中にエラーを検出し、修正を特定したら変換を続行し、「不良」レコードの再処理を可能にする方法でエラーを処理します。
  • レコード数には「不良」レコードを含める必要があります。つまり、records-in = records-out-good + bad-recordsです。
  • トランスフォーメーションがレコード数を変更する場合(たとえば、1つの入力レコードが複数の出力レコードになる場合)、最終的に出力レコードの数を予測し、その数に対して結果をテストする方法があります。

私が付け加える他のポイントは、物事が計画通りに進まない場合/いつ行うかについて計画を立てることが重要だということです。これは展開全体の実際の機能ですが、頻繁に見直されているように思えるので、言及する価値があると思いました。


4

方法の概要

で開始する

  • test / UAT / "working DB"に "after"データベースがあります
  • 実稼働環境に「以前の」データベースがあります。したがって、どこかで「参照DB」という本番環境のコピーを作成するために使用します。そして「スクリプトテストDB」として
  • また、ALTERなどを含む多数の開発スクリプトがあることを願っています。もしそうなら、開発スクリプトを適用した本番環境の別のコピーが、きれいに、順番に役立つ= "change DB"

次に、Red Gate CompareツールまたはEmbarcadero SQL Change managerのようなものをダウンロードします。それなしでは簡単に移行できません。コストは、節約される時間の量に対して些細なものです。そして最も重要なのは、生成されたスクリプトが単一のトランザクションで変更を加えることで、クリーンな展開を意味します

さて、

  • 「参照」と「変更」を比較するツールを使用して、変更およびロールバックスクリプトを生成する
  • 変更スクリプトを「スクリプトテスト」に適用し、「作業DB」と比較します。
  • ロールバックスクリプトを「スクリプトテスト」に適用し、「」と比較して「作業DB」と比較します。

これで、いつでも適用できる安全でテスト済みの変更およびロールバックスクリプトができました。

そしてもちろん、統計的にたわごとは常に最終的に発生するため変更前にデータベースをバックアップします。

Red Gateツールは、ソース管理下にあるフォルダーと比較することもできます。次に、実際の変更スクリプトとは別に、ソース管理でALTERなどをキャプチャします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.