标签归档:Oracle

用cx_Oracle在Python中连接Oracle数据库

1. 首先下载cx_Oracle,下载地址:http://sourceforge.net/projects/cx-oracle/
2. 下载Oracle客户端程序instantclient,下载地址(可能有变化,建议百度一下instantclient):http://www.oracle.com/technetwork/cn/database/features/instant-client/index-092699-zhs.html
3. 安装instantclient
4. cx_Oracle的使用方法参见 $Python_Home\cx_Oracle-doc\html\index.html (如:C:\Python27\cx_Oracle-doc\html\index.html)

使用过程中遇到的问题:
1. 执行import cx_Oracle 提示“找不到指定的模块”

>>> import cx_Oracle
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: DLL load failed: 找不到指定的模块。
>>> 
解决办法,将instantclient目录中的oci.dll拷贝到$Python_Home 或者 $Python_Home\Lib\site-packages 目录下

2. 执行import cx_Oracle 提示“DLL load failed: %1 不是有效的 Win32 应用程序”

>>> import cx_Oracle
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: DLL load failed: %1 不是有效的 Win32 应用程序。
>>> 
解决办法:如果操作系统是64位系统,则拷贝64位instantclient中的oci.dll拷贝到$Python_Home 或者 $Python_Home\Lib\site-packages 目录下。
 

oracle安装成功但dbca执行失败的一个解决方案

环境:
      Red Hat Enterprise Linux Server release 5.8
      Release 10.2.0.1.0

错误现象:
      oracle安装成功,执行dbca以后,完成所有配置以后,点击了finish后无反应。查看/var/log/message 中有错误“kernel: sqlplus[26511]: segfault at 00000000775dff5c rip 00002b093cb14e87 rsp 00000000775dff64 error 6”提示。执行 sqlplus命令有错误“Segmentation fault”提示。

解决方案:
      操作步骤:
      1. 以root用户执行如下命令:

      # cd /usr/bin
      # mv gcc gcc.script
      # g++ g++.script
      # ln -s gcc34 gcc
      # ln -s g++34 g++

      2. 以oracle用户执行如下命令:

      # cd $ORACLE_HOME/bin
      # relink all

参考:http://efficientappsdba.blogspot.com/p/segmentation-fault-when-connect-to.html

Oracle sqlldr的安装配置

1. 配置环境变量:
export LD_LIBRARY_PATH=$HOME/oracle/client
export ORACLE_HOME=$HOME/oracle/home
export TNS_ADMIN=$LD_LIBRARY_PATH

2. 拷贝ulus.msb 和 ulzhs.msb 到 $HOME/oracle/home/rdbms/mesg目录

3. 解压instantclient-basic*.zip 和 instantclient-sqlplus*.zip 到$HOME/oracle/client目录

4. 拷贝sqlldr 到$HOME/oracle/client目录

5. 新增并配置tnsnames.ora文件
oracle_192.168.1.105 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.105)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = smapdb)
    )
  )

6. 可以开始使用sqlldr了。