更频繁地备份SQL DB


10

我目前有一个计划任务,该任务每天晚上2点触发,调用SQLCMD.exe,并将其传递给.sql脚本以运行备份(如下所示)。我们是一家很小的公司,由于业务方面的重大增长,需求不断增长。此时丢失1天的数据将花费数万美元,而去年同期则为数百美元。在我可以将这个数据库平台迁移到另一个解决方案之前,该解决方案通过SQL Azure这样的主要冗余进行数据镜像,那么如何做才能获得更频繁的备份呢?下面的此脚本是否强制数据库脱机?我可以与与数据库交互的用户一起运行此脚本吗?

USE CompanyCRM;
GO
BACKUP DATABASE CompanyCRM
TO DISK = 'D:\CRMBackups\CompanyCRMCRM.Bak'
   WITH FORMAT,
      MEDIANAME = 'CompanyCRM_Backup',
      NAME = 'Full Backup of CompanyCRM';
GO

更新资料

哇,显然,这里的DBA社区比SO上的要多得多。感谢到目前为止的反馈。唯一缺少的是“方法”。我已经在上面显示了用于日常备份的SQL命令,但是增量日志备份的示例是MIA。这不是一个很大的数据库,它当前在SQLExpress上运行。当我说HA或SQL Azure时,我是专门指的是我们目前还没有的小型企业架构。该实例当前正在我们的ONLY服务器上运行。如果该服务器崩溃,那么我们的恢复时间将成为关键时刻。这就是为什么SQL Azure变得有吸引力的原因。


编辑了我对您的更新的回答,希望对您

Answers:


5

编辑,来自您的更新

就像您说的那样,您可以释放1天的数据量,然后将数据库置于SIMPLE恢复模式下。然后,您可以在每个早晨和/或晚上进行FULL。如果您想在一天之内进行自我保护,则可以对数据库进行差异备份,以防万一。这将捕获自完整备份以来所做的任何更改。如果我知道发生大量输入的时间范围,则可以在完成备份后将这种类型的备份放入其中。它可以节省人们恢复的时间,因此他们不必进行额外的数据输入。

由于这是您唯一的服务器,因此我将确保您针对数据库运行DBCC CHECKDB。当您发现备份已损坏时,备份没有任何用处(我认为有人也提到了这一点)。您可以在Probalby那里找到一些脚本来设置计划的任务,以检查SQL ERRORLOG中的DBCC消息以捕获任何错误。SQL Server不会从本地警告您从DBCC消息返回的错误,因此,除非您每次手动检查执行该操作的脚本都可以提供帮助,否则它不会发出警告。

差异备份命令:


USE CompanyCRM; 
GO 
BACKUP DATABASE CompanyCRM 
   TO DISK = 'D:\CRMBackups\CompanyCRMCRM_diff.Bak'    
WITH FORMAT, DIFFERENTIAL,
MEDIANAME = 'CompanyCRM_Backup',       
NAME = 'Full Backup of CompanyCRM'; 
GO 

1
@Shawn:OP说:“此时丢失1天的数据将花费数万美元,而去年同期是几百美元”,他在哪里说自己会丢失1天的数据?
玛丽安2012年

8
  • SQL Server中的备份不会中断。即数据库保持运行状态。阅读文档。
  • 每天进行一次完整备份,然后定期(例如每15分钟左右)定期进行出厂(已复制)LOG备份(同样,文档具有...文档)。

4
我认为备份是您不需要的方法,但是请完整阅读文档-这对业务至关重要,对-认真-非常重要。不煮鸡蛋的风格。雇用专业人士。
TomTom

2
太糟糕了,我不能对此网站进行投票...
RSolberg 2011年

1
@RSolberg:TomTom的答案以及您已经获得的其他建议都是有效的。我建议您不要期望任何响应者真正向您展示备份的基本语法。虽然我看到肖恩很乐意这么做。仅设计一个BACKUP策略是不够的。您需要将其与RESTORE策略配对,以便在需要时一切都有效。
玛丽安

2
@RSolberg:很抱歉让你生气。这不是故意的。但是这个社区没有帮助吗?您有很好且有效的答案(和评论)。您自己的信息是:“此时丢失1天的数据将花费数万美元,而去年同期是几百美元。” 因此,您需要一个可靠的备份和还原策略,以免您无法达成目标。扎实的策略来自对基础知识的充分了解。这些来自阅读和理解手册。对不起,如果您还没有理解!
玛丽安

2
我同意@RSolberg的观点,这里的大多数答案都没有显示“怎么做”,但是那也是因为这个问题在细节上缺少了您不了解罗素的“什么”。您需要告诉我们更多有关您需要的信息,但我同意您的意见,这里的网站不应与“ RTFM n00b”有关。而且,正如您所指出的,Stack Overflow上有10k ,因此您一定会理解标记粗鲁或破坏性的注释。将来,您应该早点这样做,而不是因沮丧而陷入困境。
jcolebrand

6

您需要做的第一件事是弄清丢失多少数据。在此之前,您将不知道备份数据库的频率。这不是您应该提出的数字。这是企业(或较小公司的CEO)需要决定的事情。他们要返回的第一个数字是0分钟。可以做到,但是这样做会非常昂贵。实际上,您可以备份的最小数据量约为每2分钟一次。如果系统中更改的数据量足够小,则可以每分钟进行一次备份。

为了进行事务日志备份,这是您需要做的,您需要将数据库置于FULL恢复模式。

如果您有能力损失5分钟的数据量,那么您可能希望每天进行一次完整备份,而每5分钟进行一次事务日志备份。如果您可能丢失15分钟的数据,那么您将希望每15分钟执行一次完整备份和事务日志备份。

另一个选择是,如上所述,我每x分钟执行一次每周完整备份,每日差异备份和事务日志备份。

请记住,在数据库故障或数据删除的情况下,您需要执行的备份次数越多,需要还原的文件就越多。整天进行差异备份可能会缩短恢复数据库所需的时间。

所有使用BACKUP数据库和BACKUP LOG语句的备份都是联机完成的,不会阻止用户访问数据库。


实际上,我非常有能力评估我们可能丢失多少数据。小型企业要求人们多戴帽子,因为我的CIO倾向于每天参与业务决策。
RSolberg 2011年

1
这样会使讨论时间短得多。
mrdenny

3

假设您有一个常见的业务场景,最忙的时间是:周一至周五,上午9点至下午5点。然后,我建议:在周日晚上进行完全备份。在上午8点,下午6点和凌晨1点进行差异备份(以减少恢复时间)。每小时或根据您的业务需求记录备份。

根据您的保留期限,您应该有一个自动清除作业,以清除旧的备份文件。所有这些都可以使用SQL维护计划来创建。检查此链接以获取SQL 2005

您应该将备份存储在某种形式的冗余磁盘(镜像)上,或者可以使用磁带进行异地存储。备份运行时,用户可以继续在系统上工作。


2

我不会每晚都做完整备份。如果它是一个大型数据库,则可能要花费很长时间,更不用说在媒体上占用大量空间了。每个周末进行一次完整备份,每晚进行一次差异备份。然后每小时或每半小时进行一次事务日志备份(假设数据库已完全恢复),但要确保在磁盘故障的情况下,这些.bak和.trn文件位于单独的磁盘上。


标签丢失了,这不是一个巨大的数据库。它当前正在SQLExpress实例上运行。
RSolberg 2011年

1
数万美元,在Express上运行?有趣!
AndreiRînea2012年

并不是的。根据您存储的内容(无文本,无二进制文件),即10 GB的数据。您可以为10 GB的大公司(严重为大公司)运行会计系统。每天订单量为100.000的在线商店可以轻松地以10 GB的价格进行交易。
TomTom

1

您可以在晚上对备份文件夹进行云同步以获取异地存储吗?由于我非常确定这是针对一家医疗保健公司的,因此是否有足够安全的产品可以满足HiPA的要求?或者只是对它们进行超级加密?

该脚本是否至少将备份副本放在网络共享上?这样,如果物理盒子炸毁了...


对以上所有内容均是。实际上,我们将备份到已镜像的网络驱动器,然后将数据从该环境复制到安全的数据中心。
RSolberg 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.