Репликация SQL - публикация удалена, но файл журнала продолжает расти - PullRequest
0 голосов
/ 07 апреля 2009

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

У меня было две публикации в базе данных SQL Server 2000 одновременно, но с тех пор я их удалил. Тем не менее, мой файл журнала растет, и, как представляется, содержит нереплицированные транзакции, и растет без конца. Я пробовал это:

EXEC sp_repldone @xactid = NULL, @xact_segno = NULL, @numtrans = 0, @time = 0, @reset = 1

Я получаю сообщение «База данных не опубликована» (и поскольку я удалил публикацию, это имеет смысл). Если я попытаюсь:

backup log dbname with truncate_only

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

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

Ответы [ 3 ]

1 голос
/ 14 апреля 2009

Мне не удалось очистить эти еще не реплицированные данные с помощью любого поддерживаемого метода, поэтому мне пришлось принудительно пересобрать файл журнала. Это SQL 2000, поэтому для этого есть неподдерживаемый / недокументированный SP:

DBCC REBUILD_LOG('DBName','D:\Log folder\Logfile name.ldf')

Это создаст новый пустой файл журнала для базы данных и откажется от старого. Обратите внимание, что это приведет к принудительному усечению текущих транзакций, поэтому убедитесь, что у вас есть резервная копия. Для использования этой команды база данных должна находиться в режиме «Аварийное восстановление», поскольку она не будет откатывать никакие внутрипроцессные транзакции, которые были частично применены к данным, что потенциально может нарушить целостность данных.

Для получения полной информации о процессе, который я использовал, см. Пост 7 из этой темы: http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=76785

1 голос
/ 15 декабря 2010
use master
go
exec sp_replicationdboption @dbname='SERVICEDESK', @optname = 'publish', @value= 'true', @ignore_distributor = 1
go
use servicedesk
go
EXEC sp_repldone @xactid = NULL, @xact_segno = NULL, @numtrans = 0,  @time = 0, @reset = 1
go
use master
go
exec sp_replicationdboption @dbname='SERVICEDESK', @optname = 'publish', @value= 'false', @ignore_distributor = 1
go
dump tran servicedesk with no_log
go
0 голосов
/ 07 апреля 2009

Вы ищете:

EXEC sp_replicationdboption 
    @dbname = @publicationDB, 
    @optname = N'merge publish', 
    @value = N'false'

Также см. sp_dropmergepublication / sp_droppublication .

...