1)sqlldr
sqlldr的说明:$ sqlldr
SQL*Loader: Release 9.2.0.4.0 - Production on Tue Feb 24 11:46:20 2009
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
Usage: SQLLDR keyword=value [,keyword=value,...]
Valid Keywords:
userid -- ORACLE username/password
control -- Control file name
log -- Log file name
bad -- Bad file name
data -- Data file name
discard -- Discard file name
discardmax -- Number of discards to allow (Default all)
skip -- Number of logical records to skip (Default 0)
load -- Number of logical records to load (Default all)
errors -- Number of errors to allow (Default 50)
rows -- Number of rows in conventional path bind array or between direct path data saves
(Default: Conventional path 64, Direct path all)
bindsize -- Size of conventional path bind array in bytes (Default 256000)
silent -- Suppress messages during run (header,feedback,errors,discards,partitions)
direct -- use direct path (Default FALSE)
parfile -- parameter file: name of file that contains parameter specifications
parallel -- do parallel load (Default FALSE)
file -- File to allocate extents from
skip_unusable_indexes -- disallow/allow unusable indexes or index partitions (Default FALSE)
skip_index_maintenance -- do not maintain indexes, mark affected indexes as unusable (Default FALSE)
commit_discontinued -- commit loaded rows when load is discontinued (Default FALSE)
readsize -- Size of Read buffer (Default 1048576)
external_table -- use external table for load; NOT_USED, GENERATE_ONLY, EXECUTE (Default NOT_USED)
columnarrayrows -- Number of rows for direct path column array (Default 5000)
streamsize -- Size of direct path stream buffer in bytes (Default 256000)
multithreading -- use multithreading in direct path
resumable -- enable or disable resumable for current session (Default FALSE)
resumable_name -- text string to help identify resumable statement
resumable_timeout -- wait time (in seconds) for RESUMABLE (Default 7200)
date_cache -- size (in entries) of date conversion cache (Default 1000)
PLEASE NOTE: Command-line parameters may be specified either by
position or by keywords. An example of the former case is 'sqlldr
scott/tiger foo'; an example of the latter is 'sqlldr control=foo
userid=scott/tiger'. One may specify parameters by position before
but not after parameters specified by keywords. For example,
'sqlldr scott/tiger control=foo logfile=log' is allowed, but
'sqlldr scott/tiger control=foo log' is not, even though the
position of the parameter 'log' is correct.
使用sqlldr,第一步是先建立一个控制文件,后缀名为 .ctl。使用的时候有些东西我并不理解,从网上找来了注释。
$ cat test_sqlldr_ctl_file.ctl
LOAD DATA CHARACTERSET zhs16cgb231280
infile "/home/test/test_sqlldr_file.bak" --导入数据库的文件
into table test_sqlldr_table APPEND --导入的数据库表
fields terminated by ',' --导入文件中,字段分隔符号
(
field1,
field2
)
建立好控制文件之后,接下来就是调用sqlldr了。以下是一个调用的例子。
$ sqlldr control='/home/test/test_sqlldr_ctl_file.ctl' Direct=true errors=3 log='/home/test/test_sqlldr.log' bad='/home/test/test_sqlldr.bad'
说明: -- 数据库的用户/密码@数据库名
control='...' --控制文件的存放路径
Direct导入可以跳过数据库的相关逻辑(DIRECT=TRUE),而直接将数据导入到数据文件中,可以提高导入数据的性能
log='...' --入库日志的全路径
bad='...' --入库失败记录的全路径
参考:http://www.blogjava.net/Unmi/archive/2009/01/05/249956.html --关于 Oracle 的数据导入导出及 Sql Loader (sqlldr) 的用法
2)spool方法
导出数据时,如果用plsql导,数据的记录如果太大,速度慢的影响就会很明显,我们可以用spool方法。
spool常用的设置
set colsep' '; //域输出分隔符
set echo off; //显示start启动的脚本中的每个sql命令,缺省为on
set feedback off; //回显本次sql命令处理的记录条数,缺省为on
set heading off; //输出域标题,缺省为on
set pagesize 0; //输出每页行数,缺省为24,为了避免分页,可设定为0。
set termout off; //显示脚本中的命令的执行结果,缺省为on
set trimout on; //去除标准输出每行的拖尾空格,缺省为off
set trimspool on; //去除重定向(spool)输出每行的拖尾空格,缺省为off
以下是我的例子:第一步是写一个sql的文件,里面是spool的各种配置信息
$ cat test_spool.sql
set feedback off
set heading off
set termout off
set pagesize 0
set linesize 150
set verify off
set echo off
spool /home/test/test_spool_out_file.sql --spool输出的文件
select field1||'|'||field2 from test_spool;
spool off
第二步是写一个脚本,包括有连接的数据库信息等,例子如下:
$ cat test_spool.sh
/home/oracle_app/bin/sqlplus test_user/test_pass << eof
@/home/test/test_spool.sql
exit;
eof
第三步是曾加test_spool.sh的执行权限,并执行test_spool.sh
$ chmod +x test_spool.sh
$./test_spool.sh
这里只介绍了spool的一种用法,另外还有其他的方法和设置,不过从网上的介绍来看,这个方法是比较好的,另外的方法的的主要区别是在sql语句的写法上,还增加了域分隔符的设置而已,出错概率高一些。
参考:Oracle spool 用法小结
===================
sqlldr控制文件范例
目前控制文件如下:
Load data
infile 'impfile.txt'
BADFILE 'loadbad'
REPLACE
into table TBName
FIELDS TERMINATED BY '
阅读(2187) | 评论(0) | 转发(0) |