求助备份语句!

meng___xuan 2003-09-17 11:33:22
我在备份的时候,备份的文件不能覆盖,备份的文件名是备份时的时间。
我怎么活的设置时的备份时间?因为我要每个月第一天完全备份,其它时间差异备份,并且维护是删除三个月前的备份纪录。
这是我完全备份代码:
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 = N'Test 备份')
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 = N'Test 备份'
SELECT @JobID = NULL
END
BEGIN
-- — 添加作业
EXECUTE @ReturnCode = sp_add_job @job_id = @JobID OUTPUT , @job_name = N'Test 备份'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
--— 添加作业步骤
EXECUTE @ReturnCode = sp_add_jobstep @job_id = @JobID, @step_id = 1,
@step_name = N'第 1 步',
@command = N'backup database ['+dbname+'] to disk=N'+@path+@dbname+convert(varchar,getdate(),102)+''.bak''''
@subsystem = N'TSQL', @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错误,是代码的问题吗?帮我,谢谢!


...全文
25 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 元老 2003-09-19
  • 打赏
  • 举报
回复
不过,你的作业没什么意义,因为备份文件名是固定的,要每天都改作业.
aierong 2003-09-19
  • 打赏
  • 举报
回复
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 } ]
}

zjcxc 元老 2003-09-19
  • 打赏
  • 举报
回复
还有一点小错误,用下面的这个就能建立了

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 = N'Test 备份')
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 = N'Test 备份'
SELECT @JobID = NULL
END
BEGIN
-- — 添加作业
EXECUTE @ReturnCode = sp_add_job @job_id = @JobID OUTPUT , @job_name = N'Test 备份'
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 = N'TSQL', @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:


meng___xuan 2003-09-18
  • 打赏
  • 举报
回复
上面的搂住给点提示,编译不能通过。
meng___xuan 2003-09-17
  • 打赏
  • 举报
回复
我是按你的这种方法执行的,可是不能执行备份。
zjcxc 元老 2003-09-17
  • 打赏
  • 举报
回复
出错的原因是因为执行: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 = N'TSQL', @retry_interval = 0
meng___xuan 2003-09-17
  • 打赏
  • 举报
回复
可是,这样还是变异不过去,产生了dbname错误,还是那一行。怎么解决。
zarge 2003-09-17
  • 打赏
  • 举报
回复
都要用nvarchar

declare @path nvarchar(1000), @dbname nvarchar(250)
set @path = N'd:\backup\' --用户设置的备份路径
set @dbname = N'test' --要备份的数据库名
zjcxc 元老 2003-09-17
  • 打赏
  • 举报
回复
做如下修改:

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 = N'Test 备份')
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 = N'Test 备份'
SELECT @JobID = NULL
END
BEGIN
-- — 添加作业
EXECUTE @ReturnCode = sp_add_job @job_id = @JobID OUTPUT , @job_name = N'Test 备份'
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 = N'TSQL', @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:

34,837

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧