我们有一个包含12个成员表的分区视图。分区列是一个日期,我们每个月都有一个表。数据不断插入当月的表格中。旧表是不变的。
在下个月的每个月初,将创建一个新表并将其添加到视图中。同时我们将从数据库中删除最旧的表,但我们必须以某种方式保存数据,因为将来我们可能必须暂时将这些数据重新插入数据库以进行分析和比较。例如,在2011年6月,当分区视图将具有从2010年7月到2011年6月的成员表时,我们可能不得不暂时重新插入2009年6月和2010年6月的数据。
我的问题是:你怎么做'保留'然后'重新插入'操作?是否有推荐的方式或众所周知的模式?
我们正在使用SQL Server 2005标准版。我是数据库管理的新手。
(编辑:为什么有人会在每个月使用分区和新表?请参阅SQL Server 2000 Partitioned Views和SQL Server 2005 Partitioned Tables and Indexes)
答案 0 :(得分:2)
可能不是你想要的答案,但无论如何我会说 - 这通常是你使用数据仓库的原因。将那些过去几个月的时间推送到数据仓库并进行报告和处理。分析那里。
答案 1 :(得分:2)
现在数据存储如此便宜,为什么不将所有数据保存在一个表中按日期过滤它。在该日期放置一个索引,以便在表大小增加时帮助提高性能。
如果这不是一个选项,我只需创建一个表的备份,您可以从以后恢复,或者从您可以保存到sql文件并随时运行的数据创建插入语句。
答案 2 :(得分:2)
好。我不知道我是否100%理解你的意思。但据我了解,每个月的数据都有一个表,然后使用视图将几个表合并在一起(我猜是使用联合?)。如果是这种情况,我不会做任何事情,除了继续为每个月创建新表,并修改视图以删除旧表,就像你说的那样。然后,为了“重新插入”旧数据,我将创建一个包含所有表的新视图,或者如果可行则修改当前表。没有理由从数据库中删除旧数据。
答案 3 :(得分:1)
为什么不使用批量复制工具(bcp)将表格内容导出到文件中。
然后,您可以将其压缩并保存在安全的地方,直到您需要再次使用bcp工具重新创建表格。
要导出
bcp yourdb..Stuff200901 OUT Stuff200901.bcp -T -S yourdbsvr -r "\n" -t "|" -c
要导入(请注意,您需要创建表格)
bcp yourdb..Stuff200901 in Stuff200901.bcp -c -S yourdbsvr -T -t "|" -k -e err.txt
键入bcp以在命令提示符下获取完整的选项列表。