我在网上搜索过这个问题,得到的答案褒贬不一或不明确。
在 SQL Server 2005 上,我们目前使用插入/删除的表通过触发器记录某些表更改。目前,我们的日志表与主表位于同一个数据库中,我认为从管理角度来看,将日志表移至不同的数据库是有好处的。至少,日志表对于源表而言往往会以 10 倍的倍数增长,因此管理不同类型的表需要遵循不同的路径,并按数据库将它们分开可能会有所帮助。
如果我们采用这种方式,触发器必须跨数据库边界记录(尽管是同一台服务器)。这会造成哪些我现在没有遇到的问题?
到目前为止,主要问题似乎是某人可以独立于另一个数据库关闭(罕见),然后日志记录将丢失并且插入将被保留,或者插入将失败因为触发器失败,这取决于触发器的编写方式。
还有其他风险吗?
另一个解决方案是记录到同一个数据库,然后让作业将记录移动(删除并复制)到另一个数据库。但是,我仍然不知道为什么这是一个更好的解决方案。
答案1
触发器具有您所描述的所有缺点。具体来说,如果用于接收日志的数据库恰好关闭,您不仅会丢失日志记录,而且任何生成日志条目的查询都会失败,除非仔细编写触发器以避免这种情况。使用定期作业将日志数据复制到接收数据库不会有这个缺点;如果接收数据库关闭,那么您不会丢失日志(因为它们仍然在原始数据库中,等待复制),并且您也不必担心日志记录失败导致查询失败。
您是否进行过基准测试来确认这种解决方案是否真的有必要?您是否缺少磁盘,或者以某种方式受到限制,以至于值得付出额外的努力和复杂性来记录到单独的数据库?