设为首页 收藏本站
查看: 874|回复: 0

[经验分享] 第一章、关于SQL Server数据库的备份和还原(sp_addumpdevice、backup、Restore)

[复制链接]

尚未签到

发表于 2016-11-7 03:48:48 | 显示全部楼层 |阅读模式
  sql server数据库中,备份和还原都只能在服务器上进行,备份的数据文件在服务器上,还原的数据文件也只能在服务器上,当在非服务器的机器上启动sql server客户端的时候,也可以通过该客户端来备份和还原数据库,但是这种操作实质是在服务器上进行的,备份的数据文件在服务器上,还原的数据文件也只能在服务器上,这个原则不会变,只是使用了客户端的一个工具来操作这个过程而已。
1.1、备份数据库
  备份数据库有两种方式:
  第一种是在企业管理器中,利用工具对数据库进行备份,这种备份的文件只会有一个,即以.bak结尾的文件。这种方式下对一个数据库进行备份的时候,可以任意的命名备份文件和后缀,还可以对已备份完成的备份文件进行名字和后缀名的修改,都不会影响文件的恢复,但是备份文件内部已经记录了原来的数据库的.mdf.ldf文件的名字和存储的路径。备份的时候,如果目标文件夹中已经存在了与备份文件名同名的文件,则有两个选项,附加和覆盖,一般选择覆盖.建议:以原数据库名字为备份文件的文件名字,并且以.bak作为后缀名.
  第二种方式是直接找数据库的data文件夹,直接将.mdf.ldf文件拷贝保存。
  
1.2、还原数据库
  还原数据库有两种方式:
  第一种是还原.bak文件,当确定了备份的数据库之后,就可以利用企业管理器来还原了。还原的新数据库名可以是任意的,在option选项里面可以根据当前机器中安装SqlServer 2005 的路径来修改路径,甚至可以修改.mdf.ldf文件的名字,名字只是标识符,任意修改都可以,编译器会把.mdf.ldf文件与新数据库名联系起来的。这样还原后,就生成了.mdf.ldf文件,原来的备份数据文件就可以删除了。还原的时候,如果目标文件夹中已经存在了与还原文件名同名的文件,可以选择覆盖原来的数据文件。建议:还原后还是以原数据库名为还原数据库名,option选项里面不要改名字,只有在有必要的时候修改路径即可.
  第二种是还原.mdf.ldf文件,还原的时候可以用Attach来把.mdf.ldf文件附加上,然后命名新的数据库名,但是这两个文件是不能被删除的,否则就失去了数据源了。建议:把.mdf.ldf文件放到Data文件夹中.还原的数据库名字与原来的数据库名字相同.
  
1.3、与数据库备份和还原相关的两个重要的文件夹:
  ……\Microsoft SQL Server\MSSQL.1\MSSQL\Backup
  -------存放备份的数据文件
  ……\Microsoft SQL Server\MSSQL.1\MSSQL\Data
  --------存放.mdf.ldf文件
  
1.4、通过sql server的命令来备份还原数据库
  我们通常备份数据库时,需要通过sql server客户端登录数据库服务器去备份和恢复,这样很不方便,其实SQL SERVER自带的命令就可以备份和还原数据库。这些命令可以在sqlserver客户端的sql脚本窗口直接执行,也可以很通过ADO.Net调用这些命令实现远程备份和恢复数据库。
  1)、备份还原数据库的命令
  备份:
  BACKUP DATABASE'被备份的数据库名'TODISK = '备份文件路径';
  --注意:被备份的数据库名必须是存在的,否则会出错
  还原:
  --将数据库置于离线状态
  ALTER DATABASE'被恢复的数据库名'SET OFFLINEWITH ROlLBACK IMMEDIATE;
  --恢复数据库
  RESTORE DATABASE '被恢复的数据库名'FROMDISK = '还原文件路径(源文件)';
  --将数据库置于在线状态
  ALTER DATABASE'被恢复的数据库名'SET ONLINEWITH ROlLBACK IMMEDIATE;
  --注意:被恢复的数据库名必须是存在的,并且该数据库将会被覆盖掉,还原文件路径(源文件)必须是存在的,另外,在执行前后的两个ALTER语句的时候,所选择的数据库必须是master
  有时候为了保险起见,ALTER语句可以不要。
  2)、命令应用
  A、可以直接在sql server客户端的sql窗体中执行命令。
  B、可以在数据库上写存储过程,然后配置JOB,定期调用这个存储过程。
  C、通过应用程序的ADO.NET来执行这些命令或者命令组成的存储过程,实现应用程序控制备份还原数据库,这些应用程序可以写成服务,定期调用。
  3)、C#案例
  //备份数据库
  string sql = "backup database qis2006 to disk = '" + Server.MapPath("").ToString() +"\\"
  + bakname+ System.DateTime.Now.DayOfYear.ToString() + System.DateTime.Now.Millisecond.ToString() +".bak'";//备份文件名
  Access acc = new Access();
  acc.ExecuteNoneQuery(sql);
  //还原数据库
  string sql = "Alter Database qis2006 Set Offline with Rollback immediate;";
  sql += "restore database qis2006 from disk = '" ;
  sql += Server.MapPath("").ToString() +"\\";
  sql += bakname + "'"; //bakname 是备份文件名
  sql += "Alter Database qis2006 Set OnLine With rollback Immediate;";
  try
  {
  //连接 master数据库 ;
  //执行 sql 语句;
  Response.Write("<script language=javascript>alert('数据恢复成功!');</script>");
  }
  catch(Exception ex)
  {
  Response.Write("<script language=javascript>alert('数据恢复失败!');</script>");
  this.Label2.Text = ex.ToString();
  }
  4)、存储过程案例
  //备份数据库
  create proc backup_database
  (
  @device_name varchar(80),--备份设备名
  @file_name varchar(125),--备份文件名
  @devicelog_name varchar(85),--日志备份设备名
  @filelog_name varchar(130)--日志备份文件名
  )
  as
  begin
  --创建数据库的备份逻辑设备
  exec sp_addumpdevice 'disk', @device_name,@file_name
  --创建设备逻辑名
  exec sp_addumpdevice 'disk', @devicelog_name, @filelog_name
  backup database testdb to @device_name --备份数据库
  backup log testdb to @devicelog_name --备份日志
  end
  
  //还原数据库
  create proc restore_database
  (
  @device_name varchar(80),
  @devicelog_name varchar(85)
  )
  as
  begin
  Restore database testdb from @device_name
  Restore log testdb @devicelog_name
  end
  2008-06-23

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-296601-1-1.html 上篇帖子: 修改操作系统用户密码,造成SQL Server服务启动失败 下篇帖子: C#100万条数据导入SQL SERVER数据库仅用4秒 (附源码)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表