oracle下使用for update 和 rowid的区别

 oracle  oracle下使用for update 和 rowid的区别已关闭评论
5月 092022
 

使用oracle工具查询并修改数据时,为了简单经常会直接使用select …. for update语句, 但随之而来的问题是,你查询显示就打开了事务,显示的记录即使不修改实际也被锁定了。其实可以使用 select …, rowid from xxx的方式, 使用这种方式,只有当你编辑数据时才打开事务锁定,编辑完成保存提交释放事务

for update:

当语句运行时,事务提前打开,会在对应行(where子句)加上行级锁,无where子句等于全表上锁。若遇到客户端断网、测试人员忘记提交\回滚事务,则会发生锁表。

rowid: 运行后, 事务不会自动打开,并未给数据加上行级锁(通过物理地址去确定某一行数据),但可以编辑数据,提交事务的瞬间完成打开事务上锁、提交、解锁等动作,不易发生锁表

Ubuntu14.04下Python(cx Oracle)访问Oracle解决方案( PyCharm wrong notification: no module named cx_Oracle)

 python  Ubuntu14.04下Python(cx Oracle)访问Oracle解决方案( PyCharm wrong notification: no module named cx_Oracle)已关闭评论
2月 272017
 

转自:http://blog.itpub.net/26031462/viewspace-1117480/


第一步:下载安装cx_Oracle

下载地址:http://sourceforge.net/projects/cx-oracle/files/5.1.2/下载cx_Oracle的rmp安装文件,注意下载版本最好和Oracle、Python环境保持一致,我当前的环境是Oracle 11g和Python2.7,因此下载的是cx_Oracle-5.1.2-11g-py27-1.x86_64rpm。

不需按RPM方式去安装,直接解压从中取出cx_Oracle.so文件(只需要这个),复制到Python环境的dist-packages目录,我的机器是/usr/local/lib/python2.7/dist-packages/。

解压命令:

>>rpm2cpio file.rpm | cpio -div

第二步:下载安装Oracle instant client

下载地址:http://www.oracle.com/technetwork/indexes/downloads/index.html,从Database栏目的Instant Client链接进入,按当前系统选择对应的下载,我选择的是Instant Client for Linux x86-64

解压下载文件oracle-instantclient11.2-basic-11.2.0.3.0-1.x86_64.rpm ,路径很长实际上只需要其中的so共享库文件,将所有so文件复制到一个单独路径即可,我将他们复制到/opt/oracle-instantclient11.2/lib。

应该有5个文件:

>>pwd
    /opt/oracle-instantclient11.2/lib
>> ls
    libclntsh.so.11.1  libnnz11.so  libocci.so.11.1  libociei.so  libocijdbc11.so

 

第三步:检查并安装libaio1

sudo apt-get install libaio1

 

第四步:配置环境变量

>>cd ~
  >>sudo vim .bashrc

把 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/oracle-instantclient11.2/lib 这行放在里面,保存退出。

最后:测试一下

$ python
>>>import cx_Oracle
>>>conn = cx_Oracle.connect(’username/pwd@ip:port/servicename’)
>>>cursor = conn.cursor()
>>>...

一个简单应用:

#! /usr/bin/python
#coding=UTF-8

import cx_Oracle

def hello():
    '''Hello cx_Oracle示例:
    
    1)打印数据库版本信息.
    2)查询表数据.'''
    
    conn = cx_Oracle.connect("codomain/[email protected]:1521/oracle1")
    cur = conn.cursor()
    try:
        print "Oracle Version:%s" % conn.version
        print "Table test rows:"
        cur.execute('select * from test')
        for row in cur:
            print row
    finally:
        cur.close()
        conn.close()

hello() 


按上面步骤安装完成后

测试发现使用终端执行命令行时正常, 

但脚本在pycharm下使用
import cx_Oracle 

总是提示: 

 no module named cx_Oracle

最后发现需要在/etc/ld.so.conf.d目录下自己配置一个.conf 文件,指向上面文章中复制到的/opt/oraclexxx目录, 再执行下ldconfig即可