第一章、关于SQL Server数据库的备份和还原(sp_addumpdevice、backup、Restore)
在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 语法:
sp_addumpdevice [ @devtype = ] 'device_type' , [ @logicalname = ] 'logical_name' , [ @physicalname = ] 'physical_name' [ , { [ @cntrltype = ] controller_type | [ @devstatus = ] 'device_status' } ]
eg.
添加了一个名为mydiskdump的磁盘备份设备,其物理名称为c:\dump\dump1.bak。
USE master; GO EXEC sp_addumpdevice 'disk', 'mydiskdump', 'c:\dump\dump1.bak';
第一章、关于SQL Server数据库的备份和还原(sp_addumpdevice、backup、Restore)的更多相关文章
- 用分离、附加的方式实现sql server数据库的备份和还原
一.数据库分离.附加的说明 SQL Server提供了"分离/附加"数据库."备份/还原"数据库.复制数据库等多种数据库的备份和恢复方法.这里介绍一种学习中常用 ...
- 数据库开发基础 SQL Server 数据库的备份、还原与分离、附加
认识数据库备份和事务日志备份 数据库备份与日志备份是数据库维护的日常工作,备份的目的是 一.在于当数据库出现故障或者遭到破坏时可以根据备份的数据库及事务日志文件还原到最近的时间点将损失降到最低点 二. ...
- C#对SQL Server数据库的备份与还原
备份数据库: string connectionString = "server=服务器名称;database=数据库名;uid=登入名;pwd=登入密码"; // ...
- 关于 SQL Server 数据库批量备份与还原的一些 Tips
一.前提 最近需要将服务器 A 上的数据库全部备份,并在服务器 B 上进行还原,30多个数据库一个一个地用鼠标点,先是 backup,之后时 restore……整个过程实在是太浪费时间了!于是直接写一 ...
- [数据库]Sql server 数据库的备份和还原____还原数据库提示“介质集有2个介质簇,但只提供了1个。必须提供所有成员”
在对数据库备份与还原的过程中,我遇到一个问题“介质集有2个介质簇,但只提供了1个.必须提供所有成员”,下面详细的介绍一下遇到问题的经过与问题解决的方法! 一.备份与还原遇到的问题描述与解决方法: 前两 ...
- Sql server 数据库的备份和还原数据库提示“ 加载的介质已格式化为支持 1 个介质簇,但根据指定的备份设备,应支持 2 个介质簇”
数据库备份和还原总结 在 "M:\2017-Pro\company\other\databak_2014-10\anquanbaowei_db_201704300200.BAK" ...
- 项目经验——Sql server 数据库的备份和还原____还原数据库提示“介质集有2个介质簇,但只提供了1个。必须提供所有成员” .
在对数据库备份与还原的过程中,我遇到一个问题“介质集有2个介质簇,但只提供了1个.必须提供所有成员”,下面详细的介绍一下遇到问题的经过与问题解决的方法! 一.备份与还原遇到的问题描述与解决方法: 前两 ...
- sql server 数据库代码备份及还原代码
--备份 BACKUP DATABASE [库名称] TO DISK='E:\qq\ddd.bak' --备份并覆盖 BACKUP DATABASE [库名称] TO DISK='E:\qq\ddd. ...
- SQL Server数据库脚本备份与还原
use[master]go /*完整--备份* backup 备份 * disk='E:\USERDB.bak' 磁盘,备份文件存放的路径* name='user' 备份显示的文件名称,可随意修改* ...
随机推荐
- Linux 通过 shell 脚本修改密码
交互方式修改密码 1. ssh 远程到主机: 2. 切换到root账号: [一般都是切换到root进行密码修改,如果普通用户修改自己的密码,要输入原密码,然后新密码要满足复杂度才OK]: 3. pas ...
- jquery ListBox 左右移动
<head runat="server"> <title>无标题页</title> <script type="text/jav ...
- 【转】M0,M1,M2,M3,M4基本概念
在金融学中的M1,M2,M3,M4都是货币层次的划分M0= 流通中的现金;M1=M0+ 个人信用卡循环信用额度+ 银行借记卡活期存款+ 银行承兑汇票余额+ 企业可开列支票活期存款;M2=M1+ 个人非 ...
- .net 将excel转成html文件
最近在做一个打印预览功能,但是开始没有头绪后来用excel做了一个模板,然后根据excel模板来生成新的excel并将其存储为html,可以通过http请求在浏览器中读取,并且打印,其他的不多说.方法 ...
- android 数据存储的四种方式.
Android系统一共提供了四种数据存储方式.分别是:SharePreference.SQLite.Content Provider和File.由于Android系统中,数据基本都是私有的的,都是存放 ...
- PhpExcel数组输出到Excel浏览器下载
经常是mysql查出二维数组,并且数组的带key也是有意义的,考虑到经常用,就打算弄个函数出来,方便以后用! 相对是规范的数组哈,具体可看下$data数组: 生成的excel第一行是对应的key: 直 ...
- 本地调试 Chrome支持Ajax跨域
Ajax本身是不支持跨域的,跨域问题其实很简单,通过浏览器的相应设置可以完成两个不同的服务器或两个不同服务下的项目互相访问.希望大家给予评价及投票. 方法/步骤 1 首先谷歌快捷方式上右击,在下拉列表 ...
- [Oracle]Oracle学习小结(1)
1.查看Oracle数据库中的所有用户: (1)使用具有DBA权限的账户登录数据库: (2)执行select username from dba_users. SQL> conn sys 输入口 ...
- Linux 服务器如何禁止 ping 以及开启 ping
Linux 默认是允许 ping 响应的,也就是说 ping 是开启的,但 ping 有可能是网络攻击的开始之处,所以关闭 ping 可以提高服务器的安全系数.系统是否允许 ping 由2个因素决定的 ...
- 装tortoiseSVN时遇到的坑
今天给新电脑配置开发环境,线上SVN地址申请权限以后,在本地装了tortoiseSVN,可是安装了以后死活打不开.明明浏览器里可以打开SVN地址,但是tortoiseSVN的浏览器里却打不开,摆弄了很 ...