系统环境:[root@nich4 cx_oracle-py]# uname -alinux nich4 2.6.18-164.el5 #1 smp tue aug 18 15:51:54 edt 2009 i686 i686 i38
系统环境:
[root@nich4 cx_oracle-py]# uname -a
linux nich4 2.6.18-164.el5 #1 smp tue aug 18 15:51:54 edt 2009 i686 i686 i386 gnu/linux
python版本:
[root@nich4 cx_oracle-py]# python -v
python 2.4.3
oracle版本:
oracle database 10.2.0.5 x86
cx_oracle简介:
cx_oracle 是一个 python 扩展模块,通过使用所有数据库访问模块通用的数据库 api 来实现 oracle 数据库的查询和更新。为使用一些专为 oracle 设计的特性,还加入了多个通用数据库 api 的扩展。
cx_oracle 的开发历时十多年,涵盖了大多数需要在 python 中访问 oracle 的客户的需求。2008 年 12 月,,一个新的主要版本解决了早期版本的众多限制,并增添了对 python 3.0 和 oracle 新推出的一些特性的支持。
cx_oracle官方及下载:
下载与python版本对应的cx_oracle版本,一般选择非unicode版本就行了.
我选择的是centos 5 i386 rpm (oracle 10g, python 2.4)
下载之后rpm -ivh 安装.
修改oracle环境变量,加入:
export ld_library_path=/opt/oracle/10g\:/opt/oracle/10g/network/lib
连接数据库示例:
以下是一个在归档数据库下热备份数据文件的脚本.
#!/bin/env python
# -*- coding: utf-8 -*-
# modified: 20101012-23:25:43 by nich4@msn.com
# filename: hotbak.py
#
import subprocess
import cx_oracle
import os
db_username = 'sys'
db_passwd = 'oracle123'
db_sid = 'sol10g'
bak_dir = '/u01/app/oracle/oradata/bak/sol10g/'
db = cx_oracle.connect(db_username,db_passwd,db_sid,cx_oracle.sysdba)
print 连接数据库成功!
curs = db.cursor()
sql = r'''select 'cp '||name||' %s' from v$datafile''' % bak_dir
res = []
for rs in curs.execute(sql):
res.append(rs[0])
curs.execute('alter database begin backup')
print 开始备份数据文件...
for i in res:
fname = i.split()[1].split('/')[-1].strip()
print 正在备份%s 到 %s ... % (fname,bak_dir)
subprocess.call(i,shell=true)
print 数据文件%s 备份完成! % fname
curs.execute('alter database end backup')
db.close()
print 备份完成!
注: 该脚本在solaris-10+oracle-10gr2下测试. 这个脚本没有使用python的shutil模块来执行文件的拷贝.仅为演示用.