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

tigerxu 2003-05-15 01:32:08
1. 每隔一个小时,将指定的数据库备份到一个目录中。
2. 自动删除最近的5次备份以外的备份文件。
3. 定时收缩数据库(包括日志)。
4. 命令越简练越好。
我已经采用了“xp_sqlmaint”这个命令,希望大家能给我其他更好的方法。谢谢~~~
...全文
51 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
blackhawk_yps 2003-05-15
  • 打赏
  • 举报
回复
足够满足你的要求了
tigerxu 2003-05-15
  • 打赏
  • 举报
回复
首先感谢各位的发言!
1. 做这个操作一定要用脚本。(被限制住了,我也没办法)
2. 对于“ firetoucher(蹈火者) ”的想法,我也试过,是一个办法。
3. 我现在的方法是建立一个作业,采用“xp_sqlmaint”这个系统存储过程,也是一个办法。
还有其它的方法吗?
liukanghui 2003-05-15
  • 打赏
  • 举报
回复
用维护计维DTS不好吗?
你如果非要sql也可以选建一个功能一样的维护计划,然后把那个计划生成sql脚本
做成一个proc 然后由作业调度?
我也晕了.......
愉快的登山者 2003-05-15
  • 打赏
  • 举报
回复
编写好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语句导出不就行了。

34,593

社区成员

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

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