1. 情景再现
一天早上,你像往常一样打开了日常数据库维护工作任务清单,却发现任务清单里的某项任务出现了问题,任务描述如下:
1.1 任务描述
有一批数据需要从源数据库db_source复制到目标数据库db_target,该批数据总大小为100GB。
你使用了SQL Server Management Studio工具中的复制向导来执行此次数据复制任务,所有的复制操作都进展顺利。
然而,当你触碰鼠标停止按钮时,突然发现自己错了!最终复制操作结果提示你复制失败,出现了下面这个错误:
Msg 5159, Level 16, State 1, Line 1 The statement has been terminated. The transaction ended in the trigger. The batch has been aborted.
1.2 故障如何发生
经过进一步的排查,原来是由于在复制数据过程中出现了网络故障和存储空间不足的问题,导致数据复制失败,并引发了额外的数据库异常问题。
由于本次数据库复制操作是在生产环境下进行的,进一步引发了大量重要业务数据无法正常使用,影响到了公司的生产经营和客户的业务实施。
2. 数据库灾难的影响
数据库灾难不仅会影响数据库的正常使用,还会直接或间接地影响到企业的整个生态。下面列举了一部分数据库灾难的影响。
2.1 数据丢失
在某些特殊的情况下,数据库中的数据可能会被删除或丢失,比如错误的删除操作、物理损坏、软件错误等等。如果没有及时地备份或恢复数据,丢失的数据将无法找回,会带来严重的后果。
2.2 数据库恢复困难
如果数据库某个时间点出现异常,要想将数据库 恢复至正常状态十分困难。毕竟恢复数据库的原始状态需要在某前期时间上作出快照,如果此时的快照不存在,恢复就不能进行。为了解决这个问题,需要进行定期备份、灾难恢复等操作。
2.3 服务中断
当数据库出现重大故障时,服务会中断,影响到整个业务的正常运营。造成的影响因情况不同而异,可能影响企业的盈利、客户满意度和信誉度等方面。
2.4 成本增加
数据库灾难也会让企业成本上升,由于需要进行备份,存储空间、备份设备和软件都需要配置,这些成本都会增加。如果数据恢复困难,那么寻找专业技术人员的费用也可能增加。
2.5 安全风险
数据库灾难还可能对企业的安全性造成威胁。如果数据是网际互联,那么黑客可以利用数据库灾难来进行信息窃取,造成企业的经济损失。
3. 预防措施
数据是企业最宝贵的资源之一,保护数据就是保护企业的未来发展。预防数据库灾难要从多个方面进行做好。
3.1 数据库备份
作为重要资产,数据库需要定期备份。备份可以选择全量备份、差异备份或日志备份,也可以选择多种存储介质。保留好最新的备份记录,可以在数据发生故障时更快的恢复数据。正确备份关键数据可以使用以下 T-SQL命令:
BACKUP DATABASE [数据库名] TO [备份设备名称] WITH NOFORMAT, INIT, SKIP, NOREWIND, NOUNLOAD, STATS = 10;
如果需要恢复备份的数据可以使用以下 T-SQL命令:
RESTORE DATABASE [数据库名] FROM [备份设备名称] WITH REPLACE, FILE = [备份文件名], STATS = 10;
3.2 数据库监控
数据库监控是保障数据库正常运行的必要条件之一。通过数据库监控,可以及时发现数据库是否出现异常、是否需要进行优化等问题。使用 Performance Monitor等工具可以进行数据库监控。数据库监控建议从下面三个方面来进行:
监测SQL Server 的性能
检查数据库的状态
检查存储空间的使用情况
3.3 恢复计划
对于关键业务数据库,应该制定恢复计划。恢复计划需要制定好每一个恢复策略,及时地备份关键数据,并测试其完整的恢复流程。如果恢复策略不能达到要求,那么需要立即调整计划并重新实施。
3.4 数据库安全
通过合适的安全控制,可以保证数据的完整性和保密性。可以采取一系列措施防止数据被恶意破坏。
例如使用数据加密保证数据安全,可以使用下面的 T-SQL命令进行加密:
USE [数据库名]
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD='mypassword'
GO
CREATE CERTIFICATE MyDBEncryptionCert WITH SUBJECT='PublicEncryption',
EXPIRY_DATE = '20200102';
GO
BACKUP CERTIFICATE MyDBEncryptionCert TO FILE = 'C:\PublicEncryption.CER'
GO
CREATE SYMMETRIC KEY MySymKey WITH ALGORITHM = AES_256
ENCRYPTION BY CERTIFICATE MyDBEncryptionCert;
4. 总结
数据库灾难是一种时间成本、经济成本都十分高昂的事件。对于每一个运营的数据库环境,应该制定好完整的备份方案、灾难恢复方案、恢复策略和数据安全措施等细节。数据备份、数据库监控、数据加密、权限控制等都非常重要。同时,也应该进行计划外的灾难演练,以检查计划的可行性和恢复速度,确保万事无忧。