昨天下午5点半左右,工程师在进行系统调试的时候,误操作删除了一张业务表,工程师告诉我后,我脑子都炸了。随后冷静下来后,经过近1个小时的努力终于解决了。
我们使用的是SQL Server 2008 R2的数据库,恢复模式:简单,按道理是无解的存在。这也是我瞬间炸毛的原因。因为恢复模式选择简单,一般是无法对数据进行恢复了。庆幸的是我们用的阿里云服务器,并且每天对磁盘进行了快照,所以我知道了我们还有救。
第一步:暂停所有业务,并且对当前存放数据库数据的磁盘创建一个最新的快照
第二步:还原被误删之前的磁盘快照
如果这个表是实时变化的表,想不丢失任何数据恢复回去是不可能的了。
找到误删之前创建的磁盘快照(我们会每天定时的对阿里云服务器磁盘创建一次快照),快照是当天上午9点钟创建的,因为这个业务表不会经常变化,所以我们暂时不考虑有数据丢失。然后参考上面链接进行快照恢复。快照恢复后,我们找到被误删的那张表,并将数据导出到.csv格式的数据,保存到本地。
第三步:还原刚刚创建的最新快照
将我们刚刚创建的这个磁盘快照还原回去后,重新创建被误删的这张表,然后将.csv数据导入到这张表,打开之前暂停的业务。到此为止,数据恢复基本完成。
思考:
出了这么大的一次生产事故,作为领导我有不可推卸责任。
首先,我们对生产数据库进行热备,否则事情就简单很多。只需要将备份数据库里面的数据还原回去即可。
其次,生产环境管理混乱,开发工程师能够随意的操作生产环境进行测试。
如果这次我们不是使用的阿里云服务器,然后并没有对磁盘进行快照,造成的损失可能是无法估计的。
另外,如果服务器磁盘有足够的空间,不要像我一样把数据库的回复模式改为简单最好恢复模式使用完整。
最后,虽然对相关工程师进行了处罚,同时反映出了,目前我们的管理存在着很严重的问题。我也相应的给公司领导提出了对个人的处罚申请。处罚不是目的,是希望我们能够引以为戒,管理漏洞。