Я обнаружил, что BCP более эффективен, чем некоторые инструменты для переноса данных в более раннюю версию SQL Server и для извлечения данных из RDS. (Спасибо @ivan_posdeev.)
Сначала я создаю схему, щелкая правой кнопкой мыши базу данных в SQL Server Management Studio, Задачи, Генерация сценариев. Отметьте все объекты, в расширенных объектах убедитесь, что все, что вам нужно, будет написано в сценарии (статистика, индексы и т. Д.), Снимите флажок «ИСПОЛЬЗОВАТЬ базу данных», если ваша база данных назначения имеет другое имя, установите совместимость с вашей версией базы данных назначения и сгенерируйте файл, который создает вашу схему. Создание базы данных по месту назначения и запустить этот файл на него ( с помощью osql
, sqlcmd
или GUI).
Чтобы переместить данные, дважды выполните следующий запрос в исходной базе данных, сначала закомментировав второй столбец, чтобы сгенерировать пакетный файл для извлечения данных, а затем закомментировав первый столбец, чтобы сгенерировать пакетный файл импорта, который будет выполняться в месте назначения. (Вы должны добавить свои исходные и целевые сервера, имена экземпляров, выходные и входные каталоги файлов, имена пользователей и пароли. Для использования интегрированной безопасности замены -U
и -P
вариант с только -T
.)
Это поддерживает Unicode, если вам это не нужно, измените -N
переключатель в обоих операторах на -n
.
SELECT
'bcp SOURCEDATABASE.' + s.Name + '.' + t.NAME + ' out d:\dbdump\' + s.Name + '.' + t.NAME + '.dat -N -S SOURCESERVER\INSTANCE -UUSER -PPASSWORD'
-- 'bcp DESTINATIONDATASE.' + s.Name + '.' + t.NAME + ' in d:\dbdump\' + s.Name + '.' + t.NAME + '.dat -N -S DESTINATIONSERVER\INSTANCE -UUSER -PPASSWORD -E -h TABLOCK -b 1000 -e d:\dbdump\' + s.Name + '.' + t.NAME + '.ERRORS.dat'
FROM
sys.tables t
INNER JOIN
sys.indexes i ON t.OBJECT_ID = i.object_id
LEFT OUTER JOIN
sys.schemas s ON t.schema_id = s.schema_id
ORDER BY
s.Name, t.NAME
После запуска проверьте файлы с именем schema.tablename.ERRORS.dat - будет включать в себя все строки, которые не удалось, пустые, если ни один не сделал.
Ссылка MSDN для BCP здесь , более дружественный обзор вариантов BCP здесь .
Я обнаружил, что это значительно превосходит создание скриптов и любых инструментов, которые я пробовал. Он также работает на базах данных RDS (которые не разрешают резервное копирование). Сгенерированные файлы данных имеют размер скриптов SQL на 30%, их запуск занимает меньше времени и является гораздо более надежным. (Сценарии, сгенерированные SQL Server для данных сценариев, всегда срабатывали, иногда предсказуемо, иногда нет, сгенерированный SQL не был совместим с 2008R2 (например, использовался nvarchar(0)
, часто не завершался без видимой причины и т. Д. BCP также копирует любые нарушения ограничений) , такие как ссылочная целостность.).