নতুন স্ন্যাপশট তৈরি না করে লেনদেনের প্রকাশনায় নিবন্ধ যুক্ত করুন


23

টান গ্রাহকদের সাথে এসকিউএল ২০০ 2008 আর 2 লেনদেনের অনুলিপি ব্যবহার করে, যখন আমরা কোনও নিবন্ধ যুক্ত করি, আমি সম্পূর্ণ স্ন্যাপশট তৈরি করা এড়াতে চাই (ডিবি ~ 80 গিগাবাইট, সুতরাং এটি কয়েক ঘন্টা সময় নেয়)।

এই নিবন্ধটি থেকে , আমি দেখেছি কীভাবে তাত্ক্ষণিকভাবে_সামান্য সেট করে আংশিক স্ন্যাপশট দিয়ে এটি করা যায়, তবে এটি আমাদের পক্ষে কার্যকর হয়নি।

আদর্শভাবে আমি টেবিলটি তৈরি করতে কেবল এটি আমাদের ডিবি স্ক্রিপ্টের অংশ হিসাবে চালাতে চাই, তাই যদি আমরা এটির অনুলিপি করতে চাই তবে আমরা এটি করব:

Create Table ...    
sp_addArticle ...    
sp_PushThisToOurSubscribersNow    

উত্তর:


13

আপনি জিইউআই ব্যবহার করে এসএসএমএসের মাধ্যমে নিবন্ধটি যুক্ত করতে পারেন এবং এটিতে ফিল্টার প্রয়োগ করতে পারেন। যতক্ষণ আপনি নিবন্ধের অন্যান্য বৈশিষ্ট্যগুলির কোনওটি পরিবর্তন না করেন আপনার সম্পূর্ণ স্ন্যাপশট তৈরি করার প্রয়োজন হবে না।

যখন আপনি (নিবন্ধ যোগ করার পরে) প্রকাশনার গুই মধ্যে ঠিক আছে আঘাত, এটা reinitialize করার প্ররোচনা ছাড়া বন্ধ করে দিবেন - যদি এটা করে reinitialize দ্রুত, কিছু তারপর আপনি পরিবর্তিত হয়েছে যা হল একটি পূর্ণ স্ন্যাপশট প্রয়োজন। যদি এটি হয় তবে বাতিল চাপুন এবং আবার চেষ্টা করুন।

নিবন্ধটি যুক্ত করার পরে আপনি কেবল স্ন্যাপশট কাজটি শুরু করতে পারবেন এবং আপনি লক্ষ্য করবেন যে এটি কেবলমাত্র নতুন নিবন্ধের জন্য একটি স্ন্যাপশট তৈরি করেছে (এটি একটি মিনি-স্ন্যাপশট বলে)।

তারপরে আপনার বিতরণের কাজটি পরীক্ষা করুন এবং লক্ষ্য করুন যে এটি গ্রাহকটিতে টেবিলটি তৈরি করেছে এবং আপনার ডেটা বাল্ক-অনুলিপি করেছে।

শুভকামনা, এবং আপনার আরও সহায়তার প্রয়োজন হলে আমাকে জানান।


আমি এই উত্তরে বর্ণিত সমস্ত কিছুই করেছি তবে তবুও নিজেকে সিঙ্কের জন্য সম্পূর্ণ প্রতিলিপি করা ডেটাবেজে অপেক্ষা করতে দেখলাম। আমি নতুন নিবন্ধগুলি যুক্ত করার পরে পুনরায় পুনর্নিযুক্ত করার অনুরোধ জানাতে চাইনি, তবে এটি এখনও সম্পূর্ণ সূচনা করেছে। সাবধান হও.
JzInqXc9Dg

7
  1. আপনার প্রকাশনা সম্পত্তি উইন্ডোতে নতুন নিবন্ধ যুক্ত করুন (তালিকায় কেবলমাত্র পরীক্ষিত নিবন্ধগুলি দেখান পরীক্ষা করুন)
  2. একই প্রকাশনা নোডটিতে ডান ক্লিক করুন এবং " স্ন্যাপশট এজেন্টের স্থিতি দেখুন " এ যান
  3. শুরুতে ক্লিক করুন এবং ঠিক একই উইন্ডোতে লগটি লক্ষ্য করুন যা দেখায় যে এই নতুন নিবন্ধটি কেবল সিঙ্ক হয়েছে
  4. স্বল্প সময়ের পরে নতুন নিবন্ধগুলি সমস্ত পূর্ববর্তী সিঙ্ক হওয়া আরম্ভ না করে গ্রাহকদের মধ্যে সিঙ্ক করা হবে

এখানে চিত্র বর্ণনা লিখুন


3

আমার একই প্রশ্ন ছিল, এবং যদিও আমি কিছু সময়ের জন্য ডিবিএ হয়েছি, তবে এর সাথে সম্পূর্ণরূপে স্বাচ্ছন্দ্য বোধ করার জন্য আমি সত্যিই গভীরভাবে প্রতিরূপের মোকাবিলা করি নি, তাই আমি ভেবেছিলাম যে নিম্নলিখিত সংস্থানগুলি এবং গাইডগুলি সহায়ক ছিল:

  • প্রক্রিয়াটির একটি ভাল রূপরেখা সরবরাহকারী এই ব্লগ provided এটি আমাদের মনে করিয়ে দেয় যে, আপনার যদি একটি বৃহত বিদ্যমান প্রকাশনা থাকে এবং এর বিকল্পটি "तत्काल_দিকীকরণ" তে সেট করা থাকে, আপনি যখন নিবন্ধ যুক্ত করবেন বা পরিবর্তন করবেন তখন এটি সম্পূর্ণ নতুন স্ন্যাপশট তৈরির কারণ হবে। সুতরাং, বিকল্পটি ব্যবহার করে এটি পরিবর্তন করার একটি সহজ পরামর্শ রয়েছেsp_changePublication @publication='MyPub', @property='immediate_sync', @value='false';

  • "রিপ্লটালক" তে এমএসডিএন ব্লগ পোস্ট (সাধারণভাবে একটি ভাল উত্স হিসাবে মনে হচ্ছে!) - "সরাসরি সরাসরি" সম্পর্কিত নয় তবে এখনও সহায়ক

  • এই প্রশ্নটি যেখানে @ ব্র্যান্ডন-উইলিয়ামস উল্লেখ করেছেন যে এটি যদি একটি পুল সাবস্ক্রিপশন হয় তবে আপনার এটি ব্যবহার করে এটিও রিফ্রেশ করা উচিতsp_refreshSubscriptions @publication = 'MyPub'

  • এসএসএমএস প্রতিলিপি মনিটর - গাইড অনুসরণ করার সময় এজেন্টদের (স্ন্যাপশট, লগ-রিডার) থামানো এবং শুরু করার সুবিধাজনক উপায়।

আমি যথাযথ পদক্ষেপগুলি অনুসরণ করেছি, যা ভালভাবে কাজ করেছে এবং আমার তদারককারী ডিবিএর অনুমোদনের সাথে মিলিত হয়েছে:

  1. রেপ্লিকেশন মনিটর খুলুন, প্রকাশনাটি নির্বাচন করুন, এজেন্টগুলিতে যান, লগ রিডার এজেন্টকে ডান ক্লিক করুন, স্টপ ক্লিক করুন।
  2. অজ্ঞাতনামা এবং তাত্ক্ষণিক-সিঙ্ক না করার জন্য প্রকাশনাকে সেট করুন sp_changePublication- হ্যাঁ, @ কোড_কনিয়ার হিসাবে উল্লেখ করেছেন যে এটি নথিভুক্ত, তবে এটি আমার ক্ষেত্রে কার্যকর হয়েছে। YMMV
  3. লিঙ্কযুক্ত-সার্ভার কোয়েরি (যেহেতু এটি ছোট ছিল) ব্যবহার করে ডেটা ভরা স্ক্রিপ্ট ব্যবহার করে গ্রাহককে ম্যানুয়ালি টেবিল তৈরি করেছিলেন। আপনি এসএসআইএস, বিসিপি বা এটি করার কিছু অন্যান্য উপায়ও ব্যবহার করতে পারেন। এবং এটি প্রয়োজনীয় নাও হতে পারে, যদি আপনি repl- স্ন্যাপশটটি এটি আপনার জন্য করে ঠিক করেন। আমি প্রথমবার এটি নিজেই প্রস্তুত করতে চেয়েছিলাম।
  4. ব্যবহার করে নিবন্ধ (টেবিল) যুক্ত করুন sp_addArticle
  5. ব্যবহার করে সারণীর সমস্ত কলাম যুক্ত করুন sp_articleColumn(নির্দিষ্ট প্রকাশনা এবং নিবন্ধ, নির্দিষ্ট কলামগুলি নির্দিষ্ট করে না -> সমস্ত কলাম বোঝায়)
  6. Exec'd sp_refreshSubscriptionsযে প্রকাশনার পুল Er রিফ্রেশ করার জন্য
  7. রিপ্লিকেশন মনিটরটি আবার খুলুন, পাবটি নির্বাচন করুন, এজেন্টগুলিতে যান, স্ন্যাপশট এজেন্টকে ডান ক্লিক করুন, "শুরু করুন" ক্লিক করুন। এটি একবার চলবে, নতুন স্ন্যাপশট তৈরি করে।
  8. লগ রিডার এজেন্টকে ডান ক্লিক করুন, "শুরু করুন" এ ক্লিক করুন। এটি স্বাভাবিক হিসাবে চলতে শুরু করবে এবং চালিয়ে যাবে এবং আপনার প্রতিলিপিটি এখন আবার কাজ করা উচিত।

এবং হ্যাঁ, আপনি এসএসএমএস জিইউআইয়ের সাথে বেশিরভাগ পরিবর্তন করতে পেরেছিলেন , আমি এটির সমস্ত স্ক্রিপ্ট করতে সহায়ক মনে করি যাতে এটি A হতে পারে উত্স-নিয়ন্ত্রণের অধীনে (পরিবর্তন-নিয়ন্ত্রণ), এবং বি) বারবার বা একাধিক উদাহরণে মোতায়েন করা হয় । দুর্ভাগ্যক্রমে আমি এজেন্টের স্ট্রিপগুলি / স্টার্টগুলি স্ক্রিপ্ট করার জন্য সময় ব্যয় করি নি, তবে তারা কেবল এসকিউএল এজেন্ট জবস হিসাবে দেওয়া খুব কঠিন হওয়া উচিত নয়। আপনাকে কেবল পুরো কাজটি করতে হবে "জব-নাম ব্যবহার করে জবআইডি আইডি" কৌশল (ক্যোয়ারী sysjobs- সত্যই, এমএস?) ...

আশা করি ভবিষ্যতের পাঠকদের সহায়তা করবে!


3

বিদ্যমান প্রকাশনা থেকে নিবন্ধগুলি যুক্ত করা এবং নিবন্ধগুলি লেখার ক্ষেত্রে যেমন উল্লেখ করা হয়েছে , আপনাকে অবশ্যই প্রকাশনার জন্য একটি নতুন স্ন্যাপশট তৈরি করতে হবে।

একটি নতুন নিবন্ধ যুক্ত করার সময় সমস্ত নিবন্ধের জন্য একটি স্ন্যাপশট উত্পাদন এড়ানোর জন্য, প্রকাশনার সম্পত্তি immediate_sync0 সেট করা আবশ্যক । sp_addarticleতারপরে, কল করুন sp_addsubscription। সাবস্ক্রিপশন টানা থাকলে অবশ্যই কল করতে হবে sp_refreshsubscriptions। তারপরে একটি স্ন্যাপশট উত্পন্ন করুন এবং সদ্য যুক্ত হওয়া নিবন্ধটির জন্য কেবল একটি স্ন্যাপশট তৈরি করা হবে।

* এটি এসকিউএল সার্ভার বুকস অনলাইনে প্রস্তাবিত পদ্ধতি। আপনার পদ্ধতির সমস্যাটি হ'ল এটি ত্রুটিযুক্ত to


2

প্রধান সম্পাদনা এটি এই উত্তরের একটি সম্পূর্ণ পুনর্লিখন (বোর্ড বৈধ সমালোচনা গ্রহণ করে যে পূর্ববর্তী সংস্করণটি ত্রুটিযুক্ত ছিল এবং সমস্যা সৃষ্টি করবে)

এটি কীভাবে প্রয়োগ করতে হবে তার একটি ডেমো পোস্ট করেছেন: ইউটিউব - এসকিউএল সার্ভার প্রতিলিপি: কীভাবে কোনও স্ন্যাপশট না নিয়ে কোনও নিবন্ধ যুক্ত করা যায়

গুরুত্বপূর্ণ: এটি মাইক্রোসফ্টের কাছ থেকে প্রস্তাবিত পদ্ধতির নয় , তাই এটি কাজ করার ক্ষেত্রে আপনি নিজেই থাকবেন, উল্লেখযোগ্য বিচ্ছিন্ন পরীক্ষা না করে এবং নিজের পদক্ষেপে স্বাচ্ছন্দ্য বোধ না করে সরাসরি আপনার উত্পাদন পরিবেশে প্রয়োগ করবেন না !

অনুসরণের পদক্ষেপগুলি:

Planning steps:
    * Choose Publication that article will be added to
    * Gather information about the publication 
        exec sp_helppublication '[Name of Publication]'
        https://msdn.microsoft.com/en-us/library/ms189782(v=sql.105).aspx
        - replication frequency = 0 - this is Transactional replication (THIS IS A REQUIREMENT FOR THIS METHOD)
        - replicate_ddl = 1 - means ALTER TABLES will apply SQL Server generated repl procs
        - independent_agent = 1 - means that you will only affect tables in this publication when deploying
    * Identify which subscribers are going to be affected

Pre-deployment steps (can be done at any time)
    1. Create table on subscribers
    2. Create custom replication procs on subscribers
       (Customisation will ignore if the IUD has already been applied to subscriber - because you have manually sync'd the data)

Deployment/Potential impact:
    3. Stop Distribution Agents to all subscribers for this publication
    4. Add article to publication on publisher
    5. Sync data from publisher to subscriber
    6. Start Distribution Agents to all subscribers for this publication
    7. Monitor/Verify all data has arrived

Optional follow on:
    8. Apply standard repl procs (removing if not exists checks)
       This is optional as the generated repl scripts should be fine for the most part

Note:  When ALTER table scripts are applied on the Publisher (when replicate_ddl = 1) repl procs will automatically be recreated by the Distribution Agent (so any customisation will be lost)

যাচাই করার জন্য:

  • প্রকাশকের উপর সন্নিবেশ সম্পাদন করুন - গ্রাহকের কাছে যাচাই সারিটি আসবে
  • প্রকাশকের উপর আপডেট সম্পাদন করুন - গ্রাহকটিতে পরিবর্তনটি যাচাই করুন
  • প্রকাশকের উপর মুছে ফেলা সঞ্চালন - গ্রাহকের উপর মুছে ফেলা যাচাই করুন
  • শেষ এন সারিতে এসে পৌঁছেছে তা যাচাই করুন এবং প্রকাশক এবং গ্রাহকের মধ্যে মেলে

উদাহরণ প্রক্রিয়া

ক) আপনার প্রকাশকের উপরে নিজেকে একটি টেবিল তৈরি করুন:

/* Deliberately applying IDENTITY, DEFAULT & INDEX to demonstrate usage on subscriber */
CREATE TABLE [dbo].[TableNotUsingSnap](
    [Id] [int] NOT NULL IDENTITY(1,1),
    [Note_Text] [varchar](4096) NOT NULL,
    [CreatedDate] [datetime] NULL,
    [LoggedDate] [datetime] NOT NULL CONSTRAINT DF_TableNotUsingSnap_LoggedDate DEFAUlT GETUTCDATE(),
 CONSTRAINT [PK_TableNotUsingSnap] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO 

CREATE NONCLUSTERED INDEX [IDX_NC_TableNotUsingSnap_LoggedDate]  ON [dbo].[TableNotUsingSnap]
(
    [LoggedDate] ASC
) INCLUDE ([Note_Text])
GO

খ) [টেবিলনটস ইউজিংস্ন্যাপ] এ কিছু সন্নিবেশ / আপডেট / মুছে ফেলার জন্য নিজেকে একটি কাজ / প্রোক / স্ক্রিপ্ট তৈরি করুন (গ্রাহক এই পদ্ধতিটি ব্যবহার করে কীভাবে সঠিকভাবে সিঙ্কড হয় তা যাচাই করার জন্য আপনি এটি ব্যবহার করতে পারেন।

প্রি-ধাপ:

1. গ্রাহক আপনার টেবিল তৈরি করুন

/* example script to add a table to a publication without running the snapshot agent 
Steps: 
    Pre steps: 
    1. Create table on subscribers
    2. Create replication procs on subscribers

    Deployment/Potential impact:
    3. Stop Distribution Agents to all subscribers for this publication
    4. Add article to publication on publisher
    5. DTS data from publisher to subscriber
    6. Start Distribution Agents to all subscribers for this publication
    7. Monitor/Verify all data has arrived

=========================================================
Notes:
    * Drop unnecessary FK's, Indexes
    * Do NOT have IDENTITY(1,1), DEFAULTS
    * Do have a Clustered PK
    * Create appropriate indexes for your subscribers use case */ 

-- RUN ON SUBSCRIBER
IF OBJECT_ID('dbo.TableNotUsingSnap') IS NOT NULL
    exec sp_rename 'dbo.TableNotUsingSnap', 'TableNotUsingSnap_20170127'
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[TableNotUsingSnap](
    [Id] [int] NOT NULL,
    [Note_Text] [varchar](4096) NOT NULL,
    [CreatedDate] [datetime] NULL,
    [LoggedDate] [datetime] NOT NULL,
 CONSTRAINT [PK_TableNotUsingSnap] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

২. আপনার প্রতিলিপি সঞ্চিত পদ্ধতি তৈরি করুন (আপডেট / সন্নিবেশ / মুছুন) - সাবস্ক্রাইবারে

আপনি Repl টি প্রকল্পগুলি তৈরি করতে পারেন:

  • ম্যানুয়ালি (সতর্কতা অবলম্বন করুন কারণ এটি ভুল করা খুব সহজ!)
  • কোনও ডিভ মেশিনে এমএস স্ন্যাপশট পদ্ধতিটি ব্যবহার করে নিবন্ধটি যুক্ত করুন এবং রিপ্লিক প্রোকস বন্ধ করে দেয় (আপনার টুইটগুলি যুক্ত করার জন্য প্রস্তুত)
  • এক প্রকার জেনারেটর তৈরি / সন্ধান করুন

আপনার যে পরিবর্তনটি প্রয়োগ করতে হবে:

  • sp_MSins_ [স্কিমা] [টেবিল নাম] - IF NOT EXISTS (SELECT 'row already exists' FROM [Schema].[TableName] dest WITH (NOLOCK) WHERE dest.Id = @c1)এটি ইতিমধ্যে থাকলে sertোকানো না যুক্ত করুন
  • sp_MSupd_ [স্কিমা] [টেবিল নাম] - IF @@rowcount = 0 ... exec sp_MSreplraiserror ...প্রয়োগ হয় না এমন কোনও আপডেট উপেক্ষা করার জন্য মন্তব্য করুন (আপনি ডেটা সিঙ্ক করার আগে রেকর্ডারটি মুছে ফেলা হতে পারে)
  • sp_MSdel_ [স্কিমা] [টেবিল নাম] - IF @@rowcount = 0 ... exec sp_MSreplraiserror ...প্রয়োগ না হয়ে এমন একটি মুছে ফেলা উপেক্ষা করার জন্য মন্তব্য করুন (আপনি ডেটা সিঙ্ক করার আগে রেকর্ডারটি মুছে ফেলা হতে পারে)

sp_MSins_dboTableNotUsingSnap:

/* Customised Replication insert proc utilized to support adding to replication without a snapshot. */
create procedure [dbo].[sp_MSins_dboTableNotUsingSnap]     
    @c1 int,     
    @c2 varchar(4096),     
    @c3 datetime
AS 
BEGIN
    IF NOT EXISTS (SELECT 'row already exists' FROM [dbo].[TableNotUsingSnap] dest WITH (NOLOCK) WHERE dest.Id = @c1)
    BEGIN
        insert into [dbo].[TableNotUsingSnap]
            ([Id],
            [Note_Text],
            [Repl_Upsert_UTC]) 
        values 
            (@c1,
            @c2,
            @c3)  
    END
END
GO

sp_MSupd_dboTableNotUsingSnap:

/* Customised Replication insert proc utilized to support adding to replication without a snapshot. */
create procedure [dbo].[sp_MSupd_dboTableNotUsingSnap]     
    @c1 int = NULL,     
    @c2 varchar(4096) = NULL,     
    @c3 datetime = NULL, 
    @pkc1 int = NULL, 
    @bitmap binary(1)
AS 
BEGIN
    declare @primarykey_text nvarchar(100) = '' 

    if (substring(@bitmap,1,1) & 1 = 1)
    begin 
        update [dbo].[TableNotUsingSnap]
        set [Id] = case substring(@bitmap,1,1) & 1 when 1 then @c1 else [Id] end, 
            [Note_Text] = case substring(@bitmap,1,1) & 2 when 2 then @c2 else [Note_Text] end,
            [Repl_Upsert_UTC] = case substring(@bitmap,1,1) & 4 when 4 then @c3 else [Repl_Upsert_UTC] END
        WHERE [Id] = @pkc1

        /*  Commented out while adding to publication
        if @@rowcount = 0
            if @@microsoftversion>0x07320000
            Begin
                set @primarykey_text = @primarykey_text + '[id] = ' + convert(nvarchar(100),@pkc1,1)
                exec sp_MSreplraiserror @errorid=20598, @param1=N'[dbo].[TableNotUsingSnap]', @param2=@primarykey_text, @param3=13233
            End */
    END
    ELSE
    BEGIN
        update [dbo].[TableNotUsingSnap]
        set [Note_Text] = case substring(@bitmap,1,1) & 2 when 2 then @c2 else [Note_Text] end,
            [Repl_Upsert_UTC] = case substring(@bitmap,1,1) & 4 when 4 then @c3 else [Repl_Upsert_UTC] END
        WHERE [Id] = @pkc1

        /*  Commented out while adding to publication
        if @@rowcount = 0
            if @@microsoftversion>0x07320000
            Begin
                set @primarykey_text = @primarykey_text + '[id] = ' + convert(nvarchar(100),@pkc1,1)
                exec sp_MSreplraiserror @errorid=20598, @param1=N'[dbo].[TableNotUsingSnap]', @param2=@primarykey_text, @param3=13233
            End */
    end
END
GO

sp_MSdel_dboTableNotUsingSnap:

/* Customised Replication insert proc utilized to support adding to replication without a snapshot. */
create procedure [dbo].[sp_MSdel_dboTableNotUsingSnap]
    @pkc1 int
as
begin  
    declare @primarykey_text nvarchar(100) = ''

    delete [dbo].[TableNotUsingSnap]
    where [Id] = @pkc1

    /* ignore if the record doesn't exist when deleting it 
    if @@rowcount = 0
        if @@microsoftversion>0x07320000
        Begin
            set @primarykey_text = @primarykey_text + '[Id] = ' + convert(nvarchar(100),@pkc1,1)
            exec sp_MSreplraiserror @errorid=20598, @param1=N'[dbo].[TableNotUsingSnap]', @param2=@primarykey_text, @param3=13234
        End */
end
GO

ডিপ্লোয়মেন্ট পদক্ষেপ

৩. বিতরণ এজেন্ট বন্ধ করুন - ডিস্ট্রিবিউটর (পুশ) বা সাবস্ক্রাইবারে (টানুন)

/*  example script to add a table to a publication without running the snapshot agent
    Steps:
        Pre steps:
        1. Create table on subscribers
        2. Create replication procs on subscribers

        Deployment/Potential impact:
    **  3. Stop Distribution Agents to all subscribers for this publication
        4. Add article to publication on publisher
        5. DTS data from publisher to subscriber
        6. Start Distribution Agents to all subscribers for this publication
        7. Monitor/Verify all data has arrived

    =========================================================
    Note: check your publication settings:
          if @independent_agent = N'false'
            you will need to stop the distribution agent which will affect ALL
            publications going to that subscriber

          if @independent_agent = N'true'
            you will need to stop the publication specific distribution agent 
            (to each subscriber)

          Plan your live release around that knowledge!
*/

-- IF PUSH REPLICATION: RUN ON DISTRIBUTION SERVER
-- IF PULL REPLICATION: RUN ON SUBSCRIBER SERVER

/* disable the Job first */
exec msdb..sp_update_job @job_name = '[Distribution agent job]', @enabled = 0
GO

/* wait for 10 seconds - precaution ONLY */
WAITFOR DELAY '00:00:10.000'
GO

/* now stop the job */
exec msdb..sp_stop_job @job_name = '[Distribution agent job]'
GO

/* 
    NOTE: You might recieve an error about stopping a job that is already stopped.  You can ignore that error.
                It is up to you to verify that the job has been stopped correctly!
*/

৪. এবার প্রবন্ধে নিবন্ধটি যুক্ত করুন - প্রকাশক অন করুন

মূল পরামিতি:

  • sp_addarticle- @pre_creation_cmd = N'none'বিতরণ এজেন্টকে তার নিজস্ব অবজেক্টগুলি না ফেলে এবং তৈরি করতে বলত
  • sp_addsubscription- @sync_type = N'none'ডিস্ট্রিবিউটরকে বলত যে এটির নতুন স্ন্যাপশট তৈরি করার দরকার নেই, এটি কেবল আইইউডি কমান্ড সারি করতে পারে

sp_addarticle:

exec sp_addarticle 
    @publication = N'Publication Name',
    @article = N'TableNotUsingSnap',
    @source_owner = N'dbo',
    @source_object = N'TableNotUsingSnap',
    @type = N'logbased',
    @description = N'',
    @creation_script = N'',
    @pre_creation_cmd = N'none',        /* this is a critical flag - tells SQL Server to not drop/recreate the repl procs/object on the subscriber */
    @schema_option = 0x0000000008004093,
    @identityrangemanagementoption = N'none',
    @destination_table = N'TableNotUsingSnap',
    @destination_owner = N'dbo',
    @status = 16,
    @vertical_partition = N'false',
    @ins_cmd = N'CALL [sp_MSins_dboTableNotUsingSnap]',
    @del_cmd = N'CALL [sp_MSdel_dboTableNotUsingSnap]',
    @upd_cmd = N'SCALL [sp_MSupd_dboTableNotUsingSnap]'
GO

-- Adding the transactional subscriptions
exec sp_addsubscription @publication = N'Publication Name',
    @subscriber = N'Subscriber Server',
    @destination_db = N'Subscriber DB',
    @subscription_type = N'Push',
    @sync_type = N'none',               /* tell SQL Server not to sync/snapshot this change to the publication */
    @article = N'all',
    @update_mode = N'read only',
    @subscriber_type = 0
GO

৫. আপনার ডেটা জুড়ে সিঙ্ক করুন

এখন আপনাকে আপনার গ্রাহকের কাছে আপনার ডেটা অনুলিপি করতে হবে, আপনি এটি করতে পারেন:

  • একটি লিঙ্কযুক্ত সার্ভার তৈরি করুন এবং এটি অনুলিপি করুন
  • এক্সপোর্ট / আমদানি উইজার্ড ব্যবহার করুন
  • একটি ব্যাকআপ পুনরুদ্ধার করুন এবং বিভিন্ন প্রয়োগ করুন
  • এসএসএমএস টুলপ্যাক 'সন্নিবেশ বিবৃতি জেনারেট করুন ...' ব্যবহার করে টেবিলটি বের করুন '

আপনি যে সঠিক পদ্ধতিটি ব্যবহার করেন তা আমি পাঠকের কাছে ছেড়ে দিই, এটি আপনার ডিস্ট্রিবিউশন এজেন্টকে কতক্ষণ বন্ধ রাখতে ইচ্ছুক তার উপরও নির্ভর করবে।

অতিরিক্ত: আপনার পরীক্ষাগুলির একটি বাড়তি পদক্ষেপ হিসাবে, [টেবিলনোটসিংস্ন্যাপ] এ আইইউডি ক্রিয়া তৈরি করতে আপনার স্ক্রিপ্টটি (স্টেপ (বি) থেকে) চালানোর জন্য এখানে একটি ভাল জায়গা রয়েছে যাতে আপনি এই পদ্ধতির প্রতি আস্থা অর্জন করতে পারেন।

The. বিতরণ এজেন্ট পুনরায় চালু করুন - ডিস্ট্রিবিউটর (পুশ) বা সাবস্ক্রাইবারে (টানুন)

/*  example script to add a table to a publication without running the snapshot agent
    Steps:
        Pre steps:
        1. Create table on subscribers
        2. Create replication procs on subscribers

        Deployment/Potential impact:
        3. Stop Distribution Agents to all subscribers for this publication
        4. Add article to publication on publisher
        5. DTS data from publisher to subscriber
    **  6. Start Distribution Agents to all subscribers for this publication
        7. Monitor/Verify all data has arrived

    =========================================================
    Note: check your publication settings:
          if @independent_agent = N'false'
            you will need to stop the distribution agent which will affect ALL
            publications going to that subscriber

          if @independent_agent = N'true'
            you will need to stop the publication specific distribution agent 
            (to each subscriber)

          Plan your live release around that knowledge!
*/

-- IF PUSH REPLICATION: RUN ON DISTRIBUTION SERVER
-- IF PULL REPLICATION: RUN ON SUBSCRIBER SERVER

/* disable the Job first */
exec msdb..sp_update_job @job_name = 'Distribution agent job', @enabled = 1
GO

/* wait for 10 seconds - precaution ONLY */
WAITFOR DELAY '00:00:10.000'
GO

/* now stop the job */
exec msdb..sp_start_job @job_name = 'Distribution agent job'
GO

/* 
    Now go and make sure everything is working ok!
*/
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.