Çoğaltmayı Transact-SQL ile yapılandırma

Şunlar için geçerlidir:Linux üzerinde SQL Server

Bu öğreticide, Transact-SQL (T-SQL) kullanarak iki SQL Server örneğiyle Linux'ta SQL Server anlık görüntü çoğaltmayı yapılandırın. Yayımcı ve dağıtımcı aynı örnektedir ve abone ayrı bir örnektedir.

  • Linux'ta SQL Server çoğaltma aracılarını etkinleştirme
  • Örnek veritabanı oluşturma
  • SQL Server aracıları erişimi için anlık görüntü klasörünü yapılandırma
  • Dağıtımcıyı yapılandırma
  • Yayımcıyı yapılandırma
  • Yayını ve makaleleri yapılandırmak
  • Aboneyi yapılandırma
  • Çoğaltma işlerini çalıştır

Tüm replikasyon bileşenlerini replikasyon depolanmış prosedürlerle yapılandırabilirsiniz.

Prerequisites

Bu eğitimi tamamlamak için şunlara ihtiyacınız olacak:

  • Linux üzerinde SQL Server'ın en son sürümüne sahip iki SQL Server örneği

  • Sqlcmd veya SQL Server Management Studio (SSMS) gibi çoğaltmayı ayarlamak için T-SQL sorguları veren bir araç

    Bkz. Linuxüzerinde SQL Server'ı yönetmek için Windows'ta SQL Server Management Studio kullanma .

    Note

    SQL Server Replikasyonu, SQL Server 2017 (14.x) CU 18 ve sonraki sürümlerinde Linux'ta desteklenmektedir. Daha fazla bilgi için, Linux üzerinde SQL Server için sürüm bilgileri sayfasına bakınız.

Ayrıntılı adımlar

  1. Linux'ta SQL Server çoğaltma aracılarını etkinleştirin. Her iki konak makinesinde de terminalde aşağıdaki komutları çalıştırın.

    sudo /opt/mssql/bin/mssql-conf set sqlagent.enabled true
    sudo systemctl restart mssql-server
    
  2. Örnek veritabanını ve tabloyu oluşturun. Yayımcıda, yayımın makaleleri gibi işlev görecek örnek bir veritabanı ve tablo oluşturun.

    CREATE DATABASE Sales;
    GO
    
    USE [Sales];
    GO
    
    CREATE TABLE Customer
    (
        [CustomerID] INT NOT NULL,
        [SalesAmount] DECIMAL NOT NULL
    );
    GO
    
    INSERT INTO Customer (CustomerID, SalesAmount)
    VALUES (1, 100),
        (2, 200),
        (3, 300);
    GO
    

    Diğer SQL Server örneğinde abone, makaleleri almak için veritabanını oluşturur.

    CREATE DATABASE Sales;
    GO
    
  3. Dağıtıcıda, SQL Server ajanlarının okuma ve yazması için anlık bir klasör oluşturun ve kullanıcıya mssql erişim izni verin:

    sudo mkdir /var/opt/mssql/data/ReplData/
    sudo chown mssql /var/opt/mssql/data/ReplData/
    sudo chgrp mssql /var/opt/mssql/data/ReplData/
    
  4. Dağıtıcıyı yapılandırın. Bu örnekte yayımcı aynı zamanda dağıtımcıdır. Dağıtım için örneği yapılandırmak amacıyla yayımcıda aşağıdaki komutları çalıştırın.

    DECLARE @distributor AS SYSNAME;
    DECLARE @distributorlogin AS SYSNAME;
    DECLARE @distributorpassword AS SYSNAME;
    
    -- Specify the distributor name. Use the 'hostname' command in the terminal to find the hostname.
    SET @distributor = N'<distributor instance name>'; -- In this example, it will be the name of the publisher
    SET @distributorlogin = N'<distributor login>';
    SET @distributorpassword = N'<distributor password>';
    
    -- Specify the distribution database.
    USE master;
    
    EXECUTE sp_adddistributor
        @distributor = @distributor; -- this should be the hostname
    
    -- Log into the distributor and create the distribution database.
    -- In this example, the publisher and distributor are on the same host.
    EXECUTE sp_adddistributiondb
        @database = N'distribution',
        @log_file_size = 2,
        @deletebatchsize_xact = 5000,
        @deletebatchsize_cmd = 2000,
        @security_mode = 0,
        @login = @distributorlogin,
        @password = @distributorpassword;
    GO
    
    -- Log into the distributor and configure the snapshot directory.
    -- In this example, the publisher and distributor are on the same host.
    USE [distribution];
    GO
    
    DECLARE @snapshotdirectory AS NVARCHAR (500) = N'/var/opt/mssql/data/ReplData/';
    
    IF (NOT EXISTS (SELECT * FROM sysobjects
        WHERE name = 'UIProperties' AND type = 'U'))
    CREATE TABLE UIProperties(id INT);
    
    IF (EXISTS (SELECT *
                FROM ::fn_listextendedproperty ('SnapshotFolder', 'user', 'dbo', 'table', 'UIProperties', NULL, NULL)))
        EXECUTE sp_updateextendedproperty N'SnapshotFolder', @snapshotdirectory, 'user', dbo, 'table', 'UIProperties';
    ELSE
        EXECUTE sp_addextendedproperty N'SnapshotFolder', @snapshotdirectory, 'user', dbo, 'table', 'UIProperties';
    GO
    
  5. Yayımcıyı yapılandırın. Yayımcıda aşağıdaki T-SQL komutlarını çalıştırın.

    DECLARE @publisher AS SYSNAME;
    DECLARE @distributorlogin AS SYSNAME;
    DECLARE @distributorpassword AS SYSNAME;
    
    -- Specify the publisher name. Use the 'hostname' command in the terminal to find the hostname.
    SET @publisher = N'<instance name>';
    SET @distributorlogin = N'<distributor login>';
    SET @distributorpassword = N'<distributor password>';
    
    -- Specify the distribution database.
    -- Adding the distribution publishers
    EXECUTE sp_adddistpublisher
        @publisher = @publisher,
        @distribution_db = N'distribution',
        @security_mode = 0,
        @login = @distributorlogin,
        @password = @distributorpassword,
        @working_directory = N'/var/opt/mssql/data/ReplData',
        @trusted = N'false',
        @thirdparty_flag = 0,
        @publisher_type = N'MSSQLSERVER';
    GO
    
  6. Yayın ve anlık görüntü aracısı görevini yapılandırın. Yayımcıda aşağıdaki T-SQL komutlarını çalıştırın.

    USE [Sales];
    GO
    
    DECLARE @publisherlogin AS SYSNAME;
    DECLARE @publisherpassword AS SYSNAME;
    
    SET @publisherlogin = N'<publisher login>';
    SET @publisherpassword = N'<publisher password>';
    
    EXECUTE sp_replicationdboption
        @dbname = N'Sales',
        @optname = N'publish',
        @value = N'true';
    
    -- Add the snapshot publication
    EXECUTE sp_addpublication
        @publication = N'SnapshotRepl',
        @description = N'Snapshot publication of database ''Sales'' from Publisher ''<PUBLISHER HOSTNAME>''.',
        @retention = 0,
        @allow_push = N'true',
        @repl_freq = N'snapshot',
        @status = N'active',
        @independent_agent = N'true';
    
    EXECUTE sp_addpublication_snapshot
        @publication = N'SnapshotRepl',
        @frequency_type = 1,
        @frequency_interval = 1,
        @frequency_relative_interval = 1,
        @frequency_recurrence_factor = 0,
        @frequency_subday = 8,
        @frequency_subday_interval = 1,
        @active_start_time_of_day = 0,
        @active_end_time_of_day = 235959,
        @active_start_date = 0,
        @active_end_date = 0,
        @publisher_security_mode = 0,
        @publisher_login = @publisherlogin,
        @publisher_password = @publisherpassword;
    
  7. Customer makaleyi Customer tablodan oluşturun.

    Yayımcıda aşağıdaki T-SQL komutlarını çalıştırın.

    USE [Sales];
    GO
    
    EXECUTE sp_addarticle
        @publication = N'SnapshotRepl',
        @article = N'Customer',
        @source_owner = N'dbo',
        @source_object = N'Customer',
        @type = N'logbased',
        @description = NULL,
        @creation_script = NULL,
        @pre_creation_cmd = N'drop',
        @schema_option = 0x000000000803509D,
        @destination_table = N'Customer',
        @destination_owner = N'dbo',
        @identityrangemanagementoption = N'manual',
        @vertical_partition = N'false';
    
  8. Aboneliği yapılandırın. Yayımcıda aşağıdaki T-SQL komutlarını çalıştırın.

    USE [Sales];
    GO
    
    DECLARE @subscriber AS SYSNAME;
    DECLARE @subscriber_db AS SYSNAME;
    DECLARE @subscriberLogin AS SYSNAME;
    DECLARE @subscriberPassword AS SYSNAME;
    
    SET @subscriber = N'<instance name>'; -- for example, MSSQLSERVER
    SET @subscriber_db = N'Sales';
    SET @subscriberLogin = N'<subscriber login>';
    SET @subscriberPassword = N'<subscriber password>';
    
    EXECUTE sp_addsubscription
        @publication = N'SnapshotRepl',
        @subscriber = @subscriber,
        @destination_db = @subscriber_db,
        @subscription_type = N'Push',
        @sync_type = N'automatic',
        @article = N'all',
        @update_mode = N'read only',
        @subscriber_type = 0;
    
    EXECUTE sp_addpushsubscription_agent
        @publication = N'SnapshotRepl',
        @subscriber = @subscriber,
        @subscriber_db = @subscriber_db,
        @subscriber_security_mode = 0,
        @subscriber_login = @subscriberLogin,
        @subscriber_password = @subscriberPassword,
        @frequency_type = 1,
        @frequency_interval = 0,
        @frequency_relative_interval = 0,
        @frequency_recurrence_factor = 0,
        @frequency_subday = 0,
        @frequency_subday_interval = 0,
        @active_start_time_of_day = 0,
        @active_end_time_of_day = 0,
        @active_start_date = 0,
        @active_end_date = 19950101;
    GO
    
  9. Çoğaltma aracısı işlerini çalıştırın. İşlerin listesini almak için aşağıdaki sorguyu çalıştırın:

    SELECT name,
           date_modified
    FROM msdb.dbo.sysjobs
    ORDER BY date_modified DESC;
    

    Anlık görüntüyü oluşturmak için anlık görüntü aracısı görevini başlatın:

    USE msdb;
    GO
    
    -- Generate the publication snapshot, for example.
    EXECUTE dbo.sp_start_job N'PUBLISHER-PUBLICATION-SnapshotRepl-1';
    GO
    

    Yayını aboneye dağıtmak için dağıtım ajanı işini başlatın:

    USE msdb;
    GO
    
    -- Distribute the publication to the subscriber.
    EXECUTE dbo.sp_start_job N'DISTRIBUTOR-PUBLICATION-SnapshotRepl-SUBSCRIBER';
    GO
    
  10. Aboneye bağlanın ve çoğaltılan verileri sorgulayın.

    Abonede, aşağıdaki sorguyu çalıştırarak çoğaltmanın çalışıp çalışmadığını denetleyin:

    SELECT *
    FROM [Sales].[dbo].[Customer];
    

Bu öğreticide, T-SQL kullanarak iki SQL Server örneğiyle Linux'ta SQL Server anlık görüntü çoğaltmayı yapılandırdınız.

  • Linux'ta SQL Server çoğaltma aracılarını etkinleştirme
  • Örnek veritabanı oluşturma
  • SQL Server aracıları erişimi için anlık görüntü klasörünü yapılandırma
  • Dağıtımcıyı yapılandırma
  • Yayımcıyı yapılandırma
  • Yayını ve makaleleri yapılandırmak
  • Aboneyi yapılandırma
  • Çoğaltma işlerini çalıştır