很多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的更多相关文章

  1. Azure 中虚拟机的备份和还原选项

    可以通过定期创建备份来保护数据. 有多个备份选项可用于 VM,具体取决于使用案例. Azure 备份 若要备份运行生产工作负荷的 Azure VM,请使用 Azure 备份. Azure 备份对 Wi ...

  2. Sqlserver 还原

    --完整还原 RESTORE DATABASE demoData FROM DISK=N'D:\Backup\demoData.bak'; RESTORE DATABASE { database_na ...

  3. backup2:数据库还原

    数据库还原的操作,分两步进行:第一步,验证(verify)备份文件:第二步,根据备份策略还原数据库: 参考<backup1:开始数据库备份>,备份策略是: 一周一次完整备份,一天一次差异备 ...

  4. 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 ...

  5. IIS7和IIS7.5备份和还原的方法

    windows2008的iis配置备份和iis6不同,在iis7中没有了6原来的保存配置xml的选项,而采用的是dos命令来进行iis7的备份.以下是win2008上iis7备份的方法. 首先打开CM ...

  6. iis7、iis8配置备份还原

    原文 iis7.iis8配置备份还原 方法1: 1.打开我们的IIS管理器,在功能视图里找到“共享的配置”这个功能然后双击进入. 2.进入“共享的配置”后单机右上方的“导出配置”选项,选择导出配置文件 ...

  7. mysql数据库全备和全备还原(使用Xtrabackup)

    一.使用innobackupex创建全备 语法 innobackupex --user=DBUSER --password=DBUSERPASS /path/to/backup/dir/ innoba ...

  8. 备份和还原 Linux 上的 SQL Server 数据库

    备份数据库 在下面的示例sqlcmd连接到本地 SQL Server 实例,并采用完整备份的名为的用户数据库demodb. sqlcmd -S localhost -U SA -Q "BAC ...

  9. MySQL数据库备份还原

    本文以CentOS 7 yum安装的MariaDB-server5.5为例,说明MySQL的几种 备份还原方式 将服务器A(192.168.1.100)上的数据库备份,还原到B(192.168.1.2 ...

随机推荐

  1. poj1661 (DP)

    题目链接:http://poj.org/problem?id=1661 思路: 把初始位置看成左,右端点均为x0,即长度为0,高度为y0的一个平台,按照平台高度从低到高排序.用dp[i][0],dp[ ...

  2. ASP.NET中修改从数据库获取的datatable中的值

    有些时候,我们从数据库表中获取一个实体的对象,但有些内容并不是最终显示的内容,格式也都是不一样.经过一番尝试,发现datatable中的数值如果跟想要改变的类型不一致,就无法更改,只有添加新列,然后把 ...

  3. 安装Ubuntu后一些准备

    一些基础 安装的时候,先不选镜像就可以避开简易安装. 更改root密码:sudo passwd root 更改源,更新,不行就打断在更新 安装vim 改为unity模式,安装VMware Tools, ...

  4. centos7装NVIDIA显卡驱动

    一.系统及显卡 系统:centos7.5 64位 显卡:gtx 1060 前几天主要是有一个人脸识别的项目测试,需要用到显卡去测试性能,然后装显卡的过程折腾了一下,特此记录. 二.安装过程 1. 下载 ...

  5. 3.滑雪-深搜&dp

    //Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道载一个区域中最长底滑 ...

  6. BroadcastReceiver接收电量变化的广播-------在代码中动态创建接受者

    本例为动态创建广播接收者即不是在AndroidManifest.xml文件中定义的广播接收着 代码: package com.qf.broadcastreceiver01; import androi ...

  7. dede中arcurl的解析

    有时候我们需要在dede中通过$dsql查询出文章数据,并生成文章的地址. 但是dede默认的dede_archives和附加表dede_addonarticle都没有存放arcurl的字段. 说明a ...

  8. xp安装vmware10时一直停在installing packages on the system

    我估计的原因是: vm会在网上邻居(LAN或高速internet)下创建两个 vmware network adapter vmnet8 vmware network adapter vmnet1   ...

  9. PAT 1064 朋友数(20)(代码)

    1064 朋友数(20 分) 如果两个整数各位数字的和是一样的,则被称为是"朋友数",而那个公共的和就是它们的"朋友证号".例如 123 和 51 就是朋友数, ...

  10. MEME(Motif-based sequence analysis tools)使用说明

    MEME(Motif-based sequence analysis tools)使用说明 2011-05-27 ~ ADMIN MEME是用于从一堆序列中搜索功能结构域的工具.比如说当你拿到了许多C ...