Проблема с копией базы данных SQL Server

Я запускаю мастер копирования базы данных на экземпляре SQL Server 2008 R2.

База данных, которую я хочу скопировать, — это база данных SQL 2000. Я копирую эту базу данных на другой SQL SErver 2008 R2.

Мастер использует аутентификацию SQL для обоих серверов, и оба являются системными администраторами.

Когда я запускаю его, я получаю следующую ошибку (к вашему сведению, я пробовал как копировать логины, так и оставлять их):

Имя события: Сообщение об ошибке: ОШИБКА: errorCode=-1073548784 description=Выполнение запроса "sys.sp_addrolemember @rolename = N'RandomRoleName..." не удалось со следующей ошибкой: "Роль "RandomRoleName" не существует в текущей базе данных .". Возможные причины сбоя: Проблемы с запросом, неправильно задано свойство "ResultSet", неправильно заданы параметры или неправильно установлено соединение. helpFile= helpContext=0 idofInterfaceWithError={C81DFC5A-3B22-4DA3-BD3B-10BF861A7F9C} StackTrace: в Microsoft.SqlServer.Management.Dts.DtsTransferProvider.ExecuteTransfer() в Microsoft.SqlServer.Management.Smo.Transfer.TransferData() в Microsoft .SqlServer.Dts.Tasks.TransferObjectsTask.TransferObjectsTask.TransferDatabasesUsingSMOTransfer()

Любая помощь будет оценена по достоинству!

Джим


person BIDeveloper    schedule 03.06.2011    source источник
comment
Вы проверили имя роли Under Security -> Role -> ?   -  person Pankaj    schedule 03.06.2011
comment
@SQL Я полагаю, вы имеете в виду исходную базу данных? Да... вот откуда волшебник берет на себя роль.   -  person BIDeveloper    schedule 03.06.2011
comment
Конечно, настоящая причина этой ошибки в том, что какой-то мальчишка-скриптер на небольшая софтверная компания не проверяла наличие нулевого указателя в своем коде (хотя они, вероятно, называют его нулевым указателем)   -  person Reversed Engineer    schedule 07.11.2019


Ответы (5)


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

Честно говоря, самый простой способ - сделать один из этих двух:

  • резервное восстановление
  • отсоединять, копировать, присоединять
person gbn    schedule 05.06.2011

Я предлагаю не использовать мастер копирования базы данных. Создайте полную резервную копию базы данных на сервере 2000, а затем восстановите ее на сервере 2008.

Если вы погуглите «Microsoft.SqlServer.Management.Dts.DtsTransferProvider.ExecuteTransfer Copy Database Wizard», вы обнаружите, что многие люди сталкивались с этой же ошибкой или другими почти идентичными ошибками smo... похоже, никто не прошел мимо нее.

Это не значит, что это невозможно... просто восстановление резервной копии намного проще, чем мастер или устранение неполадок с помощью мастера. Удачи.

person RThomas    schedule 04.06.2011

Если у вас нет доступа к операционной системе и вы не можете ее получить, другой вариант – создать отсутствующие роли в фоновом режиме во время выполнения копирования.

Вы должны поймать их между создание файлов и когда он пытается сослаться на роли, но есть несколько секунд, чтобы создать их, если вы продолжаете нажимать выполнить - мне удалось создать 9 ролей.

К сожалению, вы закончите также с ролями в другой базе данных (пока ваша не может быть использована), поэтому их необходимо удалить.

Конечно, это только вариант, когда вы действительно не можете использовать другой метод.

person Anon    schedule 20.11.2011

Хотя ответ, использующий технику резервного копирования, в целом решает проблему, после того, как я столкнулся с одной и той же проблемой несколько раз, я смог проследить корень проблемы с помощью средства просмотра событий Windows до мастера копирования базы данных, используя агент SQL. , в конечном итоге создаст задание для запуска агента, после чего агент запустится с использованием собственных учетных данных (т.е. учетных данных, которые вы можете найти в службах Windows, в моем случае NT Service\SQLAgent$SQL2014)

Все, что вам нужно сделать, это перейти в папку, в которой SQL Server создает файлы БД (например, C:\Program Files\Microsoft SQL Server\MSSQL12.SQL2014\MSSQL\DATA по умолчанию для SQL 2014), и предоставить пользователю Windows агента SQL доступ для записи/чтения в папку.

person Hasan Baidoun    schedule 02.07.2018

Причиной может быть то, что файл с новым именем базы данных уже существует в файловой системе. Мы столкнулись с этим, когда переименовали базу данных X в X_Old и попытались скопировать базу данных Y в X. Это невозможно сделать, потому что база данных X_Old по-прежнему связана с именем файла X.

Либо удалите конфликтующую базу данных, либо переименуйте файл в файловой системе.

См. http://codecopy.wordpress.com/2012/01/03/error-while-copying-a-database/

person Calciol    schedule 03.01.2012