之前寫(xiě)過(guò)一篇 SQL*Loader 的博客, 介紹了這個(gè)工具是什么, 怎么用, 最后說(shuō) metalink 里面的這篇Note: 1019523.6 可以自動(dòng)產(chǎn)生控制文件. 但是根據(jù)我的測(cè)試, 這篇Note 里面的腳本產(chǎn)生的控制文件是錯(cuò)的. 這篇博客給出我修改過(guò)的腳本, 和詳細(xì)步驟: 同一個(gè)數(shù)據(jù)庫(kù), 可以使用下面這種格式: create table yu_mmt_01 as select * from mtl_material_transactions where 1=2; select * from yu_mmt_01; insert into yu_mmt_01 select * from mtl_material_transactions where rownum < 100; 如果不同數(shù)據(jù)庫(kù)之間需要復(fù)制數(shù)據(jù), 可以先 select 出數(shù)據(jù), 然后用 sql developer 生成 insert/loader 語(yǔ)句, 直接在目標(biāo)數(shù)據(jù)庫(kù)里面跑這個(gè)腳本. 如果數(shù)據(jù)量很大, 就需要借助 SQL*Loader 這個(gè)工具了. 首先要確保 source table 和 destination table 兩個(gè)表結(jié)構(gòu)是一樣的 create table yu_mmt_01 as select * from mtl_material_transactions where 1=2; copy 下面的代碼保存成文件generate_ctl.sql, 上傳到/var/tmp 目錄下, 用sqlplus @generate_ctl.sql 運(yùn)行這個(gè)腳本, 可以在這個(gè)目錄下獲得 .ctl 控制文件 set echo off set heading off set verify off set feedback off set show off set trim off set pages 0 set concat on set lines 300 set trimspool on set trimout on ALTER SESSION SET NLS_LANGUAGE='AMERICAN'; spool mtl_material_transactions.ctl select 'LOAD DATA'||chr (10)|| 'INFILE '''||lower (www.dadiqp.info)||'.dat'''||chr (10)|| 'INTO TABLE '||' YU_MMT_01 '||chr (10)|| 'APPEND '||chr (10)|| 'FIELDS TERMINATED BY '','''||chr (10)|| 'OPTIONALLY ENCLOSED BY ''"'' '||chr (10)|| 'TRAILING NULLCOLS'||chr (10)||'(' from all_tables where table_name = upper ('mtl_material_transactions'); select decode (column_id, 1, ' ', ' , ')|| rpad (column_name, 33, ' ')|| decode (data_type, 'VARCHAR2', 'CHAR NULLIF ('||column_name||'=BLANKS)', 'FLOAT', 'DECIMAL EXTERNAL NULLIF('||column_name||'=BLANKS)', 'NUMBER', decode (data_precision, 0, 'INTEGER EXTERNAL NULLIF ('||column_name||'=BLANKS)', decode (data_scale, 0, 'INTEGER EXTERNAL NULLIF ('||column_name||'=BLANKS)', 'DECIMAL EXTERNAL NULLIF ('||column_name||'=www.yinpinxian.com)')), 'DATE', 'TIMESTAMP "DD-MON-YY HH.MI.SS.FF9 AM" NULLIF ('||column_name||'=BLANKS)', null) from all_tab_columns where table_name = upper ('mtl_material_transactions') order by column_id; select ')' from sys.dual; spool off . / 設(shè)置 sql developer 數(shù)據(jù)庫(kù)編碼集: 首選項(xiàng) -> 數(shù)據(jù)庫(kù) -> NLS, 全部設(shè)置 AMERICAN 從source db 里 select 出需要的數(shù)據(jù), 保存成 .csv 格式, select * from mtl_material_transactions where rownum < 100; 刪掉第一行 column 名字. 命名為 mtl_material_transactions.dat, 上傳到 /var/tmp 目錄 在 destination db 運(yùn)行 SQLLDR 命令: sqlldr apps/apps control=mtl_material_transactions.ctl data=mtl_material_transactions.dat 需要注意的是, sql developer 導(dǎo)出的 date 格式, 全部是 timestamp 格式的, 所以需要對(duì) date 格式進(jìn)行調(diào)整。 |
|
來(lái)自: mjsws > 《待分類(lèi)》