2015-10-08 4 views
0

Я использую класс SMO Transfer для копирования производственной базы данных в тестовую среду. Это великолепно работало, пока база данных производства не увеличилась и не изменилась более часто. Теперь операция копирования часто не на получение ограничений на (я предполагаю, что это то, что он есть):Как осуществлять транзакционную SMO-передачу базы данных?

The ALTER TABLE statement conflicted with the FOREIGN KEY constraint <...> 

Это странно, потому что я предполагал, что извлечение стороны операции копирования была областью действия в сделке, а также Уровень транзакции SQL Azure по умолчанию считывается с моментальным снимком. Снимок должен показывать отсутствие ограничений, о которых я думал.

Я уже пробовал поместить соединение передачи в другую транзакцию, но это не влияет.

Знает ли кто-нибудь об этом?

ответ

1

Я предполагаю, что по локальной копии вы имеете в виду копию базы данных на вашей машине? На этом этапе мы не рекомендуем использовать SMO для этого сценария. Если источником и целью являются SQL DB, правильный подход использует CREATE DATABASE ... AS COPY OF (что вы уже делаете). Если исходный или целевой объект является локальным, рекомендуется использовать классы в пространстве имен Microsoft.SqlServer.Dac, как описано в документе here.

Re SMO в целом, частичный набор SMO разрешен только для обеспечения доступа Management Studio к базе данных SQL. Эти объекты предлагают ограниченную функциональность и не предназначены для использования в приложениях. Статья об этом была заархивирована, и мы следим за ее повторной публикацией.

+0

DACFx похоже, прекрасно работает, спасибо за подсказку! – John

+0

Однако DACFx кажется чрезвычайно медленным - восстановление базы данных образца с соответствующим .BAK-файлом в 300 МБ занимает поразительные 40 минут, по сравнению с 10 секундами, которые требуется восстановить на SQL SERVER. SMO было медленнее, чем восстановление, но не так медленно. Интересно, что я делаю что-то неправильно. Я не могу поверить, что это полезно для любого человека с такой производительностью. – John

0

Есть ли обе среды в Azure? Если да, и если вы хотите скопировать всю базу данных, вы можете рассмотреть возможность использования операции копирования базы данных (CREATE DATABASE ... AS COPY OF). Одно из преимуществ заключается в том, что копия гарантированно совместима с транзакциями. См. here для получения дополнительной информации.

+0

Я использую «КАК КОПИРОВАТЬ» для этого случая уже, но иногда я также хочу создать локальную копию базы данных Azure - для этого я использовал SMO, пока он не перестанет быть полезным. – John

Смежные вопросы