匯入一張18億條300G資料檔案的表經驗
1.問題:需要匯入一張18億資料的300G大的資料檔案
2. 客戶給了一個用imp匯出的資料檔案。包含了一個表xx。這個表的結構如下:
可以看到是個分割槽表。
匯入語句
要求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如下:
於是接下來就開始了漫長的等待。
4.怎麼知道匯入了多少資料?匯入進展到什麼情況了呢?或者說匯入程式有沒有卡住,僵死呢?
第一看feedback.我在匯入程式設定了引數feedback=10000000,每匯入1千萬資料,響應一個黑點。
第二可以看匯入日誌。每匯入完一個分割槽,它會在日誌插入一條記錄。
第三開啟資源管理器,我們看看imp程式,佔用的cpu,硬碟,網路,記憶體資源。
但是這個伺服器當時點什麼都很慢。我分配一個8G的檔案,花費了10幾分鐘。這個怎麼解釋呢?
5.經過漫長的等待,我花了2天7個小時,把這個18億資料匯入進去了。。
最後看看資料檔案大小:
一個表空間有4個檔案,幾乎達到120G
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% ;
3.開始匯入。因為客戶也沒有提供資料檔案的大小,只提供了需要新建的表空間。我新建瞭如下可以自增的表空間。
create tablespace crddtl01_ts datafile 'D:/oracle/tablespace/crddtl01_ts.dbf' size 8024m autoextend on next 1024m autoallocate;
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
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30393770/viewspace-2144252/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- imp匯入300G資料的一個例子
- MYSQL資料檔案匯入MySql
- 批量匯入某大張表資料的時候的最佳實踐
- 匯入大量資料,比如300G資料,匯出500G資料需要考慮的問題
- 華表Cell檔案匯入匯出
- 把vfp表中的資料匯入指定的excel檔案中 (轉)Excel
- 使用xml檔案,做資料的匯入,匯出 (轉)XML
- Progress資料表的匯入匯出
- 關於資料表結構sql檔案匯入mysql資料庫的問題?MySql資料庫
- PHP 匯入資料庫 sql 檔案PHP資料庫SQL
- 資料庫遠端檔案匯入資料庫
- mysqldump 備份匯出資料排除某張表或多張表MySql
- php讀取excel檔案資料的匯入和匯出PHPExcel
- [Docker核心之容器、資料庫檔案的匯入匯出、容器映象的匯入匯出]Docker資料庫
- mysqldump匯入匯出表資料MySql
- 資料泵匯出匯入表
- Oracle:從SQL檔案批量匯入資料OracleSQL
- Excel 表匯入資料Excel
- Net.Core匯入EXCel檔案裡的資料Excel
- 用impdp匯入資料的一次經歷
- 【SQL 資料庫】將一張資料表資訊複製到另一張資料表SQL資料庫
- 把csv檔案的資料匯入到oracle資料庫中Oracle資料庫
- Mysql實現定時清空一張表的舊資料並保留幾條資料MySql
- 30G 上億資料的超大檔案,如何快速匯入生產環境?
- MySQL表資料匯入與匯出MySql
- MySQL匯入匯出檔案檔案MySql
- Sql Server 匯入另一個資料庫中的表資料SQLServer資料庫
- MYSQL 匯出資料庫中某張表的部分數…MySql資料庫
- Excel 匯入的開發經驗Excel
- exp匯出一個表中符合查詢條件的資料
- excel檔案中的資料匯入Oracle資料庫的幾種方法ExcelOracle資料庫
- mysql從一張表中取出資料插入到另一張表MySql
- ClickHouse 資料表匯出和匯入(qbit)
- 匯入匯出 Oracle 分割槽表資料Oracle
- Oracle使用資料泵匯出匯入表Oracle
- 資料匯入與預處理實驗二---json格式檔案轉換JSON
- DB2資料庫匯出表結構與匯入、匯出表資料DB2資料庫
- sqlloader匯入資料_資料檔案的欄位超出最大長度SQL