9

テスト データベースに新しいデータベース ダイアグラムを作成しました。これは sitde01 サーバーにあります。今、私はそれを別のサーバーに移動したいと考えています。別のサーバーに移行するにはどうすればよいですか。

4

3 に答える 3

16

それは可能ですが、それは王室の苦痛です。プロセスの概要といくつかのスクリプトを次に示します。

ダイアグラムは、sysDiagramsという名前の「システム」テーブルに格納されます。このテーブル(のみ?)は、SSMSのダイアグラムノードをクリックすると作成され、ダイアグラムをサポートするオブジェクトを作成するかどうかを尋ねられ、[はい]をクリックします。ソースデータベースとターゲットデータベースの両方でこれを行います。

「ソース」データベースに1つまたは複数の図を作成します。

sysDiagramsの構造と内容を確認します。diagram_id列はID列であることに注意してください。ダイアグラムごとに1行が格納されます。(気にしませんが、SQL 2000では4行または5行でした。)

同じSQLインスタンス上の別のデータベースにコピーするには、テーブル間でINSERT ...SELECT...を実行するのが最も簡単な方法です。そのID列が邪魔になると、SET IDENTITY_INSERTに煩わされ、ターゲットコンピューターに新しいID値を割り当てる必要があります。刺激的ですが、それほど難しくはありません。

次のスクリプトは、あるデータベースから同じサーバー上にある別のデータベースにすべての図をコピーします(これは、ドロップして再作成される傾向のあるデータベースから、作成に時間がかかりすぎる複雑な図をアーカイブする方法です):

USE TargetDatabase

DELETE sysDiagrams
 where name in (select name from SourceDatabase.dbo.sysDiagrams)

SET identity_insert sysDiagrams on

INSERT sysDiagrams (name, principal_id, diagram_id, version, definition)
 select name, principal_id, diagram_id, version, definition
  from SourceDatabase.dbo.sysDiagrams

SET identity_insert sysDiagrams off

別のSQLインスタンス(またはサーバー)上の別のデータベースにコピーするのは、さらに難しくなります。私は一時的に作成されたリンクサーバー定義を使用し、何年も前に弾丸を吐いたスクリプトを使用し、二度と変更する必要はありません(つまり、別の質問を投稿して、知っている人がどのように機能するかを教えてくれます)、適切な4つでスクリプトを変更します-パーツの命名規則。他のオプション(OPENROWSETなど)も可能ですが、私はそれらにあまり詳しくありません。

于 2011-05-13T20:37:32.240 に答える
2

ダイアグラムをあるインスタンスまたはサーバーから別のインスタンスまたはサーバーに移動したいが、データベース全体を復元したくない場合は、次の操作を実行できます。

  1. 存在しない場合は、ターゲット サーバーにデータベースを作成します。また、SSMS の [データベース ダイアグラム] ノードをクリックして、dbo.sysDiagrams テーブルを作成する必要があります。
  2. 次に、ダイアグラムに必要なすべてのスキーマ情報を必ずインポートしてください。あなたの図はこれらを指すからです。つまり、テーブル、PK、FK などが存在する必要があります。
  3. ソース サーバーでデータベースをバックアップします。
  4. ターゲット サーバー上の一時データベースに復元します。このようにして、すべてのダイアグラム情報をターゲット サーバーに取得します。
  5. 一時データベースの dbo.sysDiagrams テーブルからターゲット データベースの dbo.sysDiagram テーブルに情報をコピーします。次のようなことができます (Philip Kelley のコードを採用):

    USE TargetDatabase 
    
    SET identity_insert sysDiagrams on 
    
    INSERT sysDiagrams (name, principal_id, diagram_id, version, definition) 
     select name, principal_id, diagram_id, version, definition 
      from TempDatabase.dbo.sysDiagrams 
    
    SET identity_insert sysDiagrams off 
    

このソリューションは私にとって非常にうまくいきました。もちろん、すべてのダイアグラムが必要ない場合や、ターゲット データベースに他のダイアグラムが存在する場合は、select ステートメントをフィルター処理し、identity_insert 操作を行う必要がありますが、これはそれほど難しくありません。

于 2011-10-04T12:23:08.133 に答える
0

データベース ダイアグラムを移動するには、そのダイアグラムに含まれるすべてのテーブルとトリガーを移行する必要があります。これを行う最も簡単な方法は、データベースをバックアップし、他のサーバーに復元することです。

于 2011-05-13T13:53:01.257 に答える