นี่คือสิ่งที่ฉันทำตามปกติเมื่อฉันมีสิ่งพิมพ์ที่เลอะ
มันค่อนข้างน่าเกลียด แต่มันก็ใช้ได้กับฉันหลายครั้งในสภาพแวดล้อมที่แตกต่างกัน อะไรเป็นสาเหตุ ที่บางครั้งยากที่จะคิดออกที่ดีที่สุดบางครั้งก็คือการเริ่มต้นจากรอยขีดข่วน แต่แม้การที่คุณต้องให้ชัดเจนขึ้นจากการตีพิมพ์ในปัจจุบันที่เป็นความผิดพลาดall
residuals
เพียงแค่ใส่มันเข้าไปในบริบท:
นี่คือสิ่งที่ฉันเห็นจากจอภาพการจำลองแบบ:
และเมื่อฉันใช้การตรวจสอบการจำลองแบบของตัวเองโดยใช้ 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
คุณสามารถเห็น 2 บรรทัดในช่องสุดท้ายด้านล่าง - และหนึ่งบรรทัดไม่ควรอยู่ที่นั่น:
เหมือนกันเมื่อฉันใช้สคริปต์นี้:
EXEC distribution.dbo.sp_replmonitorhelppublication @publisher='my publisher'
ก่อนอื่นคุณต้องทำสิ่งที่ปรากฏในคำตอบอื่น ๆข้างต้นถ้าเป็นเช่นนั้นก็ใช้ได้บางครั้งก็ใช้งานได้แก้ไขปัญหาได้
ที่จะมากน้อยมัน:
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
ตอนนี้เพื่อกำจัดสิ่งพิมพ์นี้อย่างสมบูรณ์เราจะเริ่มต้นด้วยการเชื่อมต่อกับ buscriber แล้วผู้เผยแพร่และจากนั้นจัดจำหน่ายตามสคริปต์ด้านล่าง:
-- 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
ณ จุดนี้สร้างสิ่งพิมพ์อีกครั้งตามปกติ
จากนั้นใส่สแน็ปช็อตเพื่อเรียกใช้
รอให้การสร้างภาพรวมเสร็จสิ้น
MAYBE YOU DONT NEED TO RUN THE SNAP
ลองwithout
ใช้งานก่อนส่วนใหญ่ใช้งานได้นอกจากนี้คุณยังสามารถเพิ่มsmall
บทความเพียง 1-2 บทความลงในสิ่งพิมพ์เพื่อให้สแน็ปอินทำงานได้อย่างรวดเร็ว
แต่ถ้าคุณเรียกใช้สแนปชอตคุณต้องรอจนกว่าจะเสร็จสิ้นก่อนจึงจะไปที่ขั้นตอนต่อไป - drop the publication
หลังจากนั้นคุณสร้างสคริปต์เพื่อdrop that publication
ตามภาพด้านล่าง:
หลังจากนั้นหวังว่าเมื่อคุณเรียกใช้สคริปต์ต้นฉบับของเราด้านบนหรือดูที่การตรวจสอบการจำลองแบบคุณจะไม่เห็นสิ่งพิมพ์ที่ผิดพลาดเท่านั้นที่ดีในกรณีของฉันเพียงหนึ่ง: