Как SQL справляется с длительным запросом через связанный сервер, если происходит перезагрузка ПК?

#sql-server #rollback #linked-server

Вопрос:

У меня есть база данных SQL Server, и у меня есть подключение к серверу, связанному с базой данных Oracle.

На моем SQL-сервере был запущен следующий запрос:

 INSERT INTO dbo.my_table_on_sql_server
    SELECT * 
    FROM OPENQUERY (linkedservername, ‘SELECT * FROM target_table’)
 

В таблице target_table 50 миллионов строк, и я знаю, что выполнение запроса требует времени, но он был успешно завершен ранее.

На этот раз, однако, у моего компьютера был автоматический перезапуск в середине запроса. SSMS 2017 автоматически открылся, как только компьютер снова заработал, но я больше не мог видеть, как выполняется запрос. my_table_on_sql_server не имеет данных.

Я хотел бы понять, что происходит в SQL Server в случае такой ситуации. Правильно ли я предполагаю, что запрос был убит / откатан? Есть ли какой-либо запрос, выполняемый в фоновом режиме? Я видел некоторые связанные ответы на этом форуме, но хотел конкретно понять это для связанных серверов, так как я часто использую их для извлечения данных из других баз данных для своей работы.

Меня больше беспокоит база данных Oracle, так как я не хочу, чтобы мой запрос влиял на производительность в восходящем потоке. У меня есть разрешение на доступ только для чтения к базе данных Oracle.

Спасибо!

Ответ №1:

При завершении работы запрос будет прерван, и ВСТАВКА будет откатана. Откат может произойти во время выключения или после перезапуска, и для его завершения может потребоваться некоторое время.

Нет автоматической повторной попытки или чего-либо, что позволит получить доступ к связанному серверу Oracle после завершения работы.

Комментарии:

1. Спасибо, Дэвид, за оперативный ответ, очень признателен!