Linux配置Oracle简易客户端&sqlplus&sqlldr&sqluldr2

Linux配置Oracle简易客户端&sqlplus&sqlldr&sqluldr2


时间:2019年9月26日

参考文章:linux安装Oracle11G

​ linux配置oracle客户端,sqlplus、sqlldr、exp、imp

​ error while loading shared libraries: libclntsh.so.10.1cannot open shared 问题解决

​ linux下配置 oracle数据导出工具sqluldr2

​ sqlldr: symbol lookup error: sqlldr: undefined symbol: sldext

教程目的

​ 在Linux环境下配置简易oracle客户端,并安装sqlplus,sqlldr,sqluldr2等工具。

软件准备

  • 从oracle服务器中获取相关文件,不限于tnsnames.ora

  • sqluldr2_linux64_10204.bin

  • 在oracle下载一下文件,一定要和已安装的oracle版本保持一直,避免不兼容。

    地址:http://www.oracle.com/technetwork/cn/database/features/instant-client/index-092699-zhs.html

    本教程采用的是解压包安装,还有rpm版本的,酌情自行选择。

    • instantclient-basic-linux.x64-11.2.0.4.0.zip
    • instantclient-jdbc-linux.x64-11.2.0.4.0.zip
    • instantclient-sdk-linux.x64-11.2.0.4.0.zip
    • instantclient-sqlplus-linux.x64-11.2.0.4.0.zip

开始安装

1.新建Oracle用户

  • 1.1 在/home/下建立db文件夹,执行mkdir db
  • 1.2 建立用户组以及用户,并指定用户根目录。执行命令如下:
//新建oinstall用户组
groupadd oinstall
//新建dba用户组
groupadd dba
//创建oracle并指定用户组为oinstall,附加组为dba,用户根目录为/home/db/oracle
useradd -g oinstall -G dba -d /home/db/oracle oracle
//设置oracle用户的密码,这里我们统一用oracle
passwd oracle
  • 1.3 赋予oracle文件夹权限

    cd /home/db/
    chmod -R 755 oracle/	
    

2.配置sqlplus

  • 2.1 切换用户并上传文件。

    su - oracle
    
    

    切换好oracle用户后,用SFTP上传oracle客户端压缩包至oracle用户的根目录下,执行:

unzip instantclient-basic-linux.x64-11.2.0.4.0.zip
unzip instantclient-jdbc-linux.x64-11.2.0.4.0.zip
unzip instantclient-sdk-linux.x64-11.2.0.4.0.zip
unzip instantclient-sqlplus-linux.x64-11.2.0.4.0.zip

-----------------------------------------
- 2.2 拷贝tnsnames.ora

在instantclient_11_2文件夹下,建立如下目录`network/admin`,并将数据库连接配置文件tnsname.ora拷贝进去。

注:安装oracle的时候会在客户端文件夹内生成一份,且Win端的PL/SQL配置客户端的时候也会需要这个文件,而且文件内容是一样的。
-----------------------------------------
- 2.3 配置用户环境变量`.bash_profile`
  
  > 这点可以自己配置一下,也可以直接拷贝别的服务上面的。
> 注:本流程不仅仅在oracle用户下执行,且其他想使用sqlplus以及sqlldr等工具的用户也需要进行配置。流程通用!
  - 方式一:自行配置用户环境变量
  
  shell命令如下:
  ```shell
  //切换至oracle用户,如果是ccm用户就为ccm
  su - oracle
  //切换至用户根目录
  cd
  //编辑用户环境变量
  vim .bash_profile
  ```
  > 在文件最后插入如下内容,注意文件路径!如果不一致,一定要及时修改!
  
```shell
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
export ORACLE_IC_HOME=/home/db/oracle/instantclient_11_2
export ORACLE_HOME=$ORACLE_IC_HOME
export TNS_ADMIN=$ORACLE_IC_HOME
export PATH=$PATH:$HOME/bin:$ORACLE_IC_HOME
  export LD_LIBRARY_PATH=$ORACLE_IC_HOME:/usr/lib

插入后按ESC—> 输入:—>输入wq保存并退出

刷新用户环境变量

shell执行:

source .bash_profile
  • 方式二:拷贝大法

    基于已有的配置,且安装目录均相同,直接进行服务器拷贝,拷贝后刷新用户环境变量即可。

    执行shell:

    //切换至oracle用户
    su - oracle
    //切换至用户根目录
    cd 
    //拷贝已有服务器的配置到oracle用户的根目录
    scp oracle@服务器IP:/home/db/oracle/.bash_profile home/db/oracle
    //刷新用户环境变量
    source .bash_profile
    
  • 2.4 测试sqlplus
    shell执行

    sqlplus test/test@testdb
    

    如果成功进入,则说明配置成功!

3.配置sqlldr

  • 3.1 预备文件:

    • 1.sqlldr
  • 2.mesg(rdbms下的mesg,上传也是上传到rdbms下)

  • 3.2 拷贝mesg文件至instantclient_11_2/

    • 方式一:

      shell执行

      cd /home/db/cle/instantclient_11_2
      mkdir rdbms
      

      上传mesg文件夹至/home/db/cle/instantclient_11_2/rdbms/

    • 方式二:

      scp -r 用户名@IP地址:/home/u01/oracle/rdbms /home/db/oracle/instantclient_11_2/
      
  • 3.3 放置sqlldr文件至instantclient_11_2/

  • 3.4 测试sqlldr

    • 查看sqlldr类库文件依赖情况

注:如果出现这两句输出,则说明instantclient_11_2/libclntsh.so.11.1这 个类库文件版本太高
undefined symbol: sldext (./sqlldr)
undefined symbol: sldextf (./sqlldr)

解决方案:用正常oracle客户端下的libclntsh.so替换调该文件即可。

注:oracle客户端的libclntsh.so同为libclntsh.so.11.1文件。

执行命令:
ldd -r sqlldr
正常输出如下:

  linux-vdso.so.1 =>  (0x00007fff03fff000)
  libclntsh.so.11.1 => /home/db/oracle/instantclient_11_2/libclntsh.so.11.1 (0x00007f6f036bb000)
        libnnz11.so => /home/db/oracle/instantclient_11_2/libnnz11.so (0x00007f6f032ed000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00000037fae00000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00000037fa600000)
        libm.so.6 => /lib64/libm.so.6 (0x00000037fb600000)
        libnsl.so.1 => /lib64/libnsl.so.1 (0x00000037fce00000)
        libc.so.6 => /lib64/libc.so.6 (0x00000037faa00000)
      libaio.so.1 => /lib64/libaio.so.1 (0x00007f6f030e0000)
      /lib64/ld-linux-x86-64.so.2 (0x00000037fa200000)
  • 测试命令
sqlldr userid=test/test@testdb data=文件名 control=文件名

4.配置sqluldr2

  • 准备软件

    • sqluldr2_linux64_10204.bin
  • 放置sqluldr2文件

    sqluldr2_linux64_10204.bin文件放置在/home/db/oracle/instantclient_11_2/下,并改名为sqluldr2

  • 检测类库文件依赖情况

    //执行
    ldd -r sqluldr2
    //注:如果出现类库文件名后标注not found的情况,就需要将正常oracle客户端中的该文件进来。通常为bibclntsh.so.10.1
    
    • 解决类库not found的情况

      1.在正常oracle客户端下执行ldd -r sqluldr2命令,并查看该类库文件的路径。

      2.找到该类库文件所在的文件夹,并将其拷贝至instantclient_11_2/下即可。

  • 测试sqluldr2

    sqluldr2 ccmssit/ccmssit@ccmssit query="sql语句" file="输出文件路径"
    

心得

  • 问题1:配置好oracle简易客户端以及其他软件以后,其他普通用户无法使用相关命令。

    • 解决:
      • 第一:先检查该用户的环境变量是否配置,配置之后是否生效(source一下)
      • 第二:检查oracle用户根目录的权限,如果权限不足,执行chmod -R 755 路径进行加权。
  • 问题2:不知道命令以来的类库文件在哪里

    • 解决:
      • 找一台可以正常使用命令的机器,执行ldd -r 命令,即可获知文件路径。

你可能感兴趣的:(技术学习,oracle,linux,数据库)