当前位置:首页
开发技术指南» 文章正文
    引言:
 

 

    摘要: 而我用的.sql文件才1k,里面的sql语句完全正确,我把里面的sql语句copy到phpmyadmin里面的sql执行框里就可以.奇怪.. ......
    摘要: 多謝多謝 ......


求助备份语句

我在备份的时候,备份的文件不能覆盖,备份的文件名是备份时的时间。  
  我怎么活的设置时的备份时间?因为我要每个月第一天完全备份,其它时间差异备份,并且维护是删除三个月前的备份纪录。  
  这是我完全备份代码:  
  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错误,是代码的问题吗?帮我,谢谢!  
   
   
 

NO.1   作者: zjcxc

做如下修改:  
   
  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:    
 

NO.2   作者: zarge

都要用nvarchar  
   
  declare   @path   nvarchar(1000),   @dbname   nvarchar(250)  
  set   @path   =   Nd:\backup\                   --用户设置的备份路径  
  set   @dbname   =   Ntest     --要备份的数据库名  
 

NO.3   作者: zjcxc

出错的原因是因为执行: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  
 

NO.4   作者: zjcxc

还有一点小错误,用下面的这个就能建立了  
   
  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:    
   
   
 

NO.5   作者: aierong

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   }   ]    
  }  
   
 


    摘要: 我在一个函数中调用messagebox()函数,没问题,但另外一个就出现错误“function does not take 1 parameters”?为何? 可行的函数如下: void cmwavedlg::onbutton1() { messagebox("f"); } 出现错误的函数: byte * getdata(cstring *pstring) //获取......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE