《SQL Server数据库的备份与还原以及在项目中是怎样去实现的15579.docx》由会员分享,可在线阅读,更多相关《SQL Server数据库的备份与还原以及在项目中是怎样去实现的15579.docx(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、SQL Server数据库的备份与还原以及在项目中是怎样去实现的2012-03-113 111:39:21标签:SQQL Seerverr数据库的的备份与还还原-备份的的设备有22种(临时时设备和永永久设备) 注意:默认下的的备份类型型是完整备备份-第一一种:baackupp dattabasse Coompanny too dissk=dd:baackupp1.bbak-临时设设备/*如如果这里不不指定明确确路径的话话(如:bbackuup daatabaase ccompaany tto diisk=backkup11.bakk),那那么备份的的数据库将将会自动备备份到系统统指定的目目录下
2、:CC:Prrograam FiilesMicrrosofft SQQL SeerverrMSSSQL.11MSSSQLBBackuup*/-第二种种:/*第第一步首先先建立永久久备份设备备 (系统统自带的存存储过程)在在mastter 数数据库中就就会找到如如图1:*/-执执行语句如如:exeec spp_adddumpddevicce ddisk,diisk_ccompaany,D:2.baak-永久设备备-执行结结果就会出出现如图22:-多多了一个备备份设备:diskk_commpanyy-第二二步:baackupp dattabasse coompanny too dissk_coom
3、panny wiith nnoiniit -默认表示示追加(不不覆盖)-好了 备份完成成 !-现在在我来还原原数据库(我用的是是第一种方方法备份的的,所以我我要第一种种方法来还还原) ,-原来的数据如图3:-经过我手动删除几个表后的数据库如图4:-执行语语句:reestorre daatabaase CCompaany ffrom diskk=d:bacckup1.baak -注意备备份到哪里里去就要从从还原哪里里来-执执行后会出出现什么呢呢?请看错错误消息:/*消息息 31559,级别别 16,状状态 1,第第 1 行行尚未备份份数据库 commpanyy 的日日志尾部。如如果该日志志包含您
4、不不希望丢失失的工作,请请使用 BBACKUUP LOOG WIITH NNORECCOVERRY 备份份该日志。请请使用 RRESTOORE 语语句的 WWITH REPLLACE 或 WIITH SSTOPAAT 子句句来只覆盖盖该日志的的内容。消消息 30013,级级别 166,状态 1,第 1 行RRESTOORE DDATABBASE 正在异常常终止。*/-为为什么会出出现这种错错误呢 我我们可以从从错误的消消息中找到到解决方案案!-我我们去看看看这个数据据库的恢复复模式如图图5:-因为如如图的恢复复模式是 :完整; 所以它它的功能是是将所有事事务都写入入日志,把把所有数据据库文件的
5、的都还原-方案一一:我现在在只是还原原的数据库库文件 并并没有备份份日志文件件 所以我我再去备份份日志文件件backkup llog CCompaany tto diisk=d:bbackuup2.bak -备备份日志文文件resstoree dattabasse Coompanny frrom ddisk=d:backkup11.bakk -再去还原原数据库rrestoore llog CCompaany ffrom diskk=d:bacckup2.baak-这步可有有可无-执行的的结果为:如图6:-方案二二 由于错错误消息中中的提示:请使用 RESTTORE 语句的 WITHH REPP
6、LACEE 或 WWITH STOPPAT 子子句来只覆覆盖该日志志的内容。-消息 3013,级别 16,状态 1,第 1 行 所以 我想到去覆盖掉日志文件 虽然恢复模式是完整的 但是我要覆盖它 也是可以的-只是对数据库的操作没有日志没有完全还原而已 也是可以的-执行语句如下:restore database Company from disk=d:backup1.bak WITH REPLACE-执行成成功/*已已为数据库库 Coompanny,文文件 CCompaany_DData (位于于文件 11 上)处处理了 2224 页页。已为数数据库 Comppany,文件 Commpanyy_
7、Logg (位位于文件 1 上)处理了 5 页。RESTORE DATABASE 成功处理了 229 页,花费 0.225 秒(8.319 MB/秒)。*/-方案三三:我想了了一下 我我只是备份份了数据库库,但是没没有备份日日志文件 根据备份份还原的原原理/*恢复模模式 说明明简单 不不用备份的的事务日志志,即可还还原用于小小型数据库库和不经常常更改的数数据库完整整 所有事事务都被记记录到日志志中保留所所有日志,直直到事务日日志备份用用于生产数数据库大容容量日志 完整恢复复模式的补补充不将大容容量日志操操作写入日日志*/-所以我我修改了这这个数据库库的属性中中的恢复模模式 改为为 “简单”-如
8、图图7:-我直接接执行还原原的代码resttore dataabasee Commpanyy froom diisk=d:bbackuup1.bak/*执行行结果:已已为数据库库 Coompanny,文文件 CCompaany_DData (位于于文件 11 上)处处理了 2224 页页。已为数数据库 Comppany,文件 Commpanyy_Logg (位位于文件 1 上)处理了 5 页。RESTORE DATABASE 成功处理了 229 页,花费 0.224 秒(8.356 MB/秒)。*/-三种还还原的解决决方案成功功-但是这这用到项目目中数据库库正在使用用的话是不不成功的 ,它具有
9、有排它性 !-所以以我写了一一个存储过过程来解决决,这也是是很多程序序员花了很很久才解决决的问题-代码用用法如下 :有附带带的例子下下载-创创建存储过过程kiillsppidcreatte prroc kkillsspid (dbbnamee varrcharr(20)asbegiindecllare sqll nvaarchaar(5000)decllare spiid inntset sqll=deeclarre geetspiid cuursorr forrseleect sspid fromm syssproccessees whhere dbidd=db_id(+dbnaame+)e
10、xecc (ssql)openn gettspiddfetcch neext ffrom getsspid intoo sppidwhille fetcch_sttatuss -1begiinexecc(kiill+sspid)fetcch neext ffrom getsspid intoo sppidendclosse geetspiiddealllocaate ggetsppidendGO-说明:-1.此存储过过程应写在在Mastter中;-2.以上代码码就是解决决因为数据据库正在使使用,所以以未能获得得对数据库库的排它访访问权的问问题,不然然系统有时时会报错;http:/m/dottnet/sql/mssqql/sqql20008/sqqlserrver22008_2011103099_73220.httml