Pagine

sabato 28 settembre 2013

Backup/Restore come Initial Snapshot di una replica transazionale

In certi scenari di replica, dove il DB da pubblicare è di grosse dimensioni, potrebbe essere conveniente configurare la/le sottoscrizioni partendo da un Backup\Restore anziché da un Initial Snapshot come prevede la procedure standard.
La creazione dell'Initial Snapshot potrebbe essere molto lunga e consumare molte risorse che in questo modo risparmiamo.
Vediamo un esempio per la creazione di una sottoscrizione da un backup....

Voglio creare una sottoscrizione del Db DBPublisher del server Win12Node1 sul database DBSubscriber del server Win12Node2.
Su Win12node1 è già configurata la pubblicazione del DBPublisher denominata TestPub.















Step 1

Sul Publisher la prima cosa da fare è verificare se la pubblicazione in essere accetta sottoscrizioni inizializzate da backup.
Per verificare basta eseguire la sp_helppublication e controllare il setting allow_initialize_from_backup.
Questo setting può assumere 2 valori:
          1.   0 non abilitato
          2.   1 abilitato.
    
--Da eseguire sul publisher
Exec sp_helppublication 'TestPub'
GO
 


 
 
Nel mio caso devo abilitare l'inizializzazione da Backup, quindi devo eseguire la sp_changepublication.
 
--Da eseguire sul publisher
Exec sp_changepublication @publication = 'TestPub'
                      , @property = 'allow_initialize_from_backup'
                      , @value  = 'true'
GO


Step 2

Eseguire il Restore del DB sul server sottoscrittore, nel mio caso lo chiamerò DBSubScriber partendo dall'ultimo set di backup disponibile.

N.B. Se l'ultimo backup disponibile è più vecchio del periodo di Retention del distributor allora sarà necessario creare un nuovo set di backup.

--Da eseguire sul subscriber
USE [master]
Go
Restore Database [DBSubScriber] From Disk = '\\MyFileServer\SharedFolder\init.bak' 
GO

Step 3

Creiamo la sottoscrizione dal server publisher utilizzando la sp_addsubscription e la  sp_addpushsubscription_agent.

La sp_addsubscription deve essere eseguita specificando:
@subscription_type = 'Push'
@sync_type = 'initialize with backup'
@backupdevicetype = 'disk'
@backupdevicename = MyPath
Dove MyPath è il path al backup differenziale appena creato che verrà utilizzato per allineare i dati.

La sp_addpushsubscription_agent deve essere eseguita specificando:
@job_login = MyLogin
@job_password = MyPassword
Dove MyLogin e MyPassword sono Username e Pwd che l'agent utilizzerà per le repliche.

--Da eseguire sul publisher
use DBPublisher
GO

exec sp_addsubscription 
  @publication = N'TestPub'
  , @subscriber = N'WIN12NODE2'
  , @destination_db = N'DBSubScriber'
  , @subscription_type = N'Push'
  , @sync_type = N'initialize with backup'
  , @backupdevicetype = N'disk'
  , @backupdevicename = N'\\MyFileServer\SharedFolder\init.bak'
  , @article = N'all'
  , @update_mode = N'read only'
  , @subscriber_type = 0

exec sp_addpushsubscription_agent @publication = N'TestPub'
  , @subscriber = N'WIN12NODE2'
  , @subscriber_db = N'DBSubScriber'
  , @job_login = MyLogin
  , @job_password = MyPassword
  , @subscriber_security_mode = 1
  , @frequency_type = 64
  , @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 = 235959
  , @active_start_date = 20130919
  , @active_end_date = 99991231
  , @enabled_for_syncmgr = N'False'
  , @dts_package_location = N'Distributor'
GO

 













 
 


Se abbiamo fatto tutto correttamente la replica è già operativa e tutte le transazioni applicate al DBPublisher saranno replicate anche sul DBSubscriber.
Per essere certi che tutto funzioni correttamente possiamo utilizzare il tool di monitoring della replica per risolvere eventuali problemi.














Ciao

Luca

Nessun commento:

Posta un commento