Я недавно пробовал большое слияние двух баз данных. Мы воссоздали схему из базы данных 2 в базу данных 1 и создали скрипт для переноса всех данных из базы данных 2 в базу данных 1. Этот сценарий занимает около 35 минут, чтобы работать и иметь операцию обработки с:Что происходит с подключениями при использовании SQl Server Database Offline?
BEGIN TRANSACTION
...
IF(@@error<>0)
COMMIT TRANSACTION
ELSE
ROLLBACK TRANSACTION
Полный сценарий бит чувствительный, но вот некоторые SQL, которые имеют одинаковую структуру: http://pastebin.com/GWJ3ZnkF
Мы запустили скрипт, и все данные были переданы без ошибок. Мы протестировали системы, работающие с новой комбинированной базой данных (удаленные права доступа к старой базе данных).
Но в качестве последней задачи мы хотели отключить старую базу данных, чтобы убедиться, что никто не использовал эту базу данных. Для этого мы использовали:
ALTER DATABASE <dbname> SET OFFLINE WITH ROLLBACK IMMEDIATE
Это было плохо. После этой строки кода SQL все данные в объединенной базе данных, которые мы только что скопировали, внезапно исчезли. Я сначала предположил, что он не был действительно закончен, поэтому «Откат немедленный» звучит так, будто он выполнил откат по моей транзакции.
Но почему? Разве сделка не была совершена?
Также я попытался запустить тот же скрипт несколько раз, но после каждой попытки данные не были скопированы, даже если он сказал, что скрипт был успешным. Я понятия не имею, почему ... он каким-то образом помнил мой автономный откат?
Что действительно происходит с моими подключениями?
+1 Хороший совет. –
Спасибо, я подозреваю, что это будет как можно ближе к ответу, который я получу. Да, из. Я сделал резервную копию, но базы данных обслуживают 2 очень активных веб-системы, поэтому базы данных должны быть старыми (всего через несколько часов после загрузки средств обслуживания) для восстановления сейчас, если мы действительно не должны. Я должен попытаться создать сценарий, который может справиться с этим в текущем состоянии. – Swippen