月度存档: 六月 2009

oracle sql loader & spool

今天在做一个需求的时候用到了sqlldr,觉得挺强大的,研究了一下,把总结的东西列出来.

oracle 数据的导入用sql loader, 导出用spool . 这个不同于exp/imp. 用sqlldr/spool时候,数据是可以真真正正看到的即可读的,而不是二进制的即不可读的. 下面说一下导出.

1. 导出 spool
    一直在用spool, 但是都是用来纪录一个sql script运行的结果的,没有作为一个为导入准备文件的工具。如何来生成导入数据文件呢?

set echo off newpage 0 space 0 pagesize 0 feed off head off trimspool on
spool inputfile.txt

select col1 || ‘;’ || col2 || ‘;’ || col3 ||’;’
from tab1
where col2 = ‘XYZ’;

spool off

其中set参数有很多哦..如下:
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

听说还可以用另外,也可以使用使用 UTL_FILE PL/SQL 来生成input file, 但是没有尝试过.

2. 导入 sqlldr
2-1. datatype
sqlldr有三种datatype,
CHAR
DECIMAL EXTERNAL
INTEGER EXTERNAL

2-2. 导入模式
insert: default value,在数据装载开始时要求表为空,所以一般会先truncate table.
append: 在表尾追加新记录
replace: 替换原来的数据,也就是在insert之前自动作一个truncate.
truncate: 和Replace 同

2-3. control file
个人觉得control file是sqlldr中最为重要的一个文件, 所以写control file很重要, 它的参数很多,就不一一列举, 只用了几个最为简单的. 下面是一个例子:
————————–
load data
infile table_name.txt
into table table_name
fields terminated by “;”
trailing nullcols
( col1 DATE “DD/MM/YY”,
  col2,
  col3  INTEGER EXTERNAL,
  col4,
  col5
)
————————–

注意: 有时候用infile * ,这是指数据就在control file里面, 没有用到txt文件来做为输入.

突然的郁闷

昨天逛了下天涯,感觉好恐怖阿,这个社会竟然还存在这样的野蛮,无耻,愚昧,暴力!!
郁闷了好久,就感觉这么多的事情我都无能为力,好失落….

今天又听同事分析了一下我们是如何被剥削的,又一次让我陷入了深深的郁闷之中….我的薪水还不到公司向客户收取费用的6%, 可怜啊,顿时在自己身上发现了被资本家诈干的迹象…

好多心情都没有纪录下来,放在心理好累,还是拿出来晒晒比较舒服..

埃,”社会是和谐的,未来是美好的”  骗谁呢!!!

[Oracle] how to trace a session

–step 1.check the session information

col username format a8
col machine format a16
col osuser format a8
col program format a12
select sid,serial#,username,osuser,machine, program, to_char(LOGON_TIME,'yyyymmdd hh24:mi:ss')
from v$session
where username like 'DAZEL%'
order by logon_time;

–get the sid, serial#

–step 2. start trace
exec dbms_system.set_sql_trace_in_session(68,36341,true);

–step 3. stop trace
exec dbms_system.set_sql_trace_in_session(68,36341,false)

–step 4.use oracle tool tkprof convert the trc file to txt file.

D:\Oracle\ORA1020\BIN\tkprof mis20p_ora_5708.trc mis20p_ora_5708_1.txt

check the txt file for detail or may send the trace/txt file to the oracle support.

by the way, if you want trace your current session, use this sql
exec dbms_system.set_sql_trace_in_session(true)
exec dbms_system.set_sql_trace_in_session(false)