رفع اشکال حذف سطر از جدول subscribe
Fixing Missing Rows error in transactional replication
اگر سطری از جدولی که در transactional replication هست و subscribe هست حذف کنید و سپس از جدول publication سطر و یا سطرهای مربوطه را بخواهید حذف کنید رپلیکیشن مواجه با خطا خواهد شد. زیرا رپلیکیشن انتظار دارد که سطر مربوطه در subscribe وجود داشته باشد و چون وجود ندارد لذا دستورات اجرا نخواهد شد و مرتب خطا در یافت خواهید کرد. این خطاها مانع از اجرای سایر دستورات رپلیکیشن خواهد شد. بنابر این مجبورید که مشکل را حل کنید. البته بهتر بود که از اول مشکل ایجاد نمی کردید و سطرها را از جدول subscribe حذف نمی کردید.
حال اگر ID رکوردهای حذف شده را می دانید آنها را با همان ID ایجاد کنید تا کار رپلیکیشن بدرستی انجام گیرد. در واقع رپلیکیشن آنها را حذف خواهد کرد.
اما اگر ID ها را ندارید بطریق زیر می توانید ID ها را بدست آورید
مثلا فرض کنید که خطای زیر را دریافت کرده اید
1 2 3 |
Command attempted: if @@trancount > 0 rollback tran (Transaction sequence number: 0x000009BA00005840000400000000, Command ID: 1) |
البته اگر حوصله داشته باشید می توانید از طریق دستور زیر خطا و یا خطاهای مشابه را بدست آورید
1 |
Select * from msrepl_errors |
دستور زیر را در T-SQL اجرا کنید
1 2 3 4 5 6 7 |
use distribution go select * from dbo.MSarticles where article_id in ( select article_id from MSrepl_commands where xact_seqno = 0x000009BA00005840000400000000) |
سپس دستور زیر را اجرا کنید
1 2 3 4 5 6 |
use distribution go exec sp_browsereplcmds @xact_seqno_start = '0x000009BA00005840000400000000', @xact_seqno_end = '0x000009BA00005840000400000000' |
با اجرای دستور فوق در ستون command سطری مشابه زیر را دریافت خواهید کرد
1 |
{CALL [sp_MSupd_dboRegisterSerial] (,,,,,N'jf1',,,'3',0x20000000)} |
یعنی جدولی مشابه تصویر فوق
که در آن عدد ۳ نشانگر ID سطر حذف شده است. به جدول subscribe بروید و سطر مورد نظر را با ID 3 در آن ایجاد کنید. حال اگر سطرهای دیگری وجود داشته باشند باید در مورد آنها هم همین کارها را بکنید. اگر همه سطرها را ایجاد کرده باشید مطمئن باشید که رپلیکیشن به کار درست خود ادامه خواهد داد.