【问题标题】:Query for backups查询备份
【发布时间】:2017-05-24 13:53:59
【问题描述】:

我是 sql 新手,我正在尝试查询我的备份,但某些行出现错误,我有 20 个或更多数据库,但我的查询不起作用在所有数据库上,每个数据库的查询相同,它显示一条消息:

查询:

USE [DB Name];
GO
BACKUP DATABASE DB Name
TO DISK = 'E:\xxxx\xx\DB Name.Bak'
   ;WITH FORMAT
      MEDIANAME = 'DB Name_SQLServerBackups',
      NAME = 'Full Backup DB Name'

正在给出错误信息:

消息 102,级别 15,状态 1,第 69 行 “数据库名称”附近的语法不正确。

我做错了什么?非常感谢您的帮助。

【问题讨论】:

  • 您能否发布数据库名称列表,哪些可以使用,哪些不可以?
  • @carlos ortiz 请查看我的帖子

标签: sql sql-server query-string sql-server-2014


【解决方案1】:

也尝试在第二个 [DB Name] 周围使用方括号并对您的命令进行一些语法修复:

USE [DB Name];
GO

BACKUP DATABASE [DB Name]
TO DISK = 'E:\xxxx\xx\DB Name.Bak'
    WITH FORMAT
    , MEDIANAME = 'DB Name_SQLServerBackups'
    , NAME = 'Full Backup DB Name';

(这对我有用)

【讨论】:

  • 感谢您的信息!生病让你知道它是怎么回事!
【解决方案2】:

最好的起点是Ola Hallengren 编写的脚本,这些脚本非常全面,涵盖了您需要的所有内容。

【讨论】:

  • 我不建议接触 Ola 的脚本,尤其是在您还没有掌握基本知识的情况下。另外,我认为太多人依赖于其他人的工作,比如 Ola 的脚本。我会处理基础知识,然后编写你自己的脚本,完全按照你的需要去做。
【解决方案3】:

试试这个:

USE master
BACKUP DATABASE [AdventureWorks2012] 
TO  DISK = N'D:\Backup\AdventureWorks2012.bak' 
 WITH  COPY_ONLY, NOFORMAT,
 NOINIT,  
 NAME = N'AdventureWorks2012-Full Database Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10
GO

--SPlit backup Process

USE master
BACKUP DATABASE [AdventureWorks2012] 
TO  DISK = N'D:\Backup\AdventureWorks2012_1.bak' 
,DISK = N'D:\Backup\AdventureWorks2012_2.bak' 
,DISK = N'D:\Backup\AdventureWorks2012_3.bak' 
,DISK = N'D:\Backup\AdventureWorks2012_4.bak' 
 WITH  COPY_ONLY, NOFORMAT,
 NOINIT,  
 NAME = N'AdventureWorks2012-Full Database Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10
GO

【讨论】:

    【解决方案4】:

    这是一个简单的脚本,它将备份您服务器上的所有数据库。我会仔细查看它并确切了解它在做什么。这是一个很好的起点,但我会尝试创建自己的脚本,什么最适合你。游标允许您遍历所有数据库,而 STATIC 确保您在查询 sys.databases 时捕获所有数据库。

    /* Full database backup for all user databases. */
    
    DECLARE @dbname    varchar (300)
    DECLARE @filepath  varchar (1000)
    DECLARE @filedate  varchar (20)
    DECLARE @filename  varchar (256)
    DECLARE @subdir    varchar (1000)
    
    SET @filepath = 'C:\TestBackup\' --This is your backup directory
    SET @filedate = REPLACE(GETDATE(), ':', '_') --CONVERT(VARCHAR(10),GETDATE(),112) --gets the date and timestamp, replaces : with an underscore
    
    DECLARE backup_cursor CURSOR STATIC FORWARD_ONLY FOR 
    SELECT [name]
    FROM master.sys.databases sd
    -- WHERE ... exclude databases
    
    OPEN backup_cursor   
    FETCH NEXT FROM backup_cursor INTO @dbname   
    WHILE @@FETCH_STATUS = 0  
    BEGIN
    
    SET @subdir = 'C:\Backup\' + @dbname
    EXEC master.dbo.xp_create_subdir @subdir  
    
           SET @fileName = @filepath + @dbname + '\' + @dbname + '_' + @fileDate + '.bak'  
           BACKUP DATABASE @dbname TO DISK = @fileName
           WITH CHECKSUM, STOP_ON_ERROR
           RESTORE VERIFYONLY FROM DISK = @fileName
           WITH STOP_ON_ERROR
    
           FETCH NEXT FROM backup_cursor INTO @dbname 
    
    END   
    CLOSE backup_cursor   
    DEALLOCATE backup_cursor 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-15
      • 1970-01-01
      • 1970-01-01
      • 2017-09-18
      • 2015-03-09
      • 1970-01-01
      • 1970-01-01
      • 2021-12-13
      相关资源
      最近更新 更多