Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Перенос структуры БД + часть данных на другой сервер + дальнейшая синхронизация  [new]
avs99
Member

Откуда: Москва - Сеул :)
Сообщений: 24
Добрый день all!

Такая ситуация - есть база на одной машине. Там всякие тестовые данные. Надо - перенести структуру БД + справочники на другую машину (1) + в дальнейшем синхронизировать изменения полей (2) и справочных данных (3) с первой машины на вторую.

Для (1) я стал использовать DTS - Task Copy SQL Server Object. На первый взгляд там все просто и ясно, я радостно запустил это дело сначала на создание новой базы и структуры, потом на копирование данных. Тут же возникли проблемы при переносе структуры - вот что она пишет в логе:

::Warning::
Transfer Status: Scripting dependent object drops
The object 'dbo.fn_AuthorsOfProject' not being transfered is dependent on the table 'dbo.AuthorWorkStatus' being transfered.

и это для всех вьюх, ХП и UDF. Почему так? Я ведь создаю новую БД...

Далее, когда она начинает уже создавать на другой машине базу, то у неё возникают проблемы с созданием вьюх. Я смотрю скрипт по их созданию - получается, что одна из вьюх, на которую ссылаются ряд других создается после их => сообщение об ошибке. Как с этим бороться?

Что вы посоветуете с (2)? Возможно ли автоматически скриптовать все изменения в структуре БД при работе через ЕМ?

И насчет (3) - я совсем не знаю, как это реализовать. Киньте какую-нибудь урлу pls.

С уважением,
Алексей.
30 янв 03, 11:27    [117961]     Ответить | Цитировать Сообщить модератору
 Re: Перенос структуры БД + часть данных на другой сервер + дальнейшая синхрониза  [new]
tygra
Member

Откуда: Тверь (Иркутск, Край)
Сообщений: 9998
Как-то странно выглядит - сначала спрашиваешь перенести структуру БД + справочники на другую машину (1) + в дальнейшем синхронизировать изменения полей (2) и справочных данных (3) с первой машины на вторую
а потом Возможно ли автоматически скриптовать все изменения в структуре БД при работе через ЕМ - ??????

Перенести всю БД - сначала бэкап, потом на другой машине восстанови. Зачем через DTS ?????

Изменения данных - или реплицация MS, или своя собственная
30 янв 03, 11:36    [117969]     Ответить | Цитировать Сообщить модератору
 Re: Перенос структуры БД + часть данных на другой сервер + дальнейшая синхрониза  [new]
Sinner
Member

Откуда:
Сообщений: 453
Я делал так - сначала скриптом создавал структуру,
только нужно поставить флажок Script all depend... object
тогда те объекты, от которых зависит текущий будут
заскриптованы заранее...
предварительно отключал все реляции и триггеры

(не забыв проставить SET IDENTITY Таблица ON)
а потом DTS - ом переносил, через скрипты, со связанного сервера.
(по окончании SET IDENTITY Таблица OFF)
Это для каждой таблицы...

затем включал все реляции и триггеры

... Более менее все гладко перенеслось, чего и Вам желаю...

А синхронизация структур - можно еще и так
создаю полный скрипт БД1 и полный скрипт БД2
(по одному файлу на каждый объект)
а потом можно сравнивать всякими компарилками (Exam Diff) или
в толзой составе VSS
30 янв 03, 11:39    [117973]     Ответить | Цитировать Сообщить модератору
 Re: Перенос структуры БД + часть данных на другой сервер + дальнейшая синхрониза  [new]
AVB
Member

Откуда: Москва
Сообщений: 100
А ещё, для переноса структуры очень удобно пользоваться механизмом "generating scripts" (см. BOL)
30 янв 03, 11:39    [117975]     Ответить | Цитировать Сообщить модератору
 Re: Перенос структуры БД + часть данных на другой сервер + дальнейшая синхрониза  [new]
ASe
Guest
Вообще-то это репликацией решается, но, если нет возможности ее использовать, посмотри мой вариант:
Структуру базы переносил следующим образом:
- генерация скрипта в EM
- ручная правка в QA с вычищением ненужных процедур и таблиц
Данные переносятся хранимой процедурой sp_SyncronizeAll вида
insert into TableName(f1, f2, f3)
select f1, f2, f3 from remoteserver.db.dbo.tablename
...
первый сервер подлинкован ко второму.
30 янв 03, 11:46    [117988]     Ответить | Цитировать Сообщить модератору
 Re: Перенос структуры БД + часть данных на другой сервер + дальнейшая синхрониза  [new]
avs99
Member

Откуда: Москва - Сеул :)
Сообщений: 24
Почему DTS? т.к. процесс переноса будет определенно несколько раз повторяться, то чтобы его более-менее автоматизировать. Т.е. ситуация такая - мы делаем проект у себя в офисе, у заказчика начинается опытная эксплуатация. Мы проект потихонечку доделываем => может менятся база. В базе есть справочники заказчика + всякая наша тестовая фигня. Справочники нужно сохранить, остальное - убрать. Переношу я все на другую машину в нашем офисе, а с неё уже через недельку где-то сделают бэкап и повезут заказчику. И вот с этого времени надо будет как-то отслеживать изменения в структуре нашей БД, чтобы потом взять скриптик и запустить его у заказчика. Вопрос - как отслеживать?

2Sinner Как? "предварительно отключал все реляции и триггеры"

2All как я понял, репликация поможет? или же в свете вышеизложенного нет?
30 янв 03, 12:56    [118073]     Ответить | Цитировать Сообщить модератору
 Re: Перенос структуры БД + часть данных на другой сервер + дальнейшая синхрониза  [new]
tygra
Member

Откуда: Тверь (Иркутск, Край)
Сообщений: 9998
Вообще-то конечно лучше отслеживать руками и головой - тогда уж точно без проблем все будет.
30 янв 03, 13:04    [118084]     Ответить | Цитировать Сообщить модератору
 Re: Перенос структуры БД + часть данных на другой сервер + дальнейшая синхрониза  [new]
akuz
Member [скрыт] [заблокирован]

Откуда:
Сообщений: 6749
1. Переносить надо только таблицы, ели возникают подобные предупреждения, возможно в default-ах стоят функции, которые обращаются к таблицам, которые не переносятся. В этом случае таблицы лучше переносить скриптом, убрав оттуда все ненужные ссылки.

2. Возможно ли автоматически скриптовать все изменения в структуре БД при работе через ЕМ?
Возможно, для этого в EM есть кнопочка генерации скрипта изменений, правда до обновления структуры таблиц должны быть абсолютно одинаковые, иначе возможна потеря данных.

3. Добавлять данные в справочник однотипно на тест и на сервер заказчика через скрипт insert dictionary values ('a','b','c'), записывать все такие скрипты в специальный файл, который потом прогоняется у заказчика. Вести историю.
30 янв 03, 14:12    [118168]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Перенос структуры БД + часть данных на другой сервер + дальнейшая синхронизация  [new]
teCa
Member

Откуда:
Сообщений: 628
Всем привет. Не стал создавать новую тем, так как гуглил и наткнулся на эту.

Собственно задача та же. Есть база размером 2Тб+, в ней множество таблиц, триггеров, хранимок, вьюх итд, ну и конечно она в продакшене 24/7. Те отключать триггеры, как предложено выше у меня не получится.
Пробовал через студию wizard Generate Scripts, но он отваливается на ошибке:
автор
Microsoft.SqlServer.Management.SqlScriptPublish.SqlScriptPublishException: An error occurred while scripting the objects. ---> Microsoft.SqlServer.Management.Sdk.Sfc.EnumeratorException: Failed to retrieve data for this request. ---> Microsoft.SqlServer.Management.Common.ExecutionFailureException: An exception occurred while executing a Transact-SQL statement or batch. ---> System.Data.SqlClient.SqlException: The query processor ran out of internal resources and could not produce a query plan. This is a rare event and only expected for extremely complex queries or queries that reference a very large number of tables or partitions. Please simplify the query. If you believe you have received this message in error, contact Customer Support Services for more information. at Microsoft.SqlServer.Management.Common.ConnectionManager.ExecuteTSql(ExecuteTSqlAction action, Object execObject, DataSet fillDataSet, Boolean catchException) at Microsoft.SqlServer.Management.Common.ServerConnection.GetExecuteReader(SqlCommand command) --- End of inner exception stack trace --- at Microsoft.SqlServer.Management.Common.ServerConnection.GetExecuteReader(SqlCommand command) at Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteReader(String sqlCommand, SqlCommand& command) at Microsoft.SqlServer.Management.Smo.ExecuteSql.GetDataReader(String query, SqlCommand& command) at Microsoft.SqlServer.Management.Smo.DataProvider.SetConnectionAndQuery(ExecuteSql execSql, String query) at Microsoft.SqlServer.Management.Smo.ExecuteSql.GetDataProvider(StringCollection query, Object con, StatementBuilder sb, RetriveMode rm) at Microsoft.SqlServer.Management.Smo.SqlObjectBase.FillData(ResultType resultType, StringCollection sql, Object connectionInfo, StatementBuilder sb) at Microsoft.SqlServer.Management.Smo.SqlObjectBase.FillDataWithUseFailure(SqlEnumResult sqlresult, ResultType resultType) at Microsoft.SqlServer.Management.Smo.SqlObjectBase.BuildResult(EnumResult result) at Microsoft.SqlServer.Management.Smo.SqlObjectBase.GetData(EnumResult erParent) at Microsoft.SqlServer.Management.Sdk.Sfc.Environment.GetData() at Microsoft.SqlServer.Management.Sdk.Sfc.Environment.GetData(Request req, Object ci) at Microsoft.SqlServer.Management.Sdk.Sfc.Enumerator.GetData(Object connectionInfo, Request request) at Microsoft.SqlServer.Management.Sdk.Sfc.Enumerator.Process(Object connectionInfo, Request request) --- End of inner exception stack trace --- at Microsoft.SqlServer.Management.Sdk.Sfc.Enumerator.Process(Object connectionInfo, Request request) at Microsoft.SqlServer.Management.Smo.ExecutionManager.GetEnumeratorData(Request req) at Microsoft.SqlServer.Management.Smo.SqlSmoObject.InitQueryUrns(Urn levelFilter, String[] queryFields, OrderBy[] orderByFields, String[] infrastructureFields, ScriptingPreferences sp, Urn initializeCollectionsFilter, DatabaseEngineEdition edition) at Microsoft.SqlServer.Management.Smo.DefaultDatabasePrefetch.PrefetchUsingIN(String idFilter, String initializeCollectionsFilter, String type, IEnumerable`1 prefetchingList) at Microsoft.SqlServer.Management.Smo.GswDatabasePrefetch.PrefetchUsingIN(String idFilter, String initializeCollectionsFilter, String type, IEnumerable`1 prefetchingList) at Microsoft.SqlServer.Management.Smo.GswDatabasePrefetch.PrefetchBatch(String urnType, HashSet`1 urnBatch, Int32 currentBatchCount, Int32 totalBatchCount) at Microsoft.SqlServer.Management.Smo.DatabasePrefetchBase.<PrefetchObjects>d__1.MoveNext() at Microsoft.SqlServer.Management.Smo.SmoDependencyDiscoverer.SfcChildrenDiscovery(HashSet`1 discoveredUrns) at Microsoft.SqlServer.Management.Smo.SmoDependencyDiscoverer.Discover(IEnumerable`1 urns) at Microsoft.SqlServer.Management.Smo.ScriptMaker.Discover(IEnumerable`1 urns) at Microsoft.SqlServer.Management.Smo.ScriptMaker.DiscoverOrderScript(IEnumerable`1 urns) at Microsoft.SqlServer.Management.Smo.ScriptMaker.ScriptWorker(List`1 urns, ISmoScriptWriter writer) at Microsoft.SqlServer.Management.Smo.ScriptMaker.Script(Urn[] urns, ISmoScriptWriter writer) at Microsoft.SqlServer.Management.SqlScriptPublish.SqlScriptGenerator.DoScript(ScriptOutputOptions outputOptions) --- End of inner exception stack trace --- at Microsoft.SqlServer.Management.SqlScriptPublish.GeneratePublishPage.worker_DoWork(Object sender, DoWorkEventArgs e) at System.ComponentModel.BackgroundWorker.OnDoWork(DoWorkEventArgs e) at System.ComponentModel.BackgroundWorker.WorkerThreadStart(Object argument)


Подскажите, какими еще средствами можно перенести структуру БД без данных?
12 ноя 19, 13:08    [22014394]     Ответить | Цитировать Сообщить модератору
 Re: Перенос структуры БД + часть данных на другой сервер + дальнейшая синхронизация  [new]
komrad
Member

Откуда:
Сообщений: 5244
teCa,

попробуйте dbcc clonedatabase
12 ноя 19, 13:19    [22014408]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить