Scripting log Automation
-
29-09-2019 - |
Domanda
E 'possibile sceneggiatura tutta la configurazione dei log?
Ad esempio:. Ho bisogno di scrivere un lavoro che gli iniziati Log di spedizione da due basi di dati da server A al server B
Il processo verrà eseguito sul server A.
Tra l'altro entrambi sono SQL 2008 R2 Enterprise.
C'è una condivisione sul server di A. \ ServerA \ Log
Credo che questo è tutto ciò che è necessario. E 'possibile farlo solo da copione? Devo per inizializzare i database o c'è un'opzione come SQL Server Management Studio per inizializzare automaticamente?
Will devo creare i posti di lavoro manualmente? o è configurato in modo da creare i posti di lavoro e li gestisce?
E 'script? Qualcuno ha fatto qualcosa di simile? Se uno ha uno script per fare questo?
Grazie in anticipo.
Soluzione
Questo è del tutto possibile, e può essere script attraverso la GUI di configurazione dei log. L'unico ostacolo da superare nello script che genera sarà necessario collegare sia il primario e il secondario nello stesso script. Ciò può essere realizzato utilizzati i comandi Mode SQLCMD SQLCMD di utilizzare il comando CONNECT, avendo cura di mettere GOs tra le connessioni. Come bonus si può anche eseguire comandi del sistema operativo (di copia, del, ecc) in modo da poter scritto il backup e ripristino pure. Si veda l'esempio qui sotto.
-- Execute the following statements at the Primary to configure Log Shipping
-- for the database [primary\instance1].[mydb],
-- The script needs to be run at the Primary in the context of the [msdb] database.
-------------------------------------------------------------------------------------
-- Adding the Log Shipping configuration
-- ****** Begin: Script to be run at Primary: [primary\instance1] ******
:setvar PRIMARY primary\instance1
:setvar SECONDARY secondary\instance2
:setvar DATABASE mydb
:setvar PBKDIR "D:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\BACKUP\"
:setvar PBKSHARE "\\primary\d$\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\BACKUP\"
:setvar SBKSHARE "\\secondary\d$\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\BACKUP\"
:setvar SDATADIR "D:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\"
:connect $(PRIMARY)
alter database [$(DATABASE)] set recovery full
DECLARE @LS_BackupJobId AS uniqueidentifier
DECLARE @LS_PrimaryId AS uniqueidentifier
DECLARE @SP_Add_RetCode As int
EXEC @SP_Add_RetCode = master.dbo.sp_add_log_shipping_primary_database
@database = N'$(DATABASE)'
,@backup_directory = N'$(PBKDIR)'
,@backup_share = N'$(PBKSHARE)'
,@backup_job_name = N'LSBackup_$(DATABASE)'
,@backup_retention_period = 1440
,@backup_threshold = 180
,@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
EXEC msdb.dbo.sp_add_schedule
@schedule_name =N'LSBackupSchedule_$(PRIMARY)'
,@enabled = 1
,@freq_type = 4
,@freq_interval = 1
,@freq_subday_type = 4
,@freq_subday_interval = 60
,@freq_recurrence_factor = 0
,@active_start_date = 20100101
,@active_end_date = 99991231
,@active_start_time = 0
,@active_end_time = 235900
,@schedule_uid = @LS_BackUpScheduleUID OUTPUT
,@schedule_id = @LS_BackUpScheduleID OUTPUT
EXEC msdb.dbo.sp_attach_schedule
@job_id = @LS_BackupJobId
,@schedule_id = @LS_BackUpScheduleID
EXEC msdb.dbo.sp_update_job
@job_id = @LS_BackupJobId
,@enabled = 1
END
EXEC master.dbo.sp_add_log_shipping_alert_job
EXEC master.dbo.sp_add_log_shipping_primary_secondary
@primary_database = N'$(DATABASE)'
,@secondary_server = N'$(SECONDARY)'
,@secondary_database = N'$(DATABASE)'
,@overwrite = 1
backup database [$(DATABASE)] to disk = '$(PBKDIR)$(DATABASE)_dr_init.bak' with init
go
print '$(PBKSHARE)$(DATABASE)_dr_init.bak'
print '$(SBKSHARE)'
print 'copy $(PBKSHARE)$(DATABASE)_dr_init.bak $(SBKSHARE) /y'
!!copy $(PBKSHARE)$(DATABASE)_dr_init.bak $(SBKSHARE) /y
go
!!del $(PBKSHARE)$(DATABASE)_dr_init.bak /Q
go
-- ****** End: Script to be run at Primary: [primary\instance1] ******
-- Execute the following statements at the Secondary to configure Log Shipping
-- for the database [secondary\instance2].[mydb],
-- the script needs to be run at the Secondary in the context of the [msdb] database.
-------------------------------------------------------------------------------------
-- Adding the Log Shipping configuration
-- ****** Begin: Script to be run at Secondary: [secondary\instance2] ******
:connect $(SECONDARY)
!!sqlcmd /E /S$(SECONDARY) -i DRRestoreDatabase.sql -v BKDIR="$(SBKSHARE)" -v DATADIR="$(SDATADIR)" -v LOGDIR="$(SLOGDIR)"
!!del $(SBKSHARE)$(DATABASE)_dr_init.bak /Q
go
DECLARE @LS_Secondary__CopyJobId AS uniqueidentifier
DECLARE @LS_Secondary__RestoreJobId AS uniqueidentifier
DECLARE @LS_Secondary__SecondaryId AS uniqueidentifier
DECLARE @LS_Add_RetCode As int
EXEC @LS_Add_RetCode = master.dbo.sp_add_log_shipping_secondary_primary
@primary_server = N'$(PRIMARY)'
,@primary_database = N'$(DATABASE)'
,@backup_source_directory = N'$(PBKSHARE)'
,@backup_destination_directory = N'$(SBKSHARE)'
,@copy_job_name = N'LSCopy_$(PRIMARY)_$(DATABASE)'
,@restore_job_name = N'LSRestore_$(PRIMARY)_$(DATABASE)'
,@file_retention_period = 1440
,@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
EXEC msdb.dbo.sp_add_schedule
@schedule_name =N'DefaultCopyJobSchedule'
,@enabled = 1
,@freq_type = 4
,@freq_interval = 1
,@freq_subday_type = 4
,@freq_subday_interval = 60
,@freq_recurrence_factor = 0
,@active_start_date = 20090505
,@active_end_date = 99991231
,@active_start_time = 0
,@active_end_time = 235900
,@schedule_uid = @LS_SecondaryCopyJobScheduleUID OUTPUT
,@schedule_id = @LS_SecondaryCopyJobScheduleID OUTPUT
EXEC msdb.dbo.sp_attach_schedule
@job_id = @LS_Secondary__CopyJobId
,@schedule_id = @LS_SecondaryCopyJobScheduleID
DECLARE @LS_SecondaryRestoreJobScheduleUID As uniqueidentifier
DECLARE @LS_SecondaryRestoreJobScheduleID AS int
EXEC msdb.dbo.sp_add_schedule
@schedule_name =N'DefaultRestoreJobSchedule'
,@enabled = 1
,@freq_type = 4
,@freq_interval = 1
,@freq_subday_type = 4
,@freq_subday_interval = 60
,@freq_recurrence_factor = 0
,@active_start_date = 20090505
,@active_end_date = 99991231
,@active_start_time = 0
,@active_end_time = 235900
,@schedule_uid = @LS_SecondaryRestoreJobScheduleUID OUTPUT
,@schedule_id = @LS_SecondaryRestoreJobScheduleID OUTPUT
EXEC 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
EXEC @LS_Add_RetCode2 = master.dbo.sp_add_log_shipping_secondary_database
@secondary_database = N'$(DATABASE)'
,@primary_server = N'$(PRIMARY)'
,@primary_database = N'$(DATABASE)'
,@restore_delay = 0
,@restore_mode = 1
,@disconnect_users = 1
,@restore_threshold = 180
,@threshold_alert_enabled = 1
,@history_retention_period = 2880
,@overwrite = 1
END
IF (@@error = 0 AND @LS_Add_RetCode = 0)
BEGIN
EXEC msdb.dbo.sp_update_job
@job_id = @LS_Secondary__CopyJobId
,@enabled = 1
EXEC msdb.dbo.sp_update_job
@job_id = @LS_Secondary__RestoreJobId
,@enabled = 1
END
go
-- ****** End: Script to be run at Secondary: [secondary\instance2] ******