海量資料遷移之外部表載入
在並行生成了大量的dump檔案後,可以在目標環境上對資料進行載入,這個載入的過程時間極短,都基本可以在毫秒級完成。
由於在外部表的載入過程中需要知道表結構的定義,所以可以透過如下的指令碼得到表定義的基本語句,輸出和desc類似。
因為目標環境中的表結構可能會和源dump檔案中的表結構有一定的出入。所以可以在目標環境中生成表結構的定義語句。
批次載入生成的dump檔案。
大體的效果如下
根據目標環境的表結構定義,生成黃色部分的表結構定義語句。然後在載入dump的時候,可以動態批次的載入dump檔案,值得一提的是,甚至可以基於業務需要來選擇性的載入。
CREATE TABLE T_EXT2
( id number,object_id number,object_name varchar2(30),object_type varchar2(30),clob_test clob
)
ORGANIZATION EXTERNAL
( TYPE ORACLE_DATAPUMP
DEFAULT DIRECTORY "EXPDP_LOCATION"
LOCATION
( 'cust1.dmp'
)
)
PARALLEL 2;
實現的shell指令碼如下:
owner=`echo "$1"|tr '[a-z]' '[A-Z]'`
tab_name=`echo "$2"|tr '[a-z]' '[A-Z]'`
dump_list=`cat ../DUMP_LIST/${tab_name}_par_dmp.lst`
print "conn n1/n1
set feedback off
set linesize 100
col data_type format a30
set pages 0
set termout off
SELECT
t1.COLUMN_NAME,
t1.DATA_TYPE
|| DECODE (
t1.DATA_TYPE,
'NUMBER', DECODE (
'('
|| NVL (TO_CHAR (t1.DATA_PRECISION), '*')
|| ','
|| NVL (TO_CHAR (t1.DATA_SCALE), '*')
|| ')',
'(*,*)', NULL,
'(*,0)', '(38)',
'('
|| NVL (TO_CHAR (t1.DATA_PRECISION), '*')
|| ','
|| NVL (TO_CHAR (t1.DATA_SCALE), '*')
|| ')'),
'FLOAT', '(' || t1.DATA_PRECISION || ')',
'DATE', NULL,
'TIMESTAMP(6)', NULL,
'(' || t1.DATA_LENGTH || ')') ||','
AS DATA_TYPE
from all_tab_columns t1 where owner=upper('$1') AND table_name=upper('$2' )
order by t1.column_id;
"|sqlplus -s /nolog > ${tab_name}.temp
#ksh getddl.sh $owner $tab_name > ${tab_name}.temp
sed -e '/^$/d' -e '$s/.$//' -e 's/CLOB(4000)/CLOB/g' -e 's/BLOB(4000)/BLOB/g' ${tab_name}.temp > ../DESC_LIST/${tab_name}.desc --過濾clob,blob顯示的問題
rm ${tab_name}.temp
##body_desc=`cat ${tab_name}.desc`
##body_desc=${body_desc%?}
echo loading table ${tab_name} as ${tab_name}_EXT2
sqlplus -s n1/n1 <
set timing on
set echo on
CREATE TABLE ${tab_name}_EXT2
(
`cat ../DESC_LIST/${tab_name}.desc ` --動態載入表定義語句
)
ORGANIZATION EXTERNAL
( TYPE ORACLE_DATAPUMP
DEFAULT DIRECTORY $3
LOCATION(
`cat ../DUMP_LIST/${tab_name}_par_dmp.lst` --動態載入dump檔案列表
));
EOF
exit
由於在外部表的載入過程中需要知道表結構的定義,所以可以透過如下的指令碼得到表定義的基本語句,輸出和desc類似。
因為目標環境中的表結構可能會和源dump檔案中的表結構有一定的出入。所以可以在目標環境中生成表結構的定義語句。
批次載入生成的dump檔案。
大體的效果如下
根據目標環境的表結構定義,生成黃色部分的表結構定義語句。然後在載入dump的時候,可以動態批次的載入dump檔案,值得一提的是,甚至可以基於業務需要來選擇性的載入。
CREATE TABLE T_EXT2
( id number,object_id number,object_name varchar2(30),object_type varchar2(30),clob_test clob
)
ORGANIZATION EXTERNAL
( TYPE ORACLE_DATAPUMP
DEFAULT DIRECTORY "EXPDP_LOCATION"
LOCATION
( 'cust1.dmp'
)
)
PARALLEL 2;
實現的shell指令碼如下:
owner=`echo "$1"|tr '[a-z]' '[A-Z]'`
tab_name=`echo "$2"|tr '[a-z]' '[A-Z]'`
dump_list=`cat ../DUMP_LIST/${tab_name}_par_dmp.lst`
print "conn n1/n1
set feedback off
set linesize 100
col data_type format a30
set pages 0
set termout off
SELECT
t1.COLUMN_NAME,
t1.DATA_TYPE
|| DECODE (
t1.DATA_TYPE,
'NUMBER', DECODE (
'('
|| NVL (TO_CHAR (t1.DATA_PRECISION), '*')
|| ','
|| NVL (TO_CHAR (t1.DATA_SCALE), '*')
|| ')',
'(*,*)', NULL,
'(*,0)', '(38)',
'('
|| NVL (TO_CHAR (t1.DATA_PRECISION), '*')
|| ','
|| NVL (TO_CHAR (t1.DATA_SCALE), '*')
|| ')'),
'FLOAT', '(' || t1.DATA_PRECISION || ')',
'DATE', NULL,
'TIMESTAMP(6)', NULL,
'(' || t1.DATA_LENGTH || ')') ||','
AS DATA_TYPE
from all_tab_columns t1 where owner=upper('$1') AND table_name=upper('$2' )
order by t1.column_id;
"|sqlplus -s /nolog > ${tab_name}.temp
#ksh getddl.sh $owner $tab_name > ${tab_name}.temp
sed -e '/^$/d' -e '$s/.$//' -e 's/CLOB(4000)/CLOB/g' -e 's/BLOB(4000)/BLOB/g' ${tab_name}.temp > ../DESC_LIST/${tab_name}.desc --過濾clob,blob顯示的問題
rm ${tab_name}.temp
##body_desc=`cat ${tab_name}.desc`
##body_desc=${body_desc%?}
echo loading table ${tab_name} as ${tab_name}_EXT2
sqlplus -s n1/n1 <
set echo on
CREATE TABLE ${tab_name}_EXT2
(
`cat ../DESC_LIST/${tab_name}.desc ` --動態載入表定義語句
)
ORGANIZATION EXTERNAL
( TYPE ORACLE_DATAPUMP
DEFAULT DIRECTORY $3
LOCATION(
`cat ../DUMP_LIST/${tab_name}_par_dmp.lst` --動態載入dump檔案列表
));
EOF
exit
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28389881/viewspace-1267554/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 海量資料遷移之外部表切分
- 海量資料遷移之外部表並行抽取並行
- 海量資料處理_使用外部表進行資料遷移
- 海量資料遷移之資料載入流程
- 海量資料遷移之傳輸表空間(一)
- 海量資料遷移之資料抽取流程
- 海量資料遷移之透過rowid切分大表
- 海量資料遷移之通過rowid切分大表
- 海量資料遷移之衝突資料篩查
- 海量資料遷移之使用分割槽並行切分匯入並行
- 外部表載入資料(ExternalTables)
- 外部表的另一種用途 資料遷移
- 海量資料遷移之透過shell估算資料量
- 海量資料遷移之通過shell估算資料量
- 海量資料遷移之sqlldr和datapump的缺點分析SQL
- 海量資料遷移之誤操作和防範建議
- 海量資料處理_資料泵分批資料遷移
- 海量資料遷移之分割槽表批次insert效能改進
- 海量資料遷移之分割槽表批量insert效能改進
- 【實驗】【外部表】以資料泵檔案格式抽取and遷移資料演示
- 使用impdp,expdp資料泵進入海量資料遷移
- 海量資料遷移之分割槽並行抽取並行
- 海量資料遷移之分割槽並行切分並行
- 【移動資料】External Table 外部表
- 【資料遷移】使用傳輸表空間遷移資料
- 海量資料遷移之使用shell啟用多個動態並行並行
- 資料表內容遷移?
- 資料遷移(1)——通過資料泵表結構批量遷移
- 海量資料轉換遷移的程式碼自動生成
- 用SQL*Loader載入外部資料SQL
- 達夢資料庫遷移資料/複製表/匯入匯出2資料庫
- ClickHouse學習系列之八【資料匯入遷移&同步】
- 資料庫物件遷移表空間資料庫物件
- Linux:掛載外部U盤,移動資料Linux
- 資料庫遷移之資料泵實驗資料庫
- 海量資料遷移之一個誤操作的問題總結
- 遷移資料.
- Laravel 學習之資料庫遷移Laravel資料庫