周三的时候,公司的SQL Server有部分数据出现异常,不知道是谁登陆进服务器中去,执行了一个脚本,导致近400条数据出现异常。boss 发现后非常angry.
I have never been so angry in all my life,he said.
事情发生了,只好自己找办法解决。 首先叮嘱自己的团队成员,不要随意连到服务器中去,开发就用自己是本地的SQL。因为我写SQL有个习惯,我会把正在做的项目的SQL全部写到一个文本文件中去,以后查找维护相对方便一些:比如找出一周内有多少人加班,加班合计数据是多少,这样的任务没办法用SQL一句二句搞定,但是可以随时调出以前写的脚本,很快就知道答案。
如果我做的这个项目转给别人维护,相信他看了我的脚本笔记后,会减轻他的痛苦,阅读别人代码的痛苦。
言归正传,看看,到目前为止,我所能理解的SQL 备份方案。
简单的可分为自动备份和手动备份。自动备份由程序在指定的时间运行,手动要求DBA主动备份。
1 SQL脚本
这是根本的办法,其它的办法都基于这个办法。用这个办法需要有SQL查询分析器。
直接上脚本:
就这么简单,简单的可爱。
有时候用企业管理器备份也是一样的,都相对容易。
2 把这个脚本做成Job,让服务后台自动运行。
3 SMO. 这是微软在发布SQL Server 2005时附带的开发工具包,以替代以前用的SQL DMO对象,SQL DMO是基于COM接口的,不容易理解,而且互操作性能不好。
SMO完全基于.NET框架,支持SQL 2000以后的版本,非常方便的使用。
网上关于SMO的资料不多,如果你读过这本书《SQL Server 2005 开发者指南》,找到它的附加的源码,里面就有很详细的SMO的例子参考。
在这里找到它的源码:http://sqlskills.com/books.asp
英文原书名是:A Developer's Guide to SQL Server 2005 by Bob Beauchemin and Dan Sullivan
4 网上找了个软件。如果用关键词《SQL备份工具》去请教百度,他会很乐意告诉你很多小工具都支持这个功能。只是没有源码,对于开发人员来说,追求答案远比结果重要,所以很少用这位仁兄的工具。
5 这个主案也是用脚本备份,但是不需要安装SQL查询分析器之类的工具。在服务器端备份,把服务器端备份的数据传到本地。公司服务器不多时,这个方案很不错。每个开发人员自己电脑中存一个备份,服务器中也保留备份,大大降低服务器崩溃后的风险。
看图,参考了下别人的思路和代码,自己折腾弄了这个小工具。
没多大技术含量,把备份的SQL脚本发送到服务器中去,备份数据库放到FTP目录中,运用FTP技术,下载到本地电脑中。
暂时只知道这么多,欢迎大家积极贡献思路,做出一个完整版的SQL备份方案。
另外,我知道有个工具叫Log Explorer,可以查看SQL日志文件,然后恢复误操作的数据。
所以,那些被破坏的异常数据,已经被我轻易的恢复成功了。