Configurare la replica in un database dell'istanza gestita di database SQL di AzureConfigure replication in an Azure SQL Database managed instance database

La replica transazionale consente di replicare i dati in un database dell'istanza gestita di database SQL di Azure da un database di SQL Server o da un altro database dell'istanza.Transactional replication enables you to replicate data into an Azure SQL Database managed instance database from a SQL Server database or another instance database.

È possibile utilizzare anche la replica transazionale per il push delle modifiche apportate in un database dell'istanza in istanza gestita di Database SQL di Azure per:You can also use transactional replication to push changes made in an instance database in Azure SQL Database managed instance to:

  • Un database di SQL Server.A SQL Server database.
  • Un singolo database nel Database SQL di Azure.A single database in Azure SQL Database.
  • Un database in pool in un pool elastico di Database SQL di Azure.A pooled database in an Azure SQL Database elastic pool.

La replica transazionale è in anteprima pubblica nel istanza gestita di Database SQL di Azure.Transactional replication is in public preview on Azure SQL Database managed instance. Un'istanza gestita può ospitare database di pubblicazione, distribuzione e sottoscrittore.A managed instance can host publisher, distributor, and subscriber databases. Per le configurazioni disponibili, vedere Configurazioni di replica transazionale.See transactional replication configurations for available configurations.

Nota

Questo articolo è concepito come guida un utente di configurazione della replica con un Database di Azure per istanza gestita di dall'inizio alla fine, inizia con la creazione del gruppo di risorse.This article is intended to guide a user in configuring replication with an Azure Database managed instance from end to end, starting with creating the resource group. Se già gestito istanze distribuite, andare direttamente al passaggio 4 per creare il database del server di pubblicazione, o passaggio 6 se già dispone di un database di pubblicazione e nel sottoscrittore e sono pronti per iniziare configurazione della replica.If you already have managed instances deployed, skip ahead to Step 4 to create your publisher database, or Step 6 if you already have a publisher and subscriber database, and are ready to start configuring replication.

RequisitiRequirements

Configurare un'istanza gestita per funzionare come un server di pubblicazione e/o un server di distribuzione sono necessari:Configuring a managed instance to function as a publisher and/or a distributor requires:

  • L'istanza gestita non deve essere coinvolta in una relazione di replica geografica.That the managed instance is not currently participating in a geo-replication relationship.
  • Che il server di pubblicazione l'istanza gestita è nella stessa rete virtuale come server di distribuzione e nel Sottoscrittore, oppure peering reti virtuali è stata stabilita tra le reti virtuali di tutte le tre entità.That the publisher managed instance is on the same virtual network as the distributor and the subscriber, or vNet peering has been established between the virtual networks of all three entities.
  • Per la connettività viene usata l'autenticazione SQL tra i partecipanti alla replica.Connectivity uses SQL Authentication between replication participants.
  • Una condivisione di account di archiviazione di Azure per la directory di lavoro della replica.An Azure Storage Account share for the replication working directory.
  • Porta 445 (TCP in uscita) sia aperta nelle regole di sicurezza del gruppo sicurezza di rete per le istanze gestite di accedere alla condivisione file di Azure.Port 445 (TCP outbound) is open in the security rules of NSG for the managed instances to access the Azure file share.

Nota

I database singoli e in pool nel database SQL di Azure possono essere usati solo come sottoscrittori.Single databases and pooled databases in Azure SQL Database can only be subscribers.

FunzionalitàFeatures

Supporta:Supports:

  • Combinazione di replica transazionale e replica snapshot di istanze locali e gestite di SQL Server nel database SQL di Azure.Transactional and snapshot replication mix of SQL Server on-premises and managed instances in Azure SQL Database.
  • I sottoscrittori possono trovarsi in database di SQL Server in locale, i database singola/managed istanze nel Database SQL di Azure o in pool di database nei pool elastici di Database SQL di Azure.Subscribers can be in on-premises SQL Server databases, single databases/managed instances in Azure SQL Database, or pooled databases in Azure SQL Database elastic pools.
  • Replica unidirezionale o bidirezionale.One-way or bidirectional replication.

In un'istanza gestita del database SQL di Azure non sono supportate le funzionalità seguenti:The following features are not supported in a managed instance in Azure SQL Database:

1 - creare un gruppo di risorse1 - Create a resource group

Usare la portale di Azure per creare un gruppo di risorse con il nome SQLMI-Repl.Use the Azure portal to create a resource group with the name SQLMI-Repl.

2 - creare le istanze gestite2 - Create managed instances

Usare la portale di Azure per creare due istanze gestite sulla stessa rete virtuale e subnet.Use the Azure portal to create two managed instances on the same virtual network and subnet. Le due istanze gestite devono essere denominate:The two managed instances should be named:

  • sql-mi-pub
  • sql-mi-sub

È necessario anche per configurare una macchina virtuale di Azure per la connessione al Database SQL di Azure le istanze gestite.You will also need to Configure an Azure VM to connect to your Azure SQL Database managed instances.

3 - creare Account di archiviazione di Azure3 - Create Azure Storage Account

Creare un Account di archiviazione di Azure per la directory di lavoro e quindi creare un condivisione file all'interno dell'account di archiviazione.Create an Azure Storage Account for the working directory, and then create a file share within the storage account.

Copiare il percorso della condivisione file nel formato: \\storage-account-name.file.core.windows.net\file-share-nameCopy the file share path in the format of: \\storage-account-name.file.core.windows.net\file-share-name

Copiare le chiavi di accesso di archiviazione nel formato: DefaultEndpointsProtocol=https;AccountName=<Storage-Account-Name>;AccountKey=****;EndpointSuffix=core.windows.netCopy the storage access keys in the format of: DefaultEndpointsProtocol=https;AccountName=<Storage-Account-Name>;AccountKey=****;EndpointSuffix=core.windows.net

Per altre informazioni, vedere Gestire le chiavi di accesso alle risorse di archiviazione.For more information, see View and copy storage access keys.

4 - creare un database di pubblicazione4 - Create a publisher database

Connettersi al sql-mi-pub gestiti istanza utilizzando SQL Server Management Studio ed eseguire il seguente codice Transact-SQL (T-SQL) per creare il database del server di pubblicazione:Connect to your sql-mi-pub managed instance using SQL Server Management Studio and run the following Transact-SQL (T-SQL) code to create your publisher database:

USE [master]
GO

CREATE DATABASE [ReplTran_PUB]
GO

USE [ReplTran_PUB]
GO
CREATE TABLE ReplTest (
    ID INT NOT NULL PRIMARY KEY,
    c1 VARCHAR(100) NOT NULL,
    dt1 DATETIME NOT NULL DEFAULT getdate()
)
GO


USE [ReplTran_PUB]
GO

INSERT INTO ReplTest (ID, c1) VALUES (6, 'pub')
INSERT INTO ReplTest (ID, c1) VALUES (2, 'pub')
INSERT INTO ReplTest (ID, c1) VALUES (3, 'pub')
INSERT INTO ReplTest (ID, c1) VALUES (4, 'pub')
INSERT INTO ReplTest (ID, c1) VALUES (5, 'pub')
GO
SELECT * FROM ReplTest
GO

5 - creare un database del sottoscrittore5 - Create a subscriber database

Connettersi al sql-mi-sub gestiti istanza utilizzando SQL Server Management Studio ed eseguire il codice T-SQL seguente per creare il database del sottoscrittore vuoto:Connect to your sql-mi-sub managed instance using SQL Server Management Studio and run the following T-SQL code to create your empty subscriber database:

USE [master]
GO

CREATE DATABASE [ReplTran_SUB]
GO

USE [ReplTran_SUB]
GO
CREATE TABLE ReplTest (
    ID INT NOT NULL PRIMARY KEY,
    c1 VARCHAR(100) NOT NULL,
    dt1 DATETIME NOT NULL DEFAULT getdate()
)
GO

6: configurare la distribuzione6 - Configure distribution

Connettersi al sql-mi-pub gestiti istanza utilizzando SQL Server Management Studio ed eseguire il codice T-SQL seguente per configurare il database di distribuzione.Connect to your sql-mi-pub managed instance using SQL Server Management Studio and run the following T-SQL code to configure your distribution database.

USE [master]
GO

EXEC sp_adddistributor @distributor = @@ServerName;
EXEC sp_adddistributiondb @database = N'distribution';
GO

7: configurare i server di pubblicazione per l'utilizzo del server di distribuzione7 - Configure publisher to use distributor

Nel server di pubblicazione istanza gestita sql-mi-pub, modificare l'esecuzione della query al SQLCMD modalità ed eseguire il codice seguente per registrare il nuovo server di distribuzione con il server di pubblicazione.On your publisher managed instance sql-mi-pub, change the query execution to SQLCMD mode and run the following code to register the new distributor with your publisher.

:setvar username loginUsedToAccessSourceManagedInstance
:setvar password passwordUsedToAccessSourceManagedInstance
:setvar file_storage "\\storage-account-name.file.core.windows.net\file-share-name"
:setvar file_storage_key "DefaultEndpointsProtocol=https;AccountName=<Storage-Account-Name>;AccountKey=****;EndpointSuffix=core.windows.net"


USE [master]
EXEC sp_adddistpublisher
  @publisher = @@ServerName,
  @distribution_db = N'distribution',
  @security_mode = 0,
  @login = N'$(username)',
  @password = N'$(password)',
  @working_directory = N'$(file_storage)',
  @storage_connection_string = N'$(file_storage_key)';

Questo script consente di configurare un server di pubblicazione locale sull'istanza gestita, aggiunge un server collegato e crea un set di processi di SQL Server Agent.This script configures a local publisher on the managed instance, adds a linked server, and creates a set of jobs for the SQL Server Agent.

8 - creare pubblicazione e sottoscrittore8 - Create publication and subscriber

Usando SQLCMD modalità, eseguire lo script T-SQL seguente per abilitare la replica per il database e configurare la replica tra il server di pubblicazione, server di distribuzione e sottoscrittore.Using SQLCMD mode, run the following T-SQL script to enable replication for your database, and configure replication between your publisher, distributor, and subscriber.

-- Set variables
:setvar username sourceLogin
:setvar password sourcePassword
:setvar source_db ReplTran_PUB
:setvar publication_name PublishData
:setvar object ReplTest
:setvar schema dbo
:setvar target_server "sql-mi-sub.wdec33262scj9dr27.database.windows.net"
:setvar target_username targetLogin
:setvar target_password targetPassword
:setvar target_db ReplTran_SUB

-- Enable replication for your source database
USE [$(source_db)]
EXEC sp_replicationdboption
  @dbname = N'$(source_db)',
  @optname = N'publish',
  @value = N'true';

-- Create your publication
EXEC sp_addpublication
  @publication = N'$(publication_name)',
  @status = N'active';


-- Configure your log reaer agent
EXEC sp_changelogreader_agent
  @publisher_security_mode = 0,
  @publisher_login = N'$(username)',
  @publisher_password = N'$(password)',
  @job_login = N'$(username)',
  @job_password = N'$(password)';

-- Add the publication snapshot
EXEC sp_addpublication_snapshot
  @publication = N'$(publication_name)',
  @frequency_type = 1,
  @publisher_security_mode = 0,
  @publisher_login = N'$(username)',
  @publisher_password = N'$(password)',
  @job_login = N'$(username)',
  @job_password = N'$(password)';

-- Add the ReplTest table to the publication
EXEC sp_addarticle 
  @publication = N'$(publication_name)',
  @type = N'logbased',
  @article = N'$(object)',
  @source_object = N'$(object)',
  @source_owner = N'$(schema)';

-- Add the subscriber
EXEC sp_addsubscription
  @publication = N'$(publication_name)',
  @subscriber = N'$(target_server)',
  @destination_db = N'$(target_db)',
  @subscription_type = N'Push';

-- Create the push subscription agent
EXEC sp_addpushsubscription_agent
  @publication = N'$(publication_name)',
  @subscriber = N'$(target_server)',
  @subscriber_db = N'$(target_db)',
  @subscriber_security_mode = 0,
  @subscriber_login = N'$(target_username)',
  @subscriber_password = N'$(target_password)',
  @job_login = N'$(target_username)',
  @job_password = N'$(target_password)';

-- Initialize the snapshot
EXEC sp_startpublication_snapshot
  @publication = N'$(publication_name)';

9 - modificare i parametri dell'agente9 - Modify agent parameters

Istanza gestita di Database SQL Azure si sono verificati alcuni problemi di back-end con la connettività con gli agenti di replica.Azure SQL Database managed instance is currently experiencing some backend issues with connectivity with the replication agents. Anche se il problema è indirizzata risolto, la soluzione alternativa per aumentare il valore di timeout di accesso per gli agenti di replica.While this issue is being addressed addressed, the workaround to increase the login time out value for the replication agents.

Eseguire il comando T-SQL seguente nel server di pubblicazione per aumentare il timeout di accesso:Run the following T-SQL command on the publisher to increase the login timeout:

-- Increase login timeout to 150s
update msdb..sysjobsteps set command = command + N' -LoginTimeout 150' 
where subsystem in ('Distribution','LogReader','Snapshot') and command not like '%-LoginTimeout %'

Eseguire il comando T-SQL seguente per impostare il timeout di accesso al valore predefinito, è necessario a questo scopo:Run the following T-SQL command again to set the login timeout back to the default value, should you need to do so:

-- Increase login timeout to 30
update msdb..sysjobsteps set command = command + N' -LoginTimeout 30' 
where subsystem in ('Distribution','LogReader','Snapshot') and command not like '%-LoginTimeout %'

Riavviare tutti gli agenti di tre per applicare queste modifiche.Restart all three agents to apply these changes.

10: testare la replica10 - Test replication

Dopo aver configurata la replica, è possibile testarla inserendo nuovi elementi disponibili nel server di pubblicazione e la visione le modifiche vengono propagate al sottoscrittore.Once replication has been configured, you can test it by inserting new items on the publisher and watching the changes propagate to the subscriber.

Eseguire il seguente frammento di T-SQL per visualizzare le righe nel Sottoscrittore:Run the following T-SQL snippet to view the rows on the subscriber:

select * from dbo.ReplTest

Eseguire il seguente frammento di T-SQL per inserire righe aggiuntive nel server di pubblicazione e quindi selezionare le righe nuovamente nel Sottoscrittore.Run the following T-SQL snippet to insert additional rows on the publisher, and then check the rows again on the subscriber.

INSERT INTO ReplTest (ID, c1) VALUES (15, 'pub')

Pulire le risorseClean up resources

Per eliminare la pubblicazione, eseguire il comando T-SQL seguente:To drop the publication, run the following T-SQL command:

-- Drops the publication
USE [ReplTran_PUB]
EXEC sp_droppublication @publication = N'PublishData'
GO

Per rimuovere l'opzione di replica dal database, eseguire il comando T-SQL seguente:To remove the replication option from the database, run the following T-SQL command:

-- Disables publishing of the database
USE [ReplTran_PUB]
EXEC sp_removedbreplication
GO

Per disabilitare la pubblicazione e la distribuzione, eseguire il comando T-SQL seguente:To disable publishing and distribution, run the following T-SQL command:

-- Drops the distributor
USE [master]
EXEC sp_dropdistributor @no_checks = 1
GO

È possibile pulire le risorse di Azure da eliminare le risorse di istanza gestita dal gruppo di risorse e quindi eliminando il gruppo di risorse SQLMI-Repl.You can clean up your Azure resources by deleting the managed instance resources from the resource group and then deleting the resource group SQLMI-Repl.

Vedere ancheSee Also