2011-12-22 8 views
3

小さなSQL Serverデータベースをクローンするための自動化されたプロセスを作成する必要がありますが、すべてのプライマリキーはすべてのプライマリキーがソースとは異なるはずです(すべてのユニークIDENIERを使用しています)主キー)。私たちはすべて同じスキーマを持つ数千ものデータベースを持っており、この "クローン"プロセスを使用して、キー以外のすべてのデータが一致するが、参照整合性が維持された新しいデータベースを作成する必要があります。新しいプライマリキーを持つSQL Serverデータベースをクローン

これを行う簡単な方法はありますか?

アップデート - 例:

各データベースを複製する必要がある〜250個のトランザクションテーブルがあります。 (各テーブルがのUniqueIdentifier主キー= IDを持つ)いくつかのテーブルとそれらの関係を次の簡単な例を考えてみましょう:

location 
doctor 
    doctor_location (to doctor.id via doctor_id, to location.id via location_id) 
patient 
    patient_address (to patient.id via patient_id) 
    patient_medical_history (to patient.id via patient_id) 
    patient_doctor (to patient.id via patient_id, to doctor.id via doctor_id) 
    patient_visit (to patient.id via patient_id) 
    patient_payment (to patient.id via patient_id) 

我々はデータベースのクローンを作成する必要がある理由は(買収されているオフィスが原因であるか、所有権を変更パートナーシップの変更により、これは比較的頻繁に発生します)。これが発生すると、オフィスの税金と保険情報が変更されます。法的にはこれにはまったく新しい企業体制が必要であり、オフィス間の財務は完全に分離する必要があります。

しかし、ほとんどのオフィスでは患者の履歴をすべて保持したいので、データベースを「クローン」することを選択します。新しいデータベースは財務履歴は削除されますが、すべての患者/医者のデータは維持されます。古いデータベースは "クローン"のポイントまでのすべての情報を持ちます。

新しいGUIDが必要な理由は、レポート作成の目的ですべてのデータベースを1つのリレーショナルデータベースに統合するからです。すべてのトランザクションテーブルにはGUIDがあるので、クローンの場合を除いて、これはうまくいきます。

これまでの唯一の解決策は、データベースをテキストファイルにダンプし、GUIDを検索して置き換えることでした。これはばかげて時間がかかるので、より良い方法を望んでいました。

+0

どのようなタイプのデータを持ち出したいですか?それは主に検索データですか?だからあなたはあなたのデータベースをクローンし、すべてのデータもクローンしたい、あるいは単にデータを検索したいのですか?たとえば、キー以外のデータはどういう意味ですか? – peter

+0

ルックアップデータはそれほど重要ではないので、常に同じであり、それをスクリプト化することができます(また、整数キーも固定されています)。取引データが主な関心事です。例を挙げてqを更新します。 –

答えて

0

私はデータベースの基本的な復元を作成し、主キーのすべての値を新しいGUIDに更新することでこれを行います。

はこれを自動的に行いますが CASCADEキーワードでデータベースに制約を追加する必要があるすべての外部キーを更新するには、すなわち

CREATE TABLE Orders 
(

    OrderID uniqueidentifier, 
    CustomerID uniqueidentifier REFERENCES Customer(CustomerID) ON UPDATE CASCADE, 

etc... 

あなたはCustomerテーブルの得意先コードを更新するときに今すぐ注文テーブルの得意先があまりにも更新されます。

あなたは、単純な更新クエリを使用してテーブル全体にこれを行うことができます。それは主キーだと

UPDATE TABLE Customer SET CustomerID = NewID(); 

あなたはUNIQUEIDENTIFIERと各テーブルにこれを実行する必要があると思います。

0

これを行うために、Integration Services(SSIS)パッケージを作成することができます。コントロールフローで新しいデータベースを作成し、データフローを使用してソースからデスティネーションにデータをコピーします。データフローはGUIDを置き換えるか、途中で必要な変換を行います。

DBに多数のテーブルがあり、そのうちのいくつかしか変更する必要がない場合は、MDF/LDFファイルのコピーを作成して新しいDB名前を入力し、スクリプトを使用してIDを更新します。

SSISを使用する利点は、完全に自動化する方が簡単だということです。欠点は、物事を設定するのにもう少し時間がかかることです。

関連する問題