CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
英特尔®游戏设计大赛100美元现金周周送 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  疑难问题

有关数据库的备份与恢复

楼主duola1(朵啦)2003-09-04 13:38:47 在 MS-SQL Server / 疑难问题 提问

本人要实现数据库的备份与恢复功能,初次使用BACKUP和RESTORE语句,在设计过程中有些疑惑想请教专家:  
  问题1:  
  用backup   database   aa   to   disk='c:\aa.bak'   with   init备份数据库后还有必要用backup   log   aa   to   disk='c:\aa.dat'   with   init,no_truncate备份日志吗?  
  backup语句的WITH子句的选项一般要怎么设置?  
  问题2:  
  用restore   database   aa   from   disk='c:\aa.bak'   with   replace恢复数据库后还要用restore   log   aa   from   disk='c:\aa.dat'恢复日志吗?  
  restore语句的WITH子句的选项一般要怎么设置?  
  问题3:  
  restore   database   aa   from   disk='c:\aa.bak'   WITH   NORECOVERY  
  restore   log   aa   from   disk='c:\aa.dat'   WITH   NORECOVERY  
  这两条语句中的NORECOVERY选项实现什么功能?  
  问题4:  
  各位专家在实际开发中是怎么实现数据库的备份与恢复的?backup和restore语句是怎么写的?  
  盼复,THANKS! 问题点数:100、回复次数:9Top

1 楼yujohny(踏网无痕)回复于 2003-09-04 13:43:37 得分 10

联机帮助上应该都说清楚了吧Top

2 楼tj_dns(愉快的登山者)回复于 2003-09-04 14:17:07 得分 10

是呀,看一看帮助吧。这里就不帖出来了。  
  1。不需要立即备份日志;  
  2。也就不需要恢复日志;  
  3。一般使用WITH   RECOVERY这是默认值。  
  Top

3 楼txlicenhe(马可)回复于 2003-09-04 14:20:19 得分 10

1:企业管理器  
  2:  
  /************   备份     恢复   *******  
  backup   database   sys   to   disk='c:\目录\a.bak'   with   init  
  调用存储过程xp_CmdShell:  
  master..xp_cmdShell   'bcp   pubs..authors2   out   c:\authors.txt   -Sservername   -Usa   -Ppassword'  
   
  --还原    
  use   master  
  RESTORE   DATABASE   TestDB   FROM   DISK   =   'c:\目录\a.bak'    
  Top

4 楼eminena(俄罗斯方块)回复于 2003-09-04 14:27:11 得分 10

A.   备份整个   MyNwind   数据库  
   
   
  说明     MyNwind   数据库仅用于演示。  
   
   
  下例创建用于存放   MyNwind   数据库完整备份的逻辑备份设备。  
   
  --   Create   a   logical   backup   device   for   the   full   MyNwind   backup.  
  USE   master  
  EXEC   sp_addumpdevice   'disk',   'MyNwind_1',    
        DISK   ='c:\Program   Files\Microsoft   SQL   Server\MSSQL\BACKUP\MyNwind_1.dat'  
   
  --   Back   up   the   full   MyNwind   database.  
  BACKUP   DATABASE   MyNwind   TO   MyNwind_1  
   
  B.   备份数据库和日志  
  本例创建了一个数据库和日志的完整备份。将数据库备份到称为   MyNwind_2   的逻辑备份设备上,然后将日志备份到称为   MyNwindLog1   的逻辑备份设备上。    
   
   
   
  说明     创建逻辑备份设备需要一次完成。  
   
   
  --   Create   the   backup   device   for   the   full   MyNwind   backup.  
  USE   master  
  EXEC   sp_addumpdevice   'disk',   'MyNwind_2',  
        'c:\Program   Files\Microsoft   SQL   Server\MSSQL\BACKUP\MyNwind_2.dat'  
   
  --Create   the   log   backup   device.  
  USE   master  
  EXEC   sp_addumpdevice   'disk',   'MyNwindLog1',  
        'c:\Program   Files\Microsoft   SQL   Server\MSSQL\BACKUP\MyNwindLog1.dat'  
   
  --   Back   up   the   full   MyNwind   database.  
  BACKUP   DATABASE   MyNwind   TO   MyNwind_2  
   
  --   Update   activity   has   occurred   since   the   full   database   backup.  
   
  --   Back   up   the   log   of   the   MyNwind   database.  
  BACKUP   LOG   MyNwind    
        TO   MyNwindLog1  
   
  Top

5 楼eminena(俄罗斯方块)回复于 2003-09-04 14:29:47 得分 0

A.   还原完整数据库  
   
   
  说明     MyNwind   数据库仅供举例说明。  
   
   
  下例显示还原完整数据库备份。  
   
  RESTORE   DATABASE   MyNwind    
        FROM   MyNwind_1  
   
  B.   还原完整数据库备份和差异备份  
  下例还原完整数据库备份后还原差异备份。另外,下例还说明如何还原媒体上的另一个备份集。差异备份追加到包含完整数据库备份的备份设备上。  
   
  RESTORE   DATABASE   MyNwind  
        FROM   MyNwind_1  
        WITH   NORECOVERY  
  RESTORE   DATABASE   MyNwind  
        FROM   MyNwind_1  
        WITH   FILE   =   2  
   
  C.   使用   RESTART   语法还原数据库  
  下例使用   RESTART   选项重新启动因服务器电源故障而中断的   RESTORE   操作。  
   
  --   This   database   RESTORE   halted   prematurely   due   to   power   failure.  
  RESTORE   DATABASE   MyNwind  
        FROM   MyNwind_1  
  --   Here   is   the   RESTORE   RESTART   operation.  
  RESTORE   DATABASE   MyNwind    
        FROM   MyNwind_1   WITH   RESTART  
   
  D.   还原数据库并移动文件  
  下例还原完整数据库和事务日志,并将已还原的数据库移动到   C:\Program   Files\Microsoft   SQL   Server\MSSQL\Data   目录下。  
   
  RESTORE   DATABASE   MyNwind  
        FROM   MyNwind_1  
        WITH   NORECOVERY,    
              MOVE   'MyNwind'   TO   'c:\Program   Files\Microsoft   SQL   Server\MSSQL\Data\NewNwind.mdf',    
              MOVE   'MyNwindLog1'   TO   'c:\Program   Files\Microsoft   SQL   Server\MSSQL\Data\NewNwind.ldf'  
  RESTORE   LOG   MyNwind  
        FROM   MyNwindLog1  
        WITH   RECOVERY  
   
  E.   使用   BACKUP   和   RESTORE   创建数据库的复本  
  下例显示使用   BACKUP   和   RESTORE   语句创建   Northwind   数据库的复本。MOVE   语句使数据和日志文件还原到指定的位置。RESTORE   FILELISTONLY   语句用于确定待还原数据库内的文件数及名称。该数据库的新复本称为   TestDB。有关更多信息,请参见   RESTORE   FILELISTONLY。    
   
  BACKUP   DATABASE   Northwind    
        TO   DISK   =   'c:\Northwind.bak'  
  RESTORE   FILELISTONLY    
        FROM   DISK   =   'c:\Northwind.bak'  
  RESTORE   DATABASE   TestDB    
        FROM   DISK   =   'c:\Northwind.bak'  
        WITH   MOVE   'Northwind'   TO   'c:\test\testdb.mdf',  
        MOVE   'Northwind_log'   TO   'c:\test\testdb.ldf'  
  GO  
   
  F.   使用   STOPAT   语法还原到即时点和使用多个设备进行还原  
  下例将数据库还原到其在   1998   年   4   月   15   日中午   12   点时的状态,并显示涉及多个日志和多个备份设备的还原操作。  
   
  RESTORE   DATABASE   MyNwind  
        FROM   MyNwind_1,   MyNwind_2  
        WITH   NORECOVERY  
  RESTORE   LOG   MyNwind  
        FROM   MyNwindLog1  
        WITH   NORECOVERY  
  RESTORE   LOG   MyNwind  
        FROM   MyNwindLog2  
        WITH   RECOVERY,   STOPAT   =   'Apr   15,   1998   12:00   AM'  
   
  G.   使用   TAPE   语法还原  
  下例显示从   TAPE   备份设备还原完整数据库备份。  
   
  RESTORE   DATABASE   MyNwind    
        FROM   TAPE   =   '\\.\tape0'  
   
  H.   使用   FILE   和   FILEGROUP   语法还原  
  下例还原一个包含两个文件、一个文件组和一个事务日志的数据库。  
   
  RESTORE   DATABASE   MyNwind  
        FILE   =   'MyNwind_data_1',  
        FILE   =   'MyNwind_data_2',  
        FILEGROUP   =   'new_customers'  
        FROM   MyNwind_1  
        WITH   NORECOVERY  
  --   Restore   the   log   backup.  
  RESTORE   LOG   MyNwind  
        FROM   MyNwindLog1  
   
  I.   将事务日志还原到标记处  
  下例显示将事务日志还原到名为"RoyaltyUpdate"的标记处。  
   
  BEGIN   TRANSACTION   RoyaltyUpdate    
        WITH   MARK   'Update   royalty   values'  
  GO  
  USE   pubs  
  GO  
  UPDATE   roysched  
        SET   royalty   =   royalty   *   1.10  
        WHERE   title_id   LIKE   'PC%'  
  GO  
  COMMIT   TRANSACTION   RoyaltyUpdate  
  GO  
  --Time   passes.   Regular   database    
  --and   log   backups   are   taken.  
  --An   error   occurs.  
  USE   master  
  GO  
   
  RESTORE   DATABASE   pubs  
  FROM   Pubs1  
  WITH   FILE   =   3,   NORECOVERY  
  GO  
  RESTORE   LOG   pubs  
        FROM   Pubs1  
        WITH   FILE   =   4,  
        STOPATMARK   =   'RoyaltyUpdate'  
   
  Top

6 楼duola1(朵啦)回复于 2003-09-04 17:12:50 得分 0

我想知道的是:大家在实际中的用法,而不是SQL SERVER的联机帮助.Top

7 楼txlicenhe(马可)回复于 2003-09-04 19:28:47 得分 10

实际中,我以前用企业管理器中建JOB定时备份,现(因一台服务器上有好几个数据库)通过建一个“数据库维护计划”来备份的。  
   
  Top

8 楼nboys()回复于 2003-09-04 19:35:27 得分 10

--查看备份信息  
  RESTORE   FILELISTONLY   FROM   DISK   ='C:\Program   Files\Microsoft   SQL   Server\MSSQL\BACKUP\db1_backup'  
   
  --还原旧的备份    
  RESTORE   DATABASE   db2   FROM   DISK   =   'C:\Program   Files\Microsoft   SQL   Server\MSSQL\BACKUP\db1_backup'   with   replace,norecovery,  
  move   'db1_Data'   to   'C:\Program   Files\Microsoft   SQL   Server\MSSQL\data\db2_data.mdf',  
    move   'db1_Log'   to   'C:\Program   Files\Microsoft   SQL   Server\MSSQL\data\db2_log.ldf'    
   
  其中db2_data.mdf和db2_log.ldf是要的还原数据库的位置,db1_Data和db1_Log是要还原数据库的逻辑文件名  
   
  --还原数据日志到时间点  
  restore   log     db2     from   disk='db_log_backup'     with   stopat='2003/4/22   9:57'Top

9 楼nboys()回复于 2003-09-04 19:40:10 得分 40

1.不必要,  
  [   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   ]   ]    
  ]  
   
  2.不需要,  
  [   WITH  
          [   RESTRICTED_USER   ]  
          [   [   ,   ]   FILE   =   {   file_number   |   @file_number   }   ]  
          [   [   ,   ]   PASSWORD   =   {   password   |   @password_variable   }   ]  
          [   [   ,   ]   MEDIANAME   =   {   media_name   |   @media_name_variable   }   ]  
          [   [   ,   ]   MEDIAPASSWORD   =   {   mediapassword   |   @mediapassword_variable   }   ]  
          [   [   ,   ]   MOVE   'logical_file_name'   TO   'operating_system_file_name'   ]  
                          [   ,...n   ]  
          [   [   ,   ]   KEEP_REPLICATION   ]  
          [   [   ,   ]   {   NORECOVERY   |   RECOVERY   |   STANDBY   =   undo_file_name   }   ]  
          [   [   ,   ]   {   NOREWIND   |   REWIND   }   ]  
          [   [   ,   ]   {   NOUNLOAD   |   UNLOAD   }   ]  
          [   [   ,   ]   REPLACE   ]  
          [   [   ,   ]   RESTART   ]  
          [   [   ,   ]   STATS   [   =   percentage   ]   ]    
  ]  
   
  3.  
   
  NORECOVERY  
   
  指示还原操作不回滚任何未提交的事务。如果需要应用另一个事务日志,则必须指定   NORECOVERY   或   STANDBY   选项。如果   NORECOVERY、RECOVERY   和   STANDBY   均未指定,则默认为   RECOVERY。  
   
  当还原数据库备份和多个事务日志时,或在需要多个   RESTORE   语句时(例如在完整数据库备份后进行差异数据库备份),SQL   Server   要求在除最后的   RESTORE   语句外的所有其它语句上使用   WITH   NORECOVERY   选项。  
   
   
   
  说明     如果指定   NORECOVERY   选项,数据库将处于这个中间的未恢复状态而不可用。  
   
   
  当用于文件或文件组还原操作时,NORECOVERY   强制数据库在还原操作结束后保持还原状态。这在以下情况中很有用:    
   
  还原脚本正在运行并且始终要应用日志。  
   
   
  使用文件还原序列,并且在两次还原操作之间不能使用数据库。    
   
   
  4.  
  --查看备份信息  
  RESTORE   FILELISTONLY   FROM   DISK   ='C:\Program   Files\Microsoft   SQL   Server\MSSQL\BACKUP\db1_backup'  
   
  --还原旧的备份    
  RESTORE   DATABASE   db2   FROM   DISK   =   'C:\Program   Files\Microsoft   SQL   Server\MSSQL\BACKUP\db1_backup'   with   replace,norecovery,  
  move   'db1_Data'   to   'C:\Program   Files\Microsoft   SQL   Server\MSSQL\data\db2_data.mdf',  
    move   'db1_Log'   to   'C:\Program   Files\Microsoft   SQL   Server\MSSQL\data\db2_log.ldf'    
   
  其中db2_data.mdf和db2_log.ldf是要的还原数据库的位置,db1_Data和db1_Log是要还原数据库的逻辑文件名  
   
  --还原数据日志到时间点  
  restore   log     db2     from   disk='db_log_backup'     with   stopat='2003/4/22   9:57'  
  Top

相关问题

  • 有关SyBase数据库恢复备份的简单问题?
  • 有关SQLSERVER 2000数据库备份与恢复的问题?急!!!
  • sybase数据库如何恢复备份?
  • 如何备份\恢复数据库?
  • 数据库备份与恢复问题??
  • 怎样恢复备份的数据库?
  • 数据库备份几恢复问题
  • 数据库备份与恢复
  • DB2怎样备份/恢复数据库
  • asa数据库备份和恢复

关键词

  • 数据库
  • 语句
  • mssql
  • database
  • 选项
  • 逻辑
  • 文件
  • mynwind
  • 备份
  • 还原

得分解答快速导航

  • 帖主:duola1
  • yujohny
  • tj_dns
  • txlicenhe
  • eminena
  • txlicenhe
  • nboys
  • nboys

相关链接

  • SQL Server类图书

广告也精彩

反馈

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