SQL SERVER 运维日记-数据库备份

概述

昨天下午突然看到,《炉石传说》游戏数据库发生宕机并引发数据丢失事故的新闻。刚看到时,满满的不可思议。暴雪啊,网易啊。

都是很牛叉的公司。他们出的游戏我都是很喜欢的。

当我看到,第一时间着手抢修,重启服务器,并尝试数据恢复时,我的想法是他们的高可用方案呢?为什么不马上切换?

当我看到相关备份数据库也出现故障时,就更无语了。其实这样的事情在我们的客户每年都会遇到很多。前不久就有一个医院, 数据库和备份都同时损坏,而且没有高可用的方案。

虽然最终帮他们修复了好数据库,但还是丢失部分数据,而且中间1天时间,业务都是手动操作,严重影响业务。

对于炉石这样的大公司,对应的方案应该是做得很全的,本次事故也可能是有其他的原因。

分析

这个原因暂且不论,当遇到同样的问题时,相关的运维和DBA都是很绝望的。总结下上面的问题:

1.缺乏高可用方案

2.制定更好的备份的策略

解决

有小伙伴提到高可用性,这里没有写。主要高可用 方案太多,在一篇文章难以说清楚,所以本文先给出备份的解决方案。

下面给出我之前给某外企制定的备份策略,可以解决上面提到的备份的问题。小伙伴们可以参考下:

备份的位置

1.本地的备份,放置于和数据库文件不同的物理磁盘

2.异机备份。使用自动同步软件实时把备份同步到专门的NAS

3.异地备份(可选)

备份方式

首先,恢复模式强烈建议使用完整模式。为了保证数据库损坏时,能最快速度恢复业务。

1.每周全备

2.每天差异

3.每半小时日志

备份的频率根据具体的业务情况可自行调整。

备份的选项

到目前为止我们的备份策略看上去很完美了。可事实是这样的吗?答案是否定的。

我们做好了看似完美的备份。但是如果我们的数据库本身已经存在页损坏,那么我们的做再多备份也是徒劳。因为备份的文件也是损坏的。

那我们如何解决呢?最好的方法就是定期还原备份,然后立即运行DBCC CHECKDB。如果当时条件不允许持续还原和检查,那么使用RESTORE VERIFYONLY命令就是你另一个最好的选择了。但是RESTORE VERIFYONLY并不是单独使用的。它必须配合WITH CHECKSUM.意思就是,在BACKUP 的使用使用WITH CHECKSUM 参数,然后定期对备份的文件运行RESTORE VERIFYONLY 来验证备份文件的有效性。如果数据库中的某些页面损坏,使用WITH CHECKSUM 去备份的作业会马上失败。这可以让我们第一时间发现数据库页损坏的问题。

举个栗子:

BACKUP DATABASE AdventureWorks TO DISK = ‘G:/backups/AdventureWorks_full.bak‘ WITH CHECKSUM

假如你更改文件数据备份文件,然后在那个文件上运行RESTORE VERIFYONLY的话,会产生如下提示:

Server: Msg 3189, Level 16, State 1, Line 1 
Damage to the backup set was detected.

Server: Msg 3013, Level 16, State 1, Line 1 
VERIFY DATABASE is terminating abnormally.

设备 ‘d:\tttttt.bak‘ 上的介质簇的结构不正确。SQL Server 无法处理此介质簇。

报警

备份有可能因为各种原因而失败,比如备份磁盘的空间满了,等数据库损坏的时候,突然发现备份任务失败了,再完美备份策略 百搭。所以对备份任务,增加邮件报警机制,如果备份失败了,可以第一时间知道并解决。

时间: 2024-10-24 15:32:19

SQL SERVER 运维日记-数据库备份的相关文章

SQL SERVER运维日记--收缩数据库

一个小故事 某天,小王正在和HR妹妹闲聊,正HAPPY时,,突然收到系统告警消息,数据库磁盘被剩余空间500M,OMG,不行,磁盘快满了,要是业务要停了,,那就小王只能删库到跑路了,,, 先检查下,有没有可以删除的不用的文件,结果都是重要的或者拿不准的.先收缩下数据库吧,点击运行.等收缩完成就可以继续去根HR妹妹聊天了.突然电话座机和手机齐鸣,小王心里一种不祥的预感呢?好像这个场景在哪里见过..不会是数据库阻塞了吧?? 手忙脚乱的先接起手机,因为来电显示是某业务部门主管 “小王啊,,现在系统卡死

使用SQL Server Management Studio 创建数据库备份作业

SQL Server 作业无非就是按照规定的时间执行指定的脚本,这里介绍如何用SSMS(SQL Sever 2008)创建作业备份数据库. (0)假设在创建作业之前你所要备份的数据库已经存在:其次,你已经会启动SQL Sever 代理(一般是关闭的) (1)创建SQL Server代理作业 (1.1)新建作业,输出常规信息 如上图:输入作业名称(如:BackupJobTest),这里所有者和类别都是默认的,输入说明(就跟写代码要写注释一样,利人利己) (1.2)设置作业执行步骤 点击左边“选择页

推荐一款小巧的SQL Server运维工具SqlOps

上周碰到几位同事需要单独安装SQL Server Management Studio,用于数据查询,我推荐使用SqlOps工具作为替代. ??????? SqlOps 简介??????? 功能:跨平台SQL Server开发和管理工具.??????? 优点:绿色.小巧.??????? 缺点:暂不支持维护计划.SQL Server代理的管理. ??????? 项目地址为:https://github.com/Microsoft/sqlopsstudio????????界面截图: ????????

SQL Server 2008 R2 主从数据库同步

一.准备工作: 主数据库服务器: OS:Windows Server 2008 R2    DB: SQL Server 2008 R2 Hostname : CXMasterDB  IP: 192.168.1.224/24    dg: 192.168.1.1 DNS: 192.168.1.19    DNS: 202.96.209.133 从数据库服务器: OS:Windows Server 2008 R2    DB: SQL Server 2008 R2 Hostname : CXSla

SQL Server 2000中的完整备份、差异备份操作

在SQL Server 2000中,假定我们拥有一个数据库为:Test, 现在需要它每天19:00自动进行一次备份,并且以后一旦发生数据库错误,我们都可以通过备份文件将数据库恢复到任何一个备份过的时刻点. 备份步骤:1. 在“SQL Server企业管理器”中注册数据库所在的服务器,注意要使用sa用户名和口令,否则以后执行备份调度的时候,会出现权限不足,导致不能进行备份.2. 确保该服务器的SQL Server Agent服务是开启的,因为所有的调度都是通过该代理进行执行的.3. 在“SQL S

Sql Server来龙去脉系列之四 数据库和文件

在讨论数据库之前我们先要明白一个问题:什么是数据库? 数据库是若干对象的集合,这些对象用来控制和维护数据.一个经典的数据库实例仅仅包含少量的数据库,但用户一般也不会在一个实例上创建太多的数据库.一个数据库实例最多能创建32767个数据库,但是按照实际情况,一般设计是不会达到这个限制值. 为了更明显地说明数据库,数据库包含了以下属性和功能: *. 它是很多对象的集合,比如表.视图.存储过程.约束.对象集合的最大值是2(31) - 1(超过2百亿).一般对象的数量在几百至一万. *. 它维持拥有的用

SQL Server 2008 R2 主从数据库同步(日志传送的方式 Log Shipping)

注意事项: 1.为主从服务器添加新的系统用户并设置好密码: 2.主从服务器都开启SQL Server的代理服务,并设置为开机自动启动 3.在数据库配置管理其中把SQL Server服务和SQL Server的代理服务的登录信息设置为上边添加的系统用户,并设置好密码.(记得主从服务器都需要这样设置,不要忘记了,我都是忘记了,怎么弄都不行) 4.用户共享的文件目录,共享访问时需要密码,记得要先访问共享并记住凭证,不然会提示失败. 5.SQL Server的备份,是主库的数据库服务器自动备份数据库,生

Sql Server 逻辑文件 '' 不是数据库 '' 的一部分。请使用 RESTORE FILELISTONLY 来列出逻辑文件名。

当使用语句还原数据库时,报如下错误: 消息 3234,级别 16,状态 2,第 29 行逻辑文件 'LenborMealOrder_Base_2017' 不是数据库 'Members_01' 的一部分.请使用 RESTORE FILELISTONLY 来列出逻辑文件名.消息 3013,级别 16,状态 1,第 29 行RESTORE DATABASE 正在异常终止. 原因:此数据库是用sql语句备份而来,引发的错误,原备份和还原的sql语句如下: --备份 BACKUP DATABASE Lea

运维日记-Exchange服务器重新加域后处理-20140712

今天做实验的时候误将第二台exchange2013邮件服务器退域了,重新加域后导致原来的exchange服无法启动,建在该数据库的用户无法登陆,系统日志提示: 处理过程: 在域管理器添加该计算机exchange权限 重启服务器后恢复正常. 运维日记-Exchange服务器重新加域后处理-20140712