スキーマ比較の概要
適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance
スキーマ比較ツールを使用すると、2 つのデータベース定義を比較できます。比較のソースとターゲットは、接続されたデータベース、SQL データベース プロジェクト、.dacpac
ファイルの任意の組み合わせにすることができます。 比較が完了したら、ソース管理の差分と同様な方法で、比較の結果はターゲットをソースと同一にする一連のアクションとして表示されます。 Schema Compare インターフェイスから、ターゲットを直接更新するか (ターゲットがプロジェクトまたはデータベースの場合)、同じ効果がある更新スクリプトを生成することができます。
Schema Compare には次の機能があります。
- 2 つの dacpac ファイル、データベース、または SQL プロジェクト間でスキーマを比較する。
- ソースと一致させるためにターゲットに対して実行する必要があるアクションのセットとして結果を表示する。
- 結果に一覧表示されるアクションを選択的に除外する。
- 比較の範囲を制御するオプションを設定する。
- ターゲットに直接変更を適用するか、後で変更を適用するスクリプトを生成します。
- 比較を保存する
機能
ソースとターゲットとの相違点はグリッドに表示されるので、簡単に確認できます。 比較は、次のものから派生されるデータベース モデル間でいずれかの方向に行うことができます。
- 接続されたデータベース
- SQL データベース プロジェクト
.dacpac
ファイル
Schema Compare では、結果グリッドまたはスクリプト形式で各違いをより細かく表示して確認でき、変更の詳細は 1 行単位のレベルで確認できます。 ターゲットを更新する前に、特定の違いを選択的に除外することもできます。 Schema Compare ツールは、Visual Studio、Azure Data Studio、コマンド ラインで利用できます。
スキーマ比較オプション
スキーマ比較のオプションは、DacFx .NET ライブラリから利用可能な展開オプションから取得されます。 設定できるオプションは次のとおりです。
- 空白を無視する
- パーティション構成を無視する
- 列の順序を無視する
- ソースにないインデックスを削除する
- データ損失の可能性をブロックする
比較に含まれるオブジェクトの種類も構成できます。 これらのオブジェクトには、テーブル、ストアド プロシージャ、インデックス、アクセス許可、ユーザー定義型などが含まれます。
Schema Compare ファイル
Schema Compare の比較定義は、schema 比較ファイルと呼ばれる .scmp
ファイルとして保存できます。 このファイルには、スキーマ比較に関する情報が XML 形式で格納され、次のものが含まれます。
- ソースとターゲットの接続情報
- 比較オプション
- 除外されたオブジェクトの種類
.scmp
ファイルを Visual Studio または Azure Data Studio で開き、後で同じ比較を簡単に実行したり、他のユーザーと比較を共有したりできます。
Schema Compare の起動と使用
Visual Studio の [ツール] メニューで [SQL Server] を選択し、[新規のスキーマ比較] を選択します。
または、ソリューション エクスプローラーで TradeDev プロジェクトを右クリックし、 [スキーマ比較] をクリックします。
[スキーマ比較] ウィンドウが開き、
SqlSchemaCompare1
などの名前が Visual Studio によって自動的に割り当てられます。[Schema Compare] ウィンドウのツールバーのすぐ下に、2 つのドロップダウン リストのメニューとその間に緑の矢印が表示されます。 これらのメニューを使用して、比較のソースおよびターゲットとなるデータベース定義を選択できます。
[ソースの選択] ドロップダウン リストで [ソースの選択] を選択すると、[ソース スキーマの選択] ダイアログが開きます。
プロジェクト名を右クリックして [スキーマ比較] ウィンドウを開いた場合は、ソース スキーマが既に設定されているので、手順 4 に進むことができます。
スキーマ比較ソースの選択を完了するには、プロジェクト、データベース接続、.dacpac ファイルを選択します。 ソースは、ターゲットへの変更の基礎として使用するデータベース定義です。
[Schema Compare] ウィンドウの [ターゲットの選択] ドロップダウン リストで [ターゲットの選択] を選択すると、[ターゲット スキーマの選択] ダイアログ が開きます。 スキーマ比較ターゲットの選択を完了するには、プロジェクト、データベース接続、.dacpac ファイルを選択します。 ターゲットは、評価して変更を適用できるようにしたいデータベース定義です。
[スキーマ比較] ウィンドウのツール バーにある [オプション] ボタンを選択して、比較対象のオブジェクトや無視する相違の種類などの設定を指定することもできます。
[スキーマ比較] ウィンドウのツール バーにある [比較] を選択して、比較プロセスを開始します。
比較が完了すると、プロジェクトとデータベースの間の構造上の相違点がウィンドウ上部の結果ペインに表示されます。 既定では、比較結果のすべての相違点はアクション (削除、変更、追加など) 別にグループ化されます。 結果ペインには、データベース定義間で異なっているデータベース オブジェクトが 1 行に 1 つ表示されます。 各列は、ソース スキーマまたはターゲット スキーマ (あるいはその両方) のオブジェクト、ならびにターゲット オブジェクトをソース オブジェクトと同一にするためにターゲット スキーマに対して実行されるアクションを特定します。 オブジェクトがリファクタリングされ、名前が変更または新しいスキーマに移動された場合、ソース名とターゲット名が異なり、その違いを強調表示するためにソース名が太字フォントで表示されます。
既定では、両方のスキーマで同じオブジェクトまたは更新の対象としてサポートされていないオブジェクト (たとえばビルトイン オブジェクト) は、結果リストで非表示になります。 ツール バーの適切なフィルター ボタンを選んで、非表示のオブジェクトを表示できます。
グループ化の設定を変更するには、ツール バーにある [結果のグループ化] ボックスの一覧を選びます。 結果をオブジェクトの種類別にグループ化するには (テーブル別、ビュー別、ストアド プロシージャ別など)、 [種類] をクリックします。
既定では、すべての相違点が [ターゲットの更新] アクションの対象になります。 同期対象としない相違点は除外できます。 そのためには、各行の中央にある [アクション] 列をオフにします。 または、スキーマ ペイン内の行を右クリックし、 [除外] をクリックします。 行が直ちにグレーアウトされます。ターゲット データベースを更新するために Schema Compare を使用すると、この行の保留中の変更は考慮されません。
グループ行を右クリックし、[すべて除外] または [すべて追加] をクリックする方法もあります。これは、そのグループ内のすべての相違点をオフまたはオンにするのと同じです。 この方法は、結果をスキーマ別にグループ化する場合に、特定のスキーマに対するすべての変更を対象に含めるか除外するのに便利です。
除外する行に依存オブジェクト (たとえば、ビュー行で参照されているテーブル行) がある場合、除外する行は無効になりますが、チェックボックスはオフになりません。 依存するすべての行がオフになると、無効にされた行がオフになります。 また、行がリファクタリングされる (名前が変更される、または別のスキーマに移動される) と、その行および行に依存するすべての子行のチェック ボックスが無効になります。
比較を更新した場合、スキップするように指定した違いは無視されます。
ターゲットのスキーマを更新する場合は、2 つのオプションがあります。 ターゲットがデータベースまたはプロジェクトの場合は、[スキーマ比較] ウィンドウからターゲットを直接更新できます。ターゲットがデータベースまたはデータベース ファイルの場合は、更新スクリプトを生成することができます。 生成されたスクリプトは Transact-SQL エディターに表示され、このエディター内からスクリプトを検査し、データベースに対して実行することができます。
Visual Studio の SDK スタイルの SQL プロジェクト プレビューでは、グラフィカル スキーマの比較はまだ使用できません。 Azure Data Studio を使用してスキーマを比較します。
Note
Schema Compare は Visual Studio Code では利用できません。 Azure Data Studio または Visual Studio を使用してスキーマを比較します。
コマンド パレット (
ctrl/cmd+shift+P
) の Azure Data Studio で [Schema Compare] を検索して選択します。または、[データベース プロジェクト] ビューのデータベース プロジェクトまたは [オブジェクト エクスプローラー] のデータベースを右クリックし、[Schema Compare] を選択します。
[Schema Compare] ウィンドウが開き、起動ポイントに基づいてソースまたはターゲットがプリセットされる場合があります。
[Schema Compare] ウィンドウのツール バーのすぐ下に、2 つの省略記号ボタンとその間に緑の矢印が表示されます。 これらのメニューを使用して、比較のソースおよびターゲットとなるデータベース定義を選択できます。
ソースまたはターゲットの省略記号ボタンを選択すると、いずれかまたは両方を更新できるダイアログが開きます。 スキーマ比較ソースの選択を完了するには、プロジェクト、データベース接続、.dacpac ファイルを選択します。 ソースは、ターゲットへの変更の基礎として使用するデータベース定義です。 ターゲットは、評価して変更を適用できるようにしたいデータベース定義です。
選択が完了したら、[OK] を選択してダイアログを閉じ、[Schema Compare] ウィンドウに戻ります。
[スキーマ比較] ウィンドウのツール バーにある [オプション] ボタンを選択して、比較対象のオブジェクトや無視する相違の種類などの設定を指定することもできます。
[スキーマ比較] ウィンドウのツール バーにある [比較] を選択して、比較プロセスを開始します。
比較が完了すると、プロジェクトとデータベースの間の構造上の相違点がウィンドウ上部の結果ペインに表示されます。 既定では、比較結果のすべての相違点はアクション (削除、変更、追加など) 別にグループ化されます。 結果ペインには、データベース定義間で異なっているデータベース オブジェクトが 1 行に 1 つ表示されます。 ソース スキーマまたはターゲット スキーマ (あるいはその両方) のオブジェクトと、ターゲット オブジェクトをソース オブジェクトと同じにするためにターゲット スキーマに対して実行されるアクションが、各行に示されます。 オブジェクトがリファクタリングされ、名前が変更されたか新しいスキーマに移動された場合は、ソース名とターゲット名が異なり、不一致を強調するためにソース名が太字フォントで表示されます。
既定では、すべての相違点が [ターゲットの更新] アクションの対象になります。 同期対象としない相違点は除外できます。 そのためには、各行の中央にある [アクション] 列をオフにします。 または、スキーマ ペイン内の行を右クリックし、 [除外] をクリックします。 行が直ちにグレーアウトされます。ターゲット データベースを更新するために Schema Compare を使用すると、この行の保留中の変更は考慮されません。
グループ行を右クリックし、[すべて除外] または [すべて追加] をクリックする方法もあります。これは、そのグループ内のすべての相違点をオフまたはオンにするのと同じです。 この方法は、結果をスキーマ別にグループ化する場合に、特定のスキーマに対するすべての変更を対象に含めるか除外するのに便利です。
除外する行に依存オブジェクト (たとえば、ビュー行で参照されているテーブル行) がある場合、除外する行は無効になりますが、チェックボックスはオフになりません。 依存するすべての行がオフになったときに、無効にされた行がオフになります。 また、行がリファクタリングされる (名前が変更される、または別のスキーマに移動される) と、その行および行に依存するすべての子行のチェック ボックスが無効になります。
比較を更新すると、スキップするように指定した相違点は無視されます。
ターゲットのスキーマを更新する場合は、2 つのオプションがあります。 ターゲットがデータベースまたはプロジェクトの場合、[適用] ボタンで [スキーマ比較] ウィンドウからターゲットを直接更新できます。ターゲットがデータベースの場合、[スクリプト生成] ボタンで更新スクリプトを生成することができます。 生成されたスクリプトは Transact-SQL エディターに表示され、このエディター内からスクリプトを検査し、データベースに対して実行することができます。
Schema Compare には、Visual Studio や Azure Data Studio などのグラフィック ツールが必要です。