打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
SQL*Loader:从文件导入数据库

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

同一个数据库, 可以使用下面这种格式:

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;

如果不同数据库之间需要复制数据, 可以先 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 控制文件

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

.

/

设置 sql developer 数据库编码集: 首选项 -> 数据库 -> NLS, 全部设置 AMERICAN

从source db 里 select 出需要的数据, 保存成 .csv 格式,

select * from mtl_material_transactions where rownum < 100;

删掉第一行 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 格式进行调整。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
excel数据导入Oracle的需求
EXCEL导入ORACLE
[Oracle] SQL*Loader 详细使用教程(4)
DB2数据库管理员每天每周每月都干啥? - 少青筝 - 51CTO技术博客-最具人气的网络...
oracle sql*loader使用方法
sqlldr学习及ctl文件编写
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服