导入一张18亿条300G数据文件的表经验

1.问题:需要导入一张18亿数据的300G大的数据文件

2. 客户给了一个用imp导出的数据文件。包含了一个表xx。这个表的结构如下:

点击(此处)折叠或打开

  1. CREATE TABLE "username"."xx"
  2.    (    "DTLCARDNO" CHAR(16) NOT NULL ENABLE,
  3.     "DTLCITY" NUMBER(4,0),
  4.     "DTLCDCNT" NUMBER(6,0) NOT NULL ENABLE,
  5.     "DTLTXNCODE" NUMBER(4,0) NOT NULL ENABLE,
  6.     "DTLINNTYPE" NUMBER(4,0),
  7.     "DTLPOSID" VARCHAR2(12),
  8.     "DTLSAMID" VARCHAR2(16),
  9.     "DTLPOSSEQ" NUMBER(10,0),
  10.     "DTLDATE" NUMBER(8,0),
  11.     "DTLTIME" NUMBER(6,0) NOT NULL ENABLE,
  12.     "DTLSETTDATE" NUMBER(8,0),
  13.     "DTLCENSEQ" NUMBER(10,0),
  14.     "DTLAMT" NUMBER(9,0) NOT NULL ENABLE,
  15.     "DTLSLAMT" NUMBER(9,0),
  16.     "DTLBEFBAL" NUMBER(9,0) NOT NULL ENABLE,
  17.     "DTLAFTBAL" NUMBER(9,0),
  18.     "DTLSTATID" NUMBER(9,0),
  19.     "DTLERRCODE" NUMBER(6,0),
  20.     "DTLINNERR" NUMBER(6,0),
  21.     "DTLRSVD" VARCHAR2(10),
  22.     "DTLPKGID" NUMBER(10,0),
  23.     "DTLUNITID" NUMBER(8,0),
  24.     "DTLCRDTYPE" NUMBER(4,0),
  25.     "DTLTAC" CHAR(8),
  26.     "PARTFLAG" NUMBER(3,0) NOT NULL ENABLE
  27.    ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 LOGGING
  28.   STORAGE(
  29.   BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  30.   TABLESPACE "CRDDTL01_TS"
  31.   PARTITION BY RANGE ("PARTFLAG")
  32.  (PARTITION "P_JY001" VALUES LESS THAN (1)
  33.   PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
  34.   STORAGE(INITIAL 797966336 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  35.   PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  36.   TABLESPACE "CRDDTL01_TS" NOCOMPRESS ,
  37.  PARTITION "P_JY002" VALUES LESS THAN (2)
  38.   PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
  39.   STORAGE(INITIAL 751828992 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  40.   PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  41.   TABLESPACE "CRDDTL01_TS" NOCOMPRESS ,
  42.  PARTITION "P_JY003" VALUES LESS THAN (3)
  43.   PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
  44.   STORAGE(INITIAL 829423616 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  45.   PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  46.   TABLESPACE "CRDDTL01_TS" NOCOMPRESS ,
  47.  PARTITION "P_JY004" VALUES LESS THAN (4)
  48.   PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
  49.   STORAGE(INITIAL 886046720 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  50.   PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  51.   TABLESPACE "CRDDTL01_TS" NOCOMPRESS ,
  52.  PARTITION "P_JY005" VALUES LESS THAN (5)
  53.   PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
  54.   STORAGE(INITIAL 901775360 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  55.   PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  56.   TABLESPACE "CRDDTL01_TS" NOCOMPRESS ,
  57.  PARTITION "P_JY006" VALUES LESS THAN (6)
  58.   PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
  59.   STORAGE(INITIAL 826277888 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  60.   PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  61.   TABLESPACE "CRDDTL01_TS" NOCOMPRESS ,
  62.  PARTITION "P_JY007" VALUES LESS THAN (7)
  63.   PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
  64.   STORAGE(INITIAL 803209216 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  65.   PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  66.   TABLESPACE "CRDDTL01_TS" NOCOMPRESS ,
  67.  PARTITION "P_JY008" VALUES LESS THAN (8)
  68.   PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
  69.   STORAGE(INITIAL 961544192 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  70.   PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  71.   TABLESPACE "CRDDTL01_TS" NOCOMPRESS ,
  72.  PARTITION "P_JY009" VALUES LESS THAN (9)
  73.   PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
  74.   STORAGE(INITIAL 995098624 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  75.   PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  76.   TABLESPACE "CRDDTL01_TS" NOCOMPRESS ,
  77.  PARTITION "P_JY010" VALUES LESS THAN (10)
  78.   PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
  79.   STORAGE(INITIAL 972029952 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  80.   PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  81.   TABLESPACE "CRDDTL01_TS" NOCOMPRESS , 
  82. 。。。。。。。。。。。。。。
  83. 类似的有360个分区


可以看到是个分区表。
导入语句

点击(此处)折叠或打开

  1. echo %time% ;
  2. imp system/manager@orcl file=E:\yikatong\tlcarddtltb.dmp fromuser=u1 touser=u1 ignore=y log=E:\yikatong\tlcarddtltb.dmp.log indexes=N RECORDLENGTH=65535 buffer=502400000 commit=n feedback=10000000
  3. echo %time% ;
要求1千万行响应一次,提交为N,不插入索引。buffer设置为500M

3.开始导入。因为客户也没有提供数据文件的大小,只提供了需要新建的表空间。我新建了如下可以自增的表空间。
create tablespace crddtl01_ts datafile 'D:/oracle/tablespace/crddtl01_ts.dbf' size 8024m autoextend on next 1024m autoallocate;

每次自增1024M。考虑到数据比较大,每次自增太小,花费时间小。接着开始导入了。等待了几个小时以后,报错:
01659, 00000, "unable to allocate MINEXTENTS beyond %s in tablespace %s"
// *Cause:  Failed to find sufficient contiguous space to allocate MINEXTENTS
//          for the segment being created.
// *Action: Use ALTER TABLESPACE ADD DATAFILE to add additional space to the
//          tablespace or retry with smaller value for MINEXTENTS, NEXT or
//          PCTINCREASE
.刚开始有点蒙。我建立表空间都是自增长的。难道不能自增长。查询下可以增长的。看看表空间大小32G。原来oracle普通表空间文件最大为32G。然后开始给每个表空间增加4个文件。sql如下:

点击(此处)折叠或打开

  1. create tablespace crddtl01_ts datafile 'D:/oracle/tablespace/crddtl01_ts.dbf' size 8024m autoextend on next 1024m autoallocate;
  2. create tablespace crddtlidx01_ts datafile 'd:/oracle/tablespace/crddtlidx01_ts.dbf' size 5024m autoextend on next 1024m autoallocate;
  3. alter tablespace crddtl01_ts add datafile 'D:/oracle/tablespace/crddtl01a_ts.dbf' size 1024m autoextend on next 1024m ;
  4. alter tablespace crddtl01_ts add datafile 'D:/oracle/tablespace/crddtl01b_ts.dbf' size 1024m autoextend on next 1024m ;
  5. create tablespace crddtl02_ts datafile 'E:/oracle_data/crddtl02_ts.dbf' size 8024m autoextend on next 1024m autoallocate;

  6. alter tablespace crddtl02_ts add datafile 'E:/oracle_data/crddtl02a_ts.dbf' size 1024m autoextend on next 1024m ;
  7. alter tablespace crddtl02_ts add datafile 'E:/oracle_data/crddtl02b_ts.dbf' size 1024m autoextend on next 1024m ;

  8. create tablespace crddtlidx02_ts datafile 'E:/oracle_data/crddtlidx02_ts.dbf' size 5024m autoextend on next 1024m autoallocate;

  9. create tablespace crddtl03_ts datafile 'F:/oracleData/crddtl03_ts.dbf' size 8024m autoextend on next 1024m autoallocate;
  10. alter tablespace crddtl03_ts add datafile 'F:/oracleData/crddtl03a_ts.dbf' size 1024m autoextend on next 1024m;
  11. alter tablespace crddtl03_ts add datafile 'F:/oracleData/crddtl03b_ts.dbf' size 1024m autoextend on next 1024m;

  12. create tablespace crddtlidx03_ts datafile 'F:/oracleData/crddtlidx03_ts.dbf' size 5024m autoextend on next 1024m autoallocate;

  13. create tablespace crddtl04_ts datafile 'D:/oracle/tablespace/crddtl04_ts.dbf' size 8024m autoextend on next 1024m autoallocate;
  14. alter tablespace crddtl04_ts add datafile 'D:/oracle/tablespace/crddtl04a_ts.dbf' size 1024m autoextend on next 1024m ;
  15. alter tablespace crddtl04_ts add datafile 'D:/oracle/tablespace/crddtl04b_ts.dbf' size 1024m autoextend on next 1024m ;
于是接下来就开始了漫长的等待。
4.怎么知道导入了多少数据?导入进展到什么情况了呢?或者说导入进程有没有卡住,僵死呢?
第一看feedback.我在导入程序设置了参数feedback=10000000,每导入1千万数据,响应一个黑点。
第二可以看导入日志。每导入完一个分区,它会在日志插入一条记录。
第三打开资源管理器,我们看看imp进程,占用的cpu,硬盘,网络,内存资源。

但是这个服务器当时点什么都很慢。我分配一个8G的文件,花费了10几分钟。这个怎么解释呢?
5.经过漫长的等待,我花了2天7个小时,把这个18亿数据导入进去了。。
最后看看数据文件大小:

点击(此处)折叠或打开

  1. 目录                                   大小(M)tablespace
  2. D:\ORACLE\TABLESPACE\CRDDTL01A_TS.DBF  32767 CRDDTL01_TS
  3. D:\ORACLE\TABLESPACE\CRDDTL01_TS.DBF 32767 CRDDTL01_TS
  4. D:\ORACLE\TABLESPACE\CRDDTL01B_TS.DBF 32767 CRDDTL01_TS
  5. F:\ORACLEDATA\CRDDTL01D_TS.DBF 25600 CRDDTL01_TS
  6. E:\ORACLE_DATA\CRDDTL02C_TS.DBF 9216 CRDDTL02_TS
  7. E:\ORACLE_DATA\CRDDTL02D_TS.DBF 8192 CRDDTL02_TS
  8. E:\ORACLE_DATA\CRDDTL02B_TS.DBF 32767 CRDDTL02_TS
  9. E:\ORACLE_DATA\CRDDTL02_TS.DBF 32767 CRDDTL02_TS
  10. E:\ORACLE_DATA\CRDDTL02A_TS.DBF 30720 CRDDTL02_TS
  11. F:\ORACLEDATA\CRDDTL03D_TS.DBF 5120 CRDDTL03_TS
  12. F:\ORACLEDATA\CRDDTL03B_TS.DBF 28672 CRDDTL03_TS
  13. F:\ORACLEDATA\CRDDTL03_TS.DBF 32600 CRDDTL03_TS
  14. F:\ORACLEDATA\CRDDTL03A_TS.DBF 27648 CRDDTL03_TS
  15. F:\ORACLEDATA\CRDDTL03C_TS.DBF 5120 CRDDTL03_TS
  16. D:\ORACLE\TABLESPACE\CRDDTL04A_TS.DBF 28672 CRDDTL04_TS
  17. D:\ORACLE\TABLESPACE\CRDDTL04B_TS.DBF 32767 CRDDTL04_TS
  18. E:\ORACLE_DATA\CRDDTL04D_TS.DBF 7168 CRDDTL04_TS
  19. E:\ORACLE_DATA\CRDDTL04C_TS.DBF 7168 CRDDTL04_TS
  20. D:\ORACLE\TABLESPACE\CRDDTL04_TS.DBF 32767 CRDDTL04_TS
一个表空间有4个文件,几乎达到120G

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

转载于:http://blog.itpub.net/30393770/viewspace-2144252/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值