Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Ş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ırma
- Aboneyi yapılandırma
- Çoğaltma işlerini çalıştır
Tüm çoğaltma yapılandırmaları çoğaltma saklı yordamlarıile yapılandırılabilir.
Önkoşullar
Bu öğreticiyi tamamlamak için gereksinimler şunlardır:
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 .
Not
SQL Server Çoğaltma, SQL Server 2017 (14.x) (CU 18) ve sonraki sürümlerde Linux üzerinde desteklenir.
Ayrıntılı adımlar
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Ö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); GODiğer SQL Server örneğinde abone, makaleleri almak için veritabanını oluşturur.
CREATE DATABASE Sales; GOSQL Server Aracılarının dağıtımcıda okuyacağı/yazacağı anlık görüntü klasörünü oluşturun, anlık görüntü klasörünü oluşturun ve 'mssql' kullanıcısına erişim verin
sudo mkdir /var/opt/mssql/data/ReplData/ sudo chown mssql /var/opt/mssql/data/ReplData/ sudo chgrp mssql /var/opt/mssql/data/ReplData/Dağıtımcı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 'hostname' command on in 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 distributor and create Distribution Database. -- In this example, our publisher and distributor is 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 DECLARE @snapshotdirectory AS NVARCHAR (500); SET @snapshotdirectory = N'/var/opt/mssql/data/ReplData/'; -- Log into distributor and create Distribution Database. -- In this example, our publisher and distributor is on the same host USE [distribution]; GO 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'; GOYayı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 distributor name. Use 'hostname' command on in 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'; GOYayın işini yapılandırın. Yayımcıda aşağıdaki T-SQL komutlarını çalıştırın.
DECLARE @replicationdb AS SYSNAME; DECLARE @publisherlogin AS SYSNAME; DECLARE @publisherpassword AS SYSNAME; SET @replicationdb = N'Sales'; SET @publisherlogin = N'<Publisher login>'; SET @publisherpassword = N'<Publisher Password>'; USE [Sales]; GO 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;Satış tablosundan makaleler 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, @identityrangemanagementoption = N'manual', @destination_table = N'customer', @destination_owner = N'dbo', @vertical_partition = N'false';Aboneliği Yapılandır'ı seçin. Yayımcıda aşağıdaki T-SQL komutlarını çalıştırın.
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>'; USE [Sales]; GO 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Ç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ü Çoğaltma Görevini çalıştırın.
USE msdb; GO --generate snapshot of publications, for example EXECUTE dbo.sp_start_job N'PUBLISHER-PUBLICATION-SnapshotRepl-1'; GOAnlık kopya çoğaltma görevini çalıştırarak işi başlatın.
USE msdb; GO --distribute the publication to subscriber, for example EXECUTE dbo.sp_start_job N'DISTRIBUTOR-PUBLICATION-SnapshotRepl-SUBSCRIBER'; GOAboneyi ve çoğaltılmış veri sorgusunu bağlama.
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ırma
- Aboneyi yapılandırma
- Çoğaltma işlerini çalıştır
İlgili içerik
- SQL Server Çoğaltma
- SQL Server çoğaltma Linux üzerinde
- Replikasyon saklı yordamları (Transact-SQL)