返回首页

为什么备份
在克雷格穆林的书,数据库管理的开篇,他说,"在许多方面,今天的商业数据。"在大多数组织负责保护数据的作用是数据库管理员??你。这是正确的;整个业务是在您的动手能力,与所有这些最终用户永远不犯错误,使用由开发者,谁有权完美无缺的代码构建的应用程序每次第一次运行在该服务器上永远不崩溃, ,更何况新的合作社,"SA"特权感谢你的老板能够援助。确定。停止哭泣。有些事情可以做,以保护您的关怀下的数据和最重要的工作之一是运行数据的定期备份的。备份
微软在SQL Server联机丛书在线定义为这是相当多,我们正在寻找"复制",用于恢复和恢复系统故障后的数据的数据备份。可以创建备份方式,可以将全部或部分数据,以及一些事务日志的一部分。虽然这篇文章是在2005年的语法重点,大部分的概念是适用于2000年。这是一个很大的话题。充其量,我会划伤表面,给你足够的信息,这样你就不会开始哭了。看完后,你应该能够成立的合理设置为您的系统备份。
为了开始备份工作,业务需要定义一个恢复模式。恢复模式本质上是什么,你要做的事务日志数据。两个最常用的恢复模式是很容易界定;简单或全部。之前假设,当然你需要充分保护您的数据,你需要知道他们做什么。该业务是要告诉你,如果你需要恢复到某个时间点,或者如果你只需要上一次完全备份。它的定义,如果你的数据是通过其他途径追讨,或如果你有尽可能保护,因为它跨越导线。使用简单的恢复,如果你可以失去在事务日志中的一些数据,你可以恢复所有中学的读/写文件组,当您还原主,你并不需要恢复到某个时间点。这些大多是辅助数据库,不是绝对的只读访问,所以没有一个交易日志担心反正企业或报告系统的重要组成部分。您可以使用全部,如果每一个数据位是至关重要的,你需要恢复的时间点,或,通常是在非常大的数据库(VLDB)的,你需要恢复单个文件和文件组独立的其他文件和文件组。你现在可以运行仅复制备份,它允许你复制到备份文件的数据库,但不影响日志,差异备份计划或影响恢复到某个时间点。我会尽力钻尽可能这些主题通过的文章,但不是文件安培;文件组。 使用简单恢复
足够的交谈。让我们坐下来运行备份。假设,我们在小到中型的数据库的简单恢复的时候。您最简单的备份策略是简单地运行定期对数据库进行完全备份。

BACKUP DATABASE AdventureWorks 

TO DISK = 'C:\Backups\AdventureWorks.BAK'

与所有打字,你问什么?我们不要有GUI工具来处理我们的工作吗?是的,最简单的的备份可以使用SQL Server Management Studio中执行。但是,如果你想学习和了解Management Studio是为你做,或如果您想对什么是备份,如何以及在何处一些细微的细粒度控制,那么你将不得不打破键盘和收起鼠标。
以上是一个基本的备份到磁盘。大多数DBA的我知道备份文件,然后刮到磁带或其他媒体上的文件。这是因为磁盘上的文件是简单的放大器;的快速恢复,而媒体有时会有点痛。例如,我们一般有两到三天,值得立即恢复我们的文件系统的备份。我们只能到磁带系统,如果我们需要运行旧的备份恢复。
脚本做什么?它提出了在数据库中的所有提交的数据的副本。它也被复制未提交的日志条目。这些都是用在恢复过程中提交或回滚的变化发生在备份过程中数据。
通常备份一个数据库,影响其他备份放大器;恢复过程。任何差异备份(只复制数据备份自上次备份以来改变),例如上面的语句运行后,将使用作为数据变化的起点,而不是你跑昨晚的备份。 SQL 2005引入了一个概念,让我们继续中断的周期,仅复制备份的备份。{C}
我们已经找到了一个更精细的时刻,在Management Studio时,不会帮助你。如果你想只备份一份拷贝,你必须使用命令行。
假设了一会儿,我们仍然在简单恢复,但我们正在处理一个更大的数据库,例如大小100GB以上的东西。完整备份可以真正开始有点放慢的过程。相反,与业务协商后,我们决定做一个每周完整备份和每日增量备份。增量备份仅备份自上次完全备份以来改变的数据页。
BACKUP DATABASE AdventureWorks 

TO DISK = 'C:\backups\AdventureWorks.bak' 

WITH DIFFERENTIAL;

现在,如果我们要恢复这个数据库,我们就先去上次完全备份,恢复,然后为了恢复差异备份(稍后)。
请注意,运行所有这些样本的备份(假设你敲字当你阅读),我们并没有被改变的文件名后。然而,我们没有碰到任何错误。运行备份时,我们所做的,SQL Server将像一个备份设备的文件,只是不断追加备份文件。
如果你想简单地覆盖现有的文件,你需要修改你的备份报表:
BACKUP DATABASE Adventureworks 

TO DISK = 'C:\backups\AdventureWorks.bak' 

WITH INIT;


有一些其他备份选项,我不会详细说明这里。在线阅读书籍,看BLOCKSIZE,EXPIREDATE,RETAINDAYS,密码,姓名,统计资料,等的详细信息
您也可以运行一个语句,将检查数据库备份的完整性。它不检查在备份数据的完整性,但它验证备份的格式是否正确和访问。
RESTORE VERIFYONLY 

FROM DISK = 'C:\backups\Adventureworks.bak'
全面恢复和日志备份
我们主要的工作在设置简单,它的恢复(这被称为在检查点截断日志)不保持以后恢复事务日志是数据库。在这种机制下的每个备份数据库备份。日志备份是根本不可能的。然而,你只是作为最后的好备份保护数据。让我们改变我们的假设。现在,我们处理的一个关键任务应用安培;数据库。我们希望能够恢复这个数据库到最新的分钟,但是我们可以住在一起价值不超过15分钟的数据丢失。现在,我们在全面恢复和事务日志之间建立完全备份。让我们进一步假设,我们已经有了一个更大的数据库。首先,按计划,在这种情况下,每15分钟数据需求或业务需求的基础上,我们将备份日志:
BACKUP LOG Adventureworks 

TO DISK = 'C:\backups\AdventureWorks_Log.bak';

这个脚本会从事务日志备份提交的事务。它在文件的标记,显示启动放大器;停止时间。它会截断日志,当它成功地完成,清理出已写入备份提交的事务。在紧急情况下,您可以使用WITH NO_TRUNCATE语句从事务日志中捕获的数据,而不管系统状态。这是紧急情况下才。
注意,我们不使用INIT语句。做日志备份时,你有选项。第一个选项,运行所有备份到一个文件中,在那里他们将堆栈和所有你所要做的恢复,(稍后介绍)周期通过他们。第二个选项,名称独特的备份,可能使用日期放大器;字符串中的时间。在这种情况下,安全说,使用init。出于不同的原因,我们已经在我们的系统使用这两种方法。你可以决定什么是最适合您的技术放大器;业务需求。
数据库备份可供选择的方案,其中包括大部分的日志备份,包括COPY_ONLY。这将允许你捕捉的交易数据,而不会影响日志或未来预定的日志备份。故障排除等生产数据传输到另一个系统,这将是得心应手
如果你有你的数据库设置为完全恢复,你需要运行日志备份。有时,人们忘记和日志填满磁盘驱动器。在这种情况下,你可以运行:
BACKUP LOG AdventureWorks WITH NO_LOG;

这是绝对不推荐,因为它打破了日志链,从您将数据库恢复到某个时间点上的一系列日志备份。 Microsoft建议使用此语句后立即运行一个完整的备份。还原数据库
只要备份重要的是,他们是至关重要的,没有能力来恢复数据库,备份是无用的。还原完整数据库备份很简单,因为它是创建:
RESTORE DATABASE Adventureworks

FROM DISK = 'C:\Backup\AdventureWorks.bak';

就是这么简单。除非,因为我们没有最初,我们支持一切到一个文件中。在这种情况下,你需要指定你访问的文件。如果你不知道哪一个文件,你需要生成一个列表:
RESTORE HEADERONLY

FROM DISK = 'C:\Backup\Adventureworks.bak';

这将会给你相同的清单,正如我上面显示从Management Studio。所以,现在,如果我们想要恢复该组中的第二个文件,COPY_ONLY备份,我们会
不幸的是,如果你跟着,你可能会发现,你刚才生成此错误:
Msg 3159, Level 16, State 1, Line 1

数据库的日志尾部"的AdventureWorks"并没有被备份。使用WITH NORECOVERY备份日志备份的日志,如果它包含你不想失去的工作。使用WITH REPLACE或RESTORE语句的STOPAT子句,只是简单地覆盖记录的内容。
Msg 3013, Level 16, State 1, Line 1

RESTORE DATABASE is terminating abnormally.

这意味着什么,你的数据库是在完整恢复模式,但是你有没有备份最近的日志。您可以覆盖日志,如果你改变语法:
RESTORE DATABASE AdventureWorks

FROM DISK = 'C:\Backups\Adventureworks.bak'

WITH FILE = 2,

REPLACE;

这是我们第一次堆放在WITH子句,但它会不会是最后一次。读通过联机丛书。最WITH子句报表可用于在与他人的结合。
会发生什么,如果我们要恢复到不同的数据库?例如,我们在第二个备份我们的数据库的副本。也许这就是将它移到生产支持服务器,我们要去的地方就可以做一些工作,从该数据库的其他副本分开。如果我们采取最简单的方法,好了,试试这个:
RESTORE DATABASE AdventureWorks_2

FROM DISK = 'C:\Backups\Adventureworks.bak'

WITH FILE = 2;


在这种情况下你应该有一个错误有关的文件不被覆盖整个系列。你真的可以从备份创建新的数据库,但如果你正在做与现有的数据库服务器上,你需要改变使用的逻辑名称的物理文件的位置。为了知道一个给定的数据库文件的逻辑名称,运行此之前试图移动文件:
RESTORE FILELISTONLY

FROM DISK = 'C:\Backups\Adventureworks.bak'

WITH FILE = 2;

这可以然后被用来确定相应的逻辑名称,以生成此脚本:
RESTORE DATABASE AdventureWorks_2

FROM DISK = 'C:\Backups\Adventureworks.bak'

WITH FILE = 2,

    MOVE 'AdventureWorks_Data' TO 'C:\backups\aw2_log.mdf',

    MOVE 'AdventureWorks_Log' TO 'C:\backups\aw2_log.ldf';

这实际上是运行数据库恢复所有的简便方法。最后一种方法是应用差异备份。这需要两个步骤。首先,我们要恢复的数据库,但与一捻。
RESTORE DATABASE AdventureWorks

FROM DISK = 'C:\Backups\Adventureworks.bak'

WITH FILE = 1,

    NORECOVERY,

    REPLACE;



RESTORE DATABASE AdventureWorks

FROM DISK = 'C:\Backups\AdventureWorks.bak'

WITH FILE = 3;


这其中大部分可能是不言自明的基础上,我们已经走了过来。一个皱纹是列入短语NORECOVERY。很简单,在恢复期间,交易可能已经开始在备份过程中。其中一些完成和一些不。在还原年底,已完成的交易向前滚动到数据库中,未完成的事务都将回滚。设置使用NORECOVERY交易保持开放。这允许交易,以便在下一次备份,将其从下一组。
在这篇文章中,我们主要是与放大器的简单备份处理;恢复,但在2005年更先进的恢复允许辅助文件组要恢复的数据库联机时。它的主文件组必须在操作过程中线上。这将是非常大的数据库系统更有帮助。恢复日志
恢复日志是不是比增量数据库恢复,我们只是做了更困难。只是相当一个时间片刻位。假设你备份你的日志到一个文件或设备:
RESTORE HEADERONLY

FROM DISK = 'C:\Backups\Adventureworks_log.bak';


否则,你只需去获得您需要的文件名。首先运行数据库恢复,照顾留在非恢复状态。跟进一系列日志还原,这一次去到一个时间点。
RESTORE DATABASE AdventureWorks

FROM DISK = 'C:\Backups\Adventureworks.bak'

WITH FILE = 1,

    NORECOVERY,

    REPLACE,

    STOPAT = 'Oct 23, 2006 14:30:29.000';



RESTORE LOG AdventureWorks

FROM DISK = 'C:\Backups\Adventureworks_log.bak'

WITH FILE = 1,

    NORECOVERY,

    STOPAT = 'Oct 23, 2006 14:30:29.000';

RESTORE LOG AdventureWorks

FROM DISK = 'C:\Backups\Adventureworks_log.bak'

WITH FILE = 2,

    NORECOVERY,

    STOPAT = 'Oct 23, 2006 14:30:29.000';

RESTORE LOG AdventureWorks

FROM DISK = 'C:\Backups\Adventureworks_log.bak'

WITH FILE = 3,

    NORECOVERY,

    STOPAT = 'Oct 23, 2006 14:30:29.000';

RESTORE LOG AdventureWorks

FROM DISK = 'C:\Backups\Adventureworks_log.bak'

WITH FILE = 4,

    STOPAT = 'Oct 23, 2006 14:30:29.000';
现在我们已经是一个数据库是于十月23日14点30分29秒,以确切的,上次提交的事务。以防万一你忘了离开的使用NORECOVERY,或者干脆停在中间,并希望把数据库重新联机,您可以使用这条语句来完成此过程
RESTORE DATABASE Adventureworks

WITH RECOVERY;

数据库快照
SQL Server 2005引入的一个快照的概念,或只读数据库的静态视图。在以供给一个数据库的只读版本,为报告的目的主要是创建快照。然而,他们做备份的功能相似。的一个主要区别是,所有的事务都将回滚。有没有向前滚动的选项,捕捉日志等,提供了备份。正因为如此,他们的速度远远比既要创建和恢复的备份。其中的一个良好的使用,除了报告中,可能会运行一个快照维护前,后,你已经从系统中删除所有的活跃用户(和他们的交易)。这些存储在服务器上,所以你必须确保你有足够的存储。
语法是不同的,因为你没有备份数据库,你创建一个新的的:
CREATE DATABASE Adventureworks_ss1430

ON (NAME = AdventureWorks_Data, 

    FILENAME = 'C:\Backups\AdventureWorks_data_1430.ss')

AS SNAPSHOT OF AdventureWorks;


现在可以访问为只读。由于我们主要关注的是使用作为备份机制,让包括数据库恢复到数据库快照的方法。
首先,确定您要使用的快照。如果有超过一个,你要恢复的数据库,你需要删除,除非您使用的是一个所有。
DROP DATABASE Adventureworks_ss1440;

然后,你可以恢复数据库,通过运行RESTORE语句(混合隐喻,而不是好)
RESTORE DATABASE Adventureworks 

FROM DATABASE_SNAPSHOT = Adventureworks_ss1430;

就是这样。在我的系统,运行的AdventureWorks数据库快照花了136毫秒。完整备份花了5670毫秒。快照的恢复了905ms和数据库恢复了13382毫秒。纳入生产推展过程中,这可能会导致显着效益
再次,这是值得注意的,也有一些使用快照的警告。你必须有足够的磁盘空间数据库的第二个副本。你必须要小心处理带有快照,因为大多数的语法数据库本身使用的是类似的。最后,同时也有连接到一个数据库快照,你可以不运行从该数据库上的数据库备份还原。最佳实践
数据库备份不应该是一个技术的决定。他们应该由业务决定。小低交易率和/或报告系统,定期加载系统将只需要一个完整的数据库备份。中型系统和大型系统变得依赖于管理,以确定哪些类型的备份的数据类型。
对于一个中等规模的系统,白天的日常备份与日志备份,可能会回答最及时的数据要求。
对于一个庞大的数据库最好的办法是混合放大器;匹配的备份,以确保在最短的时间内最大的可恢复性。例如,运行每周的完整备份。在一周内的一天两次,执行增量备份。白天每10分钟,运行日志备份。这给了你大量的恢复机制。
对于非常大的数据库,你需要一个完整的备份,甚至是一个完整的数据库差异备份,因为这样做可能无法进入运行文件组和文件备份。一些额外的功能可以帮助在这方面,但我不会在这里。
你应该花时间来开发一些脚本运行备份和恢复。一个命名约定让你知道什么数据库,服务器,从中日,在什么特定的备份和格式将非常有利于你的理智。应该定义一个备份,日志,完整或增量,共同的位置。人人负责,应在备份和恢复和故障排除相同的训练。
真正的考验,运行备份机制,然后运行恢复。然后尝试不同类型的恢复,另外,和其他。可以肯定的,不仅有你在确定如何备份系统的尽职调查,但你做了额外的步骤,以确保您可以恢复这些备份。如果你还没有实行这个记录的做法,然后测试文件,实际上,你没有准备好一场灾难。摘要
企业内的备份应该像在芝加哥投票,尽早且经常进行。设置基本备份是相当简单的。添加日志备份放大器;差异很容易。探索的选项,看看如何添加文件和文件组备份和恢复,以提高备份的速度和恢复,这将增加系统的可用性和时间。保持一个共同的命名标准。使用快照时要小心,但肯定聘用他们。您的文件存储在服务器之间的标准位置。实践您的回收率。最后,要真正使您的备份星,拿起一个展鹏的SQL备份,副本,从而加快了备份和压缩它们,使用更少的磁盘空间和时间。

回答

评论会员:jason_gmail 时间:2011/12/07
仅供参考(以防万一):
也有备份/恢复以及在有关的一些很好的读取





我已经工作了很多年的一个数据库管理员和令人吃惊的是看到有许多安装
A.目前没有所有
备份B.在所有
恢复备份,但从来没有测试
祝你好运{S0}

JasonL
评论会员:amcabey 时间:2011/12/07
我的名字是amcabey
#305; turkeyy#305;我不会讲英文#305#305升; sh和

SQL helppp !!!!{ BR}{S1}

刀片
评论会员:"W 时间:2011/12/07
我看到这篇文章是由红门的人写的,我只是想,给他们的SQL备份产品一个插件。我们购买了一个月前的备份的数据库,这是在大小30GB。当我打开加密和压缩,我得到一个3GB的备份文件!!

这绝对是辉煌的! SQL备份是快速和可靠,并与他们的竞争(LS)的工作好几年了,红门处理后,已是一种享受。
压缩备份速度比什么都重要,我恢复一个半小时或更长时间,而不是采取少数(4)分钟。
如果你有一个大的数据库备份,请你帮个忙,并得到这个产品。不仅可以节省备份时间,但它将使你在失败的情况下保持更多的副本,在本地和你会不会追后磁带或使用尽可能多的胶带。

我特别喜欢的加密。
与所有的人失去磁带的情况下,系统被破坏,至少在这给你更多的保护水平,以保持您的数据库安全窥视。
注:不,我不工作的红门或affilliate,我真的很喜欢他们的产品!