我被要求在MS SQL Server 2008中截断一个大表。数据是不需要的,但可能需要每两年一次。 它永远不会被改变,只有被观看。
问题是,由于我不需要每天的数据,我该如何保护和备份数据呢?
请记住,我需要每隔两年才能访问一次,如果恢复过程需要几个小时,那么对我们来说是很好的select。
整个表大约有三百万行,我需要将它截断为大约一百万行。
你如何计划访问表数据?
如果你使用的是一些灵活的东西(你自己的代码或简单的SQl查询),那么一个简单的方法就是将需要的表复制到另一个数据库,并将它从服务器上分离出来。 之后,截断表(或删除不需要的行,尽pipe您可能想检查您的T-Log大小)。
当你需要它的时候,你总是可以以只读模式从存储中重新挂载相关的数据库。 如果您需要一次在多个备份上运行查询,则可以创build一个重组所有数据的视图。
如果您使用的软件不允许自定义该表的访问方式,则仍然可以将该表自行复制到另一个数据库,但是恢复该备份可能会产生问题,因为您需要合并现有的上下文(另一个表格状态)与旧数据。 另外,数据结构可能已经改变,几乎无法恢复。
所以在这种情况下,我build议你简单地备份完整的数据库并存储它(最好还有一个访问它的软件版本)。
300万行不是很多,尤其是对于sql server。 另外,您不能截断表并保留行。 完全截空清空。
即使你有时间,删除也很慢。
我会右键点击你的表,脚本为,创build新表。 重命名它,像Table_Backup11232011,确保重命名您的主键以及…
insert into Table_Backup11232011 select * from oldtable truncate table oldtable
现在,你有一个备份和一个新的表。 300万行将只花费你几百兆字节,这是没有什么。
归档/可访问性:这里有一个想法… 1)执行你的数据删除2)将tyhat表放置在它自己的SQL文件组3)将文件刻录到只读设备(Space allowin)4)使用ALTER TABLE重新定义whaere该文件是,并将其定义为只读5)派对上,加思!
现在数据已经从您的硬盘驱动器,不可改变,但在需要时仍然可用。