Sql server数据库记录修改追踪和恢复的解决方案
在项目开发中,可能很多人都遇到这样客户要求:使用者操作数据库关键记录时要记录使用者的ID,时间,修改的内容等,在必要的情况下要回滚到某一时刻的记录内容。如何解决?这里我根据自己的工作经验总结了三种解决方案,如有不当或者更好的方案请赐教 : )。
1.数据表冗余记录法
在关键的数据库表中,加入 "创建时的日期时间"、"创建用户"、"修改或删除时的日期时间"、"修改或删除用户"、"记录状态" 等字段,当然了字段名可以简化,这里为了更好的说明。“记录状态”包括“当前可用”和“存档”两种状态。当用户修改记录时,要执行两步操作 1).更新当前数据库记录,记录修改者和时间,把“记录状态”改成“存档”。2)新建一条记录,把修改者和时间作为创建者和时间存入,保存新的记录内容,而“记录状态”为“当前可用”。 如果用户删除记录,只是执行第一步操作即可。
这种方案可以用程序在前台方便的察看记录修改历史情况,并可以很容易的回滚到“某一时刻”,这里的回滚不是真正的回滚,仍然要在表里新建记录,和上面提到的修改记录操作相同,只不过记录的内容是“某一时刻”的内容而已。
使用这种方法会造成数据库表中记录的过多存储,在查询和统计时性能会有影响。
2.新建数据表记录操作
在数据库中为关键数据表建立对应的“操作记录表”,所有对关键记录的修改、删除甚至读取都可以记录在“操作记录表”中,具体的实施可以在程序代码中控制,但更好的方法是可以使用触发器控制。
这种方案也可以在前台方便的察看记录修改历史情况,并可以很容易的回滚到“某一时刻”。但由于为每一个关键数据表都建立了“操作记录表”也造成了Sql server的性能影响。
另外有第三方提供了采用这种方案的辅助程序:OmniAudit
下载http://www.ttdown.com/SoftView/SoftView_27817.html
3.使用Sql Server日志
我们知道Sql Server数据库除了数据文件外,还有日志文件,日志文件记录数据库的变化情况,如果我们能察看日志文件的内容也就等于知道了数据库的操作历史,但是微软没有提供诸如察看sql日志的方法和接口等,好在有一个软件提供了这种功能:
Lumigent Entegra For SQL Server ,下载页面http://www.ttdown.com/SoftView/SoftView_30135.html
它能跟踪数据库的所有改动情况,并且提供回滚功能,还可以导出操作历史等。
这种方案的好处是不为数据库增加任何负担就可以察看记录修改历史情况,并可以很容易的回滚到“某一时刻”。但是必须使用第三方的软件,而不能在自己程序的前台操作。另外Lumigent Entegra For SQL Server v2.3.1对中文支持不太好,有些郁闷。
期待更好的解决方案.....
1.数据表冗余记录法
在关键的数据库表中,加入 "创建时的日期时间"、"创建用户"、"修改或删除时的日期时间"、"修改或删除用户"、"记录状态" 等字段,当然了字段名可以简化,这里为了更好的说明。“记录状态”包括“当前可用”和“存档”两种状态。当用户修改记录时,要执行两步操作 1).更新当前数据库记录,记录修改者和时间,把“记录状态”改成“存档”。2)新建一条记录,把修改者和时间作为创建者和时间存入,保存新的记录内容,而“记录状态”为“当前可用”。 如果用户删除记录,只是执行第一步操作即可。
这种方案可以用程序在前台方便的察看记录修改历史情况,并可以很容易的回滚到“某一时刻”,这里的回滚不是真正的回滚,仍然要在表里新建记录,和上面提到的修改记录操作相同,只不过记录的内容是“某一时刻”的内容而已。
使用这种方法会造成数据库表中记录的过多存储,在查询和统计时性能会有影响。
2.新建数据表记录操作
在数据库中为关键数据表建立对应的“操作记录表”,所有对关键记录的修改、删除甚至读取都可以记录在“操作记录表”中,具体的实施可以在程序代码中控制,但更好的方法是可以使用触发器控制。
这种方案也可以在前台方便的察看记录修改历史情况,并可以很容易的回滚到“某一时刻”。但由于为每一个关键数据表都建立了“操作记录表”也造成了Sql server的性能影响。
另外有第三方提供了采用这种方案的辅助程序:OmniAudit
下载http://www.ttdown.com/SoftView/SoftView_27817.html
3.使用Sql Server日志
我们知道Sql Server数据库除了数据文件外,还有日志文件,日志文件记录数据库的变化情况,如果我们能察看日志文件的内容也就等于知道了数据库的操作历史,但是微软没有提供诸如察看sql日志的方法和接口等,好在有一个软件提供了这种功能:
Lumigent Entegra For SQL Server ,下载页面http://www.ttdown.com/SoftView/SoftView_30135.html
它能跟踪数据库的所有改动情况,并且提供回滚功能,还可以导出操作历史等。
这种方案的好处是不为数据库增加任何负担就可以察看记录修改历史情况,并可以很容易的回滚到“某一时刻”。但是必须使用第三方的软件,而不能在自己程序的前台操作。另外Lumigent Entegra For SQL Server v2.3.1对中文支持不太好,有些郁闷。
期待更好的解决方案.....