• <ul id="mayc0"></ul>
    <ul id="mayc0"><center id="mayc0"></center></ul>
    <strike id="mayc0"><input id="mayc0"></input></strike>
    <ul id="mayc0"></ul>
  • 始創(chuàng)于2000年 股票代碼:831685
    咨詢(xún)熱線(xiàn):0371-60135900 注冊(cè)有禮 登錄
    • 掛牌上市企業(yè)
    • 60秒人工響應(yīng)
    • 99.99%連通率
    • 7*24h人工
    • 故障100倍補(bǔ)償
    全部產(chǎn)品
    您的位置: 網(wǎng)站首頁(yè) > 幫助中心>文章內(nèi)容

    在Ubuntu下安裝Oracle Instant Client

    發(fā)布時(shí)間:  2012/9/17 16:43:52

    最近需要寫(xiě)一個(gè)數(shù)據(jù)遷移腳本,將單一Oracle中的數(shù)據(jù)遷移到MySQL Sharding集群,剛好最近在學(xué)習(xí)python,就用它來(lái)練手。
    很快搞定了MySQL,只需要安裝一個(gè)MySQLdb的python模塊就可以了。但是對(duì)于Oracle客戶(hù)端,不只需要安裝相應(yīng)的python模塊(這里我用了Oracle官方的python模塊——cx_Oracle),還需要安裝Oracle Client,一般選擇Instant Client就足夠了,還需要配置tnsnames.ora(當(dāng)然也可以簡(jiǎn)單的通過(guò)host:port/schema訪問(wèn))。 -
     


    下面是具體步驟。

    首先確定版本。因?yàn)槲覀兊腛racle數(shù)據(jù)是在是有點(diǎn)老,所以我選擇了一個(gè)比較老的版本——Oracle Instant Client 10.2.0.4。一般從官方網(wǎng)站下載就可以了。下載地址:http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html。這里要嚴(yán)重BS Oracle,居然要先注冊(cè)才能下載,這也算了,關(guān)鍵是注冊(cè)的時(shí)候,密碼居然要求有數(shù)字有字母,字母還要有大小寫(xiě),還必須至少8位。逼迫我搞了一個(gè)比我銀行密碼還要安全的密碼(好吧,現(xiàn)在我已經(jīng)忘記我填了什么了。。)。下載的時(shí)候要特別注意,一定要下載rpm包,zip不知道是什么。下basic就可以了。
    forrest@Ubuntu:~/Sources$ wget http://download.Oracle.com/otn/linux/instantclient/10204/oracle-instantclient-basic-10.2.0.4-1.x86_64.rpm
    由于是rpm包,在Ubuntu下先將其轉(zhuǎn)成deb包:
    forrest@Ubuntu:~/Sources$ sudo alien Oracle-instantclient-basic-10.2.0.4-1.x86_64.rpm
    得到Oracle-instantclient-basic_10.2.0.4-2_amd64.deb。
    可以安裝了,
    forrest@Ubuntu:~/Sources$ sudo dpkg -i Oracle-instantclient-basic_10.2.0.4-2_amd64.deb
    這樣會(huì)安裝在默認(rèn)的目錄下——/usr/lib/Oracle/10.2.0.4/client64/
    forrest@Ubuntu:/usr/lib/Oracle/10.2.0.4/client64$ ls
    bin  lib 


    安裝完成之后,還需要暴露一些環(huán)境變量,否則會(huì)報(bào)錯(cuò):
     * import cx_Oracle gave ImportError: libclntsh.so.10.1: cannot open shared object file: No such file or directory until I set LD_LIBRARY_PATH=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib/
     * conn = cx_Oracle.Connection('scott/tiger@xe') gave RuntimeError: Unable to acquire Oracle environment handle until I set ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server


    forrest@Ubuntu:~/Sources$ sudo vim ~/.profile
    在最后添加如下語(yǔ)句:
    export Oracle_HOME=/usr/lib/oracle/10.2.0.4/client64
    export PATH=$PATH:$Oracle_HOME/bin
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$Oracle_HOME/lib
    export TNS_ADMIN=$Oracle_HOME/network/admin


    注意到TNS_ADMIN所在目錄其實(shí)并不存在,是要自己創(chuàng)建的(這個(gè)也很惡心,我一開(kāi)始以為還要安裝什么東東。。)
    $ sudo mkdir -p $Oracle_HOME/network/admin
    $ sudo cp tnsnames.ora $Oracle_HOME/network/admin

    如果你有安裝sqlplus,此時(shí)就可以用它來(lái)測(cè)試安裝是否正確了:
    $ sqlplus 'username/password@SID'

    不過(guò)linux下的sqlplus太爛,我沒(méi)打算安裝,所以留著吧,接下去安裝python模塊——cx_Oracle——參考Install cx_Oracle in Ubuntu(http://leojay.blog.163.com/blog/static/1739841912009101165546640/
    到SourceForge搜索cx_Oracle,根據(jù)我的python版本和要操作的數(shù)據(jù)庫(kù)版本,選擇了cx_Oracle-5.1-10g-py26-1.x86_64.rpm這個(gè)版本,只能說(shuō)我相信高版本是向后兼容的。先試一下吧,呵呵。
    下完之后解壓,將cx_Oracle.so放在dist-packages下:
    $ sudo cp cx_Oracle.so /usr/local/lib/python2.6/dist-packages/
    這樣就OK了。
    寫(xiě)個(gè)簡(jiǎn)單的測(cè)試程序測(cè)試一下吧:
    #!bin/python
    import cx_Oracle

    conn = cx_Oracle.connect('user/passwd@sid')

    cursor = conn.cursor()
    cursor.execute("SELECT * from product_detail where product_id = 232896483")
    row = cursor.fetchone()
    print "result: ", row

    cursor.close()
    conn.close()

    如果沒(méi)有問(wèn)題應(yīng)該就可以看到結(jié)果了。這時(shí)候一般會(huì)遇到這樣的問(wèn)題:
    forrest@Ubuntu:~/work/data-migration$ python Oracledb.py
    Traceback (most recent call last):
      File "Oracledb.py", line 5, in <module>
        conn = cx_Oracle.connect(''user/passwd@sid')
    cx_Oracle.DatabaseError: ORA-12514: TNS:listener does not currently know of service requested in connect descriptor
    查看一下你的/usr/lib/Oracle/10.2.0.4/client64/network/admin/tnsnames.ora配置文件,確保sid是配置正確的。
    或者直接使用host:port/schema方式:
    conn = cx_Oracle.connect('user/passwd@host:port/schema')


    如果有其他問(wèn)題,可以在/usr/lib/Oracle/10.2.0.4/client64/network/admin下添加一個(gè)sqlnet.ora文件,以trace方式運(yùn)行:
    If for some reason you have some trouble connecting, you can create a sqlnet.ora file under $Oracle_HOME with some tracing options.
    $ sudo vi $Oracle_HOME/network/admin/sqlnet.ora
    TRACE_DIRECTORY_CLIENT=/tmp
    TRACE_LEVEL_CLIENT=SUPPORT


    The next time the Oracle Instant Client is used, it will create a detailed log file under /tmp like the following: cli_1968.trc. Make sure to turn this option off when you are done as the logfile can get quite large!

    PS:目前看來(lái)cx_Oracle還是有向下兼容的。希望如此,搞個(gè)環(huán)境比寫(xiě)個(gè)程序麻煩多了


    本文出自:億恩科技【www.vbseamall.com】

    服務(wù)器租用/服務(wù)器托管中國(guó)五強(qiáng)!虛擬主機(jī)域名注冊(cè)頂級(jí)提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM]

  • 您可能在找
  • 億恩北京公司:
  • 經(jīng)營(yíng)性ICP/ISP證:京B2-20150015
  • 億恩鄭州公司:
  • 經(jīng)營(yíng)性ICP/ISP/IDC證:豫B1.B2-20060070
  • 億恩南昌公司:
  • 經(jīng)營(yíng)性ICP/ISP證:贛B2-20080012
  • 服務(wù)器/云主機(jī) 24小時(shí)售后服務(wù)電話(huà):0371-60135900
  • 虛擬主機(jī)/智能建站 24小時(shí)售后服務(wù)電話(huà):0371-60135900
  • 專(zhuān)注服務(wù)器托管17年
    掃掃關(guān)注-微信公眾號(hào)
    0371-60135900
    Copyright© 1999-2019 ENKJ All Rights Reserved 億恩科技 版權(quán)所有  地址:鄭州市高新區(qū)翠竹街1號(hào)總部企業(yè)基地億恩大廈  法律顧問(wèn):河南亞太人律師事務(wù)所郝建鋒、杜慧月律師   京公網(wǎng)安備41019702002023號(hào)
      0
     
     
     
     

    0371-60135900
    7*24小時(shí)客服服務(wù)熱線(xiàn)