CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

高分求助!!-100+100-如何备份数据库及还原数据库??急!!!!!!!

楼主BigAngell(学而不思则罔 思而不学则殆)2004-08-03 00:05:23 在 MS-SQL Server / 基础类 提问

如题,希望能具体点,完全通得过的代码,因为很急,没多少时间去翻书,请帮帮忙,谢谢! 问题点数:100、回复次数:8Top

1 楼friendliu(无为)回复于 2004-08-03 00:18:55 得分 40

备份数据库  
  *--备份数据库  
  ----*/  
  /*--调用示例  
  --备份当前数据库  
  exec   p_backupdb   @bkpath='c:\',@bkfname='\DBNAME\_\DATE\_db.bak'  
  --差异备份当前数据库  
  exec   p_backupdb   @bkpath='c:\',@bkfname='db_\DATE\_df.bak',@bktype='DF'  
  --备份当前数据库日志  
  exec   p_backupdb   @bkpath='c:\',@bkfname='db_\DATE\_log.bak',@bktype='LOG'  
  --*/  
  if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N'[dbo].[p_backupdb]')   and   OBJECTPROPERTY(id,   N'IsProcedure')   =   1)  
  drop   procedure   [dbo].[p_backupdb]  
  GO  
  create   proc   p_backupdb  
  @dbname   sysname='',       --要备份的数据库名称,不指定则备份当前数据库  
  @bkpath   nvarchar(260)='',   --备份文件的存放目录,不指定则使用SQL默认的备份目录  
  @bkfname   nvarchar(260)='',   --备份文件名,文件名中可以用\DBNAME\代表数据库名,\DATE\代表日期,\TIME\代表时间  
  @bktype   nvarchar(10)='DB',   --备份类型:'DB'备份数据库,'DF'   差异备份,'LOG'   日志备份  
  @appendfile   bit=1       --追加/覆盖备份文件  
  as  
    declare   @sql   varchar(8000)  
    if   isnull(@dbname,'')=''   set   @dbname=db_name()  
    if   isnull(@bkpath,'')=''  
    begin  
      select   @bkpath=rtrim(reverse(filename))   from   master..sysfiles   where   name='master'  
      select   @bkpath=substring(@bkpath,charindex('\',@bkpath)+1,4000)  
        ,@bkpath=reverse(substring(@bkpath,charindex('\',@bkpath),4000))+'BACKUP\'  
    end  
    if   isnull(@bkfname,'')=''   set   @bkfname='\DBNAME\_\DATE\_\TIME\.BAK'  
    set   @bkfname=replace(replace(replace(@bkfname,'\DBNAME\',@dbname)  
      ,'\DATE\',convert(varchar,getdate(),112))  
      ,'\TIME\',replace(convert(varchar,getdate(),108),':',''))  
    set   @sql='backup   '+case   @bktype   when   'LOG'   then   'log   '   else   'database   '   end   +@dbname  
      +'   to   disk='''+@bkpath+@bkfname  
      +'''   with   '+case   @bktype   when   'DF'   then   'DIFFERENTIAL,'   else   ''   end  
      +case   @appendfile   when   1   then   'NOINIT'   else   'INIT'   end  
    exec(@sql)  
  go  
   
  你再建一个JOB  
  定时调度就行了Top

2 楼friendliu(无为)回复于 2004-08-03 00:23:13 得分 0

--全部用SQL语句来实现  
   
  --设置   SQL   Agent   服务为自动启动  
  exec   msdb..sp_set_sqlagent_properties   @auto_start=1  
  go  
   
  use   你的数据库名  
  go  
   
  --创建作业  
  exec   msdb..sp_add_job   @job_name='数据处理'  
   
  --创建作业步骤  
  declare   @sql   varchar(800),@dbname   varchar(250)  
  select   @sql='delete   from   表   where   datediff(day,datafield,getdate())>7'     --数据处理的命令  
  ,@dbname=db_name() --执行数据处理的数据库名  
   
  exec   msdb..sp_add_jobstep   @job_name='数据处理',  
  @step_name   =   '数据同步',  
  @subsystem   =   'TSQL',  
  @database_name=@dbname,  
  @command   =   @sql,  
  @retry_attempts   =   5,   --重试次数  
  @retry_interval   =   5     --重试间隔  
   
  --创建调度  
  EXEC   msdb..sp_add_jobschedule   @job_name   =   '数据处理',    
  @name   =   '时间安排',  
  @freq_type=4,   --4   每天,8   每周,16   每月  
  @freq_interval=1, --作业执行的天数  
  @freq_subday_type=0, --是否重复执行,0x1   在指定的时间,   0x4   分钟,   0x8   小时    
  @freq_subday_interval=1,   --重复周期  
  @freq_recurrence_factor=0, --重复执行,则设置为1,否则设置为0  
  @active_start_time   =   00000 --0点开始执行  
   
  --   添加目标服务器  
  EXEC   msdb.dbo.sp_add_jobserver    
  @job_name   =   '数据处理'   ,  
  @server_name   =   N'(local)'  
  Top

3 楼zjcxc(邹建)回复于 2004-08-03 08:32:01 得分 60

if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N'[dbo].[p_backupdb]')   and   OBJECTPROPERTY(id,   N'IsProcedure')   =   1)  
  drop   procedure   [dbo].[p_backupdb]  
  GO  
   
  /*--备份数据库的通用存储过程  
   
  --邹建   2003.10--*/  
   
  /*--调用示例  
   
  --备份当前数据库  
  exec   p_backupdb   @bkpath='c:\',@bkfname='\DBNAME\_\DATE\_db.bak'  
   
  --差异备份当前数据库  
  exec   p_backupdb   @bkpath='c:\',@bkfname='db_\DATE\_df.bak',@bktype='DF'  
   
  --备份当前数据库日志  
  exec   p_backupdb   @bkpath='c:\',@bkfname='db_\DATE\_log.bak',@bktype='LOG'  
  --*/  
  create   proc   p_backupdb  
  @dbname   sysname='', --要备份的数据库名称,不指定则备份当前数据库  
  @bkpath   nvarchar(260)='', --备份文件的存放目录,不指定则使用SQL默认的备份目录  
  @bkfname   nvarchar(260)='', --备份文件名,文件名中可以用\DBNAME\代表数据库名,\DATE\代表日期,\TIME\代表时间  
  @bktype   nvarchar(10)='DB', --备份类型:'DB'备份数据库,'DF'   差异备份,'LOG'   日志备份  
  @appendfile   bit=1, --追加/覆盖备份文件  
  @password   nvarchar(20)='' --为备份文件设置的密码(仅sql2000支持),设置后,恢复时必须提供此密码  
  as  
  declare   @sql   varchar(8000)  
  if   isnull(@dbname,'')=''   set   @dbname=db_name()  
  if   isnull(@bkpath,'')=''  
  begin  
  select   @bkpath=rtrim(reverse(filename))   from   master..sysfiles   where   name='master'  
  select   @bkpath=substring(@bkpath,charindex('\',@bkpath)+1,4000)  
  ,@bkpath=reverse(substring(@bkpath,charindex('\',@bkpath),4000))+'BACKUP\'  
  end  
  if   isnull(@bkfname,'')=''   set   @bkfname='\DBNAME\_\DATE\_\TIME\.BAK'  
  set   @bkfname=replace(replace(replace(@bkfname,'\DBNAME\',@dbname)  
  ,'\DATE\',convert(varchar,getdate(),112))  
  ,'\TIME\',replace(convert(varchar,getdate(),108),':',''))  
  set   @sql='backup   '+case   @bktype   when   'LOG'   then   'log   '   else   'database   '   end   +@dbname  
  +'   to   disk='''+@bkpath+@bkfname  
  +'''   with   '+case   @bktype   when   'DF'   then   'DIFFERENTIAL,'   else   ''   end  
  +case   @appendfile   when   1   then   'NOINIT'   else   'INIT'   end  
  +case   isnull(@password,'')   when   ''   then   ''   else   ',PASSWORD='''+@password+''''   end  
  exec(@sql)  
  go  
  Top

4 楼zjcxc(邹建)回复于 2004-08-03 08:32:23 得分 0

if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N'[dbo].[p_RestoreDb]')   and   OBJECTPROPERTY(id,   N'IsProcedure')   =   1)  
  drop   procedure   [dbo].[p_RestoreDb]  
  GO  
   
  /*--恢复数据库的通用存储过程  
   
  --邹建   2003.10--*/  
   
  /*--调用示例  
  --完整恢复数据库  
  exec   p_RestoreDb   @bkfile='c:\db_20031015_db.bak',@dbname='db'  
   
  --差异备份恢复  
  exec   p_RestoreDb   @bkfile='c:\db_20031015_db.bak',@dbname='db',@retype='DBNOR'  
  exec   p_RestoreDb   @bkfile='c:\db_20031015_df.bak',@dbname='db',@retype='DF'  
   
  --日志备份恢复  
  exec   p_RestoreDb   @bkfile='c:\db_20031015_db.bak',@dbname='db',@retype='DBNOR'  
  exec   p_RestoreDb   @bkfile='c:\db_20031015_log.bak',@dbname='db',@retype='LOG'  
   
  --*/  
   
  create   proc   p_RestoreDb  
  @bkfile   nvarchar(1000), --定义要恢复的备份文件名(带路径)  
  @dbname   sysname='',         --定义恢复后的数据库名,默认为备份的文件名  
  @dbpath   nvarchar(260)='', --恢复后的数据库存放目录,不指定则为SQL的默认数据目录  
  @retype   nvarchar(10)='DB', --恢复类型:'DB'完事恢复数据库,'DBNOR'   为差异恢复,日志恢复进行完整恢复,'DF'   差异备份的恢复,'LOG'   日志恢复  
  @filenumber   int=1, --恢复的文件号  
  @overexist   bit=1,             --是否覆盖已经存在的数据库,仅@retype为'DB'/'DBNOR'是有效  
  @killuser   bit=1,       --是否关闭用户使用进程,仅@overexist=1时有效  
  @password   nvarchar(20)='' --备份文件的密码(仅sql2000支持),如果备份时设置了密码,必须提供此密码  
  as  
  declare   @sql   varchar(8000)  
   
  --得到恢复后的数据库名  
  if   isnull(@dbname,'')=''  
  select   @sql=reverse(@bkfile)  
  ,@sql=case   when   charindex('.',@sql)=0   then   @sql  
  else   substring(@sql,charindex('.',@sql)+1,1000)   end  
  ,@sql=case   when   charindex('\',@sql)=0   then   @sql  
  else   left(@sql,charindex('\',@sql)-1)   end  
  ,@dbname=reverse(@sql)  
   
  --得到恢复后的数据库存放目录  
  if   isnull(@dbpath,'')=''  
  begin  
  select   @dbpath=rtrim(reverse(filename))   from   master..sysfiles   where   name='master'  
  select   @dbpath=reverse(substring(@dbpath,charindex('\',@dbpath),4000))  
  end  
   
  --生成数据库恢复语句  
  set   @sql='restore   '+case   @retype   when   'LOG'   then   'log   '   else   'database   '   end+@dbname  
  +'   from   disk='''+@bkfile+''''  
  +'   with   file='+cast(@filenumber   as   varchar)  
  +case   when   @overexist=1   and   @retype   in('DB','DBNOR')   then   ',replace'   else   ''   end  
  +case   @retype   when   'DBNOR'   then   ',NORECOVERY'   else   ',RECOVERY'   end  
  +case   isnull(@password,'')   when   ''   then   ''   else   ',PASSWORD='''+@password+''''   end  
   
  --添加移动逻辑文件的处理  
  if   @retype='DB'   or   @retype='DBNOR'  
  begin  
  --从备份文件中获取逻辑文件名  
  declare   @lfn   nvarchar(128),@tp   char(1),@i   int,@s   varchar(1000)  
   
  --创建临时表,保存获取的信息  
  create   table   #tb(ln   nvarchar(128),pn   nvarchar(260),tp   char(1),fgn   nvarchar(128),sz   numeric(20,0),Msz   numeric(20,0))  
  --从备份文件中获取信息  
  set   @s='restore   filelistonly   from   disk='''+@bkfile+''''  
  ++case   isnull(@password,'')   when   ''   then   ''   else   '   with   PASSWORD='''+@password+''''   end  
  insert   into   #tb   exec(@s)  
  declare   #f   cursor   for   select   ln,tp   from   #tb  
  open   #f  
  fetch   next   from   #f   into   @lfn,@tp  
  set   @i=0  
  while   @@fetch_status=0  
  begin  
  select   @sql=@sql+',move   '''+@lfn+'''   to   '''+@dbpath+@dbname+cast(@i   as   varchar)  
  +case   @tp   when   'D'   then   '.mdf'''   else   '.ldf'''   end  
  ,@i=@i+1  
  fetch   next   from   #f   into   @lfn,@tp  
  end  
  close   #f  
  deallocate   #f  
  end  
   
  --关闭用户进程处理  
  if   @overexist=1   and   @killuser=1  
  begin  
  declare   hCForEach   cursor   for  
  select   s='kill   '+cast(spid   as   varchar)   from   master..sysprocesses    
  where   dbid=db_id(@dbname)  
  exec   sp_msforeach_worker   '?'  
  end  
   
  --恢复数据库  
  exec(@sql)  
   
  goTop

5 楼zjcxc(邹建)回复于 2004-08-03 08:33:42 得分 0

'上述备份/还原是写存储过程,然后在程序中直接调用存储过程实现备份/还原  
  '下面是程序中实现  
   
  '*************************************************************************  
  '**模   块   名:fBackupDatabase_a  
  '**描         述:备份数据库,返回出错信息,正常恢复,返回""  
  '**调         用:fBackupDatabase_a   "备份文件名","数据库名"  
  '**参数说明:  
  '**                     sBackUpfileName     恢复后的数据库存放目录  
  '**                     sDataBaseName         备份的数据名  
  '**                     sIsAddBackup           是否追加到备份文件中  
  '**说         明:引用Microsoft   ActiveX   Data   Objects   2.x   Library  
  '**创   建   人:邹建  
  '**日         期:2003年12月09日  
  '*************************************************************************  
  Public   Function   fBackupDatabase_a(ByVal   sBackUpfileName$   _  
                                                                  ,   ByVal   sDataBaseName$   _  
                                                                  ,   Optional   ByVal   sIsAddBackup   As   Boolean   =   False   _  
                                                                  )   As   String  
                                                                   
          Dim   iDb   As   ADODB.Connection  
          Dim   iConcStr$,   iSql$,   iReturn$  
           
          On   Error   GoTo   lbErr  
           
          '创建对象  
          Set   iDb   =   New   ADODB.Connection  
           
          '连接数据库服务器,根据你的情况修改连接字符串  
          iConcStr   =   "Provider=SQLOLEDB.1;Integrated   Security=SSPI;Persist   Security   Info=False;Data   Source=zj"  
          iDb.Open   iConcStr  
           
          '生成数据库备份语句  
          iSql   =   "backup   database   ["   &   sDataBaseName   &   "]"   &   vbCrLf   &   _  
                          "to   disk='"   &   sBackUpfileName   &   "'"   &   vbCrLf   &   _  
                          "with   description='"   &   "zj-backup   at:"   &   Date   &   "("   &   Time   &   ")'"   &   vbCrLf   &   _  
                          IIf(sIsAddBackup,   "",   ",init")  
                           
          iDb.Execute   iSql  
          GoTo   lbExit  
           
  lbErr:  
          iReturn   =   Error  
  lbExit:  
          fBackupDatabase_a   =   iReturn  
  End   FunctionTop

6 楼zjcxc(邹建)回复于 2004-08-03 08:34:11 得分 0

 
  '*************************************************************************  
  '**模   块   名:frestoredatabase_a  
  '**描         述:恢复数据库,返回出错信息,正常恢复,返回""  
  '**调         用:frestoredatabase_a   "备份文件名","数据库名"  
  '**参数说明:  
  '**                     sDataBasePath     恢复后的数据库存放目录  
  '**                     sBackupNumber     是从那个备份号恢复  
  '**                     sReplaceExist     指定是否覆盖已经存在的数据  
  '**说         明:引用Microsoft   ActiveX   Data   Objects   2.x   Library  
  '**创   建   人:邹建  
  '**日         期:2003年12月09日  
  '*************************************************************************  
  Public   Function   fRestoreDatabase_a(ByVal   sBackUpfileName$   _  
                                                                  ,   ByVal   sDataBaseName$   _  
                                                                  ,   Optional   ByVal   sDataBasePath$   =   ""   _  
                                                                  ,   Optional   ByVal   sBackupNumber&   =   1   _  
                                                                  ,   Optional   ByVal   sReplaceExist   As   Boolean   =   False   _  
                                                                  )   As   String  
           
          Dim   iDb   As   ADODB.Connection,   iRe   As   ADODB.Recordset  
          Dim   iConcStr$,   iSql$,   iReturn$,   iI&  
           
          On   Error   GoTo   lbErr  
           
          '创建对象  
          Set   iDb   =   New   ADODB.Connection  
          Set   iRe   =   New   ADODB.Recordset  
           
          '连接数据库服务器,根据你的情况修改连接字符串  
          iConcStr   =   "Provider=SQLOLEDB.1;Integrated   Security=SSPI;Persist   Security   Info=False;Data   Source=SQL服务器名"  
          iDb.Open   iConcStr  
           
          '得到还原后的数据库存放目录,如果没有指定,存放到SQL   SERVER的DATA目录  
          If   sDataBasePath   =   ""   Then  
                  iSql   =   "select   filename   from   master..sysfiles"  
                  iRe.Open   iSql,   iDb,   adOpenKeyset,   adLockReadOnly  
                  iSql   =   iRe(0)  
                  iRe.Close  
                  sDataBasePath   =   Left(iSql,   InStrRev(iSql,   "\"))  
          End   If  
           
          '检查数据库是否存在  
          If   sReplaceExist   =   False   Then  
                  iSql   =   "select   1   from   master..sysdatabases     where   name='"   &   sDataBaseName   &   "'"  
                  iRe.Open   iSql,   iDb,   adOpenKeyset,   adLockReadOnly  
                  If   iRe.EOF   =   False   Then  
                          iReturn   =   "数据库已经存在!"  
                          iRe.Close  
                          GoTo   lbExit  
                  End   If  
                  iRe.Close  
          End   If  
           
          '关闭用户进程,防止其它用户正在使用数据库,导致数据恢复失败  
          iSql   =   "select   spid   from   master..sysprocesses   where   dbid=db_id('"   &   sDataBaseName   &   "')"  
          iRe.Open   iSql,   iDb,   adOpenKeyset,   adLockReadOnly  
          While   iRe.EOF   =   False  
                  iSql   =   "kill   "   &   iRe(0)  
                  iDb.Execute   iSql  
                  iRe.MoveNext  
          Wend  
          iRe.Close  
           
          '获取数据库恢复信息  
          iSql   =   "restore   filelistonly   from   disk='"   &   sBackUpfileName   &   "'"   &   vbCrLf   &   _  
                  "with   file="   &   sBackupNumber  
          iRe.Open   iSql,   iDb,   adOpenKeyset,   adLockReadOnly  
           
          '生成数据库恢复语句  
          iSql   =   "restore   database   ["   &   sDataBaseName   &   "]"   &   vbCrLf   &   _  
                  "from   disk='"   &   sBackUpfileName   &   "'"   &   vbCrLf   &   _  
                  "with   file="   &   sBackupNumber   &   vbCrLf  
          With   iRe  
                  While   Not   .EOF  
                          iReturn   =   iRe("PhysicalName")  
                          iI   =   InStrRev(iReturn,   ".")  
                          iReturn   =   IIf(iI   =   0,   "",   Mid(iReturn,   iI))   &   "'"  
                          iSql   =   iSql   &   ",move   '"   &   iRe("LogicalName")   &   _  
                                          "'   to   '"   &   sDataBasePath   &   sDataBaseName   &   iReturn   &   vbCrLf  
                          .MoveNext  
                  Wend  
                  .Close  
          End   With  
          iSql   =   iSql   &   IIf(sReplaceExist,   ",replace",   "")  
           
          iDb.Execute   iSql  
          iReturn   =   ""  
          GoTo   lbExit  
           
  lbErr:  
          iReturn   =   Error  
  lbExit:  
          fRestoreDatabase_a   =   iReturn  
  End   Function  
  Top

7 楼zjcxc(邹建)回复于 2004-08-03 08:34:40 得分 0

注:   程序实现方法与存储过程实现方法两者之间没有联系,使用时根据情况自己选择Top

8 楼fengyinglois(风影)回复于 2004-08-27 15:53:58 得分 0

(1)   创建完全备份的设备  
    USE   master  
    GO  
    EXEC   sp_addumpdevice   'disk','Case_Bak',  
      'c:\Program   Files\Microsoft   SQL   Server\MSSQL\BACKUP\Case_Bak.bak'  
    GO  
    (2)   创建差异备份的设备  
    EXEC   sp_addumpdevice   'disk','Case_Difference',  
    'c:\Program   Files\Microsoft   SQL   Server\MSSQL\BACKUP\Case_Difference.bak'  
    GO  
    (3)   创建备份事务日志的设备  
    EXEC   sp_addumpdevice   'disk','Case_Log',  
    'c:\Program   Files\Microsoft   SQL   Server\MSSQL\BACKUP\Case_Log.bak'  
    GO  
    建好备份设备后,就可以把数据备份在这些媒体上。下面我们用osql实用工具运行以下三个脚本文件建立数据库备份:  
    (1)   完全备份Case_System数据库文件   backupALLCase_System.sql  
    BEGIN   TRANSACTION    
    DECLARE   @JobID   BINARY(16)    
    DECLARE   @ReturnCode   INT    
    SELECT   @ReturnCode   =   0    
    BEGIN    
    ①   添加作业   EXECUTE   @ReturnCode   =   msdb.dbo.sp_add_job   @job_id   =   @JobID   OUTPUT   ,   @job_name   =   N'Case_System   完全备份',   @owner_login_name   =   N'SSS\Administrator'  
    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'BACKUP   DATABASE   [Case_System]   TO   [Case_Bak]   WITH   INIT   ,   NOUNLOAD   ,   NAME   =   N''Case_System   完全备份'',   NOSKIP   ,   STATS   =   10,   NOFORMAT   '  
    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   =   8,   @active_start_date   =   20650428,   @active_start_time   =   1500,   @freq_interval   =   18,   @freq_subday_type   =   1,   @freq_subday_interval   =   30,   @freq_relative_interval   =   0,   @freq_recurrence_factor   =   1,   @active_end_date   =   99991231,   @active_end_time   =   235959  
    IF   (@@ERROR   <>   0   OR   @ReturnCode   <>   0)   GOTO   QuitWithRollback    
    END  
    COMMIT   TRANSACTION    
    GOTO   EndSave    
    QuitWithRollback:  
    IF   (@@TRANCOUNT   >   0)   ROLLBACK   TRANSACTION    
    EndSave:    
    (2)差异备份Case_System数据库文件   backupDifferentialCase_System.sql  
    BEGIN   TRANSACTION    
    DECLARE   @JobID   BINARY(16)    
    DECLARE   @ReturnCode   INT    
    SELECT   @ReturnCode   =   0    
    BEGIN    
    ①   添加作业   EXECUTE   @ReturnCode   =   msdb.dbo.sp_add_job   @job_id   =   @JobID   OUTPUT   ,   @job_name   =   N'Case_System差异   备份',   @owner_login_name   =   N'SSS\Administrator'  
    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'BACKUP   DATABASE   [Case_System]   TO   [Case_Difference]   WITH   INIT   ,   NOUNLOAD   ,   DIFFERENTIAL   ,   NAME   =   N''Case_System   备份'',   NOSKIP   ,   STATS   =   10,   NOFORMAT   '  
    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   =   20650428,   @active_start_time   =   5000,   @freq_interval   =   1,   @freq_subday_type   =   8,   @freq_subday_interval   =   4,   @freq_relative_interval   =   0,   @freq_recurrence_factor   =   0,   @active_end_date   =   99991231,   @active_end_time   =   235959  
    IF   (@@ERROR   <>   0   OR   @ReturnCode   <>   0)   GOTO   QuitWithRollback    
    END  
    COMMIT   TRANSACTION    
    GOTO   EndSave    
    QuitWithRollback:  
    IF   (@@TRANCOUNT   >   0)   ROLLBACK   TRANSACTION    
    EndSave:    
    (3)   事务日志备份文件backupLogCase_System.sql  
    BEGIN   TRANSACTION    
    DECLARE   @JobID   BINARY(16)    
    DECLARE   @ReturnCode   INT    
    SELECT   @ReturnCode   =   0    
    BEGIN    
    ①添加作业   EXECUTE   @ReturnCode   =   msdb.dbo.sp_add_job   @job_id   =   @JobID   OUTPUT   ,   @job_name   =   N'Case_System   事务日志备份',   @owner_login_name   =   N'SSS\Administrator'  
    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'BACKUP   LOG   [Case_System]   TO   [Case_Log]   WITH   INIT   ,   NOUNLOAD   ,   NAME   =   N''Case_System   备份'',   NOSKIP   ,   STATS   =   10,   NOFORMAT   ,   NO_TRUNCATE   '  
    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   =   20650428,   @active_start_time   =   11500,   @freq_interval   =   1,   @freq_subday_type   =   4,   @freq_subday_interval   =   30,   @freq_relative_interval   =   0,   @freq_recurrence_factor   =   0,   @active_end_date   =   99991231,   @active_end_time   =   235959  
    IF   (@@ERROR   <>   0   OR   @ReturnCode   <>   0)   GOTO   QuitWithRollback    
    END  
    COMMIT   TRANSACTION    
    GOTO   EndSave    
    QuitWithRollback:  
    IF   (@@TRANCOUNT   >   0)   ROLLBACK   TRANSACTION    
    EndSave:  
    以上备份文件代码是用企业管理器作完成备份、调度和作业的,最后由作业生成脚本。在安排备份调度的时候特别要注意:①   三种备份时间不要冲突;   ②   差异备份一定要在两次完全备份之间运行;③   日志备份一定要在两次差异备份之间运行。  
    当数据库发生意外时,恢复数据库时要确保断开数据库的所有操作。用osql实用工具运行三个还原数据库文件即可还原发生意外的数据库,这里建议采用灵活方便的Transact_SQL语句,而不使用企业管理器。还原数据库的三个文件如下:  
    (1)   恢复完全备份数据库文件   restoreALLCase_System.sql  
    RESTORE   DATABASE   Case_System   FROM   Case_Bak   WITH   NORECOVERY,   REPLACE  
    (2)   恢复差异备份数据库文件   restoreDifferentialCase_System.sql  
    RESTORE   DATABASE   Case_System   FROM   Case_Difference   WITH   FILE   =   2,   NORECOVERY  
    (3)   恢复事务日志备份数据库文件   restoreLogCase_System.sql  
    RESTORE   LOG   Case_System   FROM   Case_Log   WITH   RECOVERY   ,STOPAT='2003-4-28   10:56:00'Top

相关问题

  • 关于数据库备份还原的问题,急!!!
  • 关于数据库备份还原的问题,急!!!
  • 关于备份和还原数据库问题.(在线急等)
  • 如何还原数据库备份?
  • 如何备份和还原数据库
  • 如何备份和还原数据库
  • 数据库的备份和还原?
  • 数据库备份还原问题
  • 远程备份(还原)SQL2000数据库
  • 求救 数据库备份和还原

关键词

  • sql2000
  • 数据库
  • 作业
  • 文件
  • active
  • returncode
  • 备份
  • quitwithrollback
  • jobid
  • msdb

得分解答快速导航

  • 帖主:BigAngell
  • friendliu
  • zjcxc

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo