问题描述
你好,汤姆
了解如何以自动方式优化将记录 (历史日期) 从生产数据库中的一个表移动到另一个历史数据库中的另一个表。
你能在Oracle分区中支持我吗?
它可以使用交换分区?
谢谢你的支持。
了解如何以自动方式优化将记录 (历史日期) 从生产数据库中的一个表移动到另一个历史数据库中的另一个表。
你能在Oracle分区中支持我吗?
它可以使用交换分区?
谢谢你的支持。
专家解答
分区肯定会成为你的朋友,因为使用常规方法 (插入/删除),虽然可以快速将数据复制到新目标,但从源中删除数据的成本可能非常高,例如
因此,删除成本将近4倍 (在此演示中)。
Exchange分区可能不会在效率方面对您有很大帮助,因为exchange分区的主要好处是数据不会移动,当然,在这种情况下,您实际上 * 希望 * 将数据 (移动到另一个数据库)。
但是我们从上面发送,插入数据并不是特别昂贵,因此,如果我们可以将删除的成本降至最低,那么我们可能会有一个可行的解决方案。例如,下面的演示使用一个年度分区来复制一年的数据,然后在分区级别截断,这比删除效率高得多。
如果它很难复制第一个数据,例如,插入是通过网络等,那么另一个探索的选择是可传输表空间。在这种情况下,您可以将数据分区移动到一个新的空表空间中,然后从主表空间分离并附加到历史表空间。
因此,工作流程将遵循以下路线:
-使用 “alter table move partition” 将要存档的分区移动到表空间X中
-使表空间X只读
-用expdp卸载元数据,例如
expdp hr/hr目录 = dir1转储文件 = tts.dmp传输 _ 表空间 = X传输 _ 完整 _ 检查 = 是日志文件 = tts.log
-将X的数据文件复制到历史数据库
-导入元数据
impdp hr/hr目录 = dir1转储文件 = tts.dmp传输 _ 表空间 = X传输 _ 数据文件 = '用户01/数据/tbs6.dbf' 日志文件 = tts.日志
SQL> select count(*) from t; COUNT(*) ---------- 3961700 SQL> create table t1 as select * from t where 1=0; Table created. SQL> set timing on SQL> insert /*+ APPEND */ into t1 2 select * from t; 3961700 rows created. Elapsed: 00:00:08.60 SQL> commit; Commit complete. Elapsed: 00:00:00.00 SQL> SQL> delete from t; 3961700 rows deleted. Elapsed: 00:00:29.19
因此,删除成本将近4倍 (在此演示中)。
Exchange分区可能不会在效率方面对您有很大帮助,因为exchange分区的主要好处是数据不会移动,当然,在这种情况下,您实际上 * 希望 * 将数据 (移动到另一个数据库)。
但是我们从上面发送,插入数据并不是特别昂贵,因此,如果我们可以将删除的成本降至最低,那么我们可能会有一个可行的解决方案。例如,下面的演示使用一个年度分区来复制一年的数据,然后在分区级别截断,这比删除效率高得多。
SQL> drop table t purge; Table dropped. SQL> SQL> create table t 2 partition by range ( created ) 3 ( 4 partition p1 values less than ( date '2018-01-01' ), 5 partition p2 values less than ( date '2019-01-01' ) 6 ) 7 as select d.* from dba_objects d, 8 ( select 1 from dual connect by level <= 50 ); Table created. SQL> SQL> set timing on SQL> insert /*+ APPEND */ into t1 2 select * from t partition (p1 ); 3598300 rows created. Elapsed: 00:00:09.05 SQL> commit; Commit complete. Elapsed: 00:00:00.00 SQL> alter table t truncate partition p1; Table truncated. Elapsed: 00:00:00.41
如果它很难复制第一个数据,例如,插入是通过网络等,那么另一个探索的选择是可传输表空间。在这种情况下,您可以将数据分区移动到一个新的空表空间中,然后从主表空间分离并附加到历史表空间。
因此,工作流程将遵循以下路线:
-使用 “alter table move partition” 将要存档的分区移动到表空间X中
-使表空间X只读
-用expdp卸载元数据,例如
expdp hr/hr目录 = dir1转储文件 = tts.dmp传输 _ 表空间 = X传输 _ 完整 _ 检查 = 是日志文件 = tts.log
-将X的数据文件复制到历史数据库
-导入元数据
impdp hr/hr目录 = dir1转储文件 = tts.dmp传输 _ 表空间 = X传输 _ 数据文件 = '用户01/数据/tbs6.dbf' 日志文件 = tts.日志
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




