Backup--还原选项之STANDBY
很多DBA对还原时制定RECOVERY 与 NORECOVERY选项都很熟悉,但是对于STANDBY就有点茫然了,今天一起来学习下吧。
--===================================================================
MSDN如下说:
STANDBY =standby_file_name
指定一个允许撤消恢复效果的备用文件。
备用文件用于为 RESTORE WITH STANDBY 的撤消过程中修改的页面保留一个“写入时副本”预映像。备用文件允许用户在事务日志还原期间以只读方式访问数据库,并允许数据库用于备用服务器情形,或用于需要在日志还原操作之间检查数据库的特殊恢复情形。执行完 RESTORE WITH STANDBY 操作之后,下一个 RESTORE 操作会自动删除撤消文件。如果在下一个 RESTORE 操作之前手动删除了这个备用文件,则必须重新还原整个数据库。当数据库处于 STANDBY 状态时,您应将这个备用文件视为和任何其他数据库文件同样重要。该文件与其他数据库文件不同,数据库引擎仅在活动还原操作过程中持续打开该文件。
给定备用文件的大小要求取决于由还原操作过程中未提交的事务所导致的撤消操作数。
链接地址:http://msdn.microsoft.com/zh-cn/library/ms178615(v=sql.105).aspx
--===================================================================
按我的理解来讲:就是在还原时,将未提交的事务写入到一个“备用文件”中,然后回滚未提交事务,保证数据一致性,将数据库设置为“备用/只读”状态,使用户可以访问数据库,并能在后续继续使用日志备份来还原数据库。
日志传送中备用节点可读便是使用这种方式
--==================================================================
让我们实验学习一下
--=============================
--创建数据库
CREATE DATABASE TestDB3
GO
USE TestDB3
GO
--=============================
--创建测试表
SELECT * INTO TB01
FROM sys.all_columns
WHERE 1<>1 GO
--==============================
--创建完整备份
BACKUP DATABASE TestDB3 TO DISK ='D:\TestDB3_F1.BAK' --==============================
--向测试表中插入100条数据并提交事务
INSERT INTO TB01
SELECT TOP(100) * FROM sys.all_columns --================================
--新开向测试表插入1000条数据,暂时不提交
BEGIN TRAN DECLARE @ID INT
SET @ID=10
WHILE(@ID>0)
BEGIN
INSERT INTO TB01
SELECT TOP(100) * FROM sys.all_columns
SET @ID=@ID-1
END
我们再开启一个回话,做第一次日志备份
--===========================================
--第一次日志备份,包含一个100条插入的已提交事务
--和一个1000条插入的未提交事务
BACKUP LOG TestDB3 TO DISK ='D:\TestDB3_L1.BAK'
然后回到第一个回话,提交事务并做第二日志备份
--===========================================
--提交事务并做第二次日志备份,包含一个100条插入
--的已提交事务和一个1000条插入的已提交事务
BACKUP LOG TestDB3 TO DISK ='D:\TestDB3_L2.BAK'
此时我们有一个完整备份和两个日志备份,让我们来还原数据库
--========================================================
--使用完整备份来还原数据库[TestDB4],并指定NORECOVERY来使得
--数据库处于"正在还原"状态
RESTORE DATABASE [TestDB4] FROM DISK = N'D:\TestDB3_F1.BAK'
WITH FILE = 1, MOVE N'TestDB3' TO N'D:\DB\TestDB4.mdf',
MOVE N'TestDB3_log' TO N'D:\DB\TestDB4_1.LDF',
NORECOVERY, NOUNLOAD, STATS = 10
GO
--======================================================
--使用日志备份来还原,使用STANDBY选项来使得数据库处于"备用/只读"
RESTORE LOG [TestDB4] FROM DISK = N'D:\TestDB3_L1.BAK'
WITH STANDBY = N'D:\ROLLBACK_UNDO_TestDB4.BAK',
NOUNLOAD, STATS = 10
此时数据库可以访问,查询表会发现表中有100条数据,恰好是第一个提交事务的数据,第二个未提交事务插入的1000条数据无法查询到。
再来查看STANDBY指定的文件
继续还原日志
--===============================================
--继续还原日志备份
BACKUP LOG TestDB3 TO DISK ='D:\TestDB3_L1.BAK'
会发现可以正常还原!
我们重做上面还原步骤,但在最后一次还原日志之前,把STANDBY指定的文件删除掉,会有以下错误提示:
消息 3441,级别 17,状态 1,第 3 行
在启动备用数据库 'TestDB4' (数据库 ID 为 10)的过程中,RESTORE 语句无法访问它的备用文件('D:\ROLLBACK_UNDO_TestDB4.BAK')。
操作系统错误为 '2(系统找不到指定的文件。)'。诊断该操作系统错误,并更正此问题,然后重试启动操作。
PS:在生产环境,不要轻易删除STANDBY指定的文件哦,要不你就“哭吧哭吧不是罪啦”
--============================================================================================
让我们继续试验
对于“备用/只读”的数据库,我们使用使用RESTORE方式来将其修改为“正在还原”状态
--=========================================
--使用 RESTORE 来将数据库重置为"正在还原状态"
RESTORE DATABASE TestDB4 WITH NORECOVERY
而且还可以继续使用后续日志备份来还原,证明上面语句使用STANDBY指定的文件来还原了数据库。
PS:当数据库被还原到“正在还原”状态后,STANDBY指定的文件会被默认删除掉哦。
既然“备用/只读”状态可以利用还原来转变成“正在还原”状态,那么“正在还原”状态是不是也可以使用还原来转变成“备用/只读”呢?答案是肯定滴
--============================================
--使用RESTORE 来将数据库从"正在还原"状态转变成"备用/只读"状态
RESTORE DATABASE TestDB4
WITH STANDBY = N'D:\ROLLBACK_UNDO_TestDB4.BAK'
--============================================================================================
打完收工,妹子镇贴
PS: 谁有奶茶妹高清大图,给小弟我传一份,我放到下个贴中。。
下班灰家,诸位周末快乐
Backup--还原选项之STANDBY的更多相关文章
- Azure 中虚拟机的备份和还原选项
可以通过定期创建备份来保护数据. 有多个备份选项可用于 VM,具体取决于使用案例. Azure 备份 若要备份运行生产工作负荷的 Azure VM,请使用 Azure 备份. Azure 备份对 Wi ...
- Sqlserver 还原
--完整还原 RESTORE DATABASE demoData FROM DISK=N'D:\Backup\demoData.bak'; RESTORE DATABASE { database_na ...
- backup2:数据库还原
数据库还原的操作,分两步进行:第一步,验证(verify)备份文件:第二步,根据备份策略还原数据库: 参考<backup1:开始数据库备份>,备份策略是: 一周一次完整备份,一天一次差异备 ...
- Azure SQL Database 时间点还原(Point in Time Restore)功能
微软中国TechNet 7 Oct 2014 9:17 PM Comments 0 Likes 原文地址:http://blogs.technet.com/b/azuretw/archive/20 ...
- IIS7和IIS7.5备份和还原的方法
windows2008的iis配置备份和iis6不同,在iis7中没有了6原来的保存配置xml的选项,而采用的是dos命令来进行iis7的备份.以下是win2008上iis7备份的方法. 首先打开CM ...
- iis7、iis8配置备份还原
原文 iis7.iis8配置备份还原 方法1: 1.打开我们的IIS管理器,在功能视图里找到“共享的配置”这个功能然后双击进入. 2.进入“共享的配置”后单机右上方的“导出配置”选项,选择导出配置文件 ...
- mysql数据库全备和全备还原(使用Xtrabackup)
一.使用innobackupex创建全备 语法 innobackupex --user=DBUSER --password=DBUSERPASS /path/to/backup/dir/ innoba ...
- 备份和还原 Linux 上的 SQL Server 数据库
备份数据库 在下面的示例sqlcmd连接到本地 SQL Server 实例,并采用完整备份的名为的用户数据库demodb. sqlcmd -S localhost -U SA -Q "BAC ...
- MySQL数据库备份还原
本文以CentOS 7 yum安装的MariaDB-server5.5为例,说明MySQL的几种 备份还原方式 将服务器A(192.168.1.100)上的数据库备份,还原到B(192.168.1.2 ...
随机推荐
- java &&与||短路的详解
短路运算符就是我们常用的“&&”.“||”,一般称为“条件操作”. class Logic{ public ststic void main(String[] args){ ...
- Telephone interview with Youyou Tu
"Good News for the National Holiday!" Telephone interview with Youyou Tu following the ann ...
- 使用ASP.NET AJAX 从脚本中调用Web 服务的应用方法
技能点:通过编写WebService,在页面js中调用WebService来进行数据查询. 网站开发,有些时候需要使用js在页面动态生成一些内容,但还有些数据要通过查询数据库才能获取的. 但由于诸如主 ...
- python单线程下实现多个socket并发
先看服务端的代码 import sys # import socket import time import gevent from gevent import socket from gevent ...
- DNA binding motif比对算法
DNA binding motif比对算法 2012-08-31 ~ ADMIN 之前介绍了序列比对的一些算法.本节主要讲述motif(有人翻译成结构模式,但本文一律使用基模)的比对算法. 那么什么是 ...
- Luogu 3959 [NOIP2017] 宝藏
NOIP2017最后一道题 挺难想的状压dp. 受到深度的条件限制,所以一般的状态设计带有后效性,这时候考虑把深度作为一维,这样子可以保证所有状态不重复计算一遍. 神仙预处理:先处理出一个点连到一个集 ...
- Luogu 3953[NOIP2017] 逛公园 堆优化dijkstra + 记忆化搜索
题解 首先肯定是要求出单源最短路的,我用了堆优化dijikstra ,复杂度 mlogm,值得拥有!(只不过我在定义优先队列时把greater 打成了 less调了好久 然后我们就求出了$i$到源点的 ...
- PS想象的力量无限大,设计师的脑洞无限大!
我(nemanjasekulic)一直对魔法与科幻感兴趣,但是,现实中,它们并不存在.我所做的是尽量体现一切都是可能的,表达一种没有约束的理想概念. 编辑:千锋UI设计
- 开启多个tomcat 注意
1. 将tomcat 复制到另一个文件夹 2. 更改 tomcat 文件夹中 conf/ server.xml 文件 .共3个地方. 1. shutdown 的port 2. connector ...
- td里的英文字母不会自动换行的问题
今天发现一个问题,限制了TD的宽度之后,汉字会自动换行,但是英文却不会,在网上搜索一下,发现在TD里面加上style='word-break:break-all'这个样式之后,换行成功 <tab ...