学院加强网站建设,安卓app大全下载,玉林seo,怎样在各大网站做有效的宣传2.1 基本知识 Oracle 的 SQL* LOADER 可以将外部格式化的文本数据加载到数据库表中。通常 与 SPOOL导出文本数据方法配合使用。 1.命令格式 SQLLDR keywordvalue [#xff0c;keywordvalue#xff0c;……] 例#xff1a;$ sqlldr user/pwd controlemp.ctl dataemp.dat ba…2.1 基本知识 Oracle 的 SQL* LOADER 可以将外部格式化的文本数据加载到数据库表中。通常 与 SPOOL导出文本数据方法配合使用。 1.命令格式 SQLLDR keywordvalue [keywordvalue……] 例$ sqlldr user/pwd controlemp.ctl dataemp.dat bademp.bad logemp.log 2.控制文件 SQL*LOADER 根据控制文件可以找到需要加载的数据。并且分析和解释这些数据。 控制文件由三个部分组成具体参数参考帮助文档1. 全局选件行跳过的记录数等2. INFILE 子句指定的输入数据3. 数据特性说明。 comment ——注释 例 load data infile * append ——除了 append外还有 insert、replace、truncate等方式 into table emp fields terminated b y ‘|’ no float external name char20 age integer external duty char1salary float external upd_ts date14 ‘YYYYMMDDHH24MISS’ begindata 100000000003|Mulder|000020|1|000000005000|20020101000000 100000000004|Scully|000025|2|000000008000|20020101235959 控制文件中infile选项跟sqlldr 命令行中data 选项含义相同如使用infile *则表明数据在本控制文件以 begin data 开头的区域内。 一些选项FIELDS TERMINATED BY WHITESPACE FIELDS TERMINATED BY x09 FILLER_1 FILLER // 指定某一列将不会被装载 DEPTNO position12 DNAME position*16 // 指定列的位置SEQNO RECNUM //载入每行的行号 SKIP n // 指定导入时可以跳过多少行数据 3.数据文件 按控制文件数据格式定义的数据行集 例 100000000001|Tom|000020|1|000000005000|20020101000000 100000000002|Jerry|000025|2|000000008000|20020101235959 固定格式、可变格式、流记录格式 固定格式 当数据固定的格式长度一样时且是在文件中得到时要用 INFILE fix n load data infile example.dat fix 11 into table example fields terminated b y optionally enclosed by col1 char5 col2 char7 example.dat 001 cd 0002fghi 00003lmn 1 pqrs 0005uvwx 可变格式 当数据是可变格式长度不一样时且是在文件中得到时要用 INFILE var n.如 load data infile example.dat var 3 into table example fields terminated b y optionally enclosed by col1 char5 col2 char7 example.dat 009hellocd010worldim 012myname is 流记录格式 // Stream-recored formatload data infile xx.dat str |\n into table xx field terminated b y optionally enclosed by col1 char5 col2 char7 example.dat hello ccd| world bb| 4. 坏文件 bademp.bad坏文件包含那些被 SQL*Loader拒绝的记录。被拒绝的记录可能是不符合要求的记录。 5. 日志文件及日志信息 logemp.log当 SQL*Loader 开始执行后它就自动建立 日志文件。日志文件包含有加载的总 结加载中的错误信息等。 2.2 高级选项 1. Conventional Path Load与Direct Path Load Conventional-path Load通过常规通道方式上载。 特点commit always gen redo logs enforce all constraints fire insert triggers can load into cluster other user can make change rows每次提交的记录数 bindsize每次提交记录的缓冲区 readsize与 bindsize 成对使用其中较小者会自动调整到较大者 sqlldr 先计算单条记录长度乘以 rows如小于 bindsize不会试图扩张rows以填充 bindsize如超出则以 bindsize 为准。 命令为 $ sqlldr dbuser/oracle controlemp.ctl logemp.log rows10000 bindsize8192000 Direct-Path Load 通过直通方式上载可以跳过数据库的相关逻辑不进行 SQL解析而直接将数 据导入到数据文件中。 特点save conditionly gen redo logs enforce PK UK NN not fire triggers can not load into cluster other user can not make change命令为 $ sqlldr dbuser/oracle controlemp.ctl logemp.log directtrue 2. SPOOL导出文本数据方法 导入的数据文件可以用 SPOOL导出文本数据方法生成。 SQL*PLUS环境设置 SET NEWPAGE NONE HEADING OFF SPACE 0 PAGESIZE 0 SET TRIMOUT ON TRIMSPOOL ON LINESIZE 2500 注LINESIZE 要稍微设置大些免得数据被截断它应和相应的 TRIMSPOOL结合使用防止导出的文本有太多的尾部空格。 但是如果 LINESIZE 设置太大会大大降低导出的速度另外在 WINDOWS下导 出最好不要用 PLSQL导出速度比较慢直接用 COMMEND 下的 SQLPLUS命令最 小化窗口执行。对于字段内包含很多回车换行符的应该给与过滤形成比较规矩的文本 文件。 通常情况下我们使用 SPOOL方法将数据库中的表导出为文本文件如下述 set trimspool on set linesize 120 pagesize 2000 newpage 1 heading off term off spool 路径文件名 select col1||||col2||||col3||||col4||…… from tablename spool off 2.3 脚本 1. 将表中数据记录导出为字段值用分隔符|分开的。dat文件 #/bin/ksh ################################################################## ## 名称 unloadtable ## 功能 本 shell 用于将表中数据记录导出 ## 导出为字段值用分隔符|分开的。dat文件 ## 编者 ## 日期 2006.03.18 ################################################################## if [ $# -ne 3 ] then echo usageunloadtable tablename username password. exit 0 fi ##准备工作 echo set heading off /tmp/$1.col echo set pagesize 0 /tmp/$1.col echo set linesize 800 /tmp/$1.col echo set feedback off /tmp/$1.col echo set tab off /tmp/$1.col echo select column_name|| from user_tab_columns where lowertable_name$1 order by column_id /tmp/$1.col ##产生 select 语句 echo set heading off /tmp/$1.sel echo set pagesize 0 /tmp/$1.sel echo set linesize 800 /tmp/$1.sel echo set feedback off /tmp/$1.sel echo set tab off /tmp/$1.sel echo select /tmp/$1.sel echo sqlplus -s $2/$3 /tmp/$1.col |sed s//|||||/g |sed s/||$//g|sed s/date/\date\/g /tmp/$1.sel ##生成 dat文件 #echo from $1\n/ /tmp/$1.sel 由于 / 导致多执行一次 select echo from $1\n /tmp/$1.sel sqlplus -s $2/$3 /tmp/$1.sel $1_tmp.dat #awk {ifFNR1 print $0} $1_tmp.dat $1.dat FNR 选项使得第一条记录选不出 awk {print $0} $1_tmp.dat $1.dat rm -f $1_tmp.dat 2. 将数据导入到相应表中 #/bin/ksh ################################################################## ## 名称loadtable ## 功能本 shell 用于将已经准备好的。dat数据文件导入相应的表中 ## .dat 文件各个字段值用分隔符|分开。 ## 编者 ## 日期 2006.03.18 ################################################################## if [ $# -ne 3 ] then echo usageloadtable tablename username password. exit 0 fi ##准备工作 echo set heading off /tmp/$1.colsql echo set pagesize 0 /tmp/$1.colsql echo set linesize 800 /tmp/$1.colsql echo set feedback off /tmp/$1.colsql echo set tab off /tmp/$1.colsql echo select column_name|| from user_tab_columns where lowertable_name$1 order by column_id /tmp/$1.colsql ##产生 ctl文件 echo load data /tmp/$1.ctl echo infile * /tmp/$1.ctl echo into table $1 /tmp/$1.ctl echo fields terminated by | /tmp/$1.ctl echo sqlplus -s $2/$3 /tmp/$1.colsql |sed s/$//g |sed s/^//g /tmp/$1.ctl ##开始导入数据 echo truncate table $1 /tmp/$1.sql sqlplus $2/$3 /tmp/$1.sql sqlldr $2/$3 data$1.dat control/tmp/$1.ctl log/tmp/$1.log转载于:https://www.cnblogs.com/login2012/p/5780499.html