Mengonfigurasi Replikasi dengan T-SQL
Berlaku untuk: SQL Server - Linux
Dalam tutorial ini, konfigurasikan replikasi rekam jepret SQL Server di Linux dengan dua instans SQL Server menggunakan Transact-SQL (T-SQL). Penerbit dan distributor berada pada instans yang sama, dan pelanggan berada pada instans terpisah.
- Mengaktifkan agen replikasi SQL Server di Linux
- Membuat database sampel
- Mengonfigurasi folder rekam jepret untuk akses agen SQL Server
- Mengonfigurasi distributor
- Mengonfigurasi penerbit
- Mengonfigurasi publikasi dan artikel
- Mengonfigurasi pelanggan
- Menjalankan pekerjaan replikasi
Semua konfigurasi replikasi dapat dikonfigurasi dengan prosedur tersimpan replikasi.
Prasyarat
Untuk menyelesaikan tutorial ini, Anda perlu:
Dua instans SQL Server dengan versi terbaru SQL Server di Linux
Alat untuk mengeluarkan kueri T-SQL untuk menyiapkan replikasi, seperti sqlcmd atau SQL Server Management Studio
Lihat Menggunakan SQL Server Management Studio di Windows untuk mengelola SQL Server di Linux.
Catatan
Replikasi SQL Server didukung di Linux di SQL Server 2017 (14.x) (CU18) dan versi yang lebih baru.
Langkah terperinci
Aktifkan agen replikasi SQL Server di Linux. Pada kedua komputer host, jalankan perintah berikut di terminal.
sudo /opt/mssql/bin/mssql-conf set sqlagent.enabled true sudo systemctl restart mssql-server
Buat database sampel dan tabel. Pada penerbit, buat database sampel dan tabel yang akan bertindak sebagai artikel untuk publikasi.
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
Pada instans SQL Server lainnya, pelanggan, buat database untuk menerima artikel.
CREATE DATABASE Sales; GO
Buat folder rekam jepret untuk Agen SQL Server untuk dibaca/ditulis di distributor, buat folder rekam jepret dan berikan akses ke pengguna 'mssql'
sudo mkdir /var/opt/mssql/data/ReplData/ sudo chown mssql /var/opt/mssql/data/ReplData/ sudo chgrp mssql /var/opt/mssql/data/ReplData/
Mengonfigurasi distributor. Dalam contoh ini, penerbit juga merupakan distributor. Jalankan perintah berikut pada penerbit untuk mengonfigurasi instans untuk distribusi juga.
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 EXEC 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 EXEC 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))) EXEC sp_updateextendedproperty N'SnapshotFolder', @snapshotdirectory, 'user', dbo, 'table', 'UIProperties'; ELSE EXEC sp_addextendedproperty N'SnapshotFolder', @snapshotdirectory, 'user', dbo, 'table', 'UIProperties'; GO
Mengonfigurasi penerbit. Jalankan perintah T-SQL berikut pada penerbit.
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 EXEC 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
Mengonfigurasi pekerjaan publikasi. Jalankan perintah T-SQL berikut pada penerbit.
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 EXEC sp_replicationdboption @dbname = N'Sales', @optname = N'publish', @value = N'true'; -- Add the snapshot publication EXEC 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'; EXEC 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;
Buat artikel dari tabel Penjualan.
Jalankan perintah T-SQL berikut pada penerbit.
USE [Sales]; GO EXEC 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';
Mengonfigurasi Langganan. Jalankan perintah T-SQL berikut pada penerbit.
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 EXEC 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; EXEC 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
Jalankan pekerjaan agen replikasi. Jalankan kueri berikut untuk mendapatkan daftar pekerjaan:
SELECT name, date_modified FROM msdb.dbo.sysjobs ORDER BY date_modified DESC;
Jalankan pekerjaan replikasi Rekam Jepret untuk menghasilkan rekam jepret:
USE msdb; GO --generate snapshot of publications, for example EXEC dbo.sp_start_job N'PUBLISHER-PUBLICATION-SnapshotRepl-1'; GO
Jalankan pekerjaan replikasi rekam jepret untuk menghasilkan rekam jepret:
USE msdb; GO --distribute the publication to subscriber, for example EXEC dbo.sp_start_job N'DISTRIBUTOR-PUBLICATION-SnapshotRepl-SUBSCRIBER'; GO
Sambungkan pelanggan dan data yang direplikasi kueri.
Pada pelanggan, periksa apakah replikasi berfungsi dengan menjalankan kueri berikut:
SELECT * from [Sales].[dbo].[Customer];
Dalam tutorial ini, Anda mengonfigurasi replikasi rekam jepret SQL Server di Linux dengan dua instans SQL Server menggunakan T-SQL.
- Mengaktifkan agen replikasi SQL Server di Linux
- Membuat database sampel
- Mengonfigurasi folder rekam jepret untuk akses agen SQL Server
- Mengonfigurasi distributor
- Mengonfigurasi penerbit
- Mengonfigurasi publikasi dan artikel
- Mengonfigurasi pelanggan
- Menjalankan pekerjaan replikasi