Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
van toepassing op:SQL Server- - Linux
Logboekverzending is een hoge beschikbaarheidsconfiguratie van SQL Server waarbij een database van een primaire server wordt gerepliceerd naar een of meer secundaire servers. Met logboekverzending kunnen back-upbestanden van de brondatabase worden hersteld naar de secundaire server. De primaire server maakt periodiek back-ups van transactielogboeken en de secundaire servers herstellen ze, waarbij de secundaire kopie van de database wordt bijgewerkt.
Zoals beschreven in het vorige diagram, omvat een logboekverzendingssessie de volgende stappen:
- Een back-up maken van het transactielogboekbestand op het primaire SQL Server-exemplaar
- Het back-upbestand van het transactielogboek kopiƫren naar een of meer secundaire SQL Server-exemplaren
- Het back-upbestand van het transactielogboek herstellen op de secundaire SQL Server-exemplaren
Voorwaarden
Een netwerkshare instellen voor logboekverzending met behulp van CIFS
Notitie
In deze zelfstudie wordt gebruikgemaakt van Common Internet File System (CIFS) en Samba om de netwerkshare in te stellen.
Primaire server configureren
Installeer Samba met de volgende opdracht:
Voor Red Hat Enterprise Linux (RHEL):
sudo yum -y install sambaVoor Ubuntu:
sudo apt-get install samba
Maak een map om de logboeken voor logboekverzending op te slaan en geef de
mssqlgebruiker de vereiste machtigingen:mkdir /var/opt/mssql/tlogs chown mssql:mssql /var/opt/mssql/tlogs chmod 0700 /var/opt/mssql/tlogsBewerk het
/etc/samba/smb.confbestand (u hebt hoofdmachtigingen nodig) en voeg de volgende sectie toe:[tlogs] path=/var/opt/mssql/tlogs available=yes read only=yes browsable=yes public=yes writable=noMaak een
mssqlgebruiker voor Samba:sudo smbpasswd -a mssqlStart de Samba-services opnieuw:
sudo systemctl restart smbd.service nmbd.service
Secundaire server configureren
Installeer de CIFS-client met de volgende opdracht:
Voor RHEL:
sudo yum -y install cifs-utilsVoor Ubuntu:
sudo apt-get install cifs-utils
Maak een bestand om uw referenties op te slaan. In dit voorbeeld gebruiken we
/var/opt/mssql/.tlogcreds. Gebruik het wachtwoord dat u onlangs hebt ingesteld voor uwmssqlSamba-account en vervang<domain>:username=mssql domain=<domain> password=<password>Voer de volgende commando's uit om een lege map te maken voor het koppelen en machtigingen en eigendom correct in te stellen.
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/.tlogcredsVoeg de regel toe aan
etc/fstabom de share te behouden. Vervang<ip_address_of_primary_server>door de juiste waarde://<ip_address_of_primary_server>/tlogs /var/opt/mssql/tlogs cifs credentials=/var/opt/mssql/.tlogcreds,ro,uid=mssql,gid=mssql 0 0Koppel de netwerkshares.
sudo mount -a
Logboekverzending instellen met behulp van Transact-SQL
Maak een back-up van de database op de primaire server:
BACKUP DATABASE SampleDB TO DISK = '/var/opt/mssql/tlogs/SampleDB.bak'; GOConfigureer logboekverzending op de primaire server:
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;De database op de secundaire server herstellen:
RESTORE DATABASE SampleDB FROM DISK = '/var/opt/mssql/tlogs/SampleDB.bak' WITH NORECOVERY;Configureer logboekverzending op de secundaire server:
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
Controleren of de verzending van logboeken werkt
Controleer of de verzending van logboeken werkt door de volgende taak op de primaire server te starten:
USE msdb; GO EXECUTE dbo.sp_start_job N'LSBackup_SampleDB'; GOControleer of de verzending van logboeken werkt door de volgende taak op de secundaire server te starten:
USE msdb; GO EXECUTE dbo.sp_start_job N'LSCopy_SampleDB'; GO EXECUTE dbo.sp_start_job N'LSRestore_SampleDB'; GOControleer of de failover voor logboekverzending werkt door de volgende opdracht uit te voeren:
Waarschuwing
Met deze opdracht wordt de secundaire database online gebracht en wordt de configuratie voor het verzenden van logboeken verbroken. U moet de logboekverzending opnieuw configureren nadat u deze opdracht hebt uitgevoerd.
RESTORE DATABASE SampleDB WITH RECOVERY;