У меня есть ежемесячная работа на моем SQL-сервере.
Он создает резервные копии всех онлайн-баз данных в папку «\Backupserver\e$\MonthEndBackups\».
Джоб запускает USP, как показано ниже: exec [usp_dba_BackupDatabases] 3 (http://screencast.com/t/l7IS5TZK а>)
Он проходит в последний день месяца.
Наши базы данных были разбросаны по нескольким серверам, и эта работа выполнялась на этих серверах, и раньше это работало.
Мы объединили всю базу данных на одном сервере (один и тот же экземпляр SQL), и это задание, похоже, не создает резервные копии всех баз данных. Я не уверен, почему? Моя работа имеет уведомление (электронное письмо) о сбое, а также записывает в файл журнала.
http://screencast.com/t/8ioTZdqEMg9x http://screencast.com/t/VI3d4GLBTGoX
Но ничего не выходит из строя, поэтому в журналах ничего нет, и уведомления по электронной почте не появляются.
Я знаю, что это не сработало, так как я не вижу полных резервных копий в папке.
вот настройка расписания:
http://screencast.com/t/waeGwLSa
Что может пойти не так? Я не вижу какой-либо закономерности в базах данных, для которых не выполняется резервное копирование. Существуют большие базы данных, для которых выполняется резервное копирование.
Кто-нибудь может подумать, почему это может происходить? есть ли способ снять это?
USE [DBA]
GO
/****** Object: StoredProcedure [dbo].[usp_dba_BackupDatabases] Script Date: 10/01/2013 11:10:26 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[usp_dba_BackupDatabases]
@pBackupType SMALLINT
,@pDatabaseName sysname = NULL
AS
SET NOCOUNT ON
DECLARE @vDatabase sysname, @sql VARCHAR(MAX), @vBackupFileFullPath VARCHAR(MAX)
DECLARE c CURSOR FOR
SELECT name FROM sys.sysdatabases
WHERE name NOT IN('tempdb', 'model')
AND DATABASEPROPERTYEX (name,'STATUS') IN( 'ONLINE')
AND (name = @pDatabaseName OR @pDatabaseName IS NULL)
OPEN c
FETCH NEXT FROM c INTO @vDatabase
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT CONVERT(VARCHAR,GETDATE(),121)
PRINT '|-->' + CONVERT(VARCHAR,GETDATE(),121) +' Backup Start for database ' + @vDatabase
IF @pBackupType = 1
BEGIN
SET @vBackupFileFullPath = '\\Backupserver\d$\' + @@SERVERNAME +'\' + @vDatabase +'_DB_'
+REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR(16),GETDATE(),112),'-',''),' ',''),':','') +'.bak'
SET @sql = 'BACKUP DATABASE ' + @vDatabase + ' TO DISK = N' + CHAR(39) + @vBackupFileFullPath + char(39)
+ ' WITH FORMAT, INIT, NAME = N' + CHAR(39) + @vDatabase + ' -Full Database Backup' + CHAR(39) + ', SKIP, NOREWIND, NOUNLOAD, STATS = 5, CHECKSUM'
END
IF @pBackupType = 2
BEGIN
SET @vBackupFileFullPath = '\\Backupserver\d$\' + @@SERVERNAME + '\Differential\' + @vDatabase +'_Diff_'
+REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR(16),GETDATE(),121),'-',''),' ',''),':','') +'.bak'
SET @sql = 'BACKUP DATABASE ' + @vDatabase + ' TO DISK = N' + CHAR(39) + @vBackupFileFullPath + char(39)
+ ' WITH DIFFERENTIAL , FORMAT, INIT, NAME = N' + CHAR(39) + @vDatabase
+ ' -Differential Database Backup' + CHAR(39) + ', SKIP, NOREWIND, NOUNLOAD, STATS = 5, CHECKSUM'
END
IF @pBackupType = 3
BEGIN
SET @vBackupFileFullPath = '\\Backupserver\e$\MonthEndBackups\' + @@SERVERNAME +'_'+ @vDatabase +'_db.bak'
SET @sql = 'BACKUP DATABASE ' + @vDatabase + ' TO DISK = N' + CHAR(39) + @vBackupFileFullPath + char(39)
+ ' WITH COPY_ONLY, FORMAT, INIT, NAME = N' + CHAR(39) + @vDatabase + ' -Full Month End Database Backup' + CHAR(39) + ', SKIP, NOREWIND, NOUNLOAD, STATS = 5, CHECKSUM'
END
PRINT ' |'+ @sql
EXEC (@sql )
--VERIFY BACKUP
IF @pBackupType = 1
SET @sql = 'RESTORE VERIFYONLY FROM DISK = N' + CHAR(39) + @vBackupFileFullPath + char(39)
+ ' WITH FILE = 1, NOUNLOAD, NOREWIND'
IF @pBackupType = 2
SET @sql = 'RESTORE VERIFYONLY FROM DISK = N' + CHAR(39) + @vBackupFileFullPath + char(39)
+ ' WITH FILE = 1, NOUNLOAD, NOREWIND'
IF @pBackupType = 3
SET @sql = 'RESTORE VERIFYONLY FROM DISK = N' + CHAR(39) + @vBackupFileFullPath + char(39)
+ ' WITH FILE = 1, NOUNLOAD, NOREWIND'
--PRINT ' |'+ @sql
--EXEC (@sql )
PRINT '|-->' + CONVERT(VARCHAR,GETDATE(),121) +' Backup Complete for database ' + @vDatabase
PRINT ''
FETCH NEXT FROM c INTO @vDatabase
END
CLOSE c
DEALLOCATE c
GO