RSo*_*erg 11 sql-server backup
我目前有一个计划任务,它在每晚凌晨 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
Run Code Online (Sandbox Code Playgroud)
哇,显然这里有一个比 SO 更专注的 DBA 社区。感谢您到目前为止的反馈。唯一缺少的是“如何”。我已经展示了上面我用来做每日备份的 SQL 命令,但增量日志备份示例是 MIA。这不是一个大型数据库,它目前在 SQLExpress 上运行。当我说 HA 或 SQL Azure 时,我特别指的是我们作为小型企业没有的现有架构。此实例目前正在我们唯一的服务器上运行。如果该服务器崩溃,我们的恢复时间将成为一个症结所在。这就是 SQL Azure 变得有吸引力的原因。
您需要做的第一件事是弄清楚您可以承受丢失多少数据。在此之前,您将不知道备份数据库的频率。这不是你应该想出的数字。这是企业(或小公司的 CEO)需要决定的事情。他们要返回的第一个数字是 0 分钟。这可以做到,但这样做会非常昂贵。实际上,您可以备份的最小数据量大约是每 2 分钟一次。如果系统中变化的数据量足够小,您可以每分钟进行一次备份。
为了进行事务日志备份,这是您需要做的,您需要将数据库置于完全恢复模式。
如果您可以承受丢失 5 分钟的数据,那么您可能希望每天进行完整备份,并且每 5 分钟进行一次事务日志备份。如果您可能会丢失 15 分钟的数据,那么您需要每 15 分钟进行一次完整备份和事务日志备份。
另一种选择是每x分钟进行一次每周完整备份、每日差异备份和事务日志备份,正如我上面所说。
请记住,您需要备份的次数越多,在发生数据库故障或数据删除时需要恢复的文件就越多。全天进行差异备份以缩短恢复数据库所需的时间可能是有意义的。
所有使用 BACKUP 数据库和 BACKUP LOG 语句的备份都是在线完成的,不会阻止用户访问数据库。
小智 5
编辑,从您的更新
正如您所说,您可以丢失 1 天的数据,然后我会将数据库置于简单恢复模式。然后你可以每天早上和/或晚上做一个完整的。如果你想在白天保护自己,你可以通过数据库的差异备份,以防万一。这将捕获自完整备份以来所做的任何更改。如果我知道发生大量输入的时间范围,我可能会在完成后将这种类型的备份放入其中。它可以节省人们的恢复时间,因此他们不必进行额外的数据输入。
由于这是您唯一的服务器,我会确保您针对数据库运行 DBCC CHECKDB。当您发现备份已损坏时,备份没有任何好处(我想有人也提到过这一点)。您可能会找到一些脚本来设置计划任务以检查 DBCC 消息的 SQL 错误日志以捕获任何错误。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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
544 次 |
| 最近记录: |