记一次服务器迁移第二篇-----dblink方式导入导出导致Oracle分区表异常

  接第一篇 http://blog.itpub.net/29827284/viewspace-2137006/,在数据库迁移完成后发现某些分区表在原库并没有分区,导致部分SQL语句执行效率变差。具体为什么会造成此问题,在网上包括MOS一直没找到答案,如果哪位大神碰到过这种情况且找到了答案,烦请帮忙解答,谢谢。以下通过实验进行生产环境的模拟。
 原库导出库环境:

点击(此处)折叠或打开

  1. SELECT * FROM v$version; 
  2. BANNER
  3. ----------------------------------------------------------------
  4. Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Prod
  5. PL/SQL Release 10.2.0.4.0 - Production
  6. CORE 10.2.0.4.0 Production
  7. TNS for 32-bit Windows: Version 10.2.0.4.0 - Production
  8. NLSRTL Version 10.2.0.4.0 - Production
环境准备

点击(此处)折叠或打开

  1. //新建测试表
  2. create table test(
  3.  id number,
  4.  workdate varchar2(10)
  5.  )
  6.  partition by range(workdate)(
  7.  partition p1 values less than('2015-01-01'),
  8.  partition p2 values less than('2016-01-01'),
  9.  partition p3 values less than(maxvalue)
  10.  );
  11. //插入测试数据
  12. insert into test values(1,'2013-01-01');
  13. insert into test values(2,'2015-03-03');
  14. insert into test values(3,'2016-09-01');
  15. commit;
检查确认

点击(此处)折叠或打开

  1. SELECT * FROM test partition(p1);
  2.         ID WORKDATE
  3. ---------- ----------
  4.          1 2013-01-01
  5.           
  6. SELECT * FROM test partition(p2);
  7.         ID WORKDATE
  8. ---------- ----------
  9.          2 2015-03-03

  10. SELECT * FROM test partition(p3);
  11.         ID WORKDATE
  12. ---------- ----------
  13.          3 2016-09-01
通过确认可以发现,插入的数据按照分区要求进行了相关的分区,3条测试数据按照要求插入到了3个不同的分区p1,p2,p3.


新库导入库环境:

点击(此处)折叠或打开

  1. SELECT * FROM v$version;
  2. BANNER
  3. --------------------------------------------------------------------------------
  4. Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
  5. PL/SQL Release 11.2.0.3.0 - Production
  6. CORE 11.2.0.3.0 Production
  7. TNS for Linux: Version 11.2.0.3.0 - Production
  8. NLSRTL Version 11.2.0.3.0 - Production
准备导入导出的dblink

点击(此处)折叠或打开

  1. CREATE DATABASE LINK "DMP_LINK" CONNECT TO "DZDZ" IDENTIFIED BY VALUES 'DZDZ' USING 'DZDZ_222'
设置network_link参数,从上述10g的原库导出测试表test到11g的新库服务器上,语句如下:

点击(此处)折叠或打开

  1. expdp dzdz/****** dumpfile=test.dump logfile=test.log directory=DATA_PUMP_DIR tables=test NETWORK_LINK=DMP_LINK
impdp导入,语句如下:

点击(此处)折叠或打开

  1. 连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
  2. With the Partitioning option
  3. 已成功加载/卸载了主表 "DZDZ"."SYS_IMPORT_FULL_01"
  4. 启动 "DZDZ"."SYS_IMPORT_FULL_01": dzdz
  5. dzdz/******** dumpfile=test.dump logfile=test_impdp.log directory=DATA_PUMP_DIR 
    处理对象类型 TABLE_EXPORT/TABLE/TABLE 
    处理对象类型 TABLE_EXPORT/TABLE/TABLE_DATA 
    . . 导入了 "DZDZ"."TEST"                               5.265 KB       3 行 
    作业 "DZDZ"."SYS_IMPORT_FULL_01" 已于 14:28:29 成功完成 
确认导入的情况:

点击(此处)折叠或打开

  1. SELECT * FROM test;
  2.         ID WORKDATE
  3. ---------- ----------
  4.          1 2013-01-01
  5.          2 2015-03-03
  6.          3 2016-09-01
可以看到test的所有记录已经全部导入成功。下面验证分区的情况:

点击(此处)折叠或打开

  1. SELECT * FROM test partition(p1); 
  2.         ID WORKDATE
  3. ---------- ----------
  4.          1 2013-01-01
  5.          2 2015-03-03
  6.          3 2016-09-01

  7. SELECT * FROM test partition(p2); 
  8. 未选定行

  9. SELECT * FROM test partition(p3); 
  10. 未选定行
可以看到 数据 并没有按照值导入到相应的分区,所有的数据 都导入到了p1分区,由于没有按照值分区,可能会影响部分SQL语句的执行效率。

【总结】
对于分区表的导入操作建议关注其导入过程,输出日志情况如下说明数据已分区。
. . imported "SCOTT"."TEST":"P1"                         5.234 KB       1 rows
. . imported "SCOTT"."TEST":"P2"                         5.234 KB       1 rows
. . imported "SCOTT"."TEST":"P3"                         5.234 KB       1 rows

如果输出日志如下说明表并没有分区,建议查找原因。
. . 导入了 "DZDZ"."TEST"         5.265 KB       3 行

除关注日志外,导入完成后建议检查表的数据分区情况以确认数据按照指定进行分区。






来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29827284/viewspace-2137277/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29827284/viewspace-2137277/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值