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.

È anche possibile usare la replica transazionale per eseguire il push delle modifiche apportate in un database di istanza nell'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 SQL Server.A SQL Server database.
  • Un database singolo nel database SQL di Azure.A single database in Azure SQL Database.
  • Un database in pool in un pool elastico del database SQL di Azure.A pooled database in an Azure SQL Database elastic pool.

La replica transazionale è in anteprima pubblica nell' 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 ha lo scopo di guidare un utente nella configurazione della replica con un'istanza gestita di database di Azure da end-to-end, a partire dalla 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 sono già state distribuite istanze gestite, procedere con il passaggio 4 per creare il database del server di pubblicazione oppure il passaggio 6 se si dispone già di un server di pubblicazione e di un database Sottoscrittore e si è pronti per iniziare la 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

La configurazione di un'istanza gestita per fungere da server di pubblicazione e/o da un server di distribuzione richiede: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 l'istanza gestita del server di pubblicazione si trovi nella stessa rete virtuale del server di distribuzione e nel Sottoscrittore oppure che sia stato stabilito il peering vNet tra le reti virtuali di tutte e tre le 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.
  • La porta 445 (TCP in uscita) è aperta nelle regole di sicurezza di NSG per le istanze gestite per 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 SQL Server locali, in database singoli/istanze gestite nel database SQL di Azure o in pool di database in pool elastici del 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 il portale di Azure per creare un gruppo di risorse con il SQLMI-Replnome.Use the Azure portal to create a resource group with the name SQLMI-Repl.

2-creare istanze gestite2 - Create managed instances

Usare il portale di Azure per creare due istanze gestite nella stessa rete virtuale e nella stessa 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

Sarà anche necessario configurare una macchina virtuale di Azure per la connessione alle istanze gestite del database SQL di Azure.You will also need to Configure an Azure VM to connect to your Azure SQL Database managed instances.

3: creare un account di archiviazione di Azure3 - Create Azure Storage Account

Creare un account di archiviazione di Azure per la directory di lavoro e quindi creare una condivisione file nell'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 alle 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 del server di pubblicazione4 - Create a publisher database

Connettersi all' sql-mi-pub istanza gestita usando SQL Server Management Studio ed eseguire il codice Transact-SQL (T-SQL) seguente 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 Sottoscrittore5 - Create a subscriber database

Connettersi all' sql-mi-sub istanza gestita usando 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 all' sql-mi-pub istanza gestita usando 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 Publisher per l'utilizzo del server di distribuzione7 - Configure publisher to use distributor

Nell'istanza sql-mi-pubgestita del server di pubblicazione modificare l'esecuzione della query in modalità SQLCMD ed eseguire il codice seguente per registrare il nuovo server di distribuzione nel 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)'; -- Remove this parameter for on-premises publishers

Questo script configura un server di pubblicazione locale nell'istanza gestita, aggiunge un server collegato e crea un set di processi per la 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 una pubblicazione e un Sottoscrittore8 - Create publication and subscriber

Utilizzando la modalità SQLCMD , eseguire lo script T-SQL seguente per abilitare la replica per il database e configurare la replica tra 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 di Azure sta attualmente riscontrando 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 viene 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 di nuovo il comando T-SQL seguente per impostare di nuovo il timeout di accesso sul valore predefinito, se necessario: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 e tre gli agenti per applicare le modifiche.Restart all three agents to apply these changes.

10-replica di test10 - Test replication

Una volta configurata la replica, è possibile eseguirne il test inserendo i nuovi elementi nel server di pubblicazione e osservando la propagazione delle modifiche 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 frammento di codice T-SQL seguente 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 frammento di codice T-SQL seguente per inserire righe aggiuntive nel server di pubblicazione, quindi controllare di nuovo le righe 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 eseguire la pulizia delle risorse di Azure eliminando le risorse dell'istanza gestita dal gruppo di risorse e quindi eliminando il gruppo SQLMI-Repldi risorse.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