Сбой канала связи: при вставке в связанный сервер (Azure) из SQL Server 2012

Я пытаюсь скопировать данные из одной таблицы на SQL Server 2012 в другую таблицу на удаленном сервере (Azure)

Azure добавлен как связанный сервер в SQL Server 2012.

Я создаю операторы XML для вставок, а затем выполняю эти операторы на удаленном сервере, как указано ниже.

DECLARE @xml XML

SET @xml = (
        SELECT 'insert into Table_on_Azure values ('  + convert(varchar(300),isnull(ID, 'NULL')) + ','  + convert(varchar(300),isnull(ST_ID, 'NULL')) + ',' ..... etc etc ...');'
        FROM local_table
        FOR XML path('')
        ) 

DECLARE @sql AS VARCHAR(max)

SET @sql = 'set nocount on;' + cast(@xml AS VARCHAR(max)) + 'set nocount off;' --Converts XML back to a long string
EXEC ('select * from remote_table_2') AT Linked_Azure_Server -- To confirm that the Linked Server is working fine and yes I do get results from this.

EXEC ('use myRemoteDB;' + @sql ) AT Linked_Azure_Server

Причина, по которой я это делаю, такова: «В локальной таблице около 1 миллиона записей, и мне потребовалось более 3 часов, чтобы передать данные на связанный сервер. Затем я нашел этот ответ Производительность вставки-выбора связанного сервера, в котором было предложено создавать операторы вставки XML и выполнять их на удаленном сервере.

Но когда я делаю это, я получаю ошибку ниже

OLE DB provider "SQLNCLI11" for linked server "Linked_Azure_Server" returned message "Communication link failure".
TCP Provider: The specified network name is no longer available.

Я уверен, что ссылка на Linked_Server в порядке. Для перекрестной проверки я написал этот оператор EXEC ('select * from remote_table_2') AT Linked_Azure_Server непосредственно перед вставкой записей, и я действительно получаю от этого результаты.

Я проверил другие ответы на аналогичные вопросы, связанные с Communication Link Failure, но никто не помог.


person Rahul Verma    schedule 14.11.2017    source источник
comment
Я не думаю, что рекомендуется обязательно использовать XML. Дополнительные сведения о выполнении запроса в Azure для выбора с локального сервера в качестве удаленного связанного сервера, в отличие от выполнения запроса на локальном сервере и вставки в связанную Azure. удаленно. Обратите внимание на разницу. Похоже, вы все еще пытаетесь выполнить запрос к тому же связанному серверу из Azure (то есть к самому себе).   -  person Jacob H    schedule 14.11.2017
comment
@JacobH: Похоже, вы все еще пытаетесь выполнить запрос к тому же связанному серверу из Azure (то есть самому): я не совсем понял. Можете ли вы подробнее рассказать об этом с некоторыми предложениями?   -  person Rahul Verma    schedule 15.11.2017
comment
Вы вошли в Azure или на локальный сервер SQL, когда выполняете этот запрос?   -  person Jacob H    schedule 15.11.2017
comment
@JacobH: я вхожу в SQL Server, когда запускаю этот запрос.   -  person Rahul Verma    schedule 15.11.2017
comment
Итак, войдите на сервер Azure и выполните удаленный запрос на локальный сервер. Вместо того, что вы сейчас делаете, то есть входите в систему локально и выполняете удаленный запрос к Azure. Тянуть против толкать.   -  person Jacob H    schedule 15.11.2017
comment
@JacobH: Да, это вызов. Мы не можем добавить SQL-серверы, отличные от Azure, в качестве связанных серверов в Azure. Это причина, по которой я должен подталкивать данные, а не получать их. Удаленные запросы возможны только между экземплярами Azure. Если вы можете предложить мне что-то, я буду признателен.   -  person Rahul Verma    schedule 15.11.2017
comment
Ах, хороший момент ... может быть, попробовать этот подход? dba.stackexchange.com/questions/168537/   -  person Jacob H    schedule 15.11.2017


Ответы (1)


Я уже сталкивался с этим раньше, и моя продуктивность резко останавливалась на несколько часов. Ключом для меня был URL-адрес БД. Который нуждался в слове «безопасный» в нем, как показано ниже:

[db_name].database.secure.windows.net

Я был шокирован тем, что по этому поводу не было документации, и URL-адрес нигде не указан. Для справки, я докопался до сути случайно, когда наткнулся на этой статьи.

person pim    schedule 14.11.2017
comment
Linked_Azure_Server в моем первоначальном вопросе на самом деле является объектом, который ссылается на сервер [server_name].database.secure.windows.net. Я уже упоминал полное доменное имя при настройке этого объекта связанного сервера. Также я могу использовать этот объект, как я уже упоминал в своем вопросе, но по какой-то причине это приводит к сбою канала связи. Можете ли вы порекомендовать мне что-то еще или изменить код в моем первоначальном вопросе. Спасибо - person Rahul Verma; 15.11.2017