更多
黑客联盟 黑客软件
学生黑客联盟
您现在的位置:学生黑客联盟 > 数据库 > mssql > 浏览信息
SQL*Loader:从文件导入数据库
时间:2015-03-20 22:05 来源:www.stuhack.com 作者:学盟网
之前写过一篇 SQL*Loader 的博客, 介绍了这个工具是什么, 怎么用, 最后说 metalink 里面的这篇Note: 1019523.6 可以自动产生控制文件. 但是根据我的测试, 这篇Note 里面的脚本产生的控制文件是错的. 这篇博客给出我修改过的脚本, 和详细步骤: 同一个数据库,

之前写过一篇 SQL*Loader 的博客, 介绍了这个工具是什么, 怎么用, 最后说 metalink 里面的这篇Note: 1019523.6 可以自动产生控制文件. 但是根据我的测试, 这篇Note 里面的脚本产生的控制文件是错的. 这篇博客给出我修改过的脚本, 和详细步骤:
同一个数据库, 可以使用下面这种格式: www.stuhack.com

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; 学生黑客联盟 www.stuhack.com 

如果不同数据库之间需要复制数据, 可以先 select 出数据, 然后用 sql developer 生成 insert/loader 语句, 直接在目标数据库里面跑这个脚本.
如果数据量很大, 就需要借助 SQL*Loader 这个工具了.
首先要确保 source table 和 destination table 两个表结构是一样的

学盟网

create table yu_mmt_01 as select * from mtl_material_transactions where 1=2; 
内容来自学生黑客联盟

copy 下面的代码保存成文件generate_ctl.sql, 上传到/var/tmp 目录下, 用sqlplus @generate_ctl.sql 运行这个脚本, 可以在这个目录下获得 .ctl 控制文件. www.stuhack.com

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 (table_name)||'.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||'=BLANKS)')),
                           '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
.
/
 www.stuhack.com 

设置 sql developer 数据库编码集: 首选项 -> 数据库 -> NLS, 全部设置 AMERICAN
从source db 里 select 出需要的数据, 保存成 .csv 格式,

学生黑客联盟 www.stuhack.com

select * from mtl_material_transactions where rownum < 100; 
学生黑客联盟 www.stuhack.com

删掉第一行 column 名字. 命名为 mtl_material_transactions.dat, 上传到 /var/tmp 目录
在 destination db 运行 SQLLDR 命令: sqlldr apps/apps control=mtl_material_transactions.ctl data=mtl_material_transactions.dat
需要注意的是, sql developer 导出的 date 格式, 全部是 timestamp 格式的, 所以需要对 date 格式进行调整, 

内容来自学生黑客联盟




本文标题:SQL*Loader:从文件导入数据库

本文地址:http://www.stuhack.com/data/mssql/032014182.html

免责声明:本文仅代表作者个人观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。




百度钱包“落子

一个商户通过审核入驻百度钱包,将获得百度[查看详细]

移动搜索&发

移动搜索在移动端的创新和颠覆也为百度探索[查看详细]

张向宁:移动互联

张向宁回顾了他2002年提出的“互联网十大预[查看详细]

淘宝开卖二维码门

截至4月20日,淘宝已经售出车展的实体门票[查看详细]

百度钱包杀入移动

“百度钱包”将完成的 “搜索用户”与“消[查看详细]