Создание связанных серверов (компонент SQL Server Database Engine)Create Linked Servers (SQL Server Database Engine)

ОБЛАСТЬ ПРИМЕНЕНИЯ: даSQL Server нетБаза данных SQL AzureнетХранилище данных SQL AzureнетParallel Data WarehouseAPPLIES TO: yesSQL Server noAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

В этом разделе описано, как создать связанный сервер и производить доступ к данным из другого экземпляра SQL ServerSQL Server с помощью среды SQL Server Management StudioSQL Server Management Studio или Transact-SQLTransact-SQL.This topic shows how to create a linked server and access data from another SQL ServerSQL Server by using SQL Server Management StudioSQL Server Management Studio or Transact-SQLTransact-SQL. Путем создания связанного сервера вы можете работать с данными из нескольких источников.By creating a linked server, you can work with data from multiple sources. Связанный сервер не обязательно должен быть другим экземпляром SQL ServerSQL Server, хотя такой вариант часто встречается.The linked server does not have to be another instance of SQL ServerSQL Server, but that is a common scenario.

Историческая справкаBackground

Связанные серверы позволяют выполнять распределенные разнородные запросы к источникам данных OLE DB.A linked server allows for access to distributed, heterogeneous queries against OLE DB data sources. После создания связанного сервера можно выполнять распределенные запросы к этому серверу, причем в запросах могут соединять таблицы из нескольких источников данных.After a linked server is created, distributed queries can be run against this server, and queries can join tables from more than one data source. Если связанный сервер определен в качестве экземпляра SQL ServerSQL Server, на нем могут выполняться удаленные хранимые процедуры.If the linked server is defined as an instance of SQL ServerSQL Server, remote stored procedures can be executed.

Возможности связанного сервера и необходимые аргументы могут сильно различаться.The capabilities and required arguments of the linked server can vary significantly. В примерах из этого раздела представлены типичные ситуации, но описаны не все параметры.The examples in this topic provide a typical example but all options are not described. Дополнительные сведения см. в статье sp_addlinkedserver (Transact-SQL).For more information, see sp_addlinkedserver (Transact-SQL).

безопасностьSecurity

РазрешенияPermissions

При использовании инструкций Transact-SQLTransact-SQL требуется разрешение ALTER ANY LINKED SERVER на сервер или членство в предопределенной роли сервера setupadmin .When using Transact-SQLTransact-SQL statements, requires ALTER ANY LINKED SERVER permission on the server or membership in the setupadmin fixed server role. Для работы с Среда Management StudioManagement Studio требуется разрешение CONTROL SERVER или членство в предопределенной роли сервера sysadmin .When using Среда Management StudioManagement Studio requires CONTROL SERVER permission or membership in the sysadmin fixed server role.

Создание связанного сервераHow to Create a Linked Server

Можно использовать следующие параметры.You can use any of the following:

Использование среды SQL Server Management StudioUsing SQL Server Management Studio

Создание связанного сервера для другого экземпляра SQL Server в среде SQL Server Management StudioTo create a linked server to another instance of SQL Server Using SQL Server Management Studio
  1. В среде SQL Server Management StudioSQL Server Management Studioоткройте обозреватель объектов, разверните узел Объекты сервера, щелкните правой кнопкой мыши узел Связанные серверыи выберите команду Создать связанный сервер.In SQL Server Management StudioSQL Server Management Studio, open Object Explorer, expand Server Objects, right-click Linked Servers, and then click New Linked Server.

  2. На странице Общие в поле Связанный сервер введите имя экземпляра SQL Server , с которым связывается область.On the General page, in the Linked server box, type the name of the instance of SQL Server that you area linking to.

    SQL ServerSQL Server
    Идентификация связанного сервера как экземпляра MicrosoftMicrosoftSQL ServerSQL Server.Identify the linked server as an instance of MicrosoftMicrosoftSQL ServerSQL Server. При использовании этого метода определения связанного сервера SQL ServerSQL Server имя, указанное в поле Связанный сервер , должно быть сетевым именем этого сервера.If you use this method of defining a SQL ServerSQL Server linked server, the name specified in Linked server must be the network name of the server. Кроме того, все таблицы, полученные от сервера, будут получены из базы данных, по умолчанию определенной для имени входа на связанный сервер.Also, any tables retrieved from the server are from the default database defined for the login on the linked server.

    Другой источник данныхOther data source
    Укажите тип сервера OLE DB, отличный от SQL ServerSQL Server.Specify an OLE DB server type other than SQL ServerSQL Server. Включение этой функции активирует дополнительные параметры, расположенные под ней.Clicking this option activates the options below it.

    ПоставщикProvider
    Выберите источник данных OLE DB в окне списка.Select an OLE DB data source from the list box. Поставщик OLE DB зарегистрирован в реестре с данным идентификатором PROGID.The OLE DB provider is registered with the given PROGID in the registry.

    Название продуктаProduct name
    Введите название продукта для источника данных OLE DB, который добавляется в качестве связанного сервера.Type the product name of the OLE DB data source to add as a linked server.

    Источник данныхData source
    Введите имя источника данных согласно интерпретации поставщика OLE DB.Type the name of the data source as interpreted by the OLE DB provider. При соединении с экземпляром служб SQL ServerSQL Serverуказывается имя экземпляра.If you are connecting to an instance of SQL ServerSQL Server, provide the instance name.

    Строка поставщикаProvider string
    Введите уникальный программный идентификатор (PROGID) поставщика OLE DB, соответствующий источнику данных.Type the unique programmatic identifier (PROGID) of the OLE DB provider that corresponds to the data source. Примеры допустимых строк поставщиков см. в статье sp_addlinkedserver (Transact-SQL).For examples of valid provider strings, see sp_addlinkedserver (Transact-SQL).

    МестоположениеLocation
    Введите местонахождение базы данных, понятное поставщику OLE DB.Type the location of the database as interpreted by the OLE DB provider.

    КаталогCatalog
    Введите имя каталога, который следует использовать при соединении с поставщиком OLE DB.Type the name of the catalog to use when making a connection to the OLE DB provider.

    Чтобы проверить возможность соединения со связанным сервером, щелкните его в обозревателе объектов правой кнопкой мыши и выберите команду Проверить соединение.To test the ability to connect to a linked server, in Object Explorer, right-click the linked server and then click Test Connection.

    Примечание

    Если экземпляр SQL Server является экземпляром по умолчанию, то введите имя компьютера, на котором размещается экземпляр SQL Server.If the instance of SQL Server is the default instance, enter the name of the computer that hosts the instance of SQL Server. Если экземпляр SQL Server является именованным, введите имя компьютера и имя экземпляра, например Accounting\SQLExpress.If the SQL Server is a named instance, enter the name of the computer and the name of the instance, such as Accounting\SQLExpress.

  3. В области Тип сервера выберите SQL Server, чтобы показать, что связанный сервер является экземпляром SQL Server.In the Server type area, select SQL Server to indicate that the linked server is another instance of SQL Server.

  4. На странице Безопасность укажите контекст безопасности, который будет использоваться при подключении исходного экземпляра SQL ServerSQL Server к связанному серверу.On the Security page, specify the security context that will be used when the original SQL ServerSQL Server connects to the linked server. В среде с доменами, где пользователи соединяются с помощью имен входа доменов, лучшим вариантом часто оказывается Выполнять с использованием текущего контекста безопасности имени входа.In a domain environment where users are connecting by using their domain logins, selecting Be made using the login's current security context is often the best choice. Если пользователи соединяются с исходным экземпляром SQL Server по имени входа SQL Server , то лучшим вариантом часто оказывается С использованием этого контекста безопасностис последующим указанием необходимых учетных данных для проверки подлинности на связанном сервере.When users connect to the original SQL Server by using a SQL Server login, the best choice is often to select By using this security context, and then providing the necessary credentials to authenticate at the linked server.

    Локальное имя входаLocal login
    Указывает локальное имя входа, с помощью которого может осуществляться соединение со связанным сервером.Specify the local login that can connect to the linked server. Локальное имя входа может представлять собой либо имя входа с использованием проверки подлинности SQL ServerSQL Server , либо имя входа с проверкой подлинности Windows.The local login can be either a login using SQL ServerSQL Server Authentication or a Windows Authentication login. Используйте этот список для разрешения соединений только определенным именам входа или для разрешения некоторым именам входа подключаться в качестве другого имени входа.Use this list to restrict the connection to specific logins, or to allow some logins to connect as a different login.

    ImpersonateImpersonate
    Передает имя пользователя и пароль из локального имени входа на связанный сервер.Pass the username and password from the local login to the linked server. Для проверки подлинности SQL ServerSQL Server на удаленном сервере должны существовать учетные данные входа с тем же самым именем и паролем.For SQL ServerSQL Server Authentication, a login with the exact same name and password must exist on the remote server. Для имен входа Windows имя входа должно быть допустимым на связанном сервере.For Windows logins, the login must be a valid login on the linked server.

    Чтобы использовать олицетворение, конфигурация должна соответствовать требованиям, предъявляемым к делегированию.To use impersonation, the configuration must meet the requirement for delegation.

    Удаленный пользовательRemote User
    Сопоставьте удаленного пользователя c пользователями, не определенными в локальном имени входа.Use the remote user to map users not defined in Local login. Удаленный пользователь на удаленном сервере должен представлять собой имя входа для проверки подлинности SQL ServerSQL Server .The Remote User must be a SQL ServerSQL Server Authentication login on the remote server.

    Пароль для удаленного входаRemote Password
    Указывает пароль удаленного пользователя.Specify the password of the Remote User.

    ДобавитьAdd
    Добавляет новое локальное имя входа.Add a new local login.

    УдалитьRemove
    Удаляет существующее локальное имя входа.Remove an existing local login.

    Не выполнятьNot be made
    Указывает, что для имен входа, не определенных в списке, соединение невозможно.Specify that a connection will not be made for logins not defined in the list.

    Выполняется без использования контекста безопасностиBe made without using a security context
    Указывает, что для имен входа, не определенных в списке, соединение будет выполняться без использования контекста безопасности.Specify that a connection will be made without using a security context for logins not defined in the list.

    Выполняется с использованием текущего контекста безопасности имени входаBe made using the login's current security context
    Указывает, что для имен входа, не определенных в списке, соединение будет выполняться с использованием текущего контекста безопасности имени входа.Specify that a connection will be made using the current security context of the login for logins not defined in the list. При наличии соединения с локальным сервером с использованием проверки подлинности Windows для подключения к удаленному серверу будут использоваться учетные данные Windows.If connected to the local server using Windows Authentication, your windows credentials will be used to connect to the remote server. При наличии соединения с локальным сервером с использованием проверки подлинности SQL ServerSQL Server для подключения к удаленному серверу будут использоваться имя входа и пароль.If connected to the local server using SQL ServerSQL Server Authentication, login name and password will be used to connect to the remote server. В этом случае на удаленном сервере должны существовать учетные данные входа с теми же именем и паролем.In this case a login with the exact same name and password must exist on the remote server.

    Выполнять с использованием данного контекста безопасностиBe made using this security context
    Указывает, что для имен входа, не определенных в списке, соединение будет выполняться при помощи имени входа и пароля, заданных в полях Удаленный вход и С паролем .Specify that a connection will be made using the login and password specified in the Remote login and With password boxes for logins not defined in the list. Удаленное имя входа на удаленном сервере должно представлять собой имя входа для проверки подлинности SQL ServerSQL Server .The remote login must be a SQL ServerSQL Server Authentication login on the remote server.

  5. Для просмотра и установки параметров сервера можно также открыть страницу Параметры сервера .Optionally, to view or specify server options, click the Server Options page.

    Совместимые параметры сортировкиCollation Compatible
    Влияет на выполнение распределенных запросов на связанных серверах.Affects Distributed Query execution against linked servers. Если этот параметр установлен в значение true, то SQL ServerSQL Server предполагает, что все символы в связанном сервере совместимы с локальным сервером в зависимости от набора символов и параметров сортировки (или порядка сортировки).If this option is set to true, SQL ServerSQL Server assumes that all characters in the linked server are compatible with the local server, with regard to character set and collation sequence (or sort order). Это позволяет SQL ServerSQL Server отправлять поставщику сравнения по символьным столбцам.This enables SQL ServerSQL Server to send comparisons on character columns to the provider. Если этот параметр не задан, SQL ServerSQL Server всегда выполняет сравнения по символьным столбцам локально.If this option is not set, SQL ServerSQL Server always evaluates comparisons on character columns locally.

    Этот параметр необходимо задать только в том случае, если источник данных, соответствующий связанному серверу, имеет тот же набор символов и тот же порядок сортировки, что и локальный сервер.This option should be set only if it is certain that the data source corresponding to the linked server has the same character set and sort order as the local server.

    Доступ к даннымData Access
    Разрешает и запрещает доступ распределенных запросов к связанному серверу.Enables and disables a linked server for distributed query access.

    RPCRPC
    Включает RPC с определенного сервера.Enables RPC from the specified server.

    RPC OutRPC Out
    Включает RPC на определенный сервер.Enables RPC to the specified server.

    Использовать параметры сортировки удаленного сервераUse Remote Collation
    Определяет, будут ли использоваться параметры сортировки удаленного столбца или локального сервера.Determines whether the collation of a remote column or of a local server will be used.

    Если значение равно true, в источниках данных SQL ServerSQL Server используются параметры сортировки удаленных столбцов, а в не-SQL ServerSQL Server источниках данных — режим, заданный в имени параметров сортировки.If true, the collation of remote columns is used for SQL ServerSQL Server data sources, and the collation specified in collation name is used for non-SQL ServerSQL Server data sources.

    Если значение равно false, при распределенных запросах всегда будут использоваться установленные по умолчанию параметры сортировки на локальном сервере, в то время как имя параметров сортировки и параметры сортировки удаленных столбцов будут пропускаться.If false, distributed queries will always use the default collation of the local server, while collation name and the collation of remote columns are ignored. Значение по умолчанию — false.The default is false.

    Имя параметров сортировкиCollation Name
    Позволяет задать имя параметров сортировки, используемое удаленным источником данных, если значение параметра «Использовать параметры сортировки удаленного сервера» равно true, а источник данных не является источником данных SQL ServerSQL Server .Specifies the name of the collation used by the remote data source if use remote collation is true and the data source is not a SQL ServerSQL Server data source. Этот имя должно быть одним из параметров сортировки, поддерживаемых SQL ServerSQL Server.The name must be one of the collations supported by SQL ServerSQL Server.

    Этот параметр используется при доступе к источнику данных OLE DB, отличному от SQL ServerSQL Server, параметры сортировки которого совпадают с одним из параметров сортировки SQL ServerSQL Server .Use this option when accessing an OLE DB data source other than SQL ServerSQL Server, but whose collation matches one of the SQL ServerSQL Server collations.

    Связанный сервер должен поддерживать использование единых параметров сортировки для всех столбцов на этом сервере.The linked server must support a single collation to be used for all columns in that server. Не задавайте этот параметр, если связанный сервер поддерживает несколько параметров сортировки для одного источника данных, или если невозможно определить, соответствуют ли параметры сортировки связанного сервера одному из параметров сортировки SQL ServerSQL Server .Do not set this option if the linked server supports multiple collations within a single data source, or if the linked server's collation cannot be determined to match one of the SQL ServerSQL Server collations.

    Время ожидания соединенияConnection Timeout
    Значение времени ожидания соединения со связанным сервером.Time-out value in seconds for connecting to a linked server.

    Если значение равно 0, используется значение, заданное через sp_configure по умолчанию, — remote login timeout .If 0, use the sp_configure default remote login timeout option value.

    Время ожидания запросаQuery Timeout
    Значение времени ожидания для запросов к связанному серверу, в секундах.Time-out value in seconds for queries against a linked server.

    Если значение равно 0, используется значение, заданное через sp_configure по умолчанию, — remote query timeout .If 0, use the sp_configure default remote query timeout option value.

    Разрешить продвижение распределенных транзакцийEnable Promotion of Distributed Transactions
    Используйте этот параметр, чтобы защитить действия процедуры между серверами посредством транзакции координатора распределенных транзакций (Майкрософт) ( MicrosoftMicrosoft DTC).Use this option to protect the actions of a server-to-server procedure through a MicrosoftMicrosoft Distributed Transaction Coordinator (MS DTC) transaction. Если этот параметр имеет значение TRUE, то вызов удаленной хранимой процедуры приводит к запуску распределенной транзакции и прикрепляет к выполнению транзакции MS DTC.When this option is TRUE, calling a remote stored procedure starts a distributed transaction and enlists the transaction with MS DTC. Дополнительные сведения см. в статье sp_serveroption (Transact-SQL).For more information, see sp_serveroption (Transact-SQL).

  6. Нажмите кнопку ОК.Click OK.

Просмотр параметров поставщикаTo view the provider options
  • Чтобы просмотреть доступные параметры поставщика, откройте страницы Параметры поставщиков .To view the options that the provider makes available, click the Providers Options page.

    У всех поставщиков нет общего набора доступных параметров.All providers do not have the same options available. Например, некоторые типы данных могут быть индексированы, а некоторые нет.For example, some types of data have indexes available and some might not. Используйте это диалоговое окно, чтобы ознакомить службы SQL ServerSQL Server с возможностями поставщика.Use this dialog box to help SQL ServerSQL Server understand the capabilities of the provider. SQL ServerSQL Server устанавливает несколько общих поставщиков данных, однако при изменении продукта, поставляющего данные, поставщик, установленный с помощью SQL ServerSQL Server , может не поддерживать все новейшие функции.installs some common data providers, however when the product providing the data changes, the provider installed by SQL ServerSQL Server might not support all the newest features. Лучшим источником сведений о возможностях продукта, поставляющего данные, является документация по продукту.The best source of information about the capabilities of the product providing the data is the documentation for that product.

    Динамический параметрDynamic parameter
    Указывает, что поставщик разрешает использовать синтаксис маркеров параметров «?» для параметризованных запросов.Indicates that the provider allows '?' parameter marker syntax for parameterized queries. Установите этот параметр только в том случае, если поставщик поддерживает интерфейс ICommandWithParameters и символ «?» в качестве маркера параметров.Set this option only if the provider supports the ICommandWithParameters interface and supports a '?' as the parameter marker. Установка этого параметра позволяет SQL ServerSQL Server выполнять параметризованные запросы к поставщику.Setting this option allows SQL ServerSQL Server to execute parameterized queries against the provider. Возможность выполнять параметризованные запросы к поставщику может повысить производительность некоторых запросов.The ability to execute parameterized queries against the provider can result in better performance for certain queries.

    Вложенные запросыNested queries
    Указывает, что поставщик разрешает вложенные инструкции SELECT в предложении FROM.Indicates that the provider allows nested SELECT statements in the FROM clause. Установка этого параметра позволяет SQL ServerSQL Server делегировать поставщику определенные запросы, требующие вложенных инструкций SELECT в предложении FROM.Setting this option allows SQL ServerSQL Server to delegate certain queries to the provider that require nesting SELECT statements in the FROM clause.

    Только нулевой уровеньLevel zero only
    Для поставщика вызываются только интерфейсы OLE DB уровня 0.Only level 0 OLE DB interfaces are invoked against the provider.

    Допускать в ходе процессаAllow inprocess
    SQL ServerSQL Server разрешает создание экземпляра поставщика в виде внутрипроцессного сервера.allows the provider to be instantiated as an in-process server. Если этот параметр не установлен, поведением по умолчанию является создание экземпляра поставщика вне процесса SQL ServerSQL Server .When this option is not set, the default behavior is to instantiate the provider outside the SQL ServerSQL Server process. Создание экземпляра поставщика вне процесса SQL ServerSQL Server защищает процесс SQL ServerSQL Server от ошибок в поставщике.Instantiating the provider outside the SQL ServerSQL Server process protects the SQL ServerSQL Server process from errors in the provider. Если экземпляр поставщика создается вне процесса SQL ServerSQL Server , обновления или вставки, ссылающиеся на длинные столбцы (text, ntextили image), не разрешаются.When the provider is instantiated outside the SQL ServerSQL Server process, updates or inserts referencing long columns (text, ntext, or image) are not allowed.

    Обновления без использования транзакцийNon transacted updates
    SQL ServerSQL Server разрешает обновления, даже если недоступен интерфейс ITransactionLocal .allows updates, even if ITransactionLocal is not available. Если этот параметр включен, обновления поставщика необратимы, поскольку этот поставщик не поддерживает транзакции.If this option is enabled, updates against the provider are not recoverable, because the provider does not support transactions.

    Индекс в качестве пути доступаIndex as access path
    SQL ServerSQL Server пытается использовать индексы поставщика для выборки данных.attempts to use indexes of the provider to fetch data. По умолчанию индексы используются только для метаданных и никогда не открываются.By default, indexes are used only for metadata and are never opened

    Запретить нерегламентированный доступDisallow ad hoc access
    SQL ServerSQL Server не разрешает нерегламентированный доступ с помощью функций OPENROWSET и OPENDATASOURCE к поставщику OLE DB.does not allow ad hoc access through the OPENROWSET and OPENDATASOURCE functions against the OLE DB provider. Если этот параметр не задан, SQL ServerSQL Server также не разрешает нерегламентированный доступ.When this option is not set, SQL ServerSQL Server also does not allow ad hoc access.

    Поддерживает оператор Like.Supports 'Like' operator
    Указывает, что поставщик поддерживает запросы с использованием ключевого слова LIKE.Indicates that the provider supports queries using the LIKE key word.

Использование Transact-SQLUsing Transact-SQL

Чтобы создать связанный сервер с помощью Transact-SQLTransact-SQL, используйте инструкции sp_addlinkedserver (Transact-SQL)CREATE LOGIN (Transact-SQL) и sp_addlinkedsrvlogin (Transact-SQL).To create a linked server by using Transact-SQLTransact-SQL, use the sp_addlinkedserver (Transact-SQL)CREATE LOGIN (Transact-SQL) and sp_addlinkedsrvlogin (Transact-SQL) statements.

Создание связанного сервера для другого экземпляра SQL Server с помощью Transact-SQLTo create a linked server to another instance of SQL Server using Transact-SQL
  1. В редакторе запросов введите следующую команду Transact-SQLTransact-SQL , чтобы установить связь с экземпляром SQL ServerSQL Server с именем SRVR002\ACCTG:In Query Editor, enter the following Transact-SQLTransact-SQL command to link to an instance of SQL ServerSQL Server named SRVR002\ACCTG:

    USE [master]  
    GO  
    EXEC master.dbo.sp_addlinkedserver   
        @server = N'SRVR002\ACCTG',   
        @srvproduct=N'SQL Server' ;  
    GO  
    
    
  2. Выполните следующий код, чтобы настроить связанный сервер для использования учетных данных домена для имени входа, которое использует связанный сервер.Execute the following code to configure the linked server to use the domain credentials of the login that is using the linked server.

    EXEC master.dbo.sp_addlinkedsrvlogin   
        @rmtsrvname = N'SRVR002\ACCTG',   
        @locallogin = NULL ,   
        @useself = N'True' ;  
    GO  
    
    

Дальнейшие действия после создания связанного сервераFollow Up: Steps to take after you create a linked server

Проверка связанного сервераTo test the linked server

  • Выполните следующий код, чтобы проверить соединение со связанным сервером.Execute the following code to test the connection to the linked server. Этот пример возвращает имена баз данных на связанном сервере.This example the returns the names of the databases on the linked server.

    SELECT name FROM [SRVR002\ACCTG].master.sys.databases ;  
    GO  
    
    

Создание запроса, соединяющего таблицы со связанного сервераWriting a query that joins tables from a linked server

  • Для ссылки на объект, расположенный на связанном сервере, используйте четырехкомпонентные имена.Use four-part names to refer to an object on a linked server. Выполните следующий код, чтобы получить список всех имен входа на локальном сервере и соответствующих имен входа на связанном сервере.Execute the following code to return a list of all logins on the local server and their matching logins on the linked server.

    SELECT local.name AS LocalLogins, linked.name AS LinkedLogins  
    FROM master.sys.server_principals AS local  
    LEFT JOIN [SRVR002\ACCTG].master.sys.server_principals AS linked  
        ON local.name = linked.name ;  
    GO  
    

    Если для имени входа связанного сервера возвращается значение NULL, это значит, что имя входа не существует на связанном сервере.When NULL is returned for the linked server login it indicates that the login does not exist on the linked server. Такие имена входа не смогут использовать связанный сервер, если на нем не настроена передача другого контекста безопасности и он не принимает анонимные подключения.These logins will not be able to use the linked server unless the linked server is configured to pass a different security context or the linked server accepts anonymous connections.

См. также:See Also

Связанные серверы (компонент Database Engine) Linked Servers (Database Engine)
sp_addlinkedserver (Transact-SQL) sp_addlinkedserver (Transact-SQL)
sp_serveroption (Transact-SQL)sp_serveroption (Transact-SQL)