在sql server数据库中,备份和还原都只能在服务器上进行,备份的数据文件在服务器上,还原的数据文件也只能在服务器上,当在非服务器的机器上启动sql server客户端的时候,也可以通过该客户端来备份和还原数据库,但是这种操作实质是在服务器上进行的,备份的数据文件在服务器上,还原的数据文件也只能在服务器上,这个原则不会变,只是使用了客户端的一个工具来操作这个过程而已。

1.1、备份数据库

备份数据库有两种方式:

第一种是在企业管理器中,利用工具对数据库进行备份,这种备份的文件只会有一个,即以.bak结尾的文件。这种方式下对一个数据库进行备份的时候,可以任意的命名备份文件和后缀,还可以对已备份完成的备份文件进行名字和后缀名的修改,都不会影响文件的恢复,但是备份文件内部已经记录了原来的数据库的.mdf和.ldf文件的名字和存储的路径。备份的时候,如果目标文件夹中已经存在了与备份文件名同名的文件,则有两个选项,附加和覆盖,一般选择覆盖.建议:以原数据库名字为备份文件的文件名字,并且以 .bak作为后缀名.

第二种方式是直接找数据库的data文件夹,直接将.mdf和.ldf文件拷贝保存。

 

1.2、还原数据库

还原数据库有两种方式:

第一种是还原.bak文件,当确定了备份的数据库之后,就可以利用企业管理器来还原了。还原的新数据库名可以是任意的,在option选项里面可以根据当前机器中安装Sql Server 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自带的命令就可以备份和还原数据库。这些命令可以在sql server客户端的sql脚本窗口直接执行,也可以很通过ADO.Net调用这些命令实现远程备份和恢复数据库。

(1)、备份还原数据库的命令

备份:

BACKUP DATABASE'被备份的数据库名'TO DISK = '备份文件路径';

--注意:被备份的数据库名必须是存在的,否则会出错

还原:

--将数据库置于离线状态

ALTER DATABASE'被恢复的数据库名'SET OFFLINE WITH ROlLBACK IMMEDIATE;

--恢复数据库

RESTORE DATABASE '被恢复的数据库名'FROM DISK = '还原文件路径(源文件)';

--将数据库置于在线状态

ALTER DATABASE'被恢复的数据库名'SET ONLINE WITH 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

sp_addumpdevice

备份设备是指为了防止设备系统运转中由于某台关键或易损设备的故障造成整个系统瘫痪,专门预备用于替换故障设备的设备。备份设备有时也简称为“备机”。
备份设备可分为“热备”和“冷备”。热备是指与目标设备共同运转,当目标设备发生故障或停机时,热备设备立即承担起故障设备的工作任务;冷备是指当目标设备发生故障或停机后,冷备设备才开始由停机等待状态进入启动运转状态,并承担起故障设备的工作任务。
sp_addumpdevice 会将一个备份设备添加到 sys.backup_devices 目录视图中。然后便可以在 BACKUP 和 RESTORE 语句中逻辑引用该设备。sp_addumpdevice 不执行对物理设备的任何访问。只有在执行 BACKUP 或 RESTORE 语句后才会访问指定的设备。创建一个逻辑备份设备可简化 BACKUP 和 RESTORE 语句,在这种情况下指定设备名称将代替使用 "TAPE =" 或 "DISK =" 子句指定设备路径。

sp_addumpdevice 语法:

  1. sp_addumpdevice [ @devtype = ] 'device_type'         , [ @logicalname = ] 'logical_name'         , [ @physicalname = ] 'physical_name'       [ , { [ @cntrltype = ] controller_type |           [ @devstatus = ] 'device_status' }       ]
  1. eg.
  1. 添加了一个名为 mydiskdump 的磁盘备份设备,其物理名称为 c:\dump\dump1.bak
  1. USE master; GO EXEC sp_addumpdevice 'disk', 'mydiskdump', 'c:\dump\dump1.bak';

第一章、关于SQL Server数据库的备份和还原(sp_addumpdevice、backup、Restore)的更多相关文章

  1. 用分离、附加的方式实现sql server数据库的备份和还原

    一.数据库分离.附加的说明 SQL Server提供了"分离/附加"数据库."备份/还原"数据库.复制数据库等多种数据库的备份和恢复方法.这里介绍一种学习中常用 ...

  2. 数据库开发基础 SQL Server 数据库的备份、还原与分离、附加

    认识数据库备份和事务日志备份 数据库备份与日志备份是数据库维护的日常工作,备份的目的是 一.在于当数据库出现故障或者遭到破坏时可以根据备份的数据库及事务日志文件还原到最近的时间点将损失降到最低点 二. ...

  3. C#对SQL Server数据库的备份与还原

    备份数据库: string connectionString = "server=服务器名称;database=数据库名;uid=登入名;pwd=登入密码";         // ...

  4. 关于 SQL Server 数据库批量备份与还原的一些 Tips

    一.前提 最近需要将服务器 A 上的数据库全部备份,并在服务器 B 上进行还原,30多个数据库一个一个地用鼠标点,先是 backup,之后时 restore……整个过程实在是太浪费时间了!于是直接写一 ...

  5. [数据库]Sql server 数据库的备份和还原____还原数据库提示“介质集有2个介质簇,但只提供了1个。必须提供所有成员”

    在对数据库备份与还原的过程中,我遇到一个问题“介质集有2个介质簇,但只提供了1个.必须提供所有成员”,下面详细的介绍一下遇到问题的经过与问题解决的方法! 一.备份与还原遇到的问题描述与解决方法: 前两 ...

  6. Sql server 数据库的备份和还原数据库提示“ 加载的介质已格式化为支持 1 个介质簇,但根据指定的备份设备,应支持 2 个介质簇”

     数据库备份和还原总结 在 "M:\2017-Pro\company\other\databak_2014-10\anquanbaowei_db_201704300200.BAK" ...

  7. 项目经验——Sql server 数据库的备份和还原____还原数据库提示“介质集有2个介质簇,但只提供了1个。必须提供所有成员” .

    在对数据库备份与还原的过程中,我遇到一个问题“介质集有2个介质簇,但只提供了1个.必须提供所有成员”,下面详细的介绍一下遇到问题的经过与问题解决的方法! 一.备份与还原遇到的问题描述与解决方法: 前两 ...

  8. sql server 数据库代码备份及还原代码

    --备份 BACKUP DATABASE [库名称] TO DISK='E:\qq\ddd.bak' --备份并覆盖 BACKUP DATABASE [库名称] TO DISK='E:\qq\ddd. ...

  9. SQL Server数据库脚本备份与还原

    use[master]go /*完整--备份* backup 备份 * disk='E:\USERDB.bak' 磁盘,备份文件存放的路径* name='user' 备份显示的文件名称,可随意修改* ...

随机推荐

  1. 选用 get 与 post 的一些建议

    1.http的请求方法:get  post 2. get:会把请求的内容  放到链接地址里面(数据请求的时候  默认的是get请求) 例:www.baidu.com/user/login?userna ...

  2. SQLite的简单应用

    安装部署 1)进入 SQL 下载页面:http://www.sqlite.org/download.html 2)下载预编译二进制文件包. Windows 环境的如下: 下载完之后,就算部署完成.(P ...

  3. ICallbackEventHandler 接口实现回调处理功能

    在最近的项目实现中遇到了一个问题 在数据处理的过程中,需要请求获取数据,再做处理之后,可以在页面及时获取数据 开始时,首先想到的到是写Ajax请求,但在做后续数据处理后,处理获取数据等操作,感觉实现起 ...

  4. c#基础学习汇总----------继承

    封装,继承,多态.这是面向对象的思想,也可以说是最基本的东西.说到继承,直接的说他就是面向对象中类与类之间的一种关系.通过继承,使得子类具有父类公有的受保护访问权限的属性和方法,同时子类可以通过加入新 ...

  5. class不想被复制的两个做法

    1,当一个class不想被复制的时候,可以将copy构造函数和copy assignment操作符声明为private.(只声明不定义,因此可以不指定函数参数) 2,或者,继承一个专门为了阻止copy ...

  6. WMB代理无法正常启动时的解决方案。

     情况:执行了启动命令,查看状态的时候 还是停止..再启动,又说已经启动了..   解决方案:正常情况在hosts文件加一条记录:主机IP和hostname的映射关系就好了

  7. asp.net导出Excel 按照预定格式,以及解决导出乱码

    protected void ToExcel() { //新建一个Gridview,原因:避免当前窗口GridView外层没有直接跟form标签,从而避免“gridview1未包含在run='serv ...

  8. DTCMS一些问题

    站点管理,主站和手机站同时绑定不同域名 手机站会报错,解决方法为 主站不绑定 手机站绑定 关键问题为:不能和主站域名相同 PC模版文件下的JS文件夹下的commen.js和手机模版下的JS文件夹下的b ...

  9. android.intent.action.MAIN 与 android.intent.category.LAUNCHER 的验证理解

    第一种情况:有MAIN,无LAUNCHER,程序列表中无图标 原因:android.intent.category.LAUNCHER决定应用程序是否显示在程序列表里  第二种情况:无MAIN,有LAU ...

  10. (转)Mac OS X内核编程,MAC驱动开发资源汇总

    一.Mac  OS  X内核编程开发官方文档: I/O Kit Fundamentals: I/O Kit基础 - Mac OS X系统内核编程 https://developer.apple.com ...