共計 7559 個字符,預計需要花費 19 分鐘才能閱讀完成。
這篇文章將為大家詳細講解有關數據庫中如何導入一張 18 億條 300G 數據文件的表,丸趣 TV 小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
1. 問題:需要導入一張 18 億數據的 300G 大的數據文件
2. 客戶給了一個用 imp 導出的數據文件。包含了一個表 xx。這個表的結構如下:
點擊 (此處) 折疊或打開
CREATE TABLE username . xx
( DTLCARDNO CHAR(16) NOT NULL ENABLE,
DTLCITY NUMBER(4,0),
DTLCDCNT NUMBER(6,0) NOT NULL ENABLE,
DTLTXNCODE NUMBER(4,0) NOT NULL ENABLE,
DTLINNTYPE NUMBER(4,0),
DTLPOSID VARCHAR2(12),
DTLSAMID VARCHAR2(16),
DTLPOSSEQ NUMBER(10,0),
DTLDATE NUMBER(8,0),
DTLTIME NUMBER(6,0) NOT NULL ENABLE,
DTLSETTDATE NUMBER(8,0),
DTLCENSEQ NUMBER(10,0),
DTLAMT NUMBER(9,0) NOT NULL ENABLE,
DTLSLAMT NUMBER(9,0),
DTLBEFBAL NUMBER(9,0) NOT NULL ENABLE,
DTLAFTBAL NUMBER(9,0),
DTLSTATID NUMBER(9,0),
DTLERRCODE NUMBER(6,0),
DTLINNERR NUMBER(6,0),
DTLRSVD VARCHAR2(10),
DTLPKGID NUMBER(10,0),
DTLUNITID NUMBER(8,0),
DTLCRDTYPE NUMBER(4,0),
DTLTAC CHAR(8),
PARTFLAG NUMBER(3,0) NOT NULL ENABLE
) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 LOGGING
STORAGE(
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE CRDDTL01_TS
PARTITION BY RANGE (PARTFLAG)
(PARTITION P_JY001 VALUES LESS THAN (1)
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
STORAGE(INITIAL 797966336 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE CRDDTL01_TS NOCOMPRESS ,
PARTITION P_JY002 VALUES LESS THAN (2)
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
STORAGE(INITIAL 751828992 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE CRDDTL01_TS NOCOMPRESS ,
PARTITION P_JY003 VALUES LESS THAN (3)
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
STORAGE(INITIAL 829423616 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE CRDDTL01_TS NOCOMPRESS ,
PARTITION P_JY004 VALUES LESS THAN (4)
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
STORAGE(INITIAL 886046720 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE CRDDTL01_TS NOCOMPRESS ,
PARTITION P_JY005 VALUES LESS THAN (5)
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
STORAGE(INITIAL 901775360 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE CRDDTL01_TS NOCOMPRESS ,
PARTITION P_JY006 VALUES LESS THAN (6)
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
STORAGE(INITIAL 826277888 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE CRDDTL01_TS NOCOMPRESS ,
PARTITION P_JY007 VALUES LESS THAN (7)
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
STORAGE(INITIAL 803209216 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE CRDDTL01_TS NOCOMPRESS ,
PARTITION P_JY008 VALUES LESS THAN (8)
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
STORAGE(INITIAL 961544192 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE CRDDTL01_TS NOCOMPRESS ,
PARTITION P_JY009 VALUES LESS THAN (9)
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
STORAGE(INITIAL 995098624 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE CRDDTL01_TS NOCOMPRESS ,
PARTITION P_JY010 VALUES LESS THAN (10)
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
STORAGE(INITIAL 972029952 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE CRDDTL01_TS NOCOMPRESS ,
。。。。。。。。。。。。。。
類似的有 360 個分區
可以看到是個分區表。
導入語句
點擊 (此處) 折疊或打開
echo %time% ;
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
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 如下:
點擊 (此處) 折疊或打開
create tablespace crddtl01_ts datafile D:/oracle/tablespace/crddtl01_ts.dbf size 8024m autoextend on next 1024m autoallocate;
create tablespace crddtlidx01_ts datafile d:/oracle/tablespace/crddtlidx01_ts.dbf size 5024m autoextend on next 1024m autoallocate;
alter tablespace crddtl01_ts add datafile D:/oracle/tablespace/crddtl01a_ts.dbf size 1024m autoextend on next 1024m ;
alter tablespace crddtl01_ts add datafile D:/oracle/tablespace/crddtl01b_ts.dbf size 1024m autoextend on next 1024m ;
create tablespace crddtl02_ts datafile E:/oracle_data/crddtl02_ts.dbf size 8024m autoextend on next 1024m autoallocate;
alter tablespace crddtl02_ts add datafile E:/oracle_data/crddtl02a_ts.dbf size 1024m autoextend on next 1024m ;
alter tablespace crddtl02_ts add datafile E:/oracle_data/crddtl02b_ts.dbf size 1024m autoextend on next 1024m ;
create tablespace crddtlidx02_ts datafile E:/oracle_data/crddtlidx02_ts.dbf size 5024m autoextend on next 1024m autoallocate;
create tablespace crddtl03_ts datafile F:/oracleData/crddtl03_ts.dbf size 8024m autoextend on next 1024m autoallocate;
alter tablespace crddtl03_ts add datafile F:/oracleData/crddtl03a_ts.dbf size 1024m autoextend on next 1024m;
alter tablespace crddtl03_ts add datafile F:/oracleData/crddtl03b_ts.dbf size 1024m autoextend on next 1024m;
create tablespace crddtlidx03_ts datafile F:/oracleData/crddtlidx03_ts.dbf size 5024m autoextend on next 1024m autoallocate;
create tablespace crddtl04_ts datafile D:/oracle/tablespace/crddtl04_ts.dbf size 8024m autoextend on next 1024m autoallocate;
alter tablespace crddtl04_ts add datafile D:/oracle/tablespace/crddtl04a_ts.dbf size 1024m autoextend on next 1024m ;
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 億數據導入進去了。。
最后看看數據文件大小:
點擊 (此處) 折疊或打開
目錄 大小(M)tablespace
D:\ORACLE\TABLESPACE\CRDDTL01A_TS.DBF 32767 CRDDTL01_TS
D:\ORACLE\TABLESPACE\CRDDTL01_TS.DBF 32767 CRDDTL01_TS
D:\ORACLE\TABLESPACE\CRDDTL01B_TS.DBF 32767 CRDDTL01_TS
F:\ORACLEDATA\CRDDTL01D_TS.DBF 25600 CRDDTL01_TS
E:\ORACLE_DATA\CRDDTL02C_TS.DBF 9216 CRDDTL02_TS
E:\ORACLE_DATA\CRDDTL02D_TS.DBF 8192 CRDDTL02_TS
E:\ORACLE_DATA\CRDDTL02B_TS.DBF 32767 CRDDTL02_TS
E:\ORACLE_DATA\CRDDTL02_TS.DBF 32767 CRDDTL02_TS
E:\ORACLE_DATA\CRDDTL02A_TS.DBF 30720 CRDDTL02_TS
F:\ORACLEDATA\CRDDTL03D_TS.DBF 5120 CRDDTL03_TS
F:\ORACLEDATA\CRDDTL03B_TS.DBF 28672 CRDDTL03_TS
F:\ORACLEDATA\CRDDTL03_TS.DBF 32600 CRDDTL03_TS
F:\ORACLEDATA\CRDDTL03A_TS.DBF 27648 CRDDTL03_TS
F:\ORACLEDATA\CRDDTL03C_TS.DBF 5120 CRDDTL03_TS
D:\ORACLE\TABLESPACE\CRDDTL04A_TS.DBF 28672 CRDDTL04_TS
D:\ORACLE\TABLESPACE\CRDDTL04B_TS.DBF 32767 CRDDTL04_TS
E:\ORACLE_DATA\CRDDTL04D_TS.DBF 7168 CRDDTL04_TS
E:\ORACLE_DATA\CRDDTL04C_TS.DBF 7168 CRDDTL04_TS
D:\ORACLE\TABLESPACE\CRDDTL04_TS.DBF 32767 CRDDTL04_TS
一個表空間有 4 個文件,幾乎達到 120G
關于“數據庫中如何導入一張 18 億條 300G 數據文件的表”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。