Pergunta

Para prefácio, eu vi o comando responder a esta pergunta antes, mas agora não consigo encontrá-lo novamente, então eu estou apenas olhando para a declaração única SQL que vai resolver o meu problema.

Eu tinha duas publicações sobre um banco de dados SQL Server 2000 em um ponto, mas eu excluída eles. No entanto, o meu arquivo de log está crescendo, e parece conter transações unreplicated, e está crescendo sem fim. Eu tentei isso:

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

Eu recebo uma mensagem de que "O banco de dados não é publicado" (e desde que eu tenha excluído a publicação, que faz sentido). Se eu tentar:

backup log dbname with truncate_only

eu recebo a mensagem de que existem transações não replicadas no meu log, e não vai truncar.

Eu já vi isso antes, onde não existiam publicações, mas o banco de dados foi marcada como ainda participar na replicação, e eu encontrei um único script linha para un-bandeira o banco de dados como uma fonte de replicação, que imediatamente resolveu o meu problema. Eu não posso encontrá-lo agora, porém, quando eu precisar dele novamente - espero que um de vocês pode lançar alguma luz. Obrigado!

Foi útil?

Solução

Eu era incapaz de limpar esses dados ainda-não-replicados através de qualquer método suportado, então eu tive que reconstruir a força do arquivo de log. É SQL 2000, então não há um SP não suportado / não documentada para fazer isso:

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

Isto irá criar um novo arquivo de log, vazio para o banco de dados e abandonar o antigo. Note-se que esta força a truncar as transações correntes, para se certificar que você tem um backup. As necessidades de banco de dados para estar no modo "Recuperação de Emergência" para usar este comando, pois não irá reverter as transações em processo que foram parcialmente aplicados aos dados, potencialmente prejudicando a integridade dos dados.

Para obter mais detalhes sobre o processo que eu usei, ver post 7 deste tópico: http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=76785

Outras dicas

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

Você está procurando:

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

?

Veja também sp_dropmergepublication / sp_droppublication .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top