เพิ่มบทความลงในสิ่งพิมพ์ของทรานแซคชันโดยไม่ต้องสร้างสแนปชอตใหม่


23

การใช้การจำลองแบบของทรานแซคชัน SQL 2008 R2 กับสมาชิก pull เมื่อเราเพิ่มบทความฉันต้องการหลีกเลี่ยงการสร้าง snapshot ทั้งหมด (db คือ ~ 80 GB ดังนั้นจึงใช้เวลาหลายชั่วโมง)

จากบทความนี้ฉันได้เห็นวิธีการทำสิ่งนี้ด้วยสแนปชอตบางส่วนโดยการปิดใช้งานทันที_sync แต่นั่นไม่ได้ผลสำหรับเรา

โดยหลักการแล้วฉันต้องการเรียกใช้สิ่งนี้เป็นส่วนหนึ่งของสคริปต์ db ของเราเพื่อสร้างตารางดังนั้นถ้าเราต้องการให้มันทำซ้ำเรา:

Create Table ...    
sp_addArticle ...    
sp_PushThisToOurSubscribersNow    

คำตอบ:


13

คุณสามารถเพิ่มบทความผ่าน SSMS โดยใช้ GUI และแม้แต่ใช้ตัวกรองกับมัน ตราบใดที่คุณไม่เปลี่ยนแปลงคุณสมบัติอื่น ๆ ของบทความคุณไม่จำเป็นต้องสร้างสแนปชอตแบบเต็ม

เมื่อคุณกดตกลงในการตีพิมพ์ GUI (หลังจากที่เพิ่มบทความ) ก็จะปิดโดยไม่ต้องแจ้งเพื่อเตรียมใช้งานใหม่ - ถ้ามันไม่พร้อมที่จะเตรียมใช้งานใหม่แล้วคุณมีการเปลี่ยนแปลงบางสิ่งบางอย่างที่ต้องใช้ภาพเต็ม หากเป็นเช่นนั้นให้กดยกเลิกแล้วลองอีกครั้ง

หลังจากที่คุณเพิ่มบทความคุณสามารถเริ่มงาน snapshot และคุณจะสังเกตเห็นว่ามันสร้างเฉพาะ snapshot สำหรับบทความใหม่ (เรียกว่า mini-snapshot)

จากนั้นตรวจสอบงานการแจกจ่ายของคุณและสังเกตว่ามันสร้างตารางที่ผู้สมัครสมาชิกและคัดลอกข้อมูลของคุณเป็นกลุ่ม

ขอให้โชคดีและแจ้งให้เราทราบหากคุณต้องการความช่วยเหลือเพิ่มเติม


ฉันทำทุกอย่างที่อธิบายไว้ในคำตอบนี้ แต่ก็ยังพบว่าตัวเองกำลังรอฐานข้อมูลที่จำลองแบบทั้งหมดเพื่อซิงค์ ฉันไม่ได้รับพร้อมท์ให้เริ่มต้นใหม่หลังจากเพิ่มบทความใหม่ แต่ก็ยังคงมีการเริ่มต้นเต็มรูปแบบ ระวัง.
JzInqXc9Dg

7
  1. เพิ่มบทความใหม่ในหน้าต่างคุณสมบัติสิ่งพิมพ์ของคุณ(ยกเลิกการเลือกแสดงเฉพาะบทความที่ถูกตรวจสอบในรายการ)
  2. คลิกขวาที่โหนดการเผยแพร่เดียวกันและไปที่ " ดูสถานะตัวแทนภาพรวม "
  3. คลิกเริ่มและเพียงแค่บันทึกในหน้าต่างเดียวกันซึ่งแสดงให้เห็นว่าบทความใหม่นี้จะซิงค์เท่านั้น
  4. หลังจากช่วงเวลาสั้น ๆ บทความใหม่จะถูกซิงค์ในผู้สมัครสมาชิกโดยไม่ต้องเริ่มต้นการซิงค์ทั้งหมดก่อนหน้านี้

ป้อนคำอธิบายรูปภาพที่นี่


3

ฉันมีคำถามเดียวกันและแม้ว่าฉันจะเคยเป็น DBA มาระยะหนึ่งแล้ว แต่ฉันก็ยังไม่ได้จัดการกับการจำลองแบบที่ลึกพอที่จะรู้สึกสบายใจอย่างสมบูรณ์ดังนั้นฉันจึงคิดว่าแหล่งข้อมูลและคำแนะนำต่อไปนี้มีประโยชน์:

  • บล็อกนี้ซึ่งให้เค้าร่างที่ดีของกระบวนการ นอกจากนี้ยังเตือนเราว่าหากคุณมีสิ่งพิมพ์ขนาดใหญ่ที่มีอยู่และตัวเลือกถูกตั้งค่าเป็น "instant_sync" มันจะทำให้ภาพรวมใหม่ทั้งหมดถูกเตรียมไว้ทุกครั้งที่คุณเพิ่มหรือเปลี่ยนบทความ ดังนั้นเขาจึงมีเคล็ดลับง่าย ๆ ในการเปลี่ยนตัวเลือกนั้นโดยใช้sp_changePublication @publication='MyPub', @property='immediate_sync', @value='false';

  • โพสต์บล็อก MSDNใน "repltalk" (ฟังดูเหมือนเป็นทรัพยากรที่ดีโดยทั่วไป!) - ไม่ใช่ "โดยตรงโดยตรง" ที่เกี่ยวข้อง แต่ก็ยังมีประโยชน์

  • คำถามนี้ที่ @ Brandon-Williams ชี้ให้เห็นว่าหากเป็นการสมัครสมาชิกแบบดึงข้อมูลคุณควรรีเฟรชโดยใช้sp_refreshSubscriptions @publication = 'MyPub'

  • การตรวจสอบการจำลองแบบ SSMS - วิธีที่สะดวกในการหยุดและเริ่มตัวแทน (ภาพรวมตัวอ่านบันทึก) เมื่อทำตามคำแนะนำ

นี่คือขั้นตอนจริงที่ฉันติดตามซึ่งใช้งานได้ดีและได้รับการอนุมัติจากผู้ดูแลระบบ DBA ของฉัน:

  1. เปิดการตรวจสอบการจำลองแบบเลือกสิ่งพิมพ์ไปที่ตัวแทนคลิกขวาตัวแทนผู้อ่านบันทึกคลิกหยุด
  2. ตั้งค่าสิ่งพิมพ์ให้ไม่อนุญาตให้ไม่ระบุตัวตน & ไม่ซิงค์ทันทีโดยใช้sp_changePublication- ใช่เนื่องจาก @cody_konior ชี้ว่าสิ่งนี้อยู่ภายใต้เอกสาร แต่มันทำงานได้ดีในกรณีของฉัน YMMV
  3. สร้างตารางที่ผู้สมัครสมาชิกด้วยตนเองโดยใช้สคริปต์เต็มไปด้วยข้อมูลโดยใช้การเชื่อมโยงแบบสอบถามเซิร์ฟเวอร์ (เนื่องจากมันมีขนาดเล็ก) คุณสามารถใช้ SSIS, BCP หรือวิธีอื่นในการทำเช่นนี้ และมันอาจไม่จำเป็นถ้าคุณโอเคกับสแนปชอตของสแน็ปช็อตที่ทำเพื่อคุณ ฉันแค่ต้องการเตรียมมันด้วยตนเองในครั้งแรก
  4. เพิ่มบทความ (ตาราง) โดยใช้ sp_addArticle
  5. เพิ่มคอลัมน์ทั้งหมดของตารางโดยใช้sp_articleColumn(สิ่งพิมพ์และบทความที่ระบุ DIDN'T ระบุคอลัมน์ -> หมายถึงคอลัมน์ทั้งหมด)
  6. มีไว้sp_refreshSubscriptionsสำหรับสิ่งพิมพ์นั้นเพื่อรีเฟรช pull-er
  7. เปิดการตรวจสอบการจำลองแบบอีกครั้งเลือกผับไปที่ตัวแทนคลิกขวาที่ Snapshot Agent คลิก "Start" มันจะทำงานครั้งเดียวสร้างภาพรวมใหม่
  8. คลิกขวาที่ Log Reader Agent คลิก "Start" มันจะเริ่มต้นและทำงานต่อไปตามปกติและการจำลองแบบของคุณควรจะทำงานอีกครั้ง

และในขณะที่ใช่คุณสามารถทำการเปลี่ยนแปลงส่วนใหญ่กับ SSMS GUI ได้ฉันพบว่ามีประโยชน์ในการเขียนสคริปต์ทั้งหมดเพื่อให้สามารถเป็น A) ภายใต้การควบคุมแหล่งที่มา (การควบคุมการเปลี่ยนแปลง) และ B) ปรับใช้ซ้ำ ๆ หรือหลายครั้ง . น่าเสียดายที่ฉันไม่ได้ใช้เวลาในการเขียนสคริปต์การหยุด / เริ่มการทำงานของ Agent แต่นั่นไม่ควรยากเกินไปเพราะเป็นเพียงงาน SQL Agent คุณต้องทำเช่นนั้นทั้งหมด "ค้นหา JobID โดยใช้เคล็ดลับ Job-Name" (แบบสอบถามsysjobs- จริง ๆ , MS?) ...

หวังว่าจะช่วยให้ผู้อ่านในอนาคต!


3

ดังที่ระบุไว้ในการเพิ่มบทความไปยังและการดร็อปบทความจากสิ่งพิมพ์ที่มีอยู่คุณต้อง * สร้างสแน็ปช็อตใหม่สำหรับสิ่งพิมพ์

เพื่อหลีกเลี่ยงการสร้าง snapshot สำหรับบทความทั้งหมดเมื่อมีการเพิ่มบทความใหม่คุณสมบัติสิ่งพิมพ์immediate_syncจะต้องตั้งค่า 0. โทรแล้วsp_addarticle sp_addsubscriptionหากการสมัครสมาชิกถูกดึงคุณจะต้องโทรหาsp_refreshsubscriptionsด้วย จากนั้นสร้างสแน็ปช็อตและจะสร้างเฉพาะสแน็ปช็อตสำหรับบทความที่เพิ่มใหม่

* นี่เป็นวิธีที่แนะนำใน SQL Server Books Online ปัญหาเกี่ยวกับวิธีการของคุณคือมีแนวโน้มที่จะเกิดข้อผิดพลาด


2

การแก้ไขที่สำคัญ นี่คือการเขียนที่สมบูรณ์ของคำตอบนี้ (รับการวิจารณ์ที่ถูกต้องในคณะกรรมการว่ารุ่นก่อนหน้านี้มีข้อผิดพลาดได้ง่ายและจะทำให้เกิดปัญหา)

นอกจากนี้ยังโพสต์สาธิตวิธีการใช้นี้ให้: Youtube - การจำลองแบบ SQL Server: วิธีการเพิ่มบทความโดยไม่คำนึงถึงภาพรวม

สำคัญ:นี่คือไม่ได้มีวิธีการแนะนำจาก Microsoft เพื่อให้คุณจะเป็นตัวคุณเองด้วยการไปถึงการได้รับมันทำงานไม่ไม่สมัครโดยตรงกับสภาพแวดล้อมการผลิตของคุณโดยการทดสอบแยกอย่างมีนัยสำคัญและได้รับความสะดวกสบายกับตัวเองขั้นตอน!

ขั้นตอนในการปฏิบัติตาม:

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)

วิธีตรวจสอบ:

  • ดำเนินการแทรกกับผู้เผยแพร่ - ตรวจสอบแถวมาถึงสมาชิก
  • ดำเนินการอัปเดตกับผู้เผยแพร่ - ตรวจสอบว่ามีการเปลี่ยนแปลงเกิดขึ้นกับผู้สมัครสมาชิก
  • ดำเนินการลบในสำนักพิมพ์ - ยืนยันแถวที่ถูกลบบนผู้สมัครสมาชิก
  • ตรวจสอบว่าแถวสุดท้ายมาถึงแล้วและจับคู่ระหว่างผู้เผยแพร่และผู้สมัครสมาชิก

กระบวนการตัวอย่าง

A) สร้างตารางของคุณเองในสำนักพิมพ์:

/* 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

B) สร้างงาน / proc / script ด้วยตัวคุณเองเพื่อทำการแทรก / อัพเดต / ลบบน [TableNotUsingSnap] (คุณสามารถใช้สิ่งนี้เพื่อตรวจสอบว่าสมาชิกได้ซิงค์อย่างถูกต้องโดยใช้วิธีนี้อย่างไร

Pre-ขั้นตอน

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

2. สร้างโพรซีเดอร์ที่เก็บแบบจำลองของคุณ (อัพเดต / แทรก / ลบ) - บนผู้สมัครสมาชิก

คุณสามารถสร้าง procs แบบจำลอง:

  • ด้วยตนเอง (ระวังเพราะมันง่ายมากที่จะทำผิดพลาด!)
  • เพิ่มบทความโดยใช้วิธีการ MS Snapshot บนเครื่อง Dev และสคริปต์ปิดโปรแกรม procs (พร้อมให้คุณเพิ่ม tweaks ของคุณ)
  • สร้าง / ค้นหาตัวสร้างบางชนิด

การเปลี่ยนแปลงที่คุณจะต้องใช้:

  • sp_MSins_ [Schema] [TableName] - เพิ่มIF NOT EXISTS (SELECT 'row already exists' FROM [Schema].[TableName] dest WITH (NOLOCK) WHERE dest.Id = @c1)เพื่อไม่ใส่หากมีอยู่แล้ว
  • sp_MSupd_ [Schema] [TableName] - แสดงความคิดเห็นต่อIF @@rowcount = 0 ... exec sp_MSreplraiserror ...เพื่อละเว้นการอัปเดตที่ไม่ได้นำไปใช้ (เนื่องจากอาจมีการลบระเบียนในผู้เผยแพร่ก่อนที่คุณจะซิงค์ข้อมูล)
  • sp_MSdel_ [Schema] [TableName] - แสดงความคิดเห็นต่อ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

ขั้นตอนการฝากเงิน

3. หยุดตัวแทนจำหน่าย - ในผู้จำหน่าย (พุช) หรือผู้สมัครสมาชิก (ดึง)

/*  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!
*/

4. ตอนนี้เพิ่มบทความลงในสิ่งพิมพ์ - บนสำนักพิมพ์

พารามิเตอร์ที่สำคัญ:

  • sp_addarticle- @pre_creation_cmd = N'none'ใช้เพื่อบอกตัวแทนการแจกจ่ายเพื่อไม่ปล่อยและสร้างวัตถุของตัวเอง
  • sp_addsubscription- @sync_type = N'none'เคยบอก Distributer ว่ามันไม่จำเป็นต้องสร้าง snapshot ใหม่มันแค่จัดคิวคำสั่ง IUD ขึ้นมา

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

5. ซิงค์ข้อมูลของคุณ

ตอนนี้คุณต้องคัดลอกข้อมูลของคุณไปยังสมาชิกของคุณคุณสามารถ:

  • สร้างเซิร์ฟเวอร์ที่เชื่อมโยงและคัดลอกข้าม
  • ใช้ตัวช่วยสร้างการส่งออก / นำเข้า
  • คืนค่าการสำรองข้อมูลและนำไปใช้
  • แยกตารางออกมาโดยใช้ SSMS Toolpack 'สร้างคำสั่งแทรก ... '

วิธีการที่แน่นอนที่คุณใช้ฉันปล่อยให้ผู้อ่านขึ้นอยู่กับว่าคุณยินดีที่จะหยุดตัวแทนจำหน่ายของคุณนานแค่ไหน

พิเศษ:เป็นขั้นตอนเพิ่มเติมในการทดสอบของคุณต่อไปนี้เป็นจุดที่เหมาะสำหรับเรียกใช้สคริปต์ของคุณ (จากขั้นตอน (B)) เพื่อสร้างการกระทำ IUD ใน [TableNotUsingSnap] เพื่อให้คุณมั่นใจในวิธีการนี้

6. รีสตาร์ทตัวแทนจำหน่าย - ใน Distributor (Push) หรือ Subscriber (ดึง)

/*  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.