Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Transaction replication. Could not find stored procedure 'sp_MSupd_ТехКоэф'  [new]
Сергей ДД
Member

Откуда: Москва
Сообщений: 207
Здравствуйте!
Пытаюсь настроить репликацию транзакций!
Создаю публикацию, подписчика к ней, а он при попытке запустить job по синхронизации выдает сообщение "Could not find stored procedure 'sp_MSupd_ТехКоэф'". Но он же должен в момент синхронизации создать эти 3 процедуры.
Или он это делает только во время snapshot-а подписчика.
Я ему говорю не делать snapshot подписчика, т.к. shema and data уже там есть и точно такие же как на публикующем сервере - не хочу интернет трафик на snapshot тратить.

Так все-таки в какой момент он эти процедуры создавать должен?
24 янв 06, 16:25    [2282657]     Ответить | Цитировать Сообщить модератору
 Re: Transaction replication. Could not find stored procedure 'sp_MSupd_ТехКоэф'  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
Вы уверены, что проблема не в русском именовании таблиц?
Попробуйте создать таблицу TechKoef и включить ее в тестовую публикацию.

Сергей ДД
Но он же должен в момент синхронизации создать эти 3 процедуры.
Или он это делает только во время snapshot-а подписчика.
Я ему говорю не делать snapshot подписчика, т.к. shema and data уже там есть и точно такие же как на публикующем сервере - не хочу интернет трафик на snapshot тратить.

Что вам мешает открыть EM или QA, подключиться к подписчику и проверить, в какой момент эти процедуры создаются?

Заодно поймете, в чем именно проблема - в том, что процедуры не созданы, или в том, что они есть, но к ним доступа нет.
24 янв 06, 16:49    [2282784]     Ответить | Цитировать Сообщить модератору
 Re: Transaction replication. Could not find stored procedure 'sp_MSupd_ТехКоэф'  [new]
Сергей ДД
Member

Откуда: Москва
Сообщений: 207
Нашел кое-что поиском:
[url=http://]www.sql.ru/forum/actualthread.aspx?bid=1&tid=94944&hl=not+find+stored+procedure[/url]
Вербняков Александр
И не только для неё. При применении снапшота в базе создаются хранимые процедуры и триггера для каждой таблицы для применения в них входящих и исходящих транзакций. Если ты не инициализуешь схему то должен создать всё эти процедуры самостоятельно взяв их скрипт с другого подписчика. Иначе не будет синхронизироваться.
А почему проблема заскриптовать sp и udf и применить скрип на другом сервере? это же быстро делается

Только я не очень понял как создать все необходимые процедуры вручную? Надо что их с другого подписчика брать, т.е. создать для этого подписчика в локальной сети, а потом перенести все эти вспомогательные процедуры вручную?
Как лучше сделать?
24 янв 06, 16:51    [2282792]     Ответить | Цитировать Сообщить модератору
 Re: Transaction replication. Could not find stored procedure 'sp_MSupd_ТехКоэф'  [new]
Сергей ДД
Member

Откуда: Москва
Сообщений: 207
GreenSunrise
Заодно поймете, в чем именно проблема - в том, что процедуры не созданы, или в том, что они есть, но к ним доступа нет.

Процедур-то этих точно нет. Я подключился к бд и посмотрел.
24 янв 06, 16:52    [2282801]     Ответить | Цитировать Сообщить модератору
 Re: Transaction replication. Could not find stored procedure 'sp_MSupd_ТехКоэф'  [new]
Сергей ДД
Member

Откуда: Москва
Сообщений: 207
GreenSunrise
Что вам мешает открыть EM или QA, подключиться к подписчику и проверить, в какой момент эти процедуры создаются?

Я, правда, уже немного запутался, но я пробовал это выяснить. Они создавались у меня когда я ставил галку "Yes, initialize schema and data", ну и "Start snapshot ... immedeately", а когда я ставил "No, the Subscriber alredy has the shema and data", он эти процедуры не создавал мне.
24 янв 06, 17:01    [2282869]     Ответить | Цитировать Сообщить модератору
 Re: Transaction replication. Could not find stored procedure 'sp_MSupd_ТехКоэф'  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
Если вы твердо уверены, что репл. агент их создавать не должен, то перетащите вручную. Generate SQL Script.

Хотя что-то мне это подозрительным кажется.
24 янв 06, 17:54    [2283229]     Ответить | Цитировать Сообщить модератору
 Re: Transaction replication. Could not find stored procedure 'sp_MSupd_ТехКоэф'  [new]
Сергей ДД
Member

Откуда: Москва
Сообщений: 207
GreenSunrise
Если вы твердо уверены, что репл. агент их создавать не должен, то перетащите вручную. Generate SQL Script.

Хотя что-то мне это подозрительным кажется.

Я, к сожалению, ни в чем точно не уверен, т.к. только начал с репликацие разбираться. Первый раз пытаюсь ее настроить.
24 янв 06, 18:59    [2283513]     Ответить | Цитировать Сообщить модератору
 Re: Transaction replication. Could not find stored procedure 'sp_MSupd_ТехКоэф'  [new]
Сергей ДД
Member

Откуда: Москва
Сообщений: 207
Вот какой у меня результат на текущий момент:
Он создает мне эти процедуры только если я при привязке подписчика к пудбикации на вопрос:
Does Microsoft SQL Server need to initialize the publication schema and data at the Subscriber when subscription is created?
отвечаю
Yes, initialize schema and data.
и
Start the Snapshot Agent to begin the initialization process immediately

А если я говорю:
No, the Subscriber alredy has the shema and data
то эти процедуры
sp_MSdel_ТехнКоэф
sp_MSins_ТехнКоэф
sp_MSupd_ТехнКоэф
не создаются.

Я просто не понимаю: так и должно быть и нет?
И что конкретно делает этот Snapshot. Он что все данные проверяет или только структуру? Если только структуру, то я запущу его бед проблем, т.к. интернет трафик не очень большой будет, а если он все данные сверяет, то мне что-то не очень хочеться месячный трафик на это убить...
24 янв 06, 19:08    [2283541]     Ответить | Цитировать Сообщить модератору
 Re: Transaction replication. Could not find stored procedure 'sp_MSupd_ТехКоэф'  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4255
вам нужно сначала сделать репликацию с опцией - создать структуру.

потом в новой базе выполнить :

GO
DECLARE @sp_name SYSNAME
DECLARE cur CURSOR FOR
	SELECT SPECIFIC_NAME FROM INFORMATION_SCHEMA.ROUTINES WHERE SPECIFIC_NAME LIKE 'sp_MS%' ORDER BY SPECIFIC_NAME
OPEN cur
FETCH NEXT FROM cur INTO @sp_name
WHILE @@fetch_status=0 
BEGIN
	PRINT N'---' + @sp_name
	PRINT N'PRINT N''IF object_id( ''''dbo.' + @sp_name + ''''' ) > 0 DROP PROCEDURE dbo.' + @sp_name + ''''
	PRINT N'PRINT ''GO'''
	PRINT 'GO'
	PRINT N'sp_helptext ' + @sp_name 
	PRINT N'PRINT ''GO'''
FETCH NEXT FROM cur INTO @sp_name
END
CLOSE cur
DEALLOCATE cur
GO

скопировать полученный текст в новое окно
goto Tools->Options->Result and "Default Result Target" change to "Result to Text",
and uncheck "print column header", then press F5

полученный результат будет набор процедур для базы с готовой схемой.

Но нужно будет изменить процедуры INS & UPD c рекомендациями, изложенными здесь

https://www.sql.ru/articles/mssql/2005/032001ReplicatingIdentityColumns.shtml

то есть в INS команду insert окружить

set identity_insert имя_процедуры on

insert ....

set identity_insert имя_процедуры off

а в UPD вырезать от if до else

в принципе такая утилитка пишется ручками за пару часов.

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

на все identity колонки надо навестить свой-ство NOT FOR REPLICATION кодом отсюда :

https://www.sql.ru/forum/actualthread.aspx?tid=252870


теперь можно настроить репликацию на новую базу без инициализации схемы.
24 янв 06, 19:24    [2283588]     Ответить | Цитировать Сообщить модератору
 Re: Transaction replication. Could not find stored procedure 'sp_MSupd_ТехКоэф'  [new]
Сергей ДД
Member

Откуда: Москва
Сообщений: 207
2 Lepsik!
Ну что ж! Спасибо!
Осталось только разобраться во всем этом...)))

Все таки если не сложно в двух словах скажите мне, что делает этот snapshot agent? Он делает снимок всех данных и схемы?
24 янв 06, 19:31    [2283628]     Ответить | Цитировать Сообщить модератору
 Re: Transaction replication. Could not find stored procedure 'sp_MSupd_ТехКоэф'  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
Сергей ДД
что делает этот snapshot agent? Он делает снимок всех данных и схемы?

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

В самых общих чертах, как работает репликация: сперва на паблишере создается снапшот (подписчиков в этот момент может вообще не быть). Потом на подписчика накатывается снапшот (куча функций регулирует, как именно накатывается, вплоть до ничегонеделания), потом репл. агенты досылают все изменения, произошедшие с момента формирования снапшота. Потом при каждом сеансе синхронизации идет обмен данными (или инструкциями), которые менялись (срабатывали) с момента предыдущей синхронизации.
24 янв 06, 19:49    [2283697]     Ответить | Цитировать Сообщить модератору
 Re: Transaction replication. Could not find stored procedure 'sp_MSupd_ТехКоэф'  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4255
небольшое добавление

set identity_insert имя_таблицы on


в процедурах на инсерт вырезать поля timestamp, аналогично для UPD процедур
24 янв 06, 22:50    [2283973]     Ответить | Цитировать Сообщить модератору
 Re: Transaction replication. Could not find stored procedure 'sp_MSupd_ТехКоэф'  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4255
вдогонку

- используй флаг DBCC TRACEON (8207, -1)

Q238254 INF: UPDATE Statements May be Replicated as DELETE/INSERT Pairs

вот скрипт сделать все тригера NOT FOR REPLICATION




DECLARE @txt nvarchar(4000), @name sysname, @ps int
DECLARE cur CURSOR FOR
	select o.name, c.text from dbo.sysobjects o, dbo.syscomments c, dbo.sysobjects a where o.xtype='TR' AND o.deltrig = a.id and a.xtype='U'  
		and o.id=c.id and c.text not like '%NOT FOR REPLICATION%' order by o.name

OPEN cur
FETCH NEXT FROM cur INTO @name, @txt
WHILE @@fetch_status=0 
BEGIN
	EXEC( N'DROP TRIGGER dbo.' + @name )
	SET @ps = PATINDEX('%AS%', @txt)
	SET @txt = SUBSTRING(@txt, 1, @ps-1) + N' NOT FOR REPLICATION ' + SUBSTRING(@txt, @ps, LEN(@txt))
	EXEC( @txt )
		
FETCH NEXT FROM cur INTO @name, @txt
END
CLOSE cur
DEALLOCATE cur
GO


26 янв 06, 22:52    [2292485]     Ответить | Цитировать Сообщить модератору
 Re: Transaction replication. Could not find stored procedure 'sp_MSupd_ТехКоэф'  [new]
Сергей ДД
Member

Откуда: Москва
Сообщений: 207
Спасибо!!!
Буду разбираться! Еще много предстоит изучить...)))
27 янв 06, 14:50    [2295065]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Transaction replication. Could not find stored procedure 'sp_MSupd_ТехКоэф'  [new]
kirser
Member

Откуда: Киев
Сообщений: 225
Lepsik
вам нужно сначала сделать репликацию с опцией - создать структуру.
.

Подскажите, где эта опция выставляется?
21 окт 09, 11:02    [7815970]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить