0

我正在研究我们的数据库应用程序(高度规范化模式)的归档选项,并希望得到专家的反馈。我们正在使用Sql Server 2005,但是如果某些东西只能在2008 R2中运行,那可能是我们的一个选择。归档时间 - SQL Server

归档的主要原因是每年删除旧数据。确定哪些对象可以归档的标准不会很简单(即:不仅仅是按日期过滤,还涉及更多的考虑因素)。

归档需要是基本上在所述应用程序的按钮(即:不是由数据库服务器上实际DBA)。

数据应该可检索,但可能通过特殊要求。也许一个对象及其所有相关的部分可以被搜索并返回到当前的数据库中? (同样,通过应用程序界面。)

另一个重要的要求是保持相关数据的完整性。如果一个存档对象与一个非存档对象有关,我想确保这个非存档对象不能通过这个接口被删除。目前,我们已经进行了多次检查,以确保您无法删除正在使用的项目,并且我毫不犹豫地更改所有这些检查以加入_archive表格或使用新视图。有另一种方法吗?

我看了一下表/索引分区,虽然有趣的是,这听起来像也许是工作的很多考虑多少存储过程,视图,索引等,我们使用。

+0

由于条件复杂,分区功能对您无效。 – JNK

回答

1

什么是你的归档动机是什么?

你提到要“删除旧数据,”但既然你需要的是不断面世,它没有任何意义。

在你的情况下最容易做的事情将是一个“软”档案,你可以在所有的表格中添加一个Archived位字段来指示一行是否激活。然后,所有现有的参考检查都会保留,但您需要在视图或查询中的该位上添加过滤器,并将其添加到大多数索引中。

你并不真的需要做的卸载,因为你不能移动数据从服务器反正。

+0

谢谢你的回答。我意识到我没有提到速度作为归档的原因,但是你能否告诉我是否会有速度优势(假设索引反映了这一点),并且如果优势将等于或接近实际将数据移除到不同的表格? – user992228

+0

好处与卸载到其他表格的效果差不多。由于数据本身不会移动,所以也不会有插入/删除所有这些行的开销,而且您也不会有碎片需要处理。 – JNK

+0

再次感谢您的回答。 – user992228