实验六 数据库备份与恢复.docx
- 文档编号:6054570
- 上传时间:2023-05-09
- 格式:DOCX
- 页数:20
- 大小:800.40KB
实验六 数据库备份与恢复.docx
《实验六 数据库备份与恢复.docx》由会员分享,可在线阅读,更多相关《实验六 数据库备份与恢复.docx(20页珍藏版)》请在冰点文库上搜索。
实验六数据库备份与恢复
《数据库原理》实验报告
一.实验目的:
●了解备份还原的概念
●掌握SQLServer的备份方法
●会选择适合的备份策略
●掌握常见故障的还原方法
一、实验使用环境:
SQLserver2012
二、实验内容与完成情况:
1.用系统内置的存储过程sp_addumpdevice创建一个备份设备SalesDatabase_Bak,保存在D盘根目录下,查看系统中有哪些备份设备。
--题目1
--在E:
\Sale_bak创建本地磁盘备份文件
execsp_addumpdevice'disk','SalesDatabase_Bak','E:
\Sale_bak'
--查看系统有哪些备份设备
execsp_helpdevice
运行截图:
也可手动创建:
实验小结:
通过代码可以看到,添加一个名为SalesDatabase_Bak的磁盘备份设备,物理名为E:
\Sale_bak,且在数据库目录中:
/服务器对象/备份设备/,目录下可以看到名为SalesDatabase_Bak的备份设备。
2.为销售管理数据库设置一个备份计划,名为SaleBackPlan,要求每天在上午12:
00:
00和下午12:
00:
00之间每2小时执行数据库日志备份。
操作过程:
连接数据库,在管理列表中找到维护计划,右键点击维护计划选择维护计划向导,名称为:
SaleBackPlan.
点击更改:
进行以下设置:
选择SaleBackPlan执行计划,计划类型为:
重复执行。
频率为:
每天执行,每天执行的频率为:
开始时间为12点,结束时间为0点,间隔为2小时,最下方说明中有详细的介绍。
点击下一步,选择备份数据库(事务日志)
选择特定数据库且为销售管理数据库:
操作完成:
实验小结:
本题操作过程并不复杂,但是需要提前知道操作流程,注意细节问题即可
3.新建一个数据库Sa1es1,使用DTS向导将前面已建的Sales数据库中的所有表导入到Sales1数据库中。
要求不立即运行,而是创建一个Sales备份包,然后再执行运行。
操作过程:
数据源为销售管理数据库
目标为Sale1数据库
选择所有表:
默认为:
立即执行,此处按照题目要求选择保存SSIS包:
包名为Sale1备份包
成功执行:
以管理员方式打开SQLServer
连接完成后可以找到之前建立的SSIS包,右击,运行包。
操作完成后可以看到成功导入所有表和数据。
4.用命令方式实现下列功能:
1)在D盘根目录创建一个名为:
Sales备份的本地磁盘备份文件
2)查看系统中有哪些备份设备。
3)创建数据库Sales的完全备份
4)创建数据库Sales的事务日志备份。
5)从备份设备Sales备份的完整数据库备份中恢复数据库Sales。
6)删除特定备份设备。
7)创建储存过程,实现备份数据库,输入二个参数,第一个是数据库名,第二个参数是备份类型。
并以当前系统时间作为备份名。
例如:
备份名为:
stu_2019-0606.bak
1)在E盘根目录创建一个名为:
Sales备份的本地磁盘备份文件
--在d:
\Sale_bak创建本地磁盘备份文件
execsp_addumpdevice'disk','Sales','E:
\'
2)查看系统中所有备份设备。
--查看系统有哪些备份设备
execsp_helpdevice
运行结果:
3)创建数据库Sales的完全备份
--创建销售管理的完全备份
backupdatabase销售管理toDisk_sales
运行结果:
4)创建数据库Sales的事务日志备份。
--创建数据库Sales的事务日志备份。
BACKUPLOG销售管理toSalesWITHNORECOVER
运行结果:
5)从备份设备Sales备份的完整数据库备份中恢复数据库Sales。
--从备份设备Sales的完整数据库备份中恢复数据库销售管理
usemaster
restoredatabase销售管理fromSales
运行结果:
6)删除备份设备。
--删除是备份设备
execsp_dropdevice'Sales'
运行结果:
前后对比:
7)创建储存过程,实现备份数据库,输入二个参数,第一个是数据库名,第二个参数是备份类型。
并以当前系统时间作为备份名。
例如:
备份名为:
stu_2019-0606.bak
go
createprocpro_backup
@DatabaseNamevarchar(20),--输入要备份的数据库名
@Typechar(15)--输入的备份类型(支持完整备份、差异备份、日志备份)
as
begin
declare@namechar(30)
declare@sqlvarchar(255)
set@name=@DatabaseName+'_'+
convert(varchar,datepart(yy,Getdate()))+'-'+
convert(varchar,datepart(mm,Getdate()))+'-'+
convert(varchar,datepart(dd,Getdate()))+'-'+
'.bak'
set@sql='backupdatabase'+@DatabaseName+'todisk='+'''e:
\'+@name+''''--备份代码,初始为完整备份
if@Type='差异备份'
begin
set@sql=@sql+'withdifferential'--将代码改为差异备份
print@sql
end
elseif@Type='完整备份'
begin
set@sql=@sql--如果是完整备份,不进行改变
end
elseif@Type='日志备份'
begin
set@sql='backuplog'+@DatabaseName+'todisk='+'''h:
\'+@name+''''--将代码改为备份
end
else--若三种都不是
begin
print'输入错误,请重新输入'
return
end
execute(@sql)--运行sql代码
end
测试代码:
Execpro_backup'stu','完整备份'
Execpro_backup'stu','差异备份'
、
运行结果:
且E盘根目录下存在该备份文件
‘
解题思路:
本题使用存储过程,将数据库名和备份类型输入,存储过程里声明@sql,并对@sql进行赋值,赋值内容为完整备份的方式备份数据库的代码。
然后用if…elseif…进行判断,判断输入的备份类型,并在符合条件的条件语句中对@sql进行修改,在循环结束后用exec运行@sql所包含的代码。
5.管理员对数据库执行了一次完整备份和多次日志备份,并且备份文件保持良好。
某天数据文件遭到破坏,管理员需要尽快恢复数据。
验证数据是否和破坏前一致,自已给出测试数据。
实现思路:
添加数据至数据库中
停止服务更改数据文件名,模拟数据文件破坏
SQLServer可以使用事务日志重做己确认的事务
还原完整+事务日志备份
数据库结构:
数据表C的数据:
进行完整备份
更改数据库数据后:
进行日志备份:
再次更改数据:
再次进行日志备份:
更改数据表名称C为test:
开始恢复备份:
可以看到在还原界面,一共有三次记录,其中一次是完整备份,两次事务日志备份,先选择完整性备份进行还原:
恢复结果:
表名成功还原
数据成功还原:
下面开始恢复日志备份:
选择完整备份与日志备份进行还原:
数据库第一次更改内容成功还原:
下面进行第二次日志的还原:
成功恢复第二次日志备份的数据:
三、出现的的问题及解决方案(列出遇到的问题和解决办法,列出没有解决的问题)
问题:
还原数据库时显示还原数据库无效:
解决办法:
出现报错是因为数据库正在使用,关闭当前数据库即可。
问题:
还原数据库时,数据库一直处于正在还原状态,无法对数据库进行任何操作。
解决办法:
主要时因为恢复进程被挂起了,将数据库恢复并且回到可访问状态,需要执行:
RESTOREdatabase销售管理withrecovery
使恢复过程能完全结束解决问题。
问题:
导出到SSIS包之后不知如何执行SSIS包。
解决办法:
询问老师后得知需要打开代理服务器,并且以IntergrationServices的方式认证登录数据库,再在其中进行操作。
问题:
以上操作,点击登陆时报错。
解决办法:
以管理员方式打开,即可解决问题。
问题:
备份时报错:
解决办法:
在非根目录备份。
问题:
用getdate()方法输出如下时间格式,不符合要求
解决办法:
修改获取时间格式的方式。
四、实验小结。
本次实验主要内容涉及备份与恢复,本次实验之前,对有关备份的各种概念都搞不太清楚,上课听的有点糊里糊涂,但是这次试验通过查找各种资料以及实验的验证等之后,对这些有了更深层次的了解:
1.完全备份:
对整个目标数据库进行完全备份,包括系统和数据。
这种备份方式的好处就是很直观,容易被人理解,当数据丢失时容易恢复。
但是它也有不足之处:
若每次都对数据进行完全备份,在备份数据中有大量重复的数据,这些重复的数据占用大量的存储空间;并且,由于需要备份的数据量相当大,因此备份所需的时间比较长。
2.差异备份:
每次备份的数据是相对于上一次完全备份之后增加和修改过的数据。
它以前一次完全备份为基础,备份完全备份之后变化的数据文件、日志文件以及数据库中其它被修改的内容。
因此,差异备份通常比全备份占用的时间小且执行速度快,但是会增加备份的复杂程度。
3.事务日志备份:
日志备份不备份数据库本身,它只是备份日志记录,从而只备份上次备份(差异备份或者日志备份)之后到当前备份时间发生变化的日志内容。
一般情况下,日志备份比完整备份和差异备份使用的资源少,因此可以更频繁的使用日志备份,以减少数据丢失的风险。
除此之外,SQLserver还能根据时间线进行恢复:
尽管本次实验大多为直接进行操作,且感觉直接操作不仅方便而且直观,遇到的bug少,但是在实验过程中也在努力尝试使用命令的方式实现备份,其中也遇到了挺多问题,有的代码不能很好的理解含义,但是用命令和直接操作处理相同的问题时,进行对比后就明了了很多。
第四题的第七小问是做的最久的一题,因为此题需要用存储过程对输入数据进行操作,过程较复杂,标点符号容易出错,但是在各方面力量的帮助下成功解决了此题。
本次实验操作较多,并不想之前实验类型一样去解决感觉距离较远的问题,而是备份恢复这种平时也会用到的应用,不仅理解了很多之前不理解的概念,在操作上也更加熟练,收获颇多。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验六 数据库备份与恢复 实验 数据库 备份 恢复