【问题标题】:How should I do to properly use the sp_msforeachDB to create and delete backups我应该如何正确使用 sp_msforeachDB 创建和删除备份
【发布时间】:2019-05-23 16:09:58
【问题描述】:

我正在设置一种在内部环境中创建和删除备份的新方法。服务器上的空间是一个大问题,所以我真的必须找到一种方法来进行备份并从程序上删除每个数据库的旧版本。

我想到了使用 sp_MSforeachdb 并简单地进行备份。成功后,它将删除前一天完成的旧备份。 (我们每晚进行 1 次备份)。

DECLARE @DBOPurpose Varchar(15)
DECLARE @Drive      Varchar(1)
Set @DBOPurpose = 'Omnilabs'

DECLARE @command varchar(Max) 

Select @command = '

If Exists (Select * 
            from sys.databases 
            where name like ''%?'' 
            and name like ''%'+@DBOPurpose+'%'')

BEGIN
EXECUTE master.dbo.xp_create_Subdir '+@Drive+':\SQLBACKUP\'+@DBOPurpose+'
GO

BACKUP DATABASE [?] TO DISK = '+@Drive+':\SQLBackup\'+@DBOPurpose+'_Select Cast(Cast(Year(Getdate())As Varchar(150))+''_''+Cast(month(Getdate())As Varchar(150))+''_''+Cast (Day(Getdate()) As Varchar(150))+''_''+ cast(DATEPART(hour, GETDATE()) as varchar) + '''' + cast(DATEPART(minute, GETDATE()) as varchar)+ '''' + cast(DATEPART(Second, GETDATE()) as varchar)+ ''.bak'' As varchar(150))


END

Print N''TEST''
'
--Select @Command
EXEC sp_MSforeachdb @command 

我原以为 Select @Command 实际上会向我展示一些东西,但它为空。当我运行它时,它只是写“命令已成功完成”。一秒钟之内,这没有任何意义。

【问题讨论】:

    标签: sql-server-2008 database-backups sp-msforeachdb


    【解决方案1】:

    刚刚看到我的错误,这只是由未正确放置的连字符引起的。代码如下:

    If exists(Select * from #TempDBName where DBNAME = @DBOPurpose)
    BEGIN
        DECLARE @ERROR bit
        DECLARE @command nvarchar(Max)
        SET @Error = 0
        SET @command = '
    
    
    
        DECLARE @DBO VARCHAR(15)
        Set @DBO = ''%'+@DBOPURPOSE+'%''
    
        If Exists (Select * 
                        from sys.databases 
                        where name like ''%?'' 
                        and name like ''%''+@DBO+''%'')
                BEGIN TRY
    
                        PRINT ''?''
    
                        EXECUTE master.dbo.xp_create_Subdir '''+@Drive+':\SQLBACKUP\TEST\?''
                        BACKUP DATABASE [?] TO DISK = '''+@Drive+':\SQLBackup\'+@DBOPurpose+'_' +(Cast(Cast(Year(Getdate())As Varchar(150))+'_'+Cast(month(Getdate())As Varchar(150))+'_'+Cast (Day(Getdate()) As Varchar(150))+'_'+ cast(DATEPART(hour, GETDATE()) as varchar) + cast(DATEPART(minute, GETDATE()) as varchar)+ cast(DATEPART(Second, GETDATE()) as varchar)+ '.bak''' As varchar(150)))+'
    
                END TRY
    
                BEGIN CATCH
                Insert into BackupExecLog(ErrorDate, ErrorNumber, ErrorMessage)
                    Select Getdate(),
                        ERROR_NUMBER() as ErrorNumber,
                        ERROR_MESSAGE() as ErrorMessage
    
                        Set @Error = 1
                END CATCH'
    
    
            Select @Command
        --EXEC sys.sp_MSforeachdb @command 
    

    【讨论】:

      猜你喜欢
      • 2016-02-26
      • 1970-01-01
      • 2012-06-09
      • 2018-01-08
      • 2015-12-18
      • 1970-01-01
      • 2018-12-15
      • 1970-01-01
      • 2012-07-21
      相关资源
      最近更新 更多