安装sqlplus,sqlldr以及从命令行连接oracle,执行sql和导入文件

1,先下载安装包

https://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html




下载对应版本的basic和sqlplus的安装包

2,开始安装

rpm -ivh basic包名称

rpm -ivh sqlplus包名称

rpm -ivh devel包名称

rpm -ivh jdbc包名称

3,设置环境变量

先确认下oracle目录是否存在 /usr/lib/oracle/11.2/client64/,不同版本目录不一样

vim ~/.bash_profile

添加:

export ORACLE_HOME=/usr/lib/oracle/11.2/client64

export PATH=$ORACLE_HOME/bin:$PATH

export LD_LIBRARY_PATH=$ORACLE_HOME/lib

export TNS_ADMIN=$ORACLE_HOME/network/admin


4,安装sqlldr

从完成的客户端找到sqlldr和ulus.msb, 大致路径在:

/OracleHome/db/product/11gR2/bin/sqlldr

/OracleHome/db/product/11gR2/rdbms/mesg/ulus.msb

复制到:

$ORACLE_HOME/bin/sqlldr

$ORACLE_HOME/rdbms/mesg/ulus.msb


5,使用sqlplus command

sqlplus "用户名/密码@host:port/sid"

在shell中调用sqlplus方法:

sql=$1

sqlplus -s "UNION_LOAN/[email protected]:49161/xe" << EOF

whenever sqlerror exit sql.sqlcode;

set heading off

set echo off

set pagesize 0

set linesize 1000

set trimspool on

set feedback off

${sql}

exit;

EOF


6,使用sql loader

新建表:

CREATE TABLE my_table

  (id        NUMBER,

  author    VARCHAR2(30),

  created  DATE

);

新建loader.ctl

LOAD DATA

CHARACTERSET UTF8

INFILE 'loader.txt'

  INTO TABLE my_table

  FIELDS TERMINATED BY ','

  ( id        CHAR(10),

    author    CHAR(30),

    created    DATE "YYYY-MM-DD" ":created"

  )

新建loader.txt

1,John Smith,2015-04-29

2,Pete Jones,2013-01-31

开始导入

sqlldr "用户名/密码@host:port/sid" control=loader.ctl

响应:Commit point reached - logical record count 2

完成。


tips:

1,如果遇到sqlldr: symbol lookup error: sqlldr: undefined symbol: sldext那说明你安装的oracle client与sqlldr的版本不一致,下载对应的oracle client就行。

2,如果sqlloader需要跳过第一行,可以在ctl内load前一行加上OPTIONS(SKIP=1)

3,如果想loader常量值,可以改为column_name constant "abc",

4,如果想loader执行一条sql或函数,可以改成 column_name expression "sys_guid()"

5,sqlloader末尾字段换行符替换方法:column_name CHAR(32) \"regexp_replace(:column_name,'[[:space:]]','')\",

6,如果loader导入的文件中有空列,可以才ctl中加上TRAILING NULLCOLS

你可能感兴趣的:(安装sqlplus,sqlldr以及从命令行连接oracle,执行sql和导入文件)