SQL Server と Azure SQL Managed Instance での T-SQL の相違点

適用対象: Azure SQL Managed Instance

この記事では、Azure SQL Managed Instance と SQL Server の構文および動作の相違点について簡単に説明します。

SQL Managed Instance は、SQL Server データベース エンジンとの高い互換性を備えており、ほとんどの機能は SQL Managed Instance でサポートされています。

SQL Server からの移行が簡単

SQL Managed Instance には、SQL Server と比べて PaaS の制限と動作の違いがいくつかあります。 それらの相違点は、次のカテゴリに分けることができます。

これらの機能の大半はアーキテクチャ上の制約であり、サービスの機能を表します。

SQL Managed Instance で見つかり、将来解決される予定の一時的な既知の問題については、リリース ノート ページで説明しています。

可用性

Always On 可用性グループ

高可用性は SQL Managed Instance に組み込まれており、ユーザーが制御することはできません。 次のステートメントはサポートされていません。

バックアップ

SQL Managed Instance には自動バックアップがあるので、ユーザーは完全なデータベースの COPY_ONLY バックアップを作成できます。 差分、ログ、ファイル スナップショットの各バックアップはサポートされていません。

  • SQL Managed Instance では、Azure BLOB ストレージ アカウントにのみインスタンス データベースをバックアップできます。
    • サポートされるのは BACKUP TO URL のみです。
    • FILETAPE、およびバックアップ デバイスはサポートされていません。
  • ほとんどの一般的な WITH オプションがサポートされています。
    • COPY_ONLY は必須です。
    • FILE_SNAPSHOT はサポートされていません。
    • テープ オプション: REWINDNOREWINDUNLOADNOUNLOAD はサポートされていません。
    • ログ固有のオプション: NORECOVERYSTANDBYNO_TRUNCATE はサポートされていません。

制限事項:

  • SQL Managed Instance では、最大 32 個のストライプを使用するバックアップにインスタンス データベースをバックアップできます。バックアップの圧縮を使用した場合、このバックアップで最大 4 TB のデータベースに十分対応できます。

  • サービス管理 Transparent Data Encryption (TDE) を使用して暗号化されたデータベースでは、BACKUP DATABASE ... WITH COPY_ONLY は実行できません。 サービス管理 TDE では、バックアップを内部の TDE のキーで暗号化するように強制します。 キーはエクスポートできないので、バックアップを復元することはできません。 自動バックアップとポイントインタイム リストアを使用するか、代わりに顧客管理 (BYOK) TDE を使用します。 また、データベースで暗号化を無効にすることができます。

  • Managed Instance 上で行われたネイティブ バックアップを SQL Server に復元することはできません。 これは、SQL Server のどのバージョンと比べても、Managed Instance の内部データベース バージョンが高いためです。

  • SQL Managed Instance で BACKUP コマンドを使用した場合の最大バックアップ ストライプ サイズは、最大 BLOB サイズである 195 GB です。 バックアップ コマンドでストライプ サイズを増やして、個々のストライプ サイズを減らし、この制限内に収まるようにします。

    ヒント

    次の操作を実行すると、オンプレミス環境の SQL Server または仮想マシンからデータベースをバックアップするときに、この制限を回避できます。

    • URL にバックアップする代わりに DISK にバックアップします。
    • バックアップ ファイルを BLOB ストレージにアップロードします。
    • SQL Managed Instance に復元します。

    SQL Managed Instance で Restore コマンドを実行すると、アップロードされたバックアップ ファイルに対して異なる BLOB タイプが使用されるため、より大きな BLOB サイズがサポートされます。

T-SQL を使用したバックアップについては、BACKUP に関する記事をご覧ください。

セキュリティ

監査

Microsoft Azure SQL と SQL Server での監査の主な違いは次のとおりです。

  • SQL Managed Instance では、監査はサーバー レベルで機能します。 .xel ログ ファイルは、Azure BLOB ストレージに格納されます。
  • Azure SQL Database では、監査はデータベース レベルで機能します。 .xel ログ ファイルは、Azure BLOB ストレージに格納されます。
  • オンプレミスまたは仮想マシンの SQL Server では、監査はサーバー レベルで機能します。 イベントは、ファイル システムまたは Windows イベント ログに格納されます。

SQL Managed Instance の XEvent 監査では、Azure Blob Storage のターゲットがサポートされます。 ファイル ログと Windows ログはサポートされていません。

Azure Blob Storage を監査するための CREATE AUDIT 構文の主な相違点は次のとおりです。

  • .xel ファイルが配置されている Azure BLOB ストレージ コンテナーの URL の指定に使用できる新しい TO URL 構文が用意されています。
  • SQL Managed Instance は Windows ファイル共有にアクセスできないため、TO FILE 構文はサポートされていません。

詳細については、次を参照してください。

証明書

SQL Managed Instance はファイル共有と Windows フォルダーにはアクセスできないので、次の制約が適用されます。

  • CREATE FROM/BACKUP TO ファイルは、証明書ではサポートされていません。
  • FILE/ASSEMBLY からの CREATE/BACKUP 証明書はサポートされていません。 秘密キー ファイルは使用できません。

CREATE CERTIFICATE に関する記事、および BACKUP CERTIFICATE に関する記事をご覧ください。

回避策:証明書のバックアップを作成してバックアップを復元するのでなく、証明書のバイナリ コンテンツと秘密キーを取得し、それを .sql ファイルとして保存し、バイナリから作成します

CREATE CERTIFICATE  
   FROM BINARY = asn_encoded_certificate
WITH PRIVATE KEY (<private_key_options>)

資格情報

Azure Key Vault と SHARED ACCESS SIGNATURE の ID だけがサポートされています。 Windows ユーザーはサポートされていません。

CREATE CREDENTIAL に関する記事、および ALTER CREDENTIAL に関する記事をご覧ください。

暗号化プロバイダー

SQL Managed Instance はファイルにアクセスできないため、暗号化プロバイダーは作成できません。

  • CREATE CRYPTOGRAPHIC PROVIDER はサポートされていません。 CREATE CRYPTOGRAPHIC PROVIDER に関する記事をご覧ください。
  • ALTER CRYPTOGRAPHIC PROVIDER はサポートされていません。 ALTER CRYPTOGRAPHIC PROVIDER に関する記事をご覧ください。

ログインとユーザー

  • FROM CERTIFICATEFROM ASYMMETRIC KEYFROM SID を使用して作成された SQL ログインはサポートされています。 CREATE LOGIN に関する記事をご覧ください。

  • CREATE LOGIN 構文または CREATE USER FROM Login [Azure AD Login] 構文を使用して作成された Azure Active Directory (Azure AD) サーバー プリンシパル (ログイン) がサポートされます。 これらのログインは、サーバー レベルで作成されます。

    SQL Managed Instance は、CREATE USER [AADUser/AAD group] FROM EXTERNAL PROVIDER 構文で Azure AD データベース プリンシパルをサポートします。 この機能は、Azure AD 包含データベース ユーザーとも呼ばれます。

  • CREATE LOGIN ... FROM WINDOWS 構文を使用して作成された Windows ログインはサポートされていません。 Azure Active Directory のログインとユーザーを使用します。

  • インスタンスを作成した Azure AD ユーザーは、無制限の管理特権を持ちます。

  • 管理者以外の、データベース レベルの Azure AD ユーザーは、CREATE USER ... FROM EXTERNAL PROVIDER 構文を使用して作成できます。 CREATE USER ...FROM EXTERNAL PROVIDER を参照してください。

  • Azure AD サーバー プリンシパル (ログイン) は、1 つの SQL Managed Instance 内のみで SQL 機能をサポートします。 同じ Azure AD テナント内か、または異なるテナント内かに関係なく、Azure AD ユーザーの場合、クロス インスタンス対話を必要とする機能はサポートされていません。 そのような機能の例として次のものがあります。

    • SQL トランザクション レプリケーション。
    • リンク サーバー。
  • Azure AD グループにマップされている Azure AD ログインをデータベース所有者として設定することはサポートされていません。

  • EXECUTE AS 句など、他の Azure AD プリンシパルを使用することによる Azure AD サーバー レベル プリンシパルの権限の借用はサポートされています。 EXECUTE AS の制限事項は次のとおりです。

    • 名前がログイン名と異なる場合、EXECUTE AS USER は Azure AD ユーザーに対してサポートされません。 たとえば、CREATE USER [myAadUser] FROM LOGIN [john@contoso.com] 構文を使用してユーザーが作成されて、EXEC AS USER = myAadUser を使用して権限借用が試行された場合などです。 Azure AD サーバー プリンシパル (ログイン) から USER を作成するときは、user_name を LOGIN と同じ login_name として指定します。

    • Azure AD プリンシパルを対象とした次の操作を実行できるのは、sysadmin ロールに属している SQL Server レベル プリンシパル (ログイン) のみです。

      • EXECUTE AS USER
      • EXECUTE AS LOGIN
    • EXECUTE AS ステートメントを使用してユーザーを偽装するには、そのユーザーが Azure AD サーバー プリンシパル (ログイン) に直接マップされる必要があります。 Azure AD サーバー プリンシパルにマップされた Azure AD グループのメンバーであるユーザーは、指定されたユーザー名に対する偽装権限を呼び出し元が持っている場合でも、EXECUTE AS ステートメントを使用して有効に偽装できません。

  • bacpac ファイルを使用したデータベースのエクスポート/インポートは、SSMS V 18.4 以降または SQLPackage.exe のいずれかを使用している SQL Managed Instance 内の Azure AD ユーザーに対してサポートされます。

    • データベース bacpac ファイルを使用すると、次の構成がサポートされます。
      • 同じ Azure AD ドメイン内の異なるマネージド インスタンス間でのデータベースのエクスポート/インポート。
      • SQL Managed Instance からデータベースをエクスポートし、同じ Azure AD ドメイン内の SQL Database にインポートする。
      • SQL Database からデータベースをエクスポートし、同じ Azure AD ドメイン内の SQL Managed Instance にインポートする。
      • SQL Managed Instance からデータベースをエクスポートし、SQL Server (バージョン 2012 以降) にインポートする。
        • この構成では、すべての Azure AD ユーザーが、ログインなしの SQL Server データベース プリンシパル (ユーザー) として作成されます。 ユーザーの種類は SQL として表示され、sys.database_principals では SQL_USER として表示されます。 これらのアクセス許可とロールは SQL Server データベースのメタデータに残り、権限の借用に使用できます。 ただし、これらの資格情報を使用して SQL Server にアクセスしてログインすることはできません。
  • SQL Managed Instance のプロビジョニング プロセスによって作成されるサーバーレベル プリンシパル ログイン、securityadminsysadmin などのサーバー ロールのメンバー、あるいはサーバー レベルの ALTER ANY LOGIN アクセス許可を持つその他のログインのみが、SQL Managed Instance のマスター データベースに Azure AD サーバー プリンシパル (ログイン) を作成できます。

  • ログインが SQL プリンシパルの場合、作成コマンドを使用して Azure AD アカウントのログインを作成できるのは、sysadmin ロールに属しているログインのみです。

  • Azure AD ログインは、Azure SQL Managed Instance に使用されるものと同じディレクトリ内の Azure AD のメンバーでなければなりません。

  • Azure AD サーバー プリンシパル (ログイン) は、SQL Server Management Studio 18.0 プレビュー 5 から、オブジェクト エクスプローラーに表示されます。

  • Azure AD サーバー プリンシパル (ログイン) と Azure AD 管理者アカウントとの重複は許可されます。 プリンシパルを解決してアクセス許可を SQL Managed Instance に適用するとき、Azure AD の管理者よりも Azure AD サーバー プリンシパル (ログイン) が優先されます。

  • 認証時、認証するプリンシパルを解決するために次の順序が適用されます。

    1. Azure AD アカウントが、Azure AD サーバー プリンシパル (ログイン) に直接マップされているものとして存在する (sys.server_principals に type "E" と指定されている) 場合、アクセスを許可し、Azure AD サーバー プリンシパル (ログイン) のアクセス権を適用する。
    2. Azure AD アカウントが、Azure AD サーバー プリンシパル (ログイン) にマップされている Azure AD グループのメンバーである (sys.server_principals に type "X" と指定されている) 場合、アクセスを許可し、Azure AD グループ ログインのアクセス権を適用する。
    3. Azure AD アカウントが SQL Managed Instance 用のポータル構成の特殊な Azure AD 管理者である (SQL Managed Instance システム ビューに存在しない) 場合は、SQL Managed Instance の Azure AD 管理者の特殊な固定アクセス許可を適用する (レガシー モード)。
    4. Azure AD アカウントが、データベース内の Azure AD ユーザーに直接マップされたものとして存在する (sys.database_principals に type "E" と指定されている) 場合、アクセスを許可し、Azure AD データベース ユーザーのアクセス許可を適用する。
    5. Azure AD アカウントが、データベース内の Azure AD ユーザーにマップされた Azure AD グループのメンバーである (sys.database_principals に type "X" と指定されている) 場合、アクセスを許可し、Azure AD グループ ログインのアクセス許可を適用する。
    6. Azure AD ユーザー アカウントまたは Azure AD グループ アカウントのいずれかにマップされている Azure AD ログインがあり、認証しているユーザーを解決する場合、この Azure AD ログインのすべてのアクセス許可が適用される。

サービス キーとサービス マスター キー

構成

バッファー プール拡張

照合順序

既定のインスタンスの照合順序は SQL_Latin1_General_CP1_CI_AS であり、作成パラメーターとして指定できます。 「照合順序」をご覧ください。

互換性レベル

  • サポートされている互換性レベルは、100、110、120、130、140、150 です。
  • 100 より低い互換性レベルはサポートされていません。
  • 新しいデータベースの既定の互換性レベルは 140 です。 互換性レベルが 100 以上のデータベースが復元された場合、互換性レベルは変更されません。

ALTER DATABASE の互換性レベルに関する記事をご覧ください。

データベース ミラーリング

データベース ミラーリングはサポートされていません。

  • ALTER DATABASE SET PARTNER オプションと SET WITNESS オプションはサポートされていません。
  • CREATE ENDPOINT … FOR DATABASE_MIRRORING はサポートされていません。

詳細については、ALTER DATABASE の SET PARTNER と SET WITNESS、および CREATE ENDPOINT … FOR DATABASE_MIRRORING の説明をご覧ください。

データベース オプション

  • 複数のログ ファイルはサポートされていません。
  • インメモリ オブジェクトは、General Purpose サービス レベルではサポートされていません。
  • General Purpose インスタンスあたり 280 ファイル (データベースあたり最大 280 ファイル) の制限があります。 General Purpose レベルのデータ ファイルとログ ファイルの両方がこの制限にカウントされます。 Business Critical レベルでは、データベースあたり 32,767 ファイルがサポートされます
  • filestream データを含むファイル グループをデータベースに含めることはできません。 .bak に FILESTREAM データが含まれていると、復元は失敗します。
  • すべてのファイルが Azure Blob Storage に配置されます。 ファイルあたりの IO およびスループットは、個々のファイルのサイズによって異なります。

CREATE DATABASE ステートメント

次の制限事項が CREATE DATABASE に適用されます。

  • ファイルおよびファイル グループは定義できません。

  • CONTAINMENT オプションはサポートされていません。

  • WITH オプションはサポートされていません。

    ヒント

    対処法として、CREATE DATABASE の後に ALTER DATABASE を使用して、ファイルの追加またはコンテインメントの設定を行うデータベース オプションを設定します。

  • FOR ATTACH オプションはサポートされていません。

  • AS SNAPSHOT OF オプションはサポートされていません。

詳細については、CREATE DATABASE に関する記事をご覧ください。

ALTER DATABASE ステートメント

ファイルの一部のプロパティは設定または変更できません。

  • ALTER DATABASE ADD FILE (FILENAME='path') T-SQL ステートメントでは、ファイル パスは指定できません。 ファイルは SQL Managed Instance によって自動的に配置されるため、スクリプトから FILENAME を削除します。
  • ALTER DATABASE ステートメントを使用してファイル名を変更することはできません。

次のオプションは既定で設定されており、変更することはできません。

  • MULTI_USER
  • ENABLE_BROKER
  • AUTO_CLOSE OFF

次のオプションは変更できません。

  • AUTO_CLOSE
  • AUTOMATIC_TUNING(CREATE_INDEX=ON|OFF)
  • AUTOMATIC_TUNING(DROP_INDEX=ON|OFF)
  • DISABLE_BROKER
  • EMERGENCY
  • ENABLE_BROKER
  • FILESTREAM
  • HADR
  • NEW_BROKER
  • OFFLINE
  • PAGE_VERIFY
  • PARTNER
  • READ_ONLY
  • RECOVERY BULK_LOGGED
  • RECOVERY_SIMPLE
  • REMOTE_DATA_ARCHIVE
  • RESTRICTED_USER
  • SINGLE_USER
  • WITNESS

一部の ALTER DATABASE ステートメント (たとえば、SET CONTAINMENT) は、データベースの自動バックアップ中やデータベースの作成直後などに一時的に失敗することがあります。 この場合、ALTER DATABASE ステートメントを再試行する必要があります。 関連するエラー メッセージの詳細については、「解説」セクションを参照してください。

詳細については、ALTER DATABASE に関する記事をご覧ください。

SQL Server エージェント

  • SQL Managed Instance では現在、SQL Server エージェントの有効化/無効化はサポートされていません。 SQL エージェントは常に実行されています。
  • アイドル状態の CPU に基づくジョブ スケジュール トリガーはサポートされていません。
  • SQL Server エージェントの設定は読み取り専用です。 sp_set_agent_properties プロシージャは、SQL Managed Instance ではサポートされていません。
  • ジョブ
    • T-SQL ジョブ ステップがサポートされています。
    • 次のレプリケーション ジョブがサポートされています。
      • トランザクション ログ リーダー
      • スナップショット
      • ディストリビューター
    • SSIS ジョブ ステップがサポートされています。
    • 他の種類のジョブ ステップは現在サポートされていません。
      • マージ レプリケーション ジョブ ステップはサポートされていません。
      • キュー リーダーはサポートされていません。
      • コマンド シェルはまだサポートされていません。
    • SQL Managed Instance は、外部リソース (例: robocopy を介したネットワーク共有) にはアクセスできません。
    • SQL Server Analysis Services はサポートされていません。
  • 通知は部分的にサポートされています。
  • 電子メール通知がサポートされていますが、データベース メール プロファイルを構成する必要があります。 SQL Server エージェントで使用できるデータベース メール プロファイルは 1 つだけであり、AzureManagedInstance_dbmail_profile という名前である必要があります。
    • Pager はサポートされていません。
    • NetSend はサポートされていません。
    • アラートはまだサポートされていません。
    • プロキシはサポートされていません。
  • EventLog はサポートされていません。
  • SQL Agent ジョブを作成、変更、実行するために、ユーザーは Azure AD サーバー プリンシパル (ログイン) に直接マップされる必要があります。 直接マップされていないユーザー (たとえば、SQL Agent ジョブを作成、変更、または実行する権利を持つ Azure AD グループに属しているユーザー) は、これらの操作を実質的に実行できません。 これは、Managed Instance の借用と EXECUTE AS の制限事項のためです。
  • マスター/ターゲット (MSX/TSX) ジョブのマルチサーバー管理機能はサポートされていません。

SQL Server エージェントについては、「SQL Server エージェント」をご覧ください。

テーブル

次のテーブルの種類はサポートされていません。

テーブルの作成および変更方法については、CREATE TABLE に関する記事および ALTER TABLE に関する記事をご覧ください。

機能

一括挿入/OPENROWSET

SQL Managed Instance はファイル共有や Windows フォルダーにアクセスできないため、ファイルは Azure BLOB ストレージからインポートする必要があります。

  • が、Azure BLOB ストレージからファイルをインポートしている間、BULK INSERT コマンドで DATASOURCE が必要です。 BULK INSERT に関する記事をご覧ください。
  • Azure BLOB ストレージからのファイルの内容を読み取る場合、OPENROWSET 関数で DATASOURCE が必要です。 OPENROWSET に関する記事をご覧ください。
  • OPENROWSET を使用すると、Azure SQL Database、Azure SQL Managed Instance、または SQL Server インスタンスからデータを読み取ることができます。 Oracle データベースや Excel ファイルなどのその他のソースはサポートされていません。

CLR

SQL Managed Instance はファイル共有と Windows フォルダーにはアクセスできないので、次の制約が適用されます。

  • サポートされるのは CREATE ASSEMBLY FROM BINARY のみです。 CREATE ASSEMBLY FROM BINARY に関する記事をご覧ください。
  • CREATE ASSEMBLY FROM FILE はサポートされていません。 CREATE ASSEMBLY FROM FILE に関する記事をご覧ください。
  • ALTER ASSEMBLY ではファイルを参照できません。 ALTER ASSEMBLY に関する記事をご覧ください。

データベース メール (db_mail)

  • sp_send_dbmail では、@file_attachments パラメーターを使用して添付ファイルを送信できません。 この手順では、ローカル ファイル システムと外部共有または Azure Blob Storage にはアクセスできません。
  • @query パラメーターと認証に関連する既知の問題をご覧ください。

DBCC

SQL Server で有効になっている、ドキュメントに記載されていない DBCC ステートメントは、SQL Managed Instance ではサポートされていません。

  • サポートされるグローバル トレース フラグの数は限られています。 セッションレベルの Trace flags はサポートされません。 トレース フラグに関する記事をご覧ください。
  • DBCC TRACEOFFDBCC TRACEON で使用できるトレースフラグの数が限られています。
  • DBCC CHECKDB とオプション REPAIR_ALLOW_DATA_LOSS、REPAIR_FAST、REPAIR_REBUILD の組み合わせは使用できません。これは、データベースを SINGLE_USER モードで設定することはできないためです。ALTER DATABASE の相違点を参照してください。 データベースが破損した場合は Azure サポート チームが対応します。 データベースが破損している徴候がある場合は、Azure サポートにお問い合わせください。

分散トランザクション

分散トランザクションの部分的なサポートは、現在パブリック プレビューの段階です。 分散トランザクションは次の条件で使用できます (すべての条件を満たす必要があります)。

  • すべてのトランザクション参加者が、サーバー信頼グループに属する Azure SQL Managed Instance である。
  • .NET (TransactionScope クラス) または Transact-SQL でトランザクションを開始する。

現在、Azure SQL Managed Instance では、MSDTC オンプレミスまたは Azure Virtual Machines で定期的にサポートされている他のシナリオはサポートされていません。

拡張イベント

拡張イベント (XEvents) の一部の Windows 固有のターゲットはサポートされていません。

  • etw_classic_sync ターゲットはサポートされていません。 Azure BLOB ストレージに .xel ファイルを保存します。 「etw_classic_sync ターゲット」をご覧ください。
  • event_file ターゲットはサポートされていません。 Azure BLOB ストレージに .xel ファイルを保存します。 「event_file ターゲット」をご覧ください。

外部ライブラリ

In-Database R および Python 外部ライブラリは、限られたパブリック プレビューでサポートされています。 「Azure SQL Managed Instance の Machine Learning Services (プレビュー)」を参照してください。

Filestream と FileTable

  • filestream データはサポートされていません。
  • FILESTREAM データを含むファイル グループをデータベースに含めることはできません。
  • FILETABLE はサポートされていません。
  • テーブルに FILESTREAM 型を含めることはできません。
  • 次の関数はサポートされていません。
    • GetPathLocator()
    • GET_FILESTREAM_TRANSACTION_CONTEXT()
    • PathName()
    • GetFileNamespacePat)
    • FileTableRootPath()

詳細については、FILESTREAM に関する記事、および FileTables に関する記事をご覧ください。

セマンティック検索はサポートされていません。

リンク サーバー

SQL Managed Instance のリンク サーバーがサポートするターゲットの数は限られています。

  • サポートされているターゲットは、SQL Managed Instance、SQL Database、Azure Synapse SQL のサーバーレスと専用プール、および SQL Server インスタンスです。
  • 分散書き込み可能なトランザクションは、マネージド インスタンス間でのみ可能です。 詳細については、分散トランザクションに関する記事を参照してください。 ただし、MS DTC はサポートされていません。
  • サポートされていないターゲットは、ファイル、Analysis Services、他の RDBMS です。 ファイル インポートの代わりに BULK INSERT または OPENROWSET を使用して Azure Blob Storage からネイティブ CSV インポートを使用するか、Azure Synapse Analytics 内のサーバーレス SQL プールを使用してファイルの読み込みを試行します。

操作:

  • インスタンス間書き込みトランザクションは、マネージド インスタンスでのみサポートされています。
  • リンク サーバーの削除で sp_dropserver がサポートされています。 sp_dropserver に関する記事をご覧ください。
  • SQL Server インスタンスでのみ、OPENROWSET 関数を使用してクエリを実行できます。 これらは、マネージド、オンプレミス、仮想マシンのいずれかで配置できます。 OPENROWSET に関する記事をご覧ください。
  • SQL Server インスタンスでのみ、OPENDATASOURCE 関数を使用してクエリを実行できます。 これらは、マネージド、オンプレミス、仮想マシンのいずれかで配置できます。 プロバイダーとしてサポートされる値は、SQLNCLISQLNCLI11SQLOLEDB だけです。 たとえば SELECT * FROM OPENDATASOURCE('SQLNCLI', '...').AdventureWorks2012.HumanResources.Employee です。 OPENDATASOURCE に関する記事をご覧ください。
  • リンク サーバーを使用してネットワーク共有からファイル (Excel、CSV) を読み取ることはできません。 BULK INSERTOPENROWSET (Azure Blob Storage から CSV ファイルを読み取る)、または Synapse Analytics 内のサーバーレス SQL プールを参照するリンク サーバーの使用を試行します。 この要求は、SQL Managed Instance フィードバック項目|で追跡します

Azure SQL Managed Instance のリンク サーバーでは、SQL 認証のみがサポートされています。 AAD 認証はまだサポートされていません。

PolyBase

SQL Managed Instance で Polybase のサポートを有効にする取り組みが進行中です。 その間、対処法として、SQL Server または Synapse Analytics のサーバーレス SQL プールへのリンク サーバーを使用して、Azure Data Lake または Azure Storage に格納されているファイルからデータのクエリを実行できます。
PolyBase の一般情報については、PolyBase に関する記事を参照してください。

レプリケーション

  • スナップショットおよび双方向のレプリケーションの種類がサポートされています。 マージ レプリケーション、ピア ツー ピア レプリケーション、および更新可能サブスクリプションはサポートされていません。
  • トランザクション レプリケーションは SQL Managed Instance のパブリック プレビューで使用できますが、制約がいくつかあります。
    • すべての種類のレプリケーション参加者 (パブリッシャー、ディストリビューター、プル サブスクライバー、プッシュ サブスクライバー) を SQL Managed Instance に配置できますが、パブリッシャーとディストリビューターは両者ともクラウドに配置するか、または両者ともオンプレミスに配置する必要があります。
    • SQL Managed Instance は、最新バージョンの SQL Server と通信できます。 詳細については、バージョンのサポート マトリックスを参照してください。
    • トランザクション レプリケーションには、いくつかの追加のネットワーク要件があります。

トランザクション レプリケーションの構成の詳細については、次に関するチュートリアルを参照してください。

RESTORE ステートメント

  • サポートされている構文:
    • RESTORE DATABASE
    • RESTORE FILELISTONLY ONLY
    • RESTORE HEADER ONLY
    • RESTORE LABELONLY ONLY
    • RESTORE VERIFYONLY ONLY
  • サポートされていない構文:
    • RESTORE LOG ONLY
    • RESTORE REWINDONLY ONLY
  • ソース:
    • FROM URL (Azure BLOB ストレージ) が、サポートされている唯一のオプションです。
    • FROM DISK/TAPE/バックアップ デバイスはサポートされていません。
    • バックアップ セットはサポートされていません。
  • WITH オプションはサポートされていません。 DIFFERENTIALSTATSREPLACEなどの WITH を含む復元の試行は失敗します。
  • ASYNC RESTORE:クライアント接続が切断されても、復元は続行されます。 接続が破棄された場合は、sys.dm_operation_status ビューで復元操作とデータベースの CREATE 操作および DROP 操作の状態を確認できます。 sys.dm_operation_status に関する記事をご覧ください。

次のデータベース オプションを設定またはオーバーライドします。これらを後で変更することはできません。

  • NEW_BROKER (.bak ファイルでブローカーが有効になっていない場合)。
  • ENABLE_BROKER (.bak ファイルでブローカーが有効になっていない場合)。
  • AUTO_CLOSE=OFF (.bak ファイル内のデータベースに AUTO_CLOSE=ON が設定されている場合)。
  • RECOVERY FULL (.bak ファイル内のデータベースが SIMPLE または BULK_LOGGED 回復モードの場合)。
  • メモリ最適化ファイル グループが追加され、(ソースの .bak ファイルに含まれていなかった場合) XTP という名前が付けられます。
  • 既存のメモリ最適化ファイル グループの名前が XTP に変更されます。
  • SINGLE_USER および RESTRICTED_USER のオプションは、MULTI_USER に変換されます。

制限事項:

  • 破損したデータベースのバックアップは、破損の種類によっては復元される可能性がありますが、破損が修正されるまで自動バックアップは実行されません。 この問題を回避するには、必ずソース SQL Managed Instance 上で DBCC CHECKDB を実行し、バックアップ WITH CHECKSUM を使用します。
  • このドキュメントで説明されている制限 (たとえば FILESTREAM または FILETABLE オブジェクト) を含むデータベースの .BAK ファイルの復元は、SQL Managed Instance では復元できません。
  • .BAK ファイルに複数のバックアップ セットが含まれている場合、復元できません。
  • .BAK ファイルに複数のログ ファイルが含まれている場合、復元できません。
  • 8 TB を超えるデータベース、アクティブなインメモリ OLTP オブジェクト、または 280 個を超えるファイル数を含むバックアップは、General Purpose インスタンスでは復元できません。
  • 4 TB を超えるデータベース、またはリソースの制限で説明されているサイズよりも合計サイズが大きいインメモリ OLTP オブジェクトを含むバックアップは、Business Critical インスタンスでは復元できません。 RESTORE ステートメントについては、RESTORE ステートメントに関する記事をご覧ください。

重要

同じ制限が、組み込みのポイントインタイム リストア操作に適用されます。 たとえば、4 TB を超える General Purpose データベースは、Business Critical インスタンスで復元することはできません。 インメモリ OLTP ファイルまたは 280 個を超えるファイルを含む Business Critical データベースは、General Purpose インスタンスで復元することはできません。

Service Broker

クロス インスタンス Service Broker メッセージ交換は、Azure SQL Managed Instance 間でのみサポートされます。

  • CREATE ROUTE: CREATE ROUTELOCAL 以外の ADDRESS または別の Azure SQL Managed Instance の DNS 名で使用することはできません。 ポートは常に 4022 です。
  • ALTER ROUTE: ALTER ROUTELOCAL 以外の ADDRESS または別の Azure SQL Managed Instance の DNS 名で使用することはできません。 ポートは常に 4022 です。

トランスポート セキュリティはサポートされていますが、ダイアログ セキュリティはサポートされていません。

  • CREATE REMOTE SERVICE BINDING はサポートされていません。

Service Broker は既定で有効になっており、無効にできません。 次の ALTER DATABASE オプションはサポートされていません。

  • ENABLE_BROKER
  • DISABLE_BROKER

ストアド プロシージャ、関数、トリガー

  • NATIVE_COMPILATION は、General Purpose レベルではサポートされていません。
  • sp_configure の次のオプションはサポートされていません。
    • allow polybase export
    • allow updates
    • filestream_access_level
    • remote access
    • remote data archive
    • remote proc trans
    • scan for startup procs
  • 次の sp_configure オプションは無視され、影響はありません。
    • Ole Automation Procedures
  • sp_execute_external_scripts はサポートされていません。 sp_execute_external_scripts に関するセクションをご覧ください。
  • xp_cmdshell はサポートされていません。 xp_cmdshell に関する記事をご覧ください。
  • Extended stored procedures はサポートされておらず、これには sp_addextendedproc および sp_dropextendedproc が含まれます。 この機能は SQL Server では非推奨になる予定のため、サポートされません。 詳細については、拡張ストアド プロシージャに関するページを参照してください。
  • sp_attach_dbsp_attach_single_file_dbsp_detach_db はサポートされていません。 sp_attach_dbsp_attach_single_file_dbsp_detach_db に関する各記事をご覧ください。

システム関数とシステム変数

次の変数、関数、ビューは異なる結果を返します。

  • SERVERPROPERTY('EngineEdition') は値 8 を返します。 このプロパティは、SQL Managed Instance を一意に識別します。 SERVERPROPERTY に関する記事をご覧ください。
  • SERVERPROPERTY('InstanceName') は NULL を返します。これは SQL Server に関して存在するインスタンスの概念が、SQL Managed Instance には該当しないためです。 SERVERPROPERTY('InstanceName') に関する説明をご覧ください。
  • @@SERVERNAME は、"接続可能な" 完全 DNS 名を返します (例: my-managed-instance.wcus17662feb9ce98.database.windows.net)。 @@SERVERNAME に関する記事をご覧ください。
  • SYS.SERVERS は、"name" プロパティと "data_source" プロパティを表す myinstance.domain.database.windows.net のような、"接続可能な" 完全 DNS 名を返します。 SYS.SERVERS に関する記事をご覧ください。
  • @@SERVICENAME は NULL を返します。これは SQL Server に関して存在するサービスの概念が、SQL Managed Instance には該当しないためです。 @@SERVICENAME に関する記事をご覧ください。
  • SUSER_ID はサポートされています。 Azure AD ログインが sys.syslogins に含まれていない場合は、NULL を返します。 SUSER_ID に関する記事をご覧ください。
  • SUSER_SID はサポートされていません。 正しくないデータが返されます。これは既知の一時的な問題です。 SUSER_SID に関する記事をご覧ください。

環境の制約

Subnet

  • SQL Managed Instance をデプロイしたサブネットに他のリソース (たとえば仮想マシン) を配置することはできません。 別のサブネットを使用してこれらのリソースをデプロイしてください。
  • サブネットには、十分な数の利用可能な IP アドレスが含まれている必要があります。 最小で、サブネットに少なくとも 32 個の IP アドレスを設定します。
  • リージョンでデプロイできるインスタンスの仮想コア数と種類には、いくつかの制約と制限があります。
  • サブネットに適用する必要があるネットワーク構成があります。

VNet

  • VNet はリソース モデルを使用してデプロイできます。VNet のクラシック モードはサポートされていません。
  • SQL Managed Instance の作成後の SQL Managed Instance または VNet の別のリソース グループまたはサブスクリプションへの移動はサポートされていません。
  • 2020 年 9 月 22 日より前に作成された仮想クラスターでホストされる SQL マネージド インスタンスでは、グローバル ピアリングがサポートされません。 ExpressRoute、または VNet ゲートウェイ経由の VNet 対 VNet を介してこのようなリソースに接続できます。

フェールオーバー グループ

システム データベースは、フェールオーバー グループのセカンダリ インスタンスにはレプリケートされません。 そのため、オブジェクトがセカンダリに手動で作成されていない限り、セカンダリ インスタンスではシステム データベースのオブジェクトに依存するシナリオは実現できません。

TEMPDB

  • tempdb の最大ファイル サイズは、General Purpose レベルではコアあたり 24 GB より大きくすることはできません。 Business Critical レベルでは、tempdb の最大サイズは SQL Managed Instance ストレージ サイズによって制限されます。 Tempdb ログ ファイルのサイズは、General Purpose レベルでは 120 GB に制限されています。 tempdb のサイズがコアあたり 24 GB を超える場合、または 120 GB を超えるログ データが生成される場合は、一部のクエリでエラーが返されます。
  • Tempdb は常に 12 個のデータ ファイルに分割されます (1 個のプライマリ (マスターとも呼ばれる) データ ファイルと 11 個のプライマリ以外のデータ ファイル)。 ファイル構造を変更することも、tempdb に新しいファイルを追加することもできません。
  • [メモリ最適化]tempdb メタデータ (新しい SQL Server 2019 のメモリ内データベース機能) は、サポートされていません。
  • tempdb ではモデル データベースから初期オブジェクト リストが取得されないため、再起動後またはフェールオーバー後に、モデル データベースで作成されたオブジェクトを tempdb で自動作成できません。 再起動後またはフェールオーバー後に、tempdb でオブジェクトを手動で作成する必要があります。

MSDB

SQL Managed Instance の次の MSDB スキーマは、それぞれの定義済みロールによって所有されている必要があります。

重要

定義済みのロール名、スキーマ名、スキーマ所有者を顧客が変更すると、サービスの通常の動作に影響します。 通常のサービス動作を保証するために、これらに加えられた変更は検出されるとすぐに、または次の最新のサービス更新時に、事前に定義済みの値に戻されます。

エラー ログ

SQL Managed Instance では、エラー ログに詳細情報が書き込まれます。 エラー ログに記録される内部システム イベントが数多く存在します。 カスタムの手順を使用して、関連のない項目をフィルターで除外するエラー ログを読み取ります。 詳細については、Azure Data Studio の SQL Managed Instance - sp_readmierrorlog または SQL Managed Instance の拡張機能 (プレビュー) に関する記事をご覧ください。

次のステップ