Задание полного резервного копирования сервера SQL пропускает базы данных

У меня есть ежемесячная работа на моем SQL-сервере.

Наши базы данных были разбросаны по нескольким серверам, и эта работа выполнялась на этих серверах, и раньше это работало.

Мы объединили всю базу данных на одном сервере (один и тот же экземпляр 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

person Rainmaker    schedule 10.10.2013    source источник


Ответы (1)


Попробуйте использовать следующие параметры (исправьте параметры, которые, вероятно, нарушают текущий цикл, и также сломайте sp_MSforeachdb, как я задокументировал здесь и здесь и исправлено здесь):

DECLARE c CURSOR LOCAL FAST_FORWARD FOR
-----------------^^^^^^^^^^^^^^^^^^

...

WHILE @@FETCH_STATUS <> -1
---------------------^^^^^

Кроме того, пожалуйста, пожалуйста, прекратите объявление VARCHAR без длины.

person Aaron Bertrand    schedule 10.10.2013