启动SQL Server2000的数据库自动维护计划--自动备份,而不是手动在SQL中建立自动备份, 
请问哪位高手曾经做过米?SQL脚本时怎样呢?

解决方案 »

  1.   

    --参考
    /*******************完整备份作业*******************/
    --完整备份,每周一次
    USE Master
    GO
    declare @str varchar(100)
    set @str='D:\DBtext\jgj\DBABak\FullBak'+replace(replace(replace(convert(varchar,getdate(),20),'-',''),' ',''),':','')+'.bak'
    BACKUP DATABASE [demo] TO DISK=@str
    WITH RETAINDAYS=15,NOFORMAT,NOINIT,
    NAME=N'Demo完整备份',SKIP,NOREWIND,
    NOUNLOAD,STATS=10
    GO
    /*******************差异备份作业*******************/
    --截断日志
    USE Master
    GO
    BACKUP LOG Demo  WITH NO_LOG
    GO
    --收缩日志文件
    USE Demo
    GO
    DBCC SHRINKFILE (N'Demo_log',0,TRUNCATEONLY)
    GO
    --差异备份,每天一次
    USE Master
    GO
    declare @str varchar(100)
    set @str='D:\DBtext\jgj\DBABak\DiffBak'+replace(replace(replace(convert(varchar,getdate(),20),'-',''),' ',''),':','')+'.diff'
    BACKUP DATABASE [Demo] TO DISK=@str
    WITH DIFFERENTIAL,RETAINDAYS=8,NOFORMAT,NOINIT,
    NAME=N'Demo差异备份',SKIP,NOREWIND,
    NOUNLOAD,STATS=10
    GO
    /******************日志备份作业*******************/
    --日志备份,每小时一次
    USE Demo
    GO
    declare @str varchar(100)
    set @str='D:\DBtext\jgj\DBABak\logbak'+replace(replace(replace(convert(varchar,getdate(),20),'-',''),' ',''),':','')+'.trn'
    BACKUP LOG [Demo] TO DISK=@str
    WITH RETAINDAYS=3,NOFORMAT,NOINIT,
    NAME=N'Demo日志备份',SKIP,NOREWIND,
    NOUNLOAD,STATS=10
    GO
    --删除过期的备份文件,每天两次
    declare @str varchar(100),@dir varchar(100),@fileName varchar(30)
    set @dir='del D:\DBtext\jgj\DBABak\'
    set @filename=left(replace(replace(replace(convert(varchar,getdate()-15,20),'-',''),' ',''),':',''),8)
    set @str=@dir+'fullbak'+@filename+'*.bak'
    exec xp_cmdshell @str
    set @filename=left(replace(replace(replace(convert(varchar,getdate()-8,20),'-',''),' ',''),':',''),8)
    set @str=@dir+'diffbak'+@filename+'*.diff'
    exec xp_cmdshell @str
    set @filename=left(replace(replace(replace(convert(varchar,getdate()-8,20),'-',''),' ',''),':',''),8)
    set @str=@dir+'logbak'+@filename+'*.trn'
    exec xp_cmdshell @str
      

  2.   

    1、进入企业管理器中->管理->sql server代理->作业;
    2、新建作业,作业名称随便取,例如:data备份,所有者选择sa,当然你也可以选择其他用户,前提是该用户有执行作业的权限;
    3、点击步骤标签,进入步骤面板。新建步骤,步骤名可以随便填写,如步骤1,类型和数据库默认,不需要修改。命令中写入以下语句:
    BACKUP DATABASE [数据库名] TO  DISK = N'F:data数据库备份' WITH  NOINIT ,  NOUNLOAD ,  NAME = N'数据库 备份',  NOSKIP , STATS = 10,  NOFORMAT
    注意:需要修改的地方,数据库名,DISK=(这里需要填写路径和你的数据库备份的名称)后面的Name=可以随便填写。
    4、点击调度标签,进入调度面板,新建调度,名称随便填写,选择反复出现,点更改可以选择你想要执行任务的随意调度。如每天,每2天,每星期,每月等。根据需要自己设置; 
    5、确定后,不要忘记一件事情,在你刚才建立的工作上点右键,启动工作,如果你的工作没有问题,将会提示执行成功,并有相对应的备份文件在你的磁盘上出现; 
    6、还有一个重要的问题就是你的sql server agent服务器已经启动。如果我们需要根据每天的日期来生成一个新的备份,以便我们区别备份文件。这时,我们需要修改一下刚才的sql语句。参考实例: 
    declare @filename nvarchar(100) set @filename='F:AddIn备份data'+convert(char(10),getdate(),112) 
    print @filename BACKUP DATABASE [addin] TO DISK = @filename WITH NOINIT , NOUNLOAD , NAME = N'addin 备份', NOSKIP , STATS = 10, NOFORMAT 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/rta3000/archive/2008/01/28/2069251.aspx
      

  3.   

    定时作业的制定企业管理器 
    --管理 
    --SQL Server代理 
    --右键作业 
    --新建作业 
    --"常规"项中输入作业名称 
    --"步骤"项 
    --新建 
    --"步骤名"中输入步骤名 
    --"类型"中选择"Transact-SQL 脚本(TSQL)" 
    --"数据库"选择执行命令的数据库 
    --"命令"中输入要执行的语句: 
            --这边把你的备份脚本粘帖上来--确定 
    --"调度"项 
    --新建调度 
    --"名称"中输入调度名称 
    --"调度类型"中选择你的作业执行安排 
    --如果选择"反复出现" 
    --点"更改"来设置你的时间安排  
    然后将SQL Agent服务启动,并设置为自动启动,否则你的作业不会被执行 设置方法: 
    我的电脑--控制面板--管理工具--服务--右键 SQLSERVERAGENT--属性--启动类型--选择"自动启动"--确定.
      

  4.   

    请教:fredrickhu :   刚执行时成功,而后却没有执行了呢?
    /*******************差异备份作业*******************/
    --截断日志
    USE Master
    GO
    BACKUP LOG JCXY_DATA  WITH NO_LOG
    GO
    --收缩日志文件
    USE JCXY_DATA
    GO
    DBCC SHRINKFILE (N'JCXY_DATA_log',0,TRUNCATEONLY)
    GO
    --差异备份,每天一次
    USE Master
    GO
    declare @str varchar(100)
    set @str='E:\我的程序\TestDBBack\JCXY_DATA'+replace(replace(replace(convert(varchar,getdate(),20),'-',''),' ',''),':','')+'.diff'
    BACKUP DATABASE [JCXY_DATA] TO DISK=@str
    WITH DIFFERENTIAL,RETAINDAYS=8,NOFORMAT,NOINIT,
    NAME=N'JCXY_DATA差异备份',SKIP,NOREWIND,
    NOUNLOAD,STATS=10
    GO
      

  5.   

    SQL企业管理器提取的SQL脚本
    -- 2009-06-28/18:02 上生成的脚本
    -- 由: LWM\liwenming
    -- 服务器: (local)BEGIN TRANSACTION            
      DECLARE @JobID BINARY(16)  
      DECLARE @ReturnCode INT    
      SELECT @ReturnCode = 0     
    IF (SELECT COUNT(*) FROM msdb.dbo.syscategories WHERE name = N'Database Maintenance') < 1 
      EXECUTE msdb.dbo.sp_add_category @name = N'Database Maintenance'  -- 删除同名的警报(如果有的话)。
      SELECT @JobID = job_id     
      FROM   msdb.dbo.sysjobs    
      WHERE (name = N'DB 维护计划“缺陷管理数据自动备份”的 DB 备份作业。')       
      IF (@JobID IS NOT NULL)    
      BEGIN  
      -- 检查此作业是否为多重服务器作业  
      IF (EXISTS (SELECT  * 
                  FROM    msdb.dbo.sysjobservers 
                  WHERE   (job_id = @JobID) AND (server_id <> 0))) 
      BEGIN 
        -- 已经存在,因而终止脚本 
        RAISERROR (N'无法导入作业“DB 维护计划“缺陷管理数据自动备份”的 DB 备份作业。”,因为已经有相同名称的多重服务器作业。', 16, 1) 
        GOTO QuitWithRollback  
      END 
      ELSE 
        -- 删除[本地]作业 
        EXECUTE msdb.dbo.sp_delete_job @job_name = N'DB 维护计划“缺陷管理数据自动备份”的 DB 备份作业。' 
        SELECT @JobID = NULL
      END BEGIN   -- 添加作业
      EXECUTE @ReturnCode = msdb.dbo.sp_add_job @job_id = @JobID OUTPUT , @job_name = N'DB 维护计划“缺陷管理数据自动备份”的 DB 备份作业。', @owner_login_name = N'LWM\liwenming', @description = N'没有可用的描述。', @category_name = N'Database Maintenance', @enabled = 1, @notify_level_email = 0, @notify_level_page = 0, @notify_level_netsend = 0, @notify_level_eventlog = 2, @delete_level= 0
      IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback   -- 添加作业步骤
      EXECUTE @ReturnCode = msdb.dbo.sp_add_jobstep @job_id = @JobID, @step_id = 1, @step_name = N'第 1 步', @command = N'EXECUTE master.dbo.xp_sqlmaint N''-PlanID 563C4214-5FD2-44DF-8B76-8162EA0C6357 -WriteHistory  -VrfyBackup -BkUpMedia DISK -BkUpDB "E:\我的程序\QuestionManege\DataBack" -DelBkUps 4DAYS -BkExt "BAK"''', @database_name = N'master', @server = N'', @database_user_name = N'', @subsystem = N'TSQL', @cmdexec_success_code = 0, @flags = 4, @retry_attempts = 0, @retry_interval = 0, @output_file_name = N'', @on_success_step_id = 0, @on_success_action = 1, @on_fail_step_id = 0, @on_fail_action = 2
      IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback 
      EXECUTE @ReturnCode = msdb.dbo.sp_update_job @job_id = @JobID, @start_step_id = 1   IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback   -- 添加作业调度
      EXECUTE @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id = @JobID, @name = N'第 1 调度', @enabled = 1, @freq_type = 4, @active_start_date = 20090624, @active_start_time = 15600, @freq_interval = 1, @freq_subday_type = 1, @freq_subday_interval = 0, @freq_relative_interval = 0, @freq_recurrence_factor = 0, @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 = @JobID, @server_name = N'(local)' 
      IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback END
    COMMIT TRANSACTION          
    GOTO   EndSave              
    QuitWithRollback:
      IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION 
    EndSave: 
    GO
    BEGIN TRANSACTION            
      DECLARE @JobID BINARY(16)  
      DECLARE @ReturnCode INT    
      SELECT @ReturnCode = 0     
    IF (SELECT COUNT(*) FROM msdb.dbo.syscategories WHERE name = N'[Uncategorized (Local)]') < 1 
      EXECUTE msdb.dbo.sp_add_category @name = N'[Uncategorized (Local)]'  -- 删除同名的警报(如果有的话)。
      SELECT @JobID = job_id     
      FROM   msdb.dbo.sysjobs    
      WHERE (name = N'*****完整备份作业*****')       
      IF (@JobID IS NOT NULL)    
      BEGIN  
      -- 检查此作业是否为多重服务器作业  
      IF (EXISTS (SELECT  * 
                  FROM    msdb.dbo.sysjobservers 
                  WHERE   (job_id = @JobID) AND (server_id <> 0))) 
      BEGIN 
        -- 已经存在,因而终止脚本 
        RAISERROR (N'无法导入作业“*****完整备份作业*****”,因为已经有相同名称的多重服务器作业。', 16, 1) 
        GOTO QuitWithRollback  
      END 
      ELSE 
        -- 删除[本地]作业 
        EXECUTE msdb.dbo.sp_delete_job @job_name = N'*****完整备份作业*****' 
        SELECT @JobID = NULL
      END BEGIN   -- 添加作业
      EXECUTE @ReturnCode = msdb.dbo.sp_add_job @job_id = @JobID OUTPUT , @job_name = N'*****完整备份作业*****', @owner_login_name = N'LWM\liwenming', @description = N'没有可用的描述。', @category_name = N'[Uncategorized (Local)]', @enabled = 1, @notify_level_email = 0, @notify_level_page = 0, @notify_level_netsend = 0, @notify_level_eventlog = 2, @delete_level= 0
      IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback   -- 添加作业步骤
      EXECUTE @ReturnCode = msdb.dbo.sp_add_jobstep @job_id = @JobID, @step_id = 1, @step_name = N'1', @command = N'declare @filename nvarchar(100) set @filename=''E:\我的程序\TestDBBack''+convert(char(10),getdate(),112) 
    print @filename BACKUP DATABASE [addin] TO DISK = @filename WITH NOINIT , NOUNLOAD , NAME = N''addin 备份'', NOSKIP , STATS = 10, NOFORMAT ', @database_name = N'JCQM_DATA', @server = N'', @database_user_name = N'', @subsystem = N'TSQL', @cmdexec_success_code = 0, @flags = 0, @retry_attempts = 0, @retry_interval = 1, @output_file_name = N'', @on_success_step_id = 0, @on_success_action = 1, @on_fail_step_id = 0, @on_fail_action = 2
      IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback 
      EXECUTE @ReturnCode = msdb.dbo.sp_update_job @job_id = @JobID, @start_step_id = 1   IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback   -- 添加作业调度
      EXECUTE @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id = @JobID, @name = N'TestDBBack', @enabled = 1, @freq_type = 4, @active_start_date = 20090624, @active_start_time = 15800, @freq_interval = 1, @freq_subday_type = 1, @freq_subday_interval = 0, @freq_relative_interval = 0, @freq_recurrence_factor = 0, @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 = @JobID, @server_name = N'(local)' 
      IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback END
    COMMIT TRANSACTION          
    GOTO   EndSave              
    QuitWithRollback:
      IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION 
    EndSave: 
    GO
      

  6.   

    数据库自动备份的作业(完整备份)sql代码:DECLARE @strPath NVARCHAR(200)
    set @strPath = convert(NVARCHAR(19),getdate(),120)
    set @strPath = REPLACE(@strPath, ':' , '.')
    set @strPath = 'E:\sqlbacupk\' + @strPath + '.bak'
    BACKUP DATABASE [databasename] TO DISK = @strPath WITH NOINIT , NOUNLOAD , NOSKIP , STATS = 10, NOFORMAT 其中E:\sqlbacupk\是备份文件存放的路径,备份文件后缀名是.bakdatabasename是要备份的数据库的名字删除过期备份declare @dt datetime
    select @dt=getdate()-1
    EXECUTE master.dbo.xp_delete_file 0,N'E:\sqlback\',N'BAK',@Dt 在代码中尽量不要使用xp_cmdshell,查询管理器中会提示消息 15281,级别 16,状态 1,过程 xp_cmdshell,第 1 行
    SQL Server 阻止了对组件 'xp_cmdshell' 的 过程'sys.xp_cmdshell' 的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用 sp_configure 启用 'xp_cmdshell'。有关启用 'xp_cmdshell' 的详细信息,请参阅 SQL Server 联机丛书中的 "外围应用配置器"。
    关于作业,正确的作业代码是可以在查询管理器中执行的。