PDA

View Full Version : سوال: لطفا این کد رو اصلاح کنید



ma.andishe
سه شنبه 18 خرداد 1389, 08:15 صبح
سلام
من با اسکریپتی دارم بک اپ میگیرم که میتونه به صورت فول بک اپ بگیره ولی وقتی ان رو به صورت with differential در میارم sql server خطا میده (

Msg 3024, Level 16, State 0, Line 51
You can only perform a full backup of the master database. Use BACKUP DATABASE to back up the entire master database.
Msg 3013, Level 16, State 1, Line 51
BACKUP DATABASE is terminating abnormally.)
لطفا من رو توی اصلاح این کد کمک کنید

DECLARE @CFG_BACKUP_PATH NVARCHAR(256)
DECLARE @CFG_DAYS_DELETE INT
SET @CFG_BACKUP_PATH = 'E:\BackUp_diffrentioal\step_2'
SET @CFG_DAYS_DELETE = 30
DECLARE @Today DATETIME
DECLARE @TodayName CHAR(14)
DECLARE @TodayDir CHAR(8)
SET @Today = GETDATE()
SET @TodayName = CONVERT( CHAR(8), @Today, 112)+ '-'+replace(CONVERT( CHAR(8), @Today, 108),':','')
SET @TodayDir = CONVERT( CHAR(8), @Today, 112)
DECLARE @id INT
DECLARE @name VARCHAR(50)
DECLARE @path VARCHAR(256)
DECLARE @cmd VARCHAR(256)
DECLARE @TempDir VARCHAR(256)
SET @TempDir = @CFG_BACKUP_PATH + '\'+ CONVERT(VARCHAR(256), NEWID())
SET @cmd = 'md ' + @TempDir
EXEC xp_cmdshell @cmd, no_output
SET @cmd = 'md ' + @TodayDir
EXEC xp_cmdshell @cmd, no_output
DECLARE @dbList TABLE
(
dbno INT IDENTITY,
dbname NVARCHAR(256)
)
INSERT INTO @dbList ( dbname )
SELECT name
FROM master.dbo.sysdatabases
WHERE ( name NOT IN ( 'tempdb' ) )
AND DATABASEPROPERTYEX(name, 'Status') = 'ONLINE'

------ Starting backup, one by one
SELECT @id = dbno,
@name = dbname
FROM @dbList
WHERE dbno = 1
WHILE @@ROWCOUNT = 1
BEGIN
PRINT N'++ Backup: ' + @name
SET @path = @TempDir + '\' + @name + '.bak'
BACKUP DATABASE @name TO DISK = @path WITH DIFFERENTIAL


SELECT @id = dbno,
@name = dbname
FROM @dbList
WHERE dbno = @id + 1
END

SET @cmd = 'rd /s /q ' + @TempDir
EXEC xp_cmdshell @cmd, no_output

حمیدرضاصادقیان
سه شنبه 18 خرداد 1389, 08:59 صبح
سلام.دوست عزیز این Script شما از تمام دیتابیسهای سیستمی هم backup میگیره.شما نمیتونید از دیتابیسهای سیستمی Differential backup تهیه کنید.به همین خاطره بهتون خطا میده ولی در Full backup مشکلی نداره.برای differential backup شما در این قسمت کد


WHERE ( name NOT IN ( 'tempdb' ) )
AND DATABASEPROPERTYEX(name, 'Status') = 'ONLINE'

به این قسمت تغییر بدید


WHERE ( name NOT IN ( 'tempdb','Master','Model','Msdb' ) )
AND DATABASEPROPERTYEX(name, 'Status') = 'ONLINE'

ma.andishe
سه شنبه 18 خرداد 1389, 09:36 صبح
اقای صا دقیان خیلی ممنون از این که وقت گذاشتید نهایت تشکر
امتحان کردم جواب داد
اما اگه لطف کنید بگید چرا از دیتا بیسهای سیستمی differential نمیگیره ممنون میشم؟
1 توضیح مختصر

حمیدرضاصادقیان
سه شنبه 18 خرداد 1389, 13:16 عصر
به این لینک (http://www.sqlservercentral.com/Forums/Topic846325-146-1.aspx) مراجعه کنید.