đây là những gì tôi thường làm khi tôi có một ấn phẩm bị rối tung.
nó là một chút xấu xí nhưng nó đã làm việc cho tôi nhiều lần trên các môi trường khác nhau. Điều gì gây ra nó? đó là đôi khi rất khó để con nó ra, đôi khi tốt nhất là bắt đầu từ đầu, nhưng ngay cả đối với những gì bạn cần để làm sáng tỏ all
các residuals
từ các ấn phẩm hiện nay đó là bị lỗi.
chỉ để đặt nó vào bối cảnh:
Đây là những gì tôi thấy từ màn hình nhân rộng:
và khi tôi sử dụng màn hình sao chép của riêng mình bằng T-SQL :
DECLARE @cmd NVARCHAR(max)
DECLARE @publisher SYSNAME, @publisher_db SYSNAME, @publication SYSNAME, @pubtype INT
DECLARE @subscriber SYSNAME, @subscriber_db SYSNAME, @subtype INT
DECLARE @cmdcount INT, @processtime INT
DECLARE @ParmDefinition NVARCHAR(500)
DECLARE @JobName SYSNAME
DECLARE @minutes INT, @threshold INT, @maxCommands INT, @mail CHAR(1) = 'N'
SET @minutes = 60 --> Define how many minutes latency before you would like to be notified
SET @maxCommands = 80000 ---> change this to represent the max number of outstanding commands to be proceduresed before notification
SET @threshold = @minutes * 60
IF OBJECT_ID ('TEMPDB..#Replication_Qu_History') IS NOT NULL
DROP TABLE #Replication_Qu_History
IF OBJECT_ID ('TEMPDB..##PublicationInfo') IS NOT NULL
DROP TABLE ##PublicationInfo
IF OBJECT_ID ('TEMPDB..#PublisherInfo') IS NOT NULL
DROP TABLE #PublisherInfo
IF OBJECT_ID ('TEMPDB..##SubscriptionInfo') IS NOT NULL
DROP TABLE ##SubscriptionInfo
SELECT * INTO #PublisherInfo
FROM OPENROWSET('SQLOLEDB', 'SERVER=(LOCAL);TRUSTED_CONNECTION=YES;'
, 'SET FMTONLY OFF EXEC distribution.dbo.sp_replmonitorhelppublisher')
SELECT @publisher = publisher FROM #PublisherInfo
SET @cmd = 'SELECT * INTO ##PublicationInfo FROM OPENROWSET(''SQLOLEDB'',''SERVER=(LOCAL);TRUSTED_CONNECTION=YES''
,''SET FMTONLY OFF EXEC distribution.dbo.sp_replmonitorhelppublication @publisher='
+ @publisher + ''')'
--select @cmd
EXEC sp_executesql @cmd
SELECT @publisher_db=publisher_db, @publication=publication, @pubtype=publication_type FROM ##PublicationInfo
SET @cmd = 'SELECT * INTO ##SubscriptionInfo FROM OPENROWSET(''SQLOLEDB'',''SERVER=(LOCAL);TRUSTED_CONNECTION=YES''
,''SET FMTONLY OFF EXEC distribution.dbo.sp_replmonitorhelpsubscription @publisher='
+ @publisher + ',@publication_type=' + CONVERT(CHAR(1),@pubtype) + ''')'
--select @cmd
EXEC sp_executesql @cmd
ALTER TABLE ##SubscriptionInfo
ADD PendingCmdCount INT NULL,
EstimatedProcessTime INT NULL
SELECT *
FROM #PublisherInfo
SELECT *
FROM ##SubscriptionInfo
SELECT *
FROM ##PublicationInfo
bạn có thể thấy 2 dòng trên hộp cuối cùng bên dưới - và một dòng không nên ở đó:
tương tự khi tôi sử dụng tập lệnh này:
EXEC distribution.dbo.sp_replmonitorhelppublication @publisher='my publisher'
Trước tiên, bạn làm những gì được hiển thị trong các câu trả lời khác ở trên, nếu điều đó hoạt động tốt, đôi khi nó hoạt động, vấn đề được giải quyết.
đó sẽ là ít hơn nó:
exec master.dbo.sp_replicationdboption @dbname = 'my_PUBLICATION', @optname = N'publish', @value = N'false'
exec master.dbo.sp_replicationdboption @dbname = 'my_PUBLICATION', @optname = N'publish', @value = N'true'
sp_droppublication @publication='my_PUBLICATION'
-- Remove replication objects from a subscription database (if necessary).
exec master.dbo.sp_removedbreplication 'my_PUBLICATION'
exec master.dbo.sp_removedbreplication 'my_PUBLICATION'
use my_PUBLICATION
sp_removedbreplication @type='both'
USE [master]
EXEC sp_replicationdboption
@dbname = N'my_PUBLICATION',
@optname = N'publish',
@value = N'false';
GO
EXEC distribution.dbo.sp_replmonitorhelppublication @publisher='PUBLISHER_SERVER'
sp_replmonitorhelppublisher @publisher='PUBLISHER_SERVER'
DECLARE @publicationDB AS sysname;
DECLARE @publication AS sysname;
SET @publicationDB = N'my_PUBLICATION';
SET @publication = N'my_PUBLICATION';
-- Remove a transactional publication.
USE my_PUBLICATION
EXEC sp_droppublication @publication = @publication;
-- Remove replication objects from the database.
USE [master]
EXEC sp_replicationdboption
@dbname = @publicationDB,
@optname = N'publish',
@value = N'false';
GO
Bây giờ để loại bỏ hoàn toàn ấn phẩm này, chúng tôi sẽ bắt đầu bằng cách kết nối với người đăng ký, sau đó là nhà xuất bản và sau đó là nhà phân phối theo kịch bản dưới đây:
-- Connect Subscriber
:connect [SUBSCRIBER_SERVER]
use [master]
exec sp_helpreplicationdboption @dbname = N'SUBSCRIBER_DATABASE'
go
use [SUBSCRIBER_DATABASE]
exec sp_subscription_cleanup @publisher = N'PUBLISHER_SERVER', @publisher_db = N'my_PUBLICATION_DB',
@publication = N'my_PUBLICATION'
go
-- Connect Publisher Server
:connect [PUBLISHER_SERVER]
-- Drop Subscription
use [my_PUBLICATION]
exec sp_dropsubscription @publication = N'my_PUBLICATION', @subscriber = N'all',
@destination_db = N'SUBSCRIBER_DATABASE', @article = N'all'
go
-- Drop publication
exec sp_droppublication @publication = N'my_PUBLICATION'
-- Disable replication db option
exec sp_replicationdboption @dbname = N'my_PUBLICATION_db', @optname = N'publish', @value = N'false'
GO
-- Connect Distributor
:CONNECT [PUBLISHER_SERVER]
go
exec Distribution.dbo.sp_MSremove_published_jobs @server = 'PUBLISHER_SERVER',
@database = N'my_PUBLICATION'
go
--===========================================================================================
--THAT DOES NOT GENERALLY GET RID OF THE JOBS FOR YOU
-- so you need to find them using these selects, and get rid of them manually yourself:
--select * from Distribution.dbo.MSpublications
--select * from Distribution.dbo.MSpublications
--===========================================================================================
select * from Distribution.[dbo].[MSlogreader_agents]
where publisher_db = N'my_PUBLICATION'
--found 1 job:
--PUBLISHER_SERVER-my_PUBLICATION-11
--script the job
--script the job delete script - and run that - keeping the job creation script just in case
exec msdb.dbo.sp_help_job @job_id=0x93C63D34E357704B818312B93FCA02FB
exec msdb.dbo.sp_delete_job @job_id=0x93C63D34E357704B818312B93FCA02FB
select * from Distribution.[dbo].[MSdistribution_agents]
where publisher_db = N'my_PUBLICATION'
--here found 2 jobs:
--PUBLISHER_SERVER-my_PUBLICATION-my_PUBLICATION--67
--PUBLISHER_SERVER-my_PUBLICATION-my_PUBLICATION--68
--here is the problem - it cannot find the jobs, the jobs are not even there anymore, one of those things
exec msdb.dbo.sp_delete_job @job_id=0x0F1564BAACD5464C988DE8957C25C411
exec msdb.dbo.sp_delete_job @job_id=0x6215C40F999CE248A30EE735E2C0E59D
--Msg 14262, Level 16, State 1, Procedure sp_verify_job_identifiers, Line 41 [Batch Start Line 52]
--The specified @job_id ('BA64150F-D5AC-4C46-988D-E8957C25C411') does not exist.
--Msg 14262, Level 16, State 1, Procedure sp_verify_job_identifiers, Line 41 [Batch Start Line 53]
--The specified @job_id ('0FC41562-9C99-48E2-A30E-E735E2C0E59D') does not exist.
exec msdb.dbo.sp_delete_job @job_name='PUBLISHER_SERVER-my_PUBLICATION-my_PUBLICATION'
PUBLISHER_SERVER-my_PUBLICATION-my_PUBLICATION--68
tại thời điểm này tạo lại ấn phẩm như bạn thường làm
sau đó đặt ảnh chụp để chạy
chờ cho nó hoàn thành việc tạo ảnh chụp nhanh
MAYBE YOU DONT NEED TO RUN THE SNAP
- hãy thử without
chạy nó trước, hầu hết thời gian nó hoạt động, bạn cũng có thể thêm chỉ 1-2 small
bài viết vào ấn phẩm để snap nhanh chóng chạy
nhưng nếu bạn chạy ảnh chụp nhanh thì bạn cần đợi cho đến khi nó kết thúc trước khi bạn có thể chuyển sang bước tiếp theo - drop the publication
sau đó bạn tạo các tập lệnh drop that publication
theo hình dưới đây:
sau đó, hy vọng, khi bạn chạy các tập lệnh gốc của chúng tôi ở trên hoặc nhìn vào màn hình sao chép, bạn sẽ không thấy ấn phẩm bị lỗi, chỉ có những tập tốt, trong trường hợp của tôi chỉ là một: