SQL Server から Azure SQL Database に移行するための評価ルール
適用対象: Azure SQL データベース
移行ツールでは、お使いのソース SQL Server インスタンスを複数の評価ルールを実行して検証し、SQL Server データベースを Azure SQL Database に移行する前に解決する必要のある問題を特定します。
この記事では、お使いの SQL Server データベースを Azure SQL Database に移行できるかどうかの評価に使用するルールの一覧を示します。
ルールの概要
BULK INSERT
タイトル: Azure SQL Database では、Azure BLOB 以外のデータ ソースでの BULK INSERT はサポートされていません。
カテゴリ: 問題
説明
Azure SQL Database は、ファイル共有または Windows フォルダーにはアクセスできません。 Azure BLOB を参照しない BULK INSERT
ステートメントの具体的な使用方法については、[影響を受けるオブジェクト] セクションを参照してください。 Azure Blob Storage をソースとしない BULK INSERT
のオブジェクトは、Azure SQL Database に移行後機能しません。
推奨事項
Azure SQL Database に移行するときには、ローカル ファイルまたはファイル共有を使用する BULK INSERT
ステートメントで場合、代わりに Azure Blob Storage のファイルを使用するよう変換する必要があります。 または、Azure VM 上の SQL Server に移行します。
COMPUTE 句
タイトル: COMPUTE 句はサポートされなくなったので、削除されました。
カテゴリ: 警告
説明
COMPUTE 句では、結果セットの最後に集計列として追加される総計が生成されます。 ただし、この句は Azure SQL Database ではサポートされなくなりました。
推奨
代わりに ROLLUP 演算子を使用して、T-SQL モジュールを書き直す必要があります。 以下のコードは、COMPUTE
を ROLLUP
に置き換える方法を示しています。
USE AdventureWorks2022;
GO
SELECT SalesOrderID,
UnitPrice,
UnitPriceDiscount
FROM Sales.SalesOrderDetail
ORDER BY SalesOrderID COMPUTE SUM(UnitPrice),
SUM(UnitPriceDiscount) BY SalesOrderID;
GO
SELECT SalesOrderID,
UnitPrice,
UnitPriceDiscount,
SUM(UnitPrice) AS UnitPrice,
SUM(UnitPriceDiscount) AS UnitPriceDiscount
FROM Sales.SalesOrderDetail
GROUP BY SalesOrderID,
UnitPrice,
UnitPriceDiscount
WITH ROLLUP;
詳細については、「SQL Server で廃止されたデータベース エンジンの機能」を参照してください。
CLR アセンブリ
タイトル: Azure SQL Database でサポートされていない SQL CLR アセンブリ。
カテゴリ: 問題
説明
Azure SQL Database では、SQL CLR アセンブリはサポートされていません。
推奨事項
現在、Azure SQL データベース でこれを実現する方法はありません。 代替の解決策として、Azure SQL Database でサポートされるアセンブリのみを使用するようアプリケーション コードとデータベースを変更することが推奨されます。 または、Azure SQL Managed Instance か、Azure Virtual Machines 上の SQL Server に移行します。
詳細については、「SQL Database でサポートされていない Transact-SQL の相違点」を参照してください。
CRYPTOGRAPHIC PROVIDER
タイトル: Azure SQL Database でサポートされない CREATE CRYPTOGRAPHIC PROVIDER または ALTER CRYPTOGRAPHIC PROVIDER の使用が検出されました
カテゴリ: 問題
説明
Azure SQL Database では、CRYPTOGRAPHIC PROVIDER ステートメントはファイルにアクセスできないのでサポートされていません。 CRYPTOGRAPHIC PROVIDER ステートメントの具体的な使用方法については、[影響を受けるオブジェクト] セクションを参照してください。 Azure SQL Database に移行後、CREATE CRYPTOGRAPHIC PROVIDER
または ALTER CRYPTOGRAPHIC PROVIDER
が使用されたオブジェクトは正常に動作しません。
推奨事項
CREATE CRYPTOGRAPHIC PROVIDER
または ALTER CRYPTOGRAPHIC PROVIDER
が使用されたオブジェクトを確認します。 そのようなオブジェクトが必須の場合、これらの機能の使用を削除してください。 または、Azure VM 上の SQL Server に移行します。
データベース間参照
タイトル: Azure SQL Database では、複数のデータベースにまたがるクエリはサポートされていません
カテゴリ: 問題
説明
このサーバー上のデータベースでは、Azure SQL Database ではサポートされない、複数のデータベースにまたがるクエリが使用されています。
推奨事項
Azure SQL Database では、複数のデータベースにまたがるクエリはサポートされていません。 次のアクションを推奨します。
- Azure SQL Database に依存データベースを移行し、エラスティック データベース クエリ (現時点ではプレビュー) 機能を使用して、複数の Azure SQL Database にクエリを実行します。
- 依存データセットを他のデータベースから、移行するデータベースに移動します。
- Azure SQL Managed Instance に移行します。
- Azure Virtual Machines 上の SQL Server に移行します。
詳細については、「Azure SQL データベース のエラスティック クエリの概要 (プレビュー)」を参照してください。
データベース互換
タイトル: Azure SQL Database では、100 未満の互換性レベルはサポートされていません。
カテゴリ: 警告
説明
データベース互換レベルは、SQL Server データベース エンジンのアップグレードを可能にし、それと同時に、アップグレード前と同じデータベース互換レベルを維持することで接続するアプリケーションの機能的な状態を保つという点で、データベースの最新化支援に有益なツールです。 Azure SQL Database では、100 未満の互換性レベルはサポートされていません。
推奨
Azure SQL Managed Instance でデータベース互換レベルを 100 にアップグレードしたとき、アプリケーションの機能が損なわれないか評価します。 または、Azure VM 上の SQL Server に移行します。
データベース メール
タイトル: Azure SQL Database では、データベース メールはサポートされていません。
カテゴリ: 警告
説明
このサーバーは、Azure SQL Database ではサポートされていないデータベース メール機能を使用しています。
推奨
データベース メールをサポートする Azure SQL Managed Instance に移行することを検討します。 または、Azure Functions と SendGrid を使用して Azure SQL Database でメール機能を提供することを検討してください。
データベース プリンシパルの別名
タイトル: SYS.DATABASE_PRINCIPAL_ALIASES は廃止され、削除されました。
カテゴリ: 問題
説明
Azure SQL データベース で sys.database_principal_aliases
は廃止され、削除されました。
推奨事項
別名の代わりにロールを使用してください。
詳細については、「SQL Server で廃止されたデータベース エンジンの機能」を参照してください。
DISABLE_DEF_CNST_CHK オプション
タイトル: SET オプション DISABLE_DEF_CNST_CHK は廃止され、削除されました。
カテゴリ: 問題
説明
Azure SQL Database で、SET オプション DISABLE_DEF_CNST_CHK は廃止され、削除されました。
詳細については、「SQL Server で廃止されたデータベース エンジンの機能」を参照してください。
FASTFIRSTROW ヒント
タイトル: FASTFIRSTROW クエリ ヒントはサポートされなくなったので、削除されました。
カテゴリ: 警告
説明
Azure SQL Database で FASTFIRSTROW クエリ ヒントは廃止され、削除されました。
推奨
FASTFIRSTROW クエリ ヒントの代わりに OPTION (FAST n) を使用します。
詳細については、「SQL Server で廃止されたデータベース エンジンの機能」を参照してください。
FILESTREAM
タイトル: FILESTREAM はAzure SQL Database ではサポートされていません。
カテゴリ: 問題
説明
Azure SQL Database では、NTFS ファイル システムに、テキスト ドキュメント、画像、動画などの構造化されていないデータを格納できる FILESTREAM 機能はサポートされていません。
推奨
構造化されていないファイルは Azure Blob Storage にアップロードし、これらのファイルに関連するメタデータ (名前、種類、URL の場所、ストレージ キーなど) は Azure SQL Database に格納します。 Azure SQL データベース との間で BLOB をストリーミングできるよう、お使いのアプリケーションを再設計する必要があることがあります。 または、Azure VM 上の SQL Server に移行します。
詳細については、Azure SQL 間での BLOB のストリーミングに関するブログ」を参照してください。
リンク サーバー
タイトル: Azure SQL Database では、リンク サーバー機能はサポートされていません。
カテゴリ: 問題
説明
リンク サーバーを使用すると、SQL Server のインスタンス外の OLE DB データ ソースに対して、SQL Server データベース エンジンでコマンドを実行できます。
推奨事項
Azure SQL Database では、リンク サーバー機能はサポートされていません。 リンク サーバーが必要なくなるようにするには、次のアクションが推奨されます。
- リモートの SQL サーバーから依存データベースを特定し、これらを移行するデータベースに移動することを検討します。
- Azure に依存データベースを移行し、エラスティック データベース クエリ (プレビュー) 機能を使用して、複数の Azure SQL Database にクエリを実行できるようにします。
詳細については、「Azure SQL データベース のエラスティック クエリの概要 (プレビュー)」を参照してください。
MS DTC
タイトル: Azure SQL Database では、BEGIN DISTRIBUTED TRANSACTION はサポートされていません。
カテゴリ: 問題
説明
Azure SQL Database では、Transact SQL BEGIN DISTRIBUTED TRANSACTION によって開始され、MSDTC (Microsoft 分散トランザクション コーディネーター) で管理される分散トランザクションはサポートされていません。
推奨事項
Azure Migrate の [影響を受けるオブジェクト] セクションを確認し、BEGIN DISTRUBUTED TRANSACTION を使用するすべてのオブジェクトを確認すること。 複数のインスタンス間での分散トランザクションがサポートされている Azure SQL Managed Instance に参加しているデータベースを移行することを検討してください。
詳細については、「Azure SQL Managed Instance の複数のサーバーにまたがるトランザクション」を参照してください。
または、Azure VM 上の SQL Server に移行します。
OPENROWSET (BULK)
タイトル: Azure SQL Database では、Azure Blob Storage 以外のデータ ソースを使用した一括操作で使用される OpenRowSet はサポートされていません。
カテゴリ: 問題
説明 OPENROWSET では、ファイルのデータを読み込み、行セットとして返す、組み込みの BULK プロバイダーでの一括操作がサポートされています。 Azure SQL Database では、Azure Blob Storage 以外のデータ ソースでの OPENROWSET はサポートされていません。
推奨事項
Azure SQL Database はファイル共有と Windows フォルダーにはアクセスできないので、Azure Blob Storage からファイルをインポートする必要があります。 そのため、OPENROWSET 関数でサポートされる BLOB の型は DATASOURCE のみとなります。 または、Azure 仮想マシン上の SQL Server に移行します
詳細については、「SQL Database への移行時に Transact-SQL の相違点を解決する」を参照してください。
OPENROWSET (プロバイダー)
タイトル: Azure SQL Database では、OpenRowSet は SQL または SQL 以外のプロバイダーでサポートされていません。
カテゴリ: 問題
説明
SQL または SQL 以外のプロバイダーでの OpenRowSet は、リンク サーバー内のテーブルにアクセスする代替手段であり、一時的でOLE DB を使用してリモート データに接続しアクセスする臨時の手段です。 Azure SQL Database では、OpenRowSet は SQL または SQL 以外のプロバイダーでサポートされていません。
推奨
Azure SQL Database では、OPENROWSET を Azure Blob Storage からのインポートのみでサポートしています。 または、Azure VM 上の SQL Server に移行します。
詳細については、「SQL Database への移行時に Transact-SQL の相違点を解決する」を参照してください。
ANSI 以外での左外部結合
タイトル: ANSI 以外のスタイルの左外部結合はサポートされなくなったので、削除されました。
カテゴリ: 警告
説明
Azure SQL Database では、ANSI 以外のスタイルでの左外部結合は廃止され、削除されました。
推奨
ANSI 結合構文を使用してください。
詳細については、「SQL Server で廃止されたデータベース エンジンの機能」を参照してください。
ANSI 以外での右外部結合
タイトル: ANSI 以外のスタイルの右外部結合はサポートされなくなったので、削除されました。
カテゴリ: 警告
説明
Azure SQL Database では、ANSI 以外のスタイルでの右外部結合は廃止され、削除されました。
推奨
ANSI 結合構文を使用してください。
詳細については、「SQL Server で廃止されたデータベース エンジンの機能」を参照してください。
Next 列
タイトル: Azure SQL Database では、NEXT という名前のテーブルと列があると、エラーが発生します。
カテゴリ: 問題
説明
NEXT という名前のテーブルまたは列が検出されました。 Microsoft SQL Server で導入されたシーケンスでは、ANSI 標準の NEXT VALUE FOR 関数が使用されます。 テーブルまたは列の名前が NEXT で、列の別名として VALUE が指定されている場合や、ANSI 標準の AS が省略されている場合、作成されたステートメントによってエラーが発生する可能性があります。
推奨
ステートメントを書き直し、テーブルまたは列の別名を指定するときに ANSI 標準の AS キーワードを使用してください。 たとえば、列の名前が NEXT で、その列に VALUE という別名が付けられている場合、クエリ SELECT NEXT VALUE FROM TABLE
でエラーが発生するため、SELECT NEXT AS VALUE FROM TABLE に書き直す必要があります。 同様に、テーブルの名前が NEXT で、その別名が VALUE である場合、SELECT Col1 FROM NEXT VALUE
のクエリでは、エラーが発生するので、SELECT Col1 FROM NEXT AS VALUE
に書き直す必要があります。
RAISERROR
タイトル: レガシ スタイルの RAISERROR 呼び出しは、それに相当する最新のものに置き換える必要があります。
カテゴリ: 警告
説明
次の例のような RAISERROR 呼び出しは、コンマとかっこが含まれないため、レガシ スタイルと呼ばれます。 RAISERROR 50001 'this is a test'
= Azure SQL Database では、RAISERROR を呼び出すこのメソッドは廃止され、削除されました。
推奨
現在の RAISERROR 構文を使用してステートメントを書き直すか、最新のアプローチの BEGIN TRY { } END TRY BEGIN CATCH { THROW; } END CATCH
を使用できるかどうかを評価してください。
詳細については、「SQL Server で廃止されたデータベース エンジンの機能」を参照してください。
サーバー監査
タイトル: Azure SQL Database の監査機能をサーバー監査の変わりに使用します
カテゴリ: 警告
説明
Azure SQL Database では、サーバー監査はサポートされていません。
推奨
サーバー監査の変わりに、Azure SQL Database の監査機能を検討します。 Azure SQL では、SQL Server よりも機能豊富な、監査がサポートされています。 Azure SQL Database では、データへのアクセス、スキーマ変更 (DDL)、データ変更 (DML)、アカウント、ロール、アクセス許可 (DCL、セキュリティ例外) など、さまざまなデータベース アクションとイベントを監査できます。 組織が Azure SQL Database Auditing を利用すると、データに対する更新やクエリなど、データベース内で発生するイベントや変更に関する分析情報を取得する能力が向上します。 または、Azure SQL Managed Instance か、Azure Virtual Machines 上の SQL Server に移行します。
詳細については、「Azure SQL データベースおよび Azure Synapse Analytics の監査」を参照してください。
サーバー資格情報
タイトル: Azure SQL Database では、サーバー スコープの資格情報はサポートされていません
カテゴリ: 警告
説明
資格情報とは、SQL Server 外のリソースへの接続に必要な認証情報 (資格情報) を含むレコードです。 Azure SQL Database ではデータベースの資格情報はサポートされていますが、SQL Server のスコープで作成されたものはサポートされていません。
推奨
Azure SQL Database では、データベース スコープの資格情報がサポートされています。 サーバー スコープの資格情報を、データベース スコープの資格情報に変換します。 または、Azure SQL Managed Instance か、Azure Virtual Machines 上の SQL Server に移行します。
詳細については、「CREATE DATABASE SCOPED CREDENTIAL」を参照してください。
Service Broker
タイトル: Azure SQL Database では、Service Broker 機能はサポートされていません
カテゴリ: 問題
説明
SQL Server Service Broker では、SQL Server データベース エンジンのメッセージングおよびキューイング アプリケーションをネイティブでサポートしています。 Azure SQL Database では、Service Broker 機能はサポートされていません。
推奨
Azure SQL Database では、Service Broker 機能はサポートされていません。 同じインスタンス内で Service Broker をサポートする Azure SQL Managed Instance に移行することを検討します。 または、Azure VM 上の SQL Server に移行します。
サーバー スコープ トリガー
タイトル: Azure SQL Database では、サーバー スコープのトリガーはサポートされていません。
カテゴリ: 警告
説明
トリガーとは、データの挿入、削除、更新など、テーブルに対する特定のアクションに応答して実行される、特殊な種類のストアド プロシージャです。 Azure SQL Database では、サーバー スコープのトリガーはサポートされていません。 Azure SQL データベース では、トリガーの次のオプションはサポートされていません。FOR LOGON、ENCRYPTION、WITH APPEND、NOT FOR REPLICATION、EXTERNAL NAME オプション (外部メソッドのサポートはありません)、ALL SERVER オプション (DDL トリガー)、LOGON イベントに対するトリガー (ログオン トリガー)。Azure SQL データベース では、CLR トリガーはサポートされていません。
推奨事項
代わりにデータベース レベルのトリガーを使用します。 または、Azure SQL Managed Instance か、Azure Virtual Machines 上の SQL Server に移行します。
詳細については、「SQL Database への移行時に Transact-SQL の相違点を解決する」を参照してください。
SQL エージェント ジョブ
タイトル: Azure SQL Database では、SQL Server エージェントのジョブは利用できません。
カテゴリ: 警告
説明
SQL Server エージェントは、SQL Server でジョブと呼ばれる、管理タスクをスケジュールに従って実行する Microsoft Windows のサービスです。 Azure SQL Database では、SQL Server エージェントのジョブは利用できません。
推奨事項
Azure SQL データベースで SQL Server エージェント ジョブの代わりとなるエラスティック ジョブを使用すること。 Azure SQL データベースのエラスティック ジョブを使用すると、複数のデータベースに対して T-SQL スクリプトを確実に実行できます。また、スクリプトは自動的に再試行され、最終的な完了が保証されます。 または、Azure SQL Managed Instance、または Azure Virtual Machines 上の SQL Server に移行することを検討します。 詳細については、「Azure SQL データベース の Elastic jobs」を参照してください。
SQL Database のサイズ
タイトル:Azure SQL データベース では、100 TB を超えるデータベース サイズはサポートされていません。
カテゴリ: 問題
説明
データベースのサイズが、サポートされる最大サイズの 100 TB を超えています。
推奨
データをアーカイブまたは圧縮できるか、または複数のデータベースにシャード化できるか評価します。 または、Azure VM 上の SQL Server に移行します。
詳細については、「仮想コアリソースの制限」を参照してください。
SQL Mail
タイトル: SQL Mail は廃止されました。
カテゴリ: 警告
説明
Azure SQL Database で、SQL Mail は廃止され、削除されました。
推奨
Azure SQL Managed Instance、または Azure Virtual Machines 上の SQL Server に移行し、データベース メールを使用することを検討します。
詳細については、「SQL Server で廃止されたデータベース エンジンの機能」を参照してください
SystemProcedures110
タイトル: Azure SQL Database で使用できない削除されたシステム ストアド プロシージャを参照するステートメントが検出されました。
カテゴリ: 警告
説明
Azure SQL Database では、sp_dboption
、sp_addserver
、sp_dropalias
、sp_activedirectory_obj
、sp_activedirectory_scp
、sp_activedirectory_start
のサポート対象外のシステムおよび拡張ストアド プロシージャは使用できません。
推奨事項
Azure SQL Database で削除されたサポート対象外のシステム プロシージャに対する参照を削除します。
詳細については、「SQL Server で廃止されたデータベース エンジンの機能」を参照してください
トレース フラグ
タイトル: Azure SQL データベース では、トレース フラグはサポートされていません
カテゴリ: 警告
説明
トレース フラグは、一時的にサーバー固有の特性を設定したり、特定の動作をオフにしたりするときに使用します。 トレース フラグは、パフォーマンスの問題を診断したり、ストアド プロシージャや複雑なシステムをデバッグするときによく使用されます。 Azure SQL Database では、トレース フラグはサポートされていません。
推奨事項
Azure Migrate の [影響を受けるオブジェクト] セクションを確認し、Azure SQL Database でサポートされていないすべてのトレース フラグを確認し、それらを削除できるかどうかを評価します。 また、限られた数のグローバル トレース フラグをサポートする Azure SQL Managed Instance や、Azure 仮想マシン上の SQL Server に移行することもできます。
詳細については、「SQL Database への移行時に Transact-SQL の相違点を解決する」を参照してください。
Windows 認証
タイトル: Azure SQL Database では、Windows 認証 (統合セキュリティ) にマップされたデータベース ユーザーはサポートされていません。
カテゴリ: 警告
説明
Azure SQL Database では、次の 2 種類の認証がサポートされます。
- SQL 認証: ユーザー名とパスワードを使用します
- Microsoft Entra 認証は、Microsoft Entra ID (旧 Azure Active Directory) で管理されている ID を使用し、管理、統合されたドメインをサポートしています。
Azure SQL Database では、Windows 認証 (統合セキュリティ) にマップされたデータベース ユーザーはサポートされていません。
推奨事項
ローカル Active Directory を Microsoft Entra ID とフェデレーションすること。 その後、Windows ID を同等の Microsoft Entra ID に置き換えることができます。 または、Azure VM 上の SQL Server に移行します。
詳細については、「SQL Database セキュリティ機能」を参照してください。
xp_cmdshell
タイトル: Azure SQL Database では、xp_cmdshell はサポートされていません。
カテゴリ: 問題
説明
Azure SQL Database では、Windows コマンド シェルを生成し、実行用の文字列を渡す xp_cmdshell
はサポートされていません。
推奨事項
Azure Migrate の [影響を受けるオブジェクト] セクションで xp_cmdshell
を使用するすべてのオブジェクトを確認し、xp_cmdshell
または影響を受けるオブジェクトに対する参照を削除できるか評価すること。 クラウドベースの自動化と構成サービスを提供する Azure Automation を調査することも検討します。 または、Azure VM 上の SQL Server に移行します。