Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a:SQL Server su Linux
Il log shipping è una configurazione a disponibilità elevata di SQL Server in cui un database di un server primario viene replicato in uno o più server secondari. Il shipping dei log ti permette di ripristinare i file di backup dal database sorgente sul server secondario. Il server primario crea periodicamente backup del log delle transazioni e i server secondari li ripristinano, aggiornando la copia secondaria del database.
Come descritto nel diagramma precedente, una sessione di log shipping prevede i passaggi seguenti:
- Backup del file di log delle transazioni nell'istanza di SQL Server primaria
- Copiare il file di backup del log delle transazioni attraverso la rete verso una o più istanze secondarie di SQL Server.
- Ripristino del file di backup del log delle transazioni nelle istanze di SQL Server secondarie
Prerequisiti
- Installa SQL Server Agent su Linux sui server primari e secondari.
Configurare una condivisione di rete per il log shipping con CIFS
Note
Questa esercitazione usa Common Internet File System (CIFS) e Samba per configurare la condivisione di rete.
Configurare il server primario
Installare Samba con il comando seguente:
Per Red Hat Enterprise Linux (RHEL):
sudo yum -y install sambaPer Ubuntu:
sudo apt-get install samba
Creare una directory per archiviare i log per il log shipping e concedere all’utente
mssqlle autorizzazioni necessariemkdir /var/opt/mssql/tlogs chown mssql:mssql /var/opt/mssql/tlogs chmod 0700 /var/opt/mssql/tlogsModificare il file
/etc/samba/smb.conf(sono necessarie autorizzazioni root) aggiungendo la sezione seguente:[tlogs] path=/var/opt/mssql/tlogs available=yes read only=yes browsable=yes public=yes writable=noCreare un utente
mssqlper Samba:sudo smbpasswd -a mssqlRiavviare i servizi Samba:
sudo systemctl restart smbd.service nmbd.service
Configurare il server secondario
Installare il client CIFS con il seguente comando:
Per RHEL:
sudo yum -y install cifs-utilsPer Ubuntu:
sudo apt-get install cifs-utils
Creare un file per archiviare le credenziali personali. In questo esempio, usiamo
/var/opt/mssql/.tlogcreds. Usare la password impostata di recente per l'accountmssqlper Samba e sostituire<domain>:username=mssql domain=<domain> password=<password>Eseguire i comandi seguenti per creare una directory vuota per il montaggio e impostare correttamente le autorizzazioni e la proprietà:
mkdir /var/opt/mssql/tlogs sudo chown root:root /var/opt/mssql/tlogs sudo chmod 0550 /var/opt/mssql/tlogs sudo chown root:root /var/opt/mssql/.tlogcreds sudo chmod 0660 /var/opt/mssql/.tlogcredsAggiungere la riga a
/etc/fstabper rendere persistente la condivisione. Sostituire<ip_address_of_primary_server>con il valore appropriato.//<ip_address_of_primary_server>/tlogs /var/opt/mssql/tlogs cifs credentials=/var/opt/mssql/.tlogcreds,ro,uid=mssql,gid=mssql 0 0Monta la condivisione:
sudo mount -a
Configurare il log shipping usando Transact-SQL
Eseguire il backup del database sul server primario:
BACKUP DATABASE SampleDB TO DISK = '/var/opt/mssql/tlogs/SampleDB.bak'; GOConfigurare il log shipping nel server primario:
DECLARE @LS_BackupJobId AS UNIQUEIDENTIFIER; DECLARE @LS_PrimaryId AS UNIQUEIDENTIFIER; DECLARE @SP_Add_RetCode AS INT; EXECUTE @SP_Add_RetCode = master.dbo.sp_add_log_shipping_primary_database @database = N'SampleDB', @backup_directory = N'/var/opt/mssql/tlogs', @backup_share = N'/var/opt/mssql/tlogs', @backup_job_name = N'LSBackup_SampleDB', @backup_retention_period = 4320, @backup_compression = 2, @backup_threshold = 60, @threshold_alert_enabled = 1, @history_retention_period = 5760, @backup_job_id = @LS_BackupJobId OUTPUT, @primary_id = @LS_PrimaryId OUTPUT, @overwrite = 1; IF (@@ERROR = 0 AND @SP_Add_RetCode = 0) BEGIN DECLARE @LS_BackUpScheduleUID AS UNIQUEIDENTIFIER; DECLARE @LS_BackUpScheduleID AS INT; EXECUTE msdb.dbo.sp_add_schedule @schedule_name = N'LSBackupSchedule', @enabled = 1, @freq_type = 4, @freq_interval = 1, @freq_subday_type = 4, @freq_subday_interval = 15, @freq_recurrence_factor = 0, @active_start_date = 20170418, @active_end_date = 99991231, @active_start_time = 0, @active_end_time = 235900, @schedule_uid = @LS_BackUpScheduleUID OUTPUT, @schedule_id = @LS_BackUpScheduleID OUTPUT; EXECUTE msdb.dbo.sp_attach_schedule @job_id = @LS_BackupJobId, @schedule_id = @LS_BackUpScheduleID; EXECUTE msdb.dbo.sp_update_job @job_id = @LS_BackupJobId, @enabled = 1; END EXECUTE master.dbo.sp_add_log_shipping_alert_job; EXECUTE master.dbo.sp_add_log_shipping_primary_secondary @primary_database = N'SampleDB', @secondary_server = N'<ip_address_of_secondary_server>', @secondary_database = N'SampleDB', @overwrite = 1;Ripristinare il database nel server secondario:
RESTORE DATABASE SampleDB FROM DISK = '/var/opt/mssql/tlogs/SampleDB.bak' WITH NORECOVERY;Configurare il trasferimento dei log nel server secondario:
DECLARE @LS_Secondary__CopyJobId AS UNIQUEIDENTIFIER; DECLARE @LS_Secondary__RestoreJobId AS UNIQUEIDENTIFIER; DECLARE @LS_Secondary__SecondaryId AS UNIQUEIDENTIFIER; DECLARE @LS_Add_RetCode AS INT; EXECUTE @LS_Add_RetCode = master.dbo.sp_add_log_shipping_secondary_primary @primary_server = N'<ip_address_of_primary_server>', @primary_database = N'SampleDB', @backup_source_directory = N'/var/opt/mssql/tlogs/', @backup_destination_directory = N'/var/opt/mssql/tlogs/', @copy_job_name = N'LSCopy_SampleDB', @restore_job_name = N'LSRestore_SampleDB', @file_retention_period = 4320, @overwrite = 1, @copy_job_id = @LS_Secondary__CopyJobId OUTPUT, @restore_job_id = @LS_Secondary__RestoreJobId OUTPUT, @secondary_id = @LS_Secondary__SecondaryId OUTPUT; IF (@@ERROR = 0 AND @LS_Add_RetCode = 0) BEGIN DECLARE @LS_SecondaryCopyJobScheduleUID AS UNIQUEIDENTIFIER; DECLARE @LS_SecondaryCopyJobScheduleID AS INT; EXECUTE msdb.dbo.sp_add_schedule @schedule_name = N'DefaultCopyJobSchedule', @enabled = 1, @freq_type = 4, @freq_interval = 1, @freq_subday_type = 4, @freq_subday_interval = 15, @freq_recurrence_factor = 0, @active_start_date = 20170418, @active_end_date = 99991231, @active_start_time = 0, @active_end_time = 235900, @schedule_uid = @LS_SecondaryCopyJobScheduleUID OUTPUT, @schedule_id = @LS_SecondaryCopyJobScheduleID OUTPUT; EXECUTE msdb.dbo.sp_attach_schedule @job_id = @LS_Secondary__CopyJobId, @schedule_id = @LS_SecondaryCopyJobScheduleID; DECLARE @LS_SecondaryRestoreJobScheduleUID AS UNIQUEIDENTIFIER; DECLARE @LS_SecondaryRestoreJobScheduleID AS INT; EXECUTE msdb.dbo.sp_add_schedule @schedule_name = N'DefaultRestoreJobSchedule', @enabled = 1, @freq_type = 4, @freq_interval = 1, @freq_subday_type = 4, @freq_subday_interval = 15, @freq_recurrence_factor = 0, @active_start_date = 20170418, @active_end_date = 99991231, @active_start_time = 0, @active_end_time = 235900, @schedule_uid = @LS_SecondaryRestoreJobScheduleUID OUTPUT, @schedule_id = @LS_SecondaryRestoreJobScheduleID OUTPUT; EXECUTE msdb.dbo.sp_attach_schedule @job_id = @LS_Secondary__RestoreJobId, @schedule_id = @LS_SecondaryRestoreJobScheduleID; END DECLARE @LS_Add_RetCode2 AS INT; IF (@@ERROR = 0 AND @LS_Add_RetCode = 0) BEGIN EXECUTE @LS_Add_RetCode2 = master.dbo.sp_add_log_shipping_secondary_database @secondary_database = N'SampleDB', @primary_server = N'<ip_address_of_primary_server>', @primary_database = N'SampleDB', @restore_delay = 0, @restore_mode = 0, @disconnect_users = 0, @restore_threshold = 45, @threshold_alert_enabled = 1, @history_retention_period = 5760, @overwrite = 1; END IF (@@ERROR = 0 AND @LS_Add_RetCode = 0) BEGIN EXECUTE msdb.dbo.sp_update_job @job_id = @LS_Secondary__CopyJobId, @enabled = 1; EXECUTE msdb.dbo.sp_update_job @job_id = @LS_Secondary__RestoreJobId, @enabled = 1; END
Verificare il funzionamento del log shipping
Verificare il funzionamento del log shipping avviando il processo seguente nel server primario:
USE msdb; GO EXECUTE dbo.sp_start_job N'LSBackup_SampleDB'; GOVerificare il funzionamento del log shipping avviando il processo seguente nel server secondario:
USE msdb; GO EXECUTE dbo.sp_start_job N'LSCopy_SampleDB'; GO EXECUTE dbo.sp_start_job N'LSRestore_SampleDB'; GOVerificare il funzionamento del failover del log shipping eseguendo il comando seguente:
Avviso
Questo comando porta online il database secondario e interrompe la configurazione del log shipping. Dopo aver eseguito questo comando, sarà necessario riconfigurare il log shipping.
RESTORE DATABASE SampleDB WITH RECOVERY;