• 全部
  • 基础类
  • 应用实例
  • 新技术前沿

如何采用脚本写这样一个数据库备份

tigerxu 2003-05-15 01:32:08
1. 每隔一个小时,将指定的数据库备份到一个目录中。
2. 自动删除最近的5次备份以外的备份文件。
3. 定时收缩数据库(包括日志)。
4. 命令越简练越好。
我已经采用了“xp_sqlmaint”这个命令,希望大家能给我其他更好的方法。谢谢~~~
...全文
20 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
blackhawk_yps 2003-05-15
足够满足你的要求了
回复
tigerxu 2003-05-15
首先感谢各位的发言!
1. 做这个操作一定要用脚本。(被限制住了,我也没办法)
2. 对于“ firetoucher(蹈火者) ”的想法,我也试过,是一个办法。
3. 我现在的方法是建立一个作业,采用“xp_sqlmaint”这个系统存储过程,也是一个办法。
还有其它的方法吗?
回复
liukanghui 2003-05-15
用维护计维DTS不好吗?
你如果非要sql也可以选建一个功能一样的维护计划,然后把那个计划生成sql脚本
做成一个proc 然后由作业调度?
我也晕了.......
回复
编写好SQL程序,
建立一个JOB,
设置每隔一个小时执行一次这段SQL程序;
回复
firetoucher 2003-05-15
DECLARE @PlanID nchar(36)
SELECT @PlanID = NEWID()
INSERT msdb.dbo.sysdbmaintplans (plan_id, plan_name, max_history_rows, remote_history_server, max_remote_history_rows)
VALUES (@PlanID, N'数据库维护计划1', 1000, N'', 0)
SELECT @PlanID

BEGIN TRANSACTION
DECLARE @ReturnCode INT
DECLARE @JobID0 nchar(36)
DECLARE @JobID1 nchar(36)
DECLARE @JobID2 nchar(36)
DECLARE @JobID3 nchar(36)
DECLARE @JobID4 nchar(36)
DECLARE @JobID5 nchar(36)
DECLARE @JobID6 nchar(36)
DECLARE @JobID7 nchar(36)
DECLARE @JobIDD nchar(36)
EXECUTE @ReturnCode = msdb.dbo.sp_add_job @job_id = @JobID4 OUTPUT, @job_name = N'DB 维护计划“数据库维护计划1”的 DB 备份作业。', @enabled = 1, @category_id = 3
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXECUTE @ReturnCode = msdb.dbo.sp_add_jobstep @job_id = @JobID4, @step_id = 1, @step_name = N'第 1 步', @subsystem = N'TSQL', @on_success_action = 1, @on_fail_action = 2, @command = N'EXECUTE master.dbo.xp_sqlmaint N''-PlanID 37E8173A-5503-491C-A555-0FB3BE81C5D6 -VrfyBackup -BkUpMedia DISK -BkUpDB "C:\Program Files\Microsoft SQL Server\MSSQL\BACKUP" -DelBkUps 5HOURS -BkExt "BAK"''', @flags = 4
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXECUTE @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id = @JobID4, @name = N'第 1 调度', @enabled = 1, @freq_type = 4, @active_start_date = 20030515, @active_start_time = 20000, @freq_interval = 1, @freq_subday_type = 8, @freq_subday_interval = 1, @freq_relative_interval = 0, @freq_recurrence_factor = 1, @active_end_date = 99991231, @active_end_time = 235959
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXECUTE @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @JobID4, @server_name = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXECUTE @ReturnCode = msdb.dbo.sp_add_job @job_id = @JobID0 OUTPUT, @job_name = N'DB 维护计划“数据库维护计划1”的优化作业。', @enabled = 1, @category_id = 3
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXECUTE @ReturnCode = msdb.dbo.sp_add_jobstep @job_id = @JobID0, @step_id = 1, @step_name = N'第 1 步', @subsystem = N'TSQL', @on_success_action = 1, @on_fail_action = 2, @command = N'EXECUTE master.dbo.xp_sqlmaint N''-PlanID 37E8173A-5503-491C-A555-0FB3BE81C5D6 -RmUnusedSpace 50 10 ''', @flags = 4
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXECUTE @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id = @JobID0, @name = N'第 1 调度', @enabled = 1, @freq_type = 4, @active_start_date = 20030515, @active_start_time = 10000, @freq_interval = 1, @freq_subday_type = 8, @freq_subday_interval = 1, @freq_relative_interval = 0, @freq_recurrence_factor = 1, @active_end_date = 99991231, @active_end_time = 235959
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXECUTE @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @JobID0, @server_name = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
SELECT @JobID0, @JobID1, @JobID2, @JobID3, @JobID4, @JobID5, @JobID6, @JobID7
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback: IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
回复
firetoucher 2003-05-15
创建一个维护计划,将sql语句导出不就行了。
回复
相关推荐
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2003-05-15 01:32
社区公告
暂无公告