Сбой копирования базы данных SQL DTS - PullRequest
2 голосов
/ 15 октября 2008

Привет всем, я работал над этой проблемой некоторое время, и обычный поиск в Google не помогает: (

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

У меня есть задание DTS, созданное для этого. В рамках этого задания DTS у меня есть одна задача «Копировать объекты SQL Server». Задача настроена на:

  • Создать все скопированные объекты
    • Сначала отбросить объекты назначения
  • Копировать данные
    • Заменить существующие данные
  • Копирование индексов, триггеров, первичных и внешних ключей
  • Копирование всех пользовательских таблиц, представлений, функций и хранимых процедур.

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

Step Error Source: Microsoft SQL-DMO (ODBC SQLState: 42S02)
Step Error Description:[Microsoft][ODBC SQL Server Driver][SQL Server]Invalid object name 'dbo.vwEstAssetStationAddress'.
Step Error code: 800400D0
Step Error Help File:SQLDMO80.hlp
Step Error Help Context ID:1131

Мои поиски в сети не помогли. Есть сообщения об этих ошибках, но ни одна из них не соответствует моим обстоятельствам. Я обнаружил, что таблица sysdepends была повреждена, из-за чего задание DTS запускало свои сценарии в неправильном порядке. Тем не менее, я запустил следующий скрипт для исправления этой таблицы, и он по-прежнему выдает ту же ошибку:

USE master
GO
ALTER DATABASE [DATABASE NAME]
SET SINGLE_USER
GO

USE [DATABASE NAME]
GO

DBCC CHECKTABLE('sysdepends',REPAIR_REBUILD )
GO

USE master
GO
ALTER DATABASE [DATABASE NAME]
SET MULTI_USER
GO

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

Есть предложения?

Ответы [ 6 ]

2 голосов
/ 15 октября 2008

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

Несмотря на то, что я выбрал для копирования все пользовательские таблицы, представления, хранимые процедуры и пользовательские функции, я не выбрал «Включить все зависимые объекты». Я предполагал, что если вы выберете два объекта для копирования, и один будет зависеть от другого, SQL всегда будет делать их в правильном порядке. По-видимому, нет. Выбор этого маленького флажка сделал всю разницу.

Еще раз спасибо тем, кто помог с предложениями

0 голосов
/ 15 октября 2008

Я провел еще один тест, чтобы попытаться изолировать это. Я полностью удалил упомянутое представление из базы данных назначения, затем снова запустил DTS. Не удалось с той же ошибкой. Однако представление о том, что это недопустимое имя объекта, было успешно воссоздано. Кажется, что ошибка происходит от чего-то, пытающегося ссылаться на это представление, но на самом деле он не останавливает сценарий, когда сталкивается с этой ошибкой.

Кейд - я проверю эту ссылку. Я также попытаюсь установить, что относится к представлению и нарушению.

0 голосов
/ 15 октября 2008

Я пытался избежать этого с помощью резервного копирования / восстановления. Есть некоторые пользователи базы данных, которые являются учетными записями SQL Server (не Active Directory). Это становится проблемой, но если вам нужно сделать это с одного сервера на другой, вам нужно отбросить этих пользователей и воссоздать их.

0 голосов
/ 15 октября 2008

Похоже, что он пытается создать хранимую процедуру / представление на основе представления, которое еще не существует.

Почему бы просто не сделать резервную копию и восстановить базу данных под другим именем? (если бы это не было производство, я бы сказал, отсоединить, скопировать и повторно присоединить). Вы можете делать все это под контролем T-SQL.

Посмотрите, поможет ли эта ссылка найти проблему с зависимостями.

0 голосов
/ 15 октября 2008

Спасибо за ответ hectorsosajr.

объект, вызывающий ошибку (dbo.vwEstAssetStationAddress), является представлением, которое ссылается на две базовые таблицы. Я протестировал запрос к представлению, а также запустил оператор SELECT, который его определяет, как в исходной, так и в целевой базе данных, и он отлично работает.

Задача копирования объекта базы данных в DTS не позволяет указывать порядок, в котором она передает вещи. Насколько я понимаю, она использует таблицу sysdepends для определения необходимого порядка событий.

0 голосов
/ 15 октября 2008

Каким-то образом таблица DTS не находит таблицу dbo.vwEstAssetStationAddress. К сожалению, в сообщении не говорится, находилось ли оно в источнике или в месте назначения, что не смогло его найти.

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

...