备份的唯一原因
备份的唯一原因是我们可以还原
 
当我第一次成为sqlserver数据库管理员,只要备份工作都能成功运行,我就会觉得一切都很好。我会查看sqlserver代理,保证那些作业都在运行,然后就这样了。
我想只要发生灾难了,我只需要做一个恢复。这能有多难?
 
理论上,我们使用凯德拉的5个简单问题来测试我们的备份策略,并且我们要记住会导致dba被解雇的9个注意事项。
 
在实践中,有一些小问题会困扰我们。当出现问题的时候,我们是否要还原整个数据库——即只恢复几个表还是一个完整的数据库。有些人把生产环境的数据库当做开发环境从而不小心删除了数据库,接下来的事情当然是大家都疯掉了。提前思考我们的备份计划可以使危机处理地更加容易。
 
 
在那里做恢复
​当你恢复代码(存储过程、视图、触发器等)或者表时,不要恢复到生产服务器上。 
我并不喜欢去动生产数据库,当我们面对这些事故时——你就已经有了糟糕的一天。这就是你为什么做还原,还记得吗?
让我们在不同的环境(开发或者测试)做不同的事情,远离生产环境。我也会写如何在开发、测试和生产环境中还原。 
当我们安全的恢复一个数据库后,可以很容易的把数据复制到其他的服务器上面。你可以在生产环境上通过连接服务器安全而简单的访问只读的恢复服务器上的数据库。并且,从生产数据库可以通过连接服务器把数据导到恢复数据库上。 
然后,如果要恢复的数据超过10G,那么你可能必须在生产数据库上恢复以加快速度。我们必须非常小心,并且确保你的脚本和数据库名称正确——我们不想覆盖正在工作中的数据库。这可能需要生产服务器增加额外的空间,在一个紧急情况下,我不得不把tempdb和log文件缩小到1M来释放可用空间。tempdb在一个非常快的磁盘上,并且恢复过程中没出现例如断电等其它问题,因此这次恢复完美的完成了。我们并不会总是这么好运,但这有利于我们想出更多这样的情形。 
一个警告:如果存在依赖性关系,比如一个表和其他表存在依赖关系,而你恢复了这个表,而没有恢复这个表依赖的那个表,那么这会造成伤害。我们不能说到所有的场景——真的,每种情况都是不同的。
 
执行恢复 
使用no recovery选项来恢复最近一次完整备份——这是非常重要的。
这使得数据库处于恢复状态,并且可以恢复其他的备份。如果你忘记了这两点,那么可能你就需要再一次的从头恢复了,所以在你恢复之前,请务必仔细检查。 
如果我恢复的代码或者配置表在上一次完成备份后并没有更改,那么我不会还原之后的差异备份和事务日志备份,我们的目标是尽可能快的完成还原。 
接下来,在还原差异备份后还原事务日志备份(如果你在上一次完整备份后没有差异备份),同样,不要忘了no recovery。 
用图形界面执行这一切实在是糟透了。备份越多,你还原的时间就越长,并且更加容易出错。相反,你需要脚本来管理备份文件夹,找到对应的文件并进行自动回复。在接下来的培训里我们会讨论自动还原模块。 
学习备份和还原知识,我们推荐下列这些文章: 

brent ozar的sqlserver dba训练课程翻译——第二章:手动恢复数据库的更多相关文章

  1. 翻译brent ozar的sqlserver dba训练课程——第一章:建立数据库服务器清单

    在公司里,走进销售副总裁的办公室,询问他手下有多少销售人员.不,我的意思是你并不要那么做,他们会问你销售工具为什么那么慢.  其实我的意思是,如果你能走进他的办公室问他这个问题.我敢打赌,他会马上回答 ...

  2. ORACLE AUTOMATIC STORAGE MANAGEMENT翻译-第二章 ASM instance(1)

    第二章  ASM INSTANCE ASM的类型,例如可以: 10g后ORACLE instance 类型增加了一个ASM种类.参数INSTANCE_TYPE=ASM进行设置. ASM实例启动命令: ...

  3. Gradle2.0用户指南翻译——第二章. 概述

    翻译项目请关注Github上的地址:https://github.com/msdx/gradledoc本文翻译所在分支:https://github.com/msdx/gradledoc/tree/2 ...

  4. ORACLE AUTOMATIC STORAGE MANAGEMENT翻译-第二章ASM Instance(4)完

    ASM安全 这个小节主要描写叙述与ASM相关的各种安全配置话题,像 配置ASM须要的userids.groupids:ASM权限如 SYSOPER,SYSDBA和新的SYSASM权限,最后还有ASM ...

  5. Learning Scrapy 中文版翻译 第二章

    为了从网页中提取信息,你有必要对网页的结构做一些了解.我们将快速学习HMTL,HTML数状结构以及用XPath在网页上提取信息 HTML, DOM树结构以及XPath 让我们花一点时间来了解当用户在浏 ...

  6. Scyther-Semantics and verification of Security Protocol 翻译 (第二章 2.2.2----2.3)

    2.2.2  事件顺序 协议中的每个角色对应于事件列表,换句话说, 在属于角色 R 的协议事件集上施加结构,总的排序表示为 $ \prec $ , 如此任何角色 R∈Role 和 $\varepsil ...

  7. 1_02_MSSQL课程_T_SQL语句_手动创建数据库和表

    1. 基本的DML SQL脚本 ->简单的查询: Select 列名 From 表明 where 条件表达式 ->插入数据: Insert Into 表名(列名1,列名2,列名3..... ...

  8. 《Django By Example》第二章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:翻译完第一章后,发现翻译第二章的速 ...

  9. 计算机网络课程优秀备考PPT之第二章物理层(二)

    为了记录自己从2016.9~2017.1的<计算机网络>助教生涯,也为了及时梳理和整写笔记! 前期博客是, 计算机网络课程优秀备考PPT之第一章概述(一) 以上是<计算机网络> ...

随机推荐

  1. Arcgis Desktop 9.3 安装

    以下用到的 Crack在我的网盘中有: ref: http://pan.baidu.com/s/1pJJlVBl 密码: p4gk 一,安装 Desktop(依次按照如图安装): 二,配置 1,以上步 ...

  2. 引号 shell

    在学些shell的 grep, awk, sed 中,发现<Linux 与Unix Shell 编程 指南>书中用大多都是单引号. 一开始我总在寻思,为什么用单引号,明明双引号也是行的呀. ...

  3. iOS之使用QLPreviewController打开文件,处理txt文件出现乱码的情况

    iOS之使用QLPreviewController打开文件,处理txt文件出现乱码的情况 主要代码: - (id <QLPreviewItem>)previewController:(QL ...

  4. Java中的HashMap和Hashtable

    代码: import java.util.*; public class test{ public static void main(String[] args) { HashMap hm = new ...

  5. Android开发之InstanceState详解(转)

    本文来自:http://www.cnblogs.com/hanyonglu/archive/2012/03/28/2420515.html 本文介绍Android中关于Activity的两个神秘方法: ...

  6. Thinkphp 模版

    1.显示模版 在Home/Controller/MainController.class.php中写一个方法来显示对应的模版 function text() { //变量输出 $this->as ...

  7. JavaScript实现回车键切换输入框焦点

    用JavaScript实现回车键切换输入框焦点的功能,不是回车换行哦,在Textarea中,回车换行是默认功能,不过若要在textarea中使用 回车切换输入框焦点功能的话,回车换行就要失效了,不过i ...

  8. PHP中检测ajax请求的代码例子

    多数情况下,基于JavaScript 的Js框架如jquery.Mootools.Prototype等,在发出Ajax请求指令时,都会发送额外的 HTTP_X_REQUESTED_WITH 头部信息, ...

  9. 无法将类型“System.Nullable`1”强制转换为类型“System.Object”。LINQ to Entities 仅支持强制转换 EDM 基元或枚举类型。

    在一个项目中使用LINQ和EF时出现了题目所示的异常,搜索了很多资料都找不到解决办法,主要是因为EF方面的知识欠缺. 先将情况记录如下,以供以后参考. 查询主要设计两张表,由外键关联: 在进行下面的查 ...

  10. pdf转图片

    public class FileUtil { public static void main(String[] args) { try { System.out.println(System.cur ...