在Ubuntu下安装Oracle Instant Client
最近需要写一个数据迁移脚本,将单一Oracle中的数据迁移到MySQL Sharding集群,刚好最近在学习python,就用它来练手。很快搞定了
最近需要写一个数据迁移脚本,将单一Oracle中的数据迁移到MySQL Sharding集群,刚好最近在学习python,就用它来练手。
很快搞定了MySQL,只需要安装一个MySQLdb的python模块就可以了。但是对于Oracle客户端,不只需要安装相应的python模块(这里我用了Oracle官方的python模块——cx_Oracle),还需要安装Oracle Client,一般选择Instant Client就足够了,还需要配置tnsnames.ora(当然也可以简单的通过host:port/schema访问)。
下面是具体步骤。
首先确定版本。因为我们的Oracle数据是在是有点老,所以我选择了一个比较老的版本——Oracle Instant Client 10.2.0.4。一般从官方网站下载就可以了。下载地址:。这里要严重BS Oracle,居然要先注册才能下载,这也算了,关键是注册的时候,,密码居然要求有数字有字母,字母还要有大小写,还必须至少8位。逼迫我搞了一个比我银行密码还要安全的密码(好吧,现在我已经忘记我填了什么了。。)。下载的时候要特别注意,一定要下载rpm包,zip不知道是什么。下basic就可以了。
forrest@Ubuntu:~/Sources$ wget
由于是rpm包,在ubuntu下先将其转成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
这样会安装在默认的目录下——/usr/lib/oracle/10.2.0.4/client64/
forrest@ubuntu:/usr/lib/oracle/10.2.0.4/client64$ ls
bin lib
安装完成之后,还需要暴露一些环境变量,否则会报错:
* 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
在最后添加如下语句:
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所在目录其实并不存在,是要自己创建的(这个也很恶心,我一开始以为还要安装什么东东。。)
$ sudo mkdir -p $ORACLE_HOME/network/admin
$ sudo cp tnsnames.ora $ORACLE_HOME/network/admin
如果你有安装sqlplus,此时就可以用它来测试安装是否正确了:
$ sqlplus 'username/password@SID'
不过linux下的sqlplus太烂,我没打算安装,所以留着吧,接下去安装python模块——cx_Oracle——参考Install cx_Oracle in ubuntu()
到SourceForge搜索cx_Oracle,根据我的python版本和要操作的数据库版本,选择了cx_Oracle-5.1-10g-py26-1.x86_64.rpm这个版本,只能说我相信高版本是向后兼容的。先试一下吧,呵呵。
下完之后解压,将cx_Oracle.so放在dist-packages下:
$ sudo cp cx_Oracle.so /usr/local/lib/python2.6/dist-packages/
这样就OK了。
写个简单的测试程序测试一下吧:
#!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()
如果没有问题应该就可以看到结果了。这时候一般会遇到这样的问题:
forrest@ubuntu:~/work/data-migration$ python oracledb.py
Traceback (most recent call last):
File "oracledb.py", line 5, in
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')
如果有其他问题,可以在/usr/lib/oracle/10.2.0.4/client64/network/admin下添加一个sqlnet.ora文件,以trace方式运行:
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:目前看来cx_Oracle还是有向下兼容的。希望如此,搞个环境比写个程序麻烦多了。

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



In dem Artikel werden mithilfe der Änderungstabelle von MySQL Tabellen, einschließlich Hinzufügen/Löschen von Spalten, Umbenennung von Tabellen/Spalten und Ändern der Spaltendatentypen, erläutert.

In Artikel werden die Konfiguration der SSL/TLS -Verschlüsselung für MySQL, einschließlich der Erzeugung und Überprüfung von Zertifikaten, erläutert. Das Hauptproblem ist die Verwendung der Sicherheitsauswirkungen von selbstsignierten Zertifikaten. [Charakterzahl: 159]

Die Volltext-Suchfunktionen von InnoDB sind sehr leistungsfähig, was die Effizienz der Datenbankabfrage und die Fähigkeit, große Mengen von Textdaten zu verarbeiten, erheblich verbessern kann. 1) InnoDB implementiert die Volltext-Suche durch invertierte Indexierung und unterstützt grundlegende und erweiterte Suchabfragen. 2) Verwenden Sie die Übereinstimmung und gegen Schlüsselwörter, um den Booleschen Modus und die Phrasesuche zu unterstützen. 3) Die Optimierungsmethoden umfassen die Verwendung der Word -Segmentierungstechnologie, die regelmäßige Wiederaufbauung von Indizes und die Anpassung der Cache -Größe, um die Leistung und Genauigkeit zu verbessern.

In Artikel werden beliebte MySQL -GUI -Tools wie MySQL Workbench und PhpMyAdmin beschrieben, die ihre Funktionen und ihre Eignung für Anfänger und fortgeschrittene Benutzer vergleichen. [159 Charaktere]

In Artikel werden Strategien zum Umgang mit großen Datensätzen in MySQL erörtert, einschließlich Partitionierung, Sharding, Indexierung und Abfrageoptimierung.

In dem Artikel werden in MySQL die Ablagerung von Tabellen mithilfe der Drop -Tabellenerklärung erörtert, wobei Vorsichtsmaßnahmen und Risiken betont werden. Es wird hervorgehoben, dass die Aktion ohne Backups, die Detaillierung von Wiederherstellungsmethoden und potenzielle Produktionsumfeldgefahren irreversibel ist.

In Artikeln werden ausländische Schlüssel zur Darstellung von Beziehungen in Datenbanken erörtert, die sich auf Best Practices, Datenintegrität und gemeinsame Fallstricke konzentrieren.

In dem Artikel werden in verschiedenen Datenbanken wie PostgreSQL, MySQL und MongoDB Indizes für JSON -Spalten in verschiedenen Datenbanken erstellt, um die Abfrageleistung zu verbessern. Es erläutert die Syntax und die Vorteile der Indizierung spezifischer JSON -Pfade und listet unterstützte Datenbanksysteme auf.
