リンク サーバー (データベース エンジン)Linked Servers (Database Engine)

適用対象: ○SQL Server ○Azure SQL Database (Managed Instance のみ) ×Azure SQL Data Warehouse ×Parallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database (Managed Instance only) noAzure SQL Data Warehouse noParallel Data Warehouse

リンク サーバーを使用すると、SQL Server データベース エンジンSQL Server Database Engine および Azure SQL Database Managed Instance では、リモート データ ソースからデータを読み取ったり、SQL ServerSQL Server のインスタンスの外部にあるリモート データベース サーバー (たとえば、OLE DB データ ソース) に対してコマンドを実行することができます。Linked servers enable the SQL Server データベース エンジンSQL Server Database Engine and Azure SQL Database Managed Instance to read data from the remote data sources and execute commands against the remote database servers (for example, OLE DB data sources) outside of the instance of SQL ServerSQL Server. 通常、リンク サーバーを構成する目的は、 データベース エンジンDatabase Engine の別のインスタンスまたは別のデータベース製品 (Oracle など) のテーブルを含んだ Transact-SQLTransact-SQL ステートメントを SQL ServerSQL Serverから実行できるようにすることです。Typically linked servers are configured to enable the データベース エンジンDatabase Engine to execute a Transact-SQLTransact-SQL statement that includes tables in another instance of SQL ServerSQL Server, or another database product such as Oracle. MicrosoftMicrosoft Access、Excel、Azure CosmosDB など、さまざまな種類の OLE DB データ ソースをリンク サーバーとして構成できます。Many types OLE DB data sources can be configured as linked servers, including MicrosoftMicrosoft Access, Excel, and Azure CosmosDB.

注意

リンク サーバーは、SQL Server データベース エンジンSQL Server Database Engine および Azure SQL Database Managed Instance で使用できます。Linked servers are available in SQL Server データベース エンジンSQL Server Database Engine and Azure SQL Database Managed Instance. Azure SQL Database シングルトンおよびエラスティック プールでは使用できません。they are not enabled in Azure SQL database Singleton and Elastic pools. Managed Instance には、ここに示されるいくつかの制限があります。There are some constraints in Managed Instance that can be found here.

リンク サーバーを使用する場合When to use Linked Servers?

リンク サーバーを使用すると、他のデータベース内のデータをフェッチおよび更新できる分散データベースを実装することができます。Linked servers enable you to implement distributed databases that can fetch and update data in other databases. これらは、カスタム アプリケーション コードを作成したりリモート データ ソースから直接読み込むことなく、データベース シャーディングを実装する必要があるシナリオで適切なソリューションです。They are a good solution in the scenarios where you need to implement database sharding without need to create a custom application code or directly load from remote data sources. リンク サーバーには次の利点があります。Linked servers offer the following advantages:

  • SQL ServerSQL Serverの外部のデータにアクセスできる。The ability to access data from outside of SQL ServerSQL Server.

  • 企業内のさまざまなデータ ソースに対して分散クエリ、更新、コマンド、およびトランザクションを実行できる。The ability to issue distributed queries, updates, commands, and transactions on heterogeneous data sources across the enterprise.

  • さまざまなデータ ソースを同じように処理できる。The ability to address diverse data sources similarly.

リンク サーバーの構成は、 SQL Server Management StudioSQL Server Management Studio または sp_addlinkedserver (Transact-SQL) ステートメントを使用して行うことができます。You can configure a linked server by using SQL Server Management StudioSQL Server Management Studio or by using the sp_addlinkedserver (Transact-SQL) statement. 各 OLE DB プロバイダーは、必要なパラメーターの数と型という点で大きく異なります。OLE DB providers vary greatly in the type and number of parameters required. たとえば、プロバイダーによっては、 sp_addlinkedsrvlogin (Transact-SQL)からコマンドを実行できるようにするには、リンク サーバーを構成します。For example some providers require you to provide a security context for the connection using sp_addlinkedsrvlogin (Transact-SQL). SQL ServerSQL Server から OLE DB ソース上のデータを更新できる OLE DB プロバイダーもあれば、Some OLE DB providers allow SQL ServerSQL Server to update data on the OLE DB source. 読み取り専用データ アクセスに特化したものも存在します。Others provide only read-only data access. 各 OLE DB プロバイダーの詳細については、該当する OLE DB プロバイダーのドキュメントを参照してください。For information about each OLE DB provider, consult documentation for that OLE DB provider.

リンク サーバーのコンポーネントLinked Server Components

リンク サーバーの定義では、次のオブジェクトを指定します。A linked server definition specifies the following objects:

  • OLE DB プロバイダーAn OLE DB provider

  • OLE DB データ ソースAn OLE DB data source

OLE DB プロバイダー は、特定のデータ ソースを管理し、相互運用する DLL です。An OLE DB provider is a DLL that manages and interacts with a specific data source. OLE DB データ ソース は、OLE DB を使用してアクセスできる特定のデータベースを識別します。An OLE DB data source identifies the specific database that can be accessed through OLE DB. リンク サーバーの定義を使用してクエリが行われるデータ ソースは通常はデータベースですが、さまざまなファイルやファイル形式用の OLE DB プロバイダーが存在します。Although data sources queried through linked server definitions are ordinarily databases, OLE DB providers exist for a variety of files and file formats. これには、テキスト ファイル、ワークシートのデータ、およびフルテキスト検索の結果が含まれます。These include text files, spreadsheet data, and the results of full-text content searches.

MicrosoftMicrosoft SQL ServerSQL Server Native Client OLE DB プロバイダー (PROGID: SQLNCLI11) は、SQL ServerSQL Server 用の公式の OLE DB プロバイダーです。The MicrosoftMicrosoft SQL ServerSQL Server Native Client OLE DB Provider (PROGID: SQLNCLI11) is the official OLE DB provider for SQL ServerSQL Server.

注意

SQL ServerSQL Server 分散クエリは、必要な OLE DB インターフェイスを実装しているすべての OLE DB プロバイダーで処理できるように設計されています。distributed queries are designed to work with any OLE DB provider that implements the required OLE DB interfaces. ただし、 SQL ServerSQL Server では、 SQL ServerSQL Server Native Client OLE DB プロバイダーなど、特定のプロバイダーに対してのみテストが行われています。However, SQL ServerSQL Server has been tested against only the SQL ServerSQL Server Native Client OLE DB Provider and certain other providers.

リンク サーバーの詳細Linked Server Details

次の図に、基本的なリンク サーバー構成を示します。The following illustration shows the basics of a linked server configuration.

クライアント層、サーバー層、およびデータベース サーバー層Client tier, server tier, and database server tier

リンク サーバーは、通常は分散クエリの処理に使用します。Typically, linked servers are used to handle distributed queries. クライアント アプリケーションからリンク サーバー経由で分散クエリが実行されるときは、 SQL ServerSQL Server でコマンドが解析され、OLE DB に要求が送信されます。When a client application executes a distributed query through a linked server, SQL ServerSQL Server parses the command and sends requests to OLE DB. 行セット要求は、プロバイダーに対するクエリの実行や、プロバイダーのベース テーブルを開くなどの形式をとります。The rowset request may be in the form of executing a query against the provider or opening a base table from the provider.

注意

データ ソースがリンク サーバー経由でデータを返すには、そのデータ ソースの OLE DB プロバイダー (DLL) が SQL ServerSQL Serverのインスタンスと同じサーバー上に存在する必要があります。For a data source to return data through a linked server, the OLE DB provider (DLL) for that data source must be present on the same server as the instance of SQL ServerSQL Server.

重要

OLE DB プロバイダーを使用する場合、SQL ServerSQL Server サービスを実行しているアカウントには、プロバイダーがインストールされているディレクトリとそのすべてのサブディレクトリに対する読み取り権限と実行権限が必要です。When an OLE DB provider is used, the account under which the SQL ServerSQL Server service runs must have read and execute permissions for the directory, and all subdirectories, in which the provider is installed. これには、Microsoft によってリリースされたプロバイダー、およびすべてのサードパーティのプロバイダーが含まれます。This includes Microsoft-released providers, and any third-party providers.

プロバイダーの管理Managing Providers

SQL ServerSQL Server が OLE DB プロバイダーを読み込んで使用する方法を制御する一連のオプションは、レジストリで指定されます。There is a set of options that control how SQL ServerSQL Server loads and uses OLE DB providers that are specified in the registry.

リンク サーバー定義の管理Managing Linked Server Definitions

リンク サーバーをセットアップするときは、接続情報とデータ ソース情報を SQL ServerSQL Serverに登録します。When you are setting up a linked server, register the connection information and data source information with SQL ServerSQL Server. 登録後、1 つの論理名でデータ ソースを参照できます。After being registered, that data source can be referred to with a single logical name.

ストアド プロシージャとカタログ ビューを使用して、リンク サーバーの定義を管理できます。You can use stored procedures and catalog views to manage linked server definitions:

  • sp_addlinkedserverを実行して、リンク サーバーの定義を作成します。Create a linked server definition by running sp_addlinkedserver.

  • SQL ServerSQL Server sys.servers システム カタログ ビューに対してクエリを実行して、 の特定のインスタンスに定義されたリンク サーバーに関する情報を表示します。View information about the linked servers defined in a specific instance of SQL ServerSQL Server by running a query against the sys.servers system catalog views.

  • sp_dropserverを実行して、リンク サーバーの定義を削除します。Delete a linked server definition by running sp_dropserver. このストアド プロシージャを使用して、リモート サーバーを削除することもできます。You can also use this stored procedure to remove a remote server.

SQL Server Management StudioSQL Server Management Studioを使用して、リンク サーバーを定義することもできます。You can also define linked servers by using SQL Server Management StudioSQL Server Management Studio. オブジェクト エクスプローラーで [サーバー オブジェクト] を右クリックし、 [新規作成] をポイントして、 [リンク サーバー] をクリックします。In the Object Explorer, right-click Server Objects, select New, and select Linked Server. リンク サーバー名を右クリックして [削除] をクリックすると、リンク サーバーの定義を削除できます。You can delete a linked server definition by right-clicking the linked server name and selecting Delete.

リンク サーバーに対して分散クエリを実行する場合は、クエリを実行するデータ ソースごとに 4 つの部分で構成される完全修飾テーブル名を指定します。When you execute a distributed query against a linked server, include a fully qualified, four-part table name for each data source to query. この 4 つの部分で構成される名前は、<リンク サーバー名>.<カタログ> . <スキーマ> . <オブジェクト名> という形式にする必要があります。This four-part name should be in the form linked_server_name.catalog.schema.object_name.

注意

リンク サーバーは、どのサーバーで定義されたかを示す (ループ バックする) ように定義することができます。Linked servers can be defined to point back (loop back) to the server on which they are defined. ループバック サーバーは、単一のサーバー ネットワークで分散クエリを使用するアプリケーションをテストする際に最も有効です。Loopback servers are most useful when testing an application that uses distributed queries on a single server network. ループバック リンク サーバーはテスト用であり、分散トランザクションなどの多くの操作ではサポートされていません。Loopback linked servers are intended for testing and are not supported for many operations, such as distributed transactions.

リンク サーバーの作成 (SQL Server データベース エンジン)Create Linked Servers (SQL Server Database Engine)

sp_addlinkedserver (Transact-SQL)sp_addlinkedserver (Transact-SQL)

sp_addlinkedsrvlogin (Transact-SQL)sp_addlinkedsrvlogin (Transact-SQL)

sp_dropserver (Transact-SQL)sp_dropserver (Transact-SQL)

sys.servers (Transact-SQL)sys.servers (Transact-SQL)

sp_linkedservers (Transact-SQL)sp_linkedservers (Transact-SQL)