版本: Oracle 12cR2 EE
该表包含以下列类型: NUMBER、CLOB、NVARCHAR2、TIMESTAMP、VARCHAR2
表大小: 95GB
表格行数: 20M
表分区?不
表上的索引:表上只有一个主键作为索引。
依赖关系: “每一行之前(插入)”只有一个触发器作为对表的依赖项。
约束:有 3 个约束(其中 1 个是主键,其他是检查)。
我们要存档此表。但是,我无法决定如何为这么大的表进行归档。使用 CTAS 将某个日期之前的记录移动到新表中,然后在现有表中删除这些导入的记录,这将是一场噩梦。
我认为最好的方法是让表间隔按月分区(如果你有更好的解决方案,我愿意接受任何想法)。
几个术前和序列问题:
- 有没有办法预先找出在对这种大小的表进行分区期间会生成多少存档?
- 我们有机会提前计算过程的持续时间吗?
- 停止将在此过程中加载的其他数据库作业是否是一个不错的选择?
- 是否需要对操作或其他依赖项或触发器的主键索引进行更改?
对于后处理:
删除大分区时是否会导致数据库负载过重?
例如,是否可以设置这样的订单;我们可以在主表上只保留最近 3 个月或最近 6 个月的数据,并每月将较旧的分区移动到归档表中吗?迁移时只使用导出导入方式是否正确?
迁移的分区将从迁移过程中删除。这样做会不会在归档生成的基础上出现问题?
谢谢你。
此致。
区间划分应该是合适的方法。如果您可以注意大多数应用程序也考虑到这一点(意思是:他们的查询应该始终包含 WHERE 子句中的分区标准),那么它将加快速度。
术前
后期操作: