我在备份的时候,备份的文件不能覆盖,备份的文件名是备份时的时间。
我怎么活的设置时的备份时间?因为我要每个月第一天完全备份,其它时间差异备份,并且维护是删除三个月前的备份纪录。
这是我完全备份代码:
use msdb
BEGIN TRANSACTION
DECLARE @JobID BINARY(16)
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
declare @path varchar(1000),@dbname varchar(250)
set @path=d:\backup\ --用户设置的备份路径
set @dbname=test --要备份的数据库名
--备份处理
declare @sql varchar(8000)
IF (SELECT COUNT(*) FROM syscategories WHERE name = N[Uncategorized (Local)]) < 1
EXECUTE sp_add_category @name = N[Uncategorized (Local)]
--— 删除同名的警报。
SELECT @JobID = job_id
FROM sysjobs
WHERE (name = NTest 备份)
IF (@JobID IS NOT NULL)
BEGIN
-- 检查此作业是否为多重服务器作业
IF (EXISTS (SELECT *
FROM sysjobservers
WHERE (job_id = @JobID) AND (server_id <> 0)))
BEGIN
-- 已经存在,因而终止脚本
RAISERROR (N无法导入作业“Test 备份”,因为已经有相同名称的多重服务器作业。, 16, 1)
GOTO QuitWithRollback
END
ELSE
-- 删除[本地]作业
EXECUTE msp_delete_job @job_name = NTest 备份
SELECT @JobID = NULL
END
BEGIN
-- — 添加作业
EXECUTE @ReturnCode = sp_add_job @job_id = @JobID OUTPUT , @job_name = NTest 备份
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
--— 添加作业步骤
EXECUTE @ReturnCode = sp_add_jobstep @job_id = @JobID, @step_id = 1,
@step_name = N第 1 步,
@command = Nbackup database [+dbname+] to disk=N+@path+@dbname+convert(varchar,getdate(),102)+.bak
@subsystem = NTSQL, @retry_interval = 0
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXECUTE @ReturnCode = sp_update_job @job_id = @JobID, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
--— 添加作业调度
EXECUTE @ReturnCode = sp_add_jobschedule @job_id = @JobID, @name = N第 1 调度,
@freq_type = 4, @active_start_date = 20030917, @active_start_time = 102800,
@freq_interval = 1, @freq_subday_interval = 0, @freq_relative_interval = 0
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
--— 添加目标服务器
EXECUTE @ReturnCode = sp_add_jobserver @job_id = @JobID
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
END
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
可总提示备份那一行@command错误,是代码的问题吗?帮我,谢谢!
做如下修改:
use msdb
BEGIN TRANSACTION
DECLARE @JobID BINARY(16)
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
declare @path varchar(1000),@dbname varchar(250)
set @path=d:\backup\ --用户设置的备份路径
set @dbname=test --要备份的数据库名
--备份处理
declare @sql varchar(8000)
IF (SELECT COUNT(*) FROM syscategories WHERE name = N[Uncategorized (Local)]) < 1
EXECUTE sp_add_category @name = N[Uncategorized (Local)]
--— 删除同名的警报。
SELECT @JobID = job_id
FROM sysjobs
WHERE (name = NTest 备份)
IF (@JobID IS NOT NULL)
BEGIN
-- 检查此作业是否为多重服务器作业
IF (EXISTS (SELECT *
FROM sysjobservers
WHERE (job_id = @JobID) AND (server_id <> 0)))
BEGIN
-- 已经存在,因而终止脚本
RAISERROR (N无法导入作业“Test 备份”,因为已经有相同名称的多重服务器作业。, 16, 1)
GOTO QuitWithRollback
END
ELSE
-- 删除[本地]作业
EXECUTE msp_delete_job @job_name = NTest 备份
SELECT @JobID = NULL
END
BEGIN
-- — 添加作业
EXECUTE @ReturnCode = sp_add_job @job_id = @JobID OUTPUT , @job_name = NTest 备份
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
--— 添加作业步骤
declare @m_command nvarchar(4000)
set @m_command=backup database [+dbname+] to disk=N+@path+@dbname+convert(varchar,getdate(),102)+.bak
EXECUTE @ReturnCode = sp_add_jobstep @job_id = @JobID, @step_id = 1,
@step_name = N第 1 步,
@command = @m_command,
@subsystem = NTSQL, @retry_interval = 0
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXECUTE @ReturnCode = sp_update_job @job_id = @JobID, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
--— 添加作业调度
EXECUTE @ReturnCode = sp_add_jobschedule @job_id = @JobID, @name = N第 1 调度,
@freq_type = 4, @active_start_date = 20030917, @active_start_time = 102800,
@freq_interval = 1, @freq_subday_interval = 0, @freq_relative_interval = 0
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
--— 添加目标服务器
EXECUTE @ReturnCode = sp_add_jobserver @job_id = @JobID
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
END
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
都要用nvarchar
declare @path nvarchar(1000), @dbname nvarchar(250)
set @path = Nd:\backup\ --用户设置的备份路径
set @dbname = Ntest --要备份的数据库名
出错的原因是因为执行:sp_add_jobstep
对参数赋值时,不能用运算符,所以加多一个变量,将处理结果代入存储过程
--— 添加作业步骤
declare @m_command nvarchar(4000) --加多一个处理变量
set @m_command=backup database [+dbname+] to disk=N+@path+@dbname+convert(varchar,getdate(),102)+.bak
EXECUTE @ReturnCode = sp_add_jobstep @job_id = @JobID, @step_id = 1,
@step_name = N第 1 步,
@command = @m_command, --直接代入变量值
@subsystem = NTSQL, @retry_interval = 0
还有一点小错误,用下面的这个就能建立了
use msdb
BEGIN TRANSACTION
DECLARE @JobID BINARY(16)
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
declare @path varchar(1000),@dbname varchar(250)
set @path=d:\backup\ --用户设置的备份路径
set @dbname=test --要备份的数据库名
--备份处理
declare @sql varchar(8000)
IF (SELECT COUNT(*) FROM syscategories WHERE name = N[Uncategorized (Local)]) < 1
EXECUTE sp_add_category @name = N[Uncategorized (Local)]
--— 删除同名的警报。
SELECT @JobID = job_id
FROM sysjobs
WHERE (name = NTest 备份)
IF (@JobID IS NOT NULL)
BEGIN
-- 检查此作业是否为多重服务器作业
IF (EXISTS (SELECT *
FROM sysjobservers
WHERE (job_id = @JobID) AND (server_id <> 0)))
BEGIN
-- 已经存在,因而终止脚本
RAISERROR (N无法导入作业“Test 备份”,因为已经有相同名称的多重服务器作业。, 16, 1)
GOTO QuitWithRollback
END
ELSE
-- 删除[本地]作业
EXECUTE msp_delete_job @job_name = NTest 备份
SELECT @JobID = NULL
END
BEGIN
-- — 添加作业
EXECUTE @ReturnCode = sp_add_job @job_id = @JobID OUTPUT , @job_name = NTest 备份
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
--— 添加作业步骤
declare @m_command nvarchar(4000)
set @m_command=backup database [+@dbname+] to disk=N+@path+@dbname+convert(varchar,getdate(),102)+.bak
EXECUTE @ReturnCode = sp_add_jobstep @job_id = @JobID, @step_id = 1,
@step_name = N第 1 步,
@command = @m_command,
@subsystem = NTSQL, @retry_interval = 0
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXECUTE @ReturnCode = sp_update_job @job_id = @JobID, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
--— 添加作业调度
EXECUTE @ReturnCode = sp_add_jobschedule @job_id = @JobID, @name = N第 1 调度,
@freq_type = 4, @active_start_date = 20030917, @active_start_time = 102800,
@freq_interval = 1, @freq_subday_interval = 0, @freq_relative_interval = 0
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
--— 添加目标服务器
EXECUTE @ReturnCode = sp_add_jobserver @job_id = @JobID
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
END
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
BACKUP
备份整个数据库、事务日志,或者备份一个或多个文件或文件组。有关数据库备份和恢复操作的更多信息,请参见备份和还原数据库。
语法
备份整个数据库:
BACKUP DATABASE { database_name | @database_name_var }
TO < backup_device > [ ,...n ]
[ WITH
[ BLOCKSIZE = { blocksize | @blocksize_variable } ]
[ [ , ] DESCRIPTION = { text | @text_variable } ]
[ [ , ] DIFFERENTIAL ]
[ [ , ] EXPIREDATE = { date | @date_var }
| RETAINDAYS = { days | @days_var } ]
[ [ , ] PASSWORD = { password | @password_variable } ]
[ [ , ] FORMAT | NOFORMAT ]
[ [ , ] { INIT | NOINIT } ]
[ [ , ] MEDIADESCRIPTION = { text | @text_variable } ]
[ [ , ] MEDIANAME = { media_name | @media_name_variable } ]
[ [ , ] MEDIAPASSWORD = { mediapassword | @mediapassword_variable } ]
[ [ , ] NAME = { backup_set_name | @backup_set_name_var } ]
[ [ , ] { NOSKIP | SKIP } ]
[ [ , ] { NOREWIND | REWIND } ]
[ [ , ] { NOUNLOAD | UNLOAD } ]
[ [ , ] RESTART ]
[ [ , ] STATS [ = percentage ] ]
]
备份特定的文件或文件组:
BACKUP DATABASE { database_name | @database_name_var }
< file_or_filegroup > [ ,...n ]
TO < backup_device > [ ,...n ]
[ WITH
[ BLOCKSIZE = { blocksize | @blocksize_variable } ]
[ [ , ] DESCRIPTION = { text | @text_variable } ]
[ [ , ] DIFFERENTIAL ]
[ [ , ] EXPIREDATE = { date | @date_var }
| RETAINDAYS = { days | @days_var } ]
[ [ , ] PASSWORD = { password | @password_variable } ]
[ [ , ] FORMAT | NOFORMAT ]
[ [ , ] { INIT | NOINIT } ]
[ [ , ] MEDIADESCRIPTION = { text | @text_variable } ]
[ [ , ] MEDIANAME = { media_name | @media_name_variable } ]
[ [ , ] MEDIAPASSWORD = { mediapassword | @mediapassword_variable } ]
[ [ , ] NAME = { backup_set_name | @backup_set_name_var } ]
[ [ , ] { NOSKIP | SKIP } ]
[ [ , ] { NOREWIND | REWIND } ]
[ [ , ] { NOUNLOAD | UNLOAD } ]
[ [ , ] RESTART ]
[ [ , ] STATS [ = percentage ] ]
]
备份一个事务日志:
BACKUP LOG { database_name | @database_name_var }
{
TO < backup_device > [ ,...n ]
[ WITH
[ BLOCKSIZE = { blocksize | @blocksize_variable } ]
[ [ , ] DESCRIPTION = { text | @text_variable } ]
[ [ ,] EXPIREDATE = { date | @date_var }
| RETAINDAYS = { days | @days_var } ]
[ [ , ] PASSWORD = { password | @password_variable } ]
[ [ , ] FORMAT | NOFORMAT ]
[ [ , ] { INIT | NOINIT } ]
[ [ , ] MEDIADESCRIPTION = { text | @text_variable } ]
[ [ , ] MEDIANAME = { media_name | @media_name_variable } ]
[ [ , ] MEDIAPASSWORD = { mediapassword | @mediapassword_variable } ]
[ [ , ] NAME = { backup_set_name | @backup_set_name_var } ]
[ [ , ] NO_TRUNCATE ]
[ [ , ] { NORECOVERY | STANDBY = undo_file_name } ]
[ [ , ] { NOREWIND | REWIND } ]
[ [ , ] { NOSKIP | SKIP } ]
[ [ , ] { NOUNLOAD | UNLOAD } ]
[ [ , ] RESTART ]
[ [ , ] STATS [ = percentage ] ]
]
}
< backup_device > ::=
{
{ logical_backup_device_name | @logical_backup_device_name_var }
|
{ DISK | TAPE } =
{ physical_backup_device_name | @physical_backup_device_name_var }
}
< file_or_filegroup > ::=
{
FILE = { logical_file_name | @logical_file_name_var }
|
FILEGROUP = { logical_filegroup_name | @logical_filegroup_name_var }
}
截断事务日志:
BACKUP LOG { database_name | @database_name_var }
{
[ WITH
{ NO_LOG | TRUNCATE_ONLY } ]
}