附加SQL Server 备份和恢复Word文档格式.docx
《附加SQL Server 备份和恢复Word文档格式.docx》由会员分享,可在线阅读,更多相关《附加SQL Server 备份和恢复Word文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
在完整数据库备份之后执行的所有事务日志备份或在特定事务日志备份之前执行的差异备份(如果您还原了差异备份)。
如果你设置了恢复模式为【简单】,你将无法使用【事务日志】备份。
SQLServer2000和SQLServer2005:
创建事务日志备份,您必须使用完整恢复或大容量日志记录恢复模型。
数据库属性选项—>
恢复模式
部分备份:
通过指定READ_WRITE_FILEGROUPS创建的备份称为“部分备份”。
在简单恢复模式下,只允许对只读文件组执行文件组备份。
还原的数据备份类型:
数据库备份、部分备份或文件备份。
对于数据库备份或部分备份,日志备份序列必须从数据库备份或部分备份的结尾处开始延续。
对于一组文件备份,日志备份序列必须从整组文件备份的开头开始延续。
文件备份:
“文件备份”包含一个或多个文件(或文件组)中的所有数据。
日志链:
连续的日志备份序列称为“日志链”。
日志链从数据库的完整备份开始。
通常,仅当第一次备份数据库时,或者将恢复模式从简单恢复模式切换到完整恢复模式或大容量日志恢复模式之后,才会开始一个新的日志链。
除非在创建完整数据库备份时选择覆盖现有备份集,否则现有的日志链将保持不变。
在该日志链保持不变的情况下,便可从媒体集中的任何完整数据库备份还原数据库,然后再还原相应恢复点之前的所有后续日志备份。
恢复点可以是上次日志备份的结尾,也可以是任何日志备份中的特定恢复点。
一个备份方案例子:
某个站点在星期天晚上执行完整数据库备份。
在白天每隔4小时制作一个事务日志备份集,并用当天的备份重写头一天的备份。
每晚则进行差异备份。
如果数据库的某个数据磁盘在星期四上午9:
12出现故障,则该站点可以:
1)
备份当前事务日志;
(已经出现故障了,如何备份当前事务日志?
2)
还原从星期天晚上开始的数据库备份;
3)
还原从星期三晚上开始的差异备份,将数据库前滚到这一时刻;
4)
还原从早上4点到8点的事务日志备份,以将数据库前滚到早上8点;
5)
还原故障之后的日志备份。
这将使数据库前滚到故障发生的那一刻。
二、还原步骤
创建一个叫TestBackup的数据库,创建一张叫Table1的表,这个时候进行一次完整备份,备份文件为:
TestBackupDB-full.bak;
接着创建表Table2后进行差异备份,备份文件为:
TestBackupDB-diff.bak;
接着创建表Table3后进行事务日志备份(如果数据库设置了恢复模式为【简单】,那么在备份类型选项中将看不到【事务日志】),备份文件为:
TestBackupDB-log.bak;
创建一个叫TestBackup2的数据库,用于测试TestBackup数据库的备份文件的还原。
(图1:
创建库结构)
(图2:
备份类型)
下面我们就可以对三个备份文件:
TestBackupDB-full.bak、TestBackupDB-diff.bak、TestBackupDB-log.bak进行还原:
步骤1:
还原完整备份文件TestBackupDB-full.bak,选项如图4、图5所示,还原成功后数据列表就会如图6所示,这是因为恢复状态选项:
不对数据库执行任何操作,不回滚未提交的事务。
可以还原其他事务日志。
(RESTOREWITHNORECOVERY)
(图3:
进入SSMS还原)
(图4:
还原常规)
(图5:
还原选项)
(图6:
完整备份还原)
步骤2:
还原差异备份文件TestBackupDB-diff.bak,操作如步骤1所示,这个时候的数据库还是跟图6的状态一样的。
步骤3:
还原事务日志备份文件TestBackupDB-log.bak,如图7进入事务日志的还原操作界面;
看图8的选项中有指定事务的时间进行还原(还原过程中的恢复状态都是默认为RESTOREWITHRECOVERY,所以这里没有提及这个选项)。
还原后的TestBackup2数据库,还原之后的数据库TestBackup2如图9所示。
(图7:
进入事务日志)
(图8:
事务日志)
(图9:
还原后的数据库)
三、升级
通常来说文章写到这里就应该结束了,但是很幸运,再给你介绍一下如何在对表进行分区后的还原操作,从上面的操作来看只包括了mdf和ldf文件,但如果多了几个ndf文件,这些还原又一样吗?
所以我称这部分的内容为升级。
情景一:
如果本来就有对应的分区文件的,只要在还原的时候修改【还原为】的文件名就可以进行还原了。
情景二:
如果刚刚新建了分区文件组和文件,这个时候接着还原备份就会出现图10的错误(不知道是不是在SQLServer2005的问题);
要解决这个问题有两个方法,第一个:
重启数据库服务再还原;
第二个:
设置数据库的【限制访问】设置为【Single】;
(图10:
错误)
例如:
每天早上07:
00完整备份,如果在18:
02服务器挂了,而你只有你的备份文件话,今天07:
00到18:
03的数据变化就没了。
如果有日志备份的话,10分钟备份一次,你可以恢复到18:
00的数据;
创建事务日志备份序列
为创建备份集,通常应定期生成数据库备份(如每天),并以更短的间隔生成事务日志备份(如每隔
10分钟)。
必须至少有一个数据库备份或覆盖的文件备份集,才能有效地进行日志备份。
备份之间的间隔因数据的关键性和服务器的工作负荷而异。
如果事务日志损坏,则将丢失自最新的日志备份后所执行的工作。
为此,建议经常对关键数据进行日志备份,并注意将日志文件放在容错存储上。
事务日志备份序列独立于数据库备份。
可以生成一个事务日志备份序列,然后定期生成用于开始还原操作的数据库备份。
例如,假设有下列事件序列。
时间
事件
上午
08:
00
备份数据库
中午
12:
00备份事务日志
下午
16:
备份事务日志
18:
晚上
20:
22:
出现故障
晚上20:
00创建的事务日志备份包含从下午16:
00到晚上22:
00的事务日志记录,中间跨越下午18:
00创建数据库备份的时间。
事务日志备份序列从上午08:
00创建的初始数据库备份到晚上22:
00
创建的最后一次事务日志备份是连续的。
可以使用下列两种过程将数据库还原到晚上
10:
的状态(故障点):
1使用最后一次创建的数据库备份还原数据库
1)创建当前活动事务日志的备份(如果能备份的话);
2)还原下午18:
的数据库备份;
3)应用晚上
20:
00的数据库备份和活动事务日志备份。
还原进程检测到晚上20:
00的事务日志备份包含自上次还原备份后所发生的事务。
因此,还原操作向下扫描事务日志直至下午18:
00完成数据库备份时对应的即时点,并且只前滚事务日志备份内自该点后所完成的事务。
4)对晚上10:
00的事务日志备份再执行一次上述操作。
2使用以前的数据库备份(早于最后一次创建的数据库备份)还原数据库。
创建当前活动事务日志的备份。
还原上午08:
00的数据库备份,然后按顺序还原全部四个事务日志备份。
不要还原下午18:
的数据库备份。
所有完成的事务都将前滚到晚上
00。
这个进程所用的时间比还原下午
00的数据库备份要长。
第二种还原数据库的方法注重由事务日志备份链所提供的冗余安全性,使用这个事务日志备份链,即使数据库备丢失份,也可以还原数据库。
可以还原以前的数据库备份,然后还原创建该数据库备份后所创建的所有事务日志备份。
说明
不丢失事务日志备份很重要。
可考虑生成日志备份集的多个复本。
为此,可以将日志备份到磁盘,然后将磁盘文件复制到其它设备,如单独的磁盘或磁带。
SqlServer自动备份设置
管理—》维护计划
从工具箱中选择需要维护的任务
企业管理器中的Tools,DatabaseMaintenancePlanner,可以设置数据库的定期自动备份计划。
并通过启动SqlserverAgent来自动运行备份计划。
具体步骤如下:
1、打开企业管理器,在控制台根目录中依次点开MicrosoftSQLServer-->
SQLServer组-->
双击打开你的服务器
2、然后点上面菜单中的工具-->
选择数据库维护计划器
3、下一步选择要进行自动备份的数据-->
下一步更新数据优化信息,这里一般不用做选择-->
下一步检查数据完整性,也一般不选择
4、下一步指定数据库维护计划,默认的是1周备份一次,点击更改选择每天备份后点确定
5、下一步指定备份的磁盘目录,选择指定目录,如您可以在D盘新建一个目录如:
d:
/databak,然后在这里选择使用此目录,如果您的数据库比较多最好选择为每个数据库建立子目录,然后选择删除早于多少天前的备份,一般设定4-7天,这看您的具体备份要求,备份文件扩展名默认的是BAK
6、下一步指定事务日志备份计划,看您的需要做选择-->
下一步要生成的报表,一般不做选择-->
下一步维护计划历史记录,最好用默认的选项-->
下一步完成
7、完成后系统很可能会提示SqlServerAgent服务未启动,先点确定完成计划设定,然后找到桌面最右边状态栏中的SQL绿色图标,双击点开,在服务中选择SqlServerAgent,然后点击运行箭头,选上下方的当启动OS时自动启动服务
8、可以设置启动启动sqlserverAgent:
运行Services.msc,设置sqlserverAgent为自动启动。
修改计划:
打开企业管理器,在控制台根目录中依次点开MicrosoftSQLServer-->
双击打开你的服务器-->
管理-->
数据库维护计划
SqlServer自身就提供了完善的备份机制,我们只要灵活运用,就能达到令人满意的效果。
先了解一下:
为何要做备份?
数据备份是容灾的基础,是指为防止系统出现操作失误或系统故障导致数据丢失,而将全部或部分数据集合从应用主机的硬盘或阵列复制到其它的存储介质的过程。
传统的数据备份主要是采用内置或外置的磁带机进行冷备份。
但是这种方式只能防止操作失误等人为故障,而且其恢复时间也很长。
随着技术的不断发展,数据的海量增加,不少的企业开始采用网络备份。
网络备份一般通过专业的数据存储管理软件结合相应的硬件和存储设备来实现。
方法一:
SqlServer自动作业备份
1、打开SQLServerManagementStudio
2、启动SQLServer代理
3、点击作业->
新建作业
4、”常规”中输入作业的名称
5、新建步骤,类型选T-SQL,在下面的命令中输入下面语句
DECLARE
@strPath
NVARCHAR(200)
set
=
convert(NVARCHAR(19),getdate(),120)
REPLACE(@strPath,
'
:
.'
D:
/bak/'
+
databasename'
+@strPath
.bak'
BACKUP
DATABASE
[databasename]
TO
DISK
WITH
NOINIT
NOUNLOAD
NOSKIP
STATS
10,
NOFORMAT
(D:
/bak/改为自己的备份路径,databasename修改为想备份的数据库的名称)
6、添加计划,设置频率,时间等。
确定,完成。
方法二:
SQL2005的维护计划里面自带了备份数据库任务,但不会自动按日期命名,不方便,下面的方法是以存储过程来解决的。
要用SQL2005的维护计划功能首先要确认SQLServerAgent服务是在启动状态,然后打开SQLServerManagementStudio,展开对象资源管理器里的“管理”,右击维护计划选择新建维护计划,为维护计划命名,如:
TestDB_Backup,选择默认的子计划
“Subplan_1”并点击上方的子计划设置按钮来设置子计划执行方式和时间:
出现设置界面,设置每天3点执行一次,
确定后保存一下,然后新建一个查询页,开始创建存储过程,代码如下:
USE[TestDB]
GO
SETANSI_NULLSON
SETQUOTED_IDENTIFIERON
CREATEPROCEDURE[BackupDatabase](@FolderPathvarchar(500))
as
DECLARE@FullPathvarchar(1000)
set@FullPath=@FolderPath+‘TestDB_’+convert(VARCHAR(4),year(getdate()))+right(‘0′+convert(VARCHAR
(2),MONTH(getdate())),2)+right(’0′+convert(VARCHAR
(2),DAY(getdate())),2)+‘.bak’
backupdatabase[TestDB]todisk=@FullPathWITHINIT
return
USE[TestDB]GOSETANSI_NULLSONGOSETQUOTED_IDENTIFIERONGOCREATEPROCEDURE[BackupDatabase](@FolderPathvarchar(500))asDECLARE@FullPathvarchar(1000)set@FullPath=@FolderPath+‘TestDB_’+convert(VARCHAR(4),year(getdate()))+right(‘0′+convert(VARCHAR
(2),MONTH(getdate())),2)+right(’0′+convert(VARCHAR
(2),DAY(getdate())),2)+‘.bak’backupdatabase[TestDB]todisk=@FullPathWITHINITreturn
设置完毕,切换回维护计划设置页面,在左边的工具箱中拖入一个“执行T-SQL语句任务”:
双击拖入后的“执行T-SQL语句任务”,输入执行存储过程的语句来完成每天的自动备份工作,代码如下:
use[TestDB]
execBackupDatabase‘E:
/SqlData/TestDB/’
use[TestDB]execBackupDatabase‘E:
确定后保存该维护计划即可