2017-05-24 42 views
-1

我是新来的sql,我试图做一个查询我的备份,但我得到一些错误,我有20个或更多的数据库,但我的查询doesn “对所有的DB,它的每一个DB相同的查询将不起作用,它显示一条消息:查询备份

查询:

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行 “DB名称”附近的语法不正确。

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

+0

你可以发布数据库名称列表,哪些可以工作,哪些不可以? – gms0ulman

+0

@carlos ortiz请检查我的帖子 –

回答

1

你最好开始的地方是与Ola Hallengren放在一起的脚本,它们非常全面,涵盖了你所需要的一切。

+0

谢谢!生病检查他们马上......谢谢! –

+2

我不会建议进入Ola的脚本,尤其是如果你还没有掌握基础知识的话。另外,我认为太多人依赖于其他人的工作,比如Ola的剧本。我会研究基础知识,然后编写自己的脚本,以完成你需要他们做的事情。 – user7593937

0

试试这个:

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 
2

尝试使用第二[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'; 

(这个工作对我来说)

+0

感谢您的信息!生病让你张贴它是如何去的! –

+0

它工作了!!!!!真棒!!!!谢谢你的帮助! –

0

这是一个简单的脚本,可以备份服务器上的所有数据库。我会仔细研究这一点,并确切地知道它在做什么。这是一个很好的起点,但我会努力创建自己的脚本,最适合你的脚本。游标允许您遍历所有数据库,而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 
0

这是一个简单的数据库备份脚本,我一直在使用。

DECLARE @dbName  VARCHAR(100) 
DECLARE @path   VARCHAR(200) 
DECLARE @fileName  VARCHAR(200) 

SET @path = 'C:\Database Backups\' 

DECLARE db_cursor CURSOR FOR 
SELECT name 
FROM master.dbo.sysdatabases 
WHERE name IN ('DB1','DB2','DB3','DB4') 

OPEN db_cursor 
FETCH NEXT FROM db_cursor INTO @dbName 

WHILE @@FETCH_STATUS = 0 
BEGIN 
     SET @fileName = @path + @dbName + '.bak' 
     BACKUP DATABASE @dbName TO DISK = @fileName WITH INIT, SKIP 
     FETCH NEXT FROM db_cursor INTO @dbName 
END 
CLOSE db_cursor 
DEALLOCATE db_cursor