ODBC效率超低,但沒辦法,有個ARCPLAN的項目要用到ODBC連ORACLE。
1.ODBC MANAGER:在LINUX中用unixODBC作為ODBC管理器。
2.ORACLE ODBC DRIVER:ORACLE官方的Instant Client Package中包含了ODBC驅動。
unixODBC要選擇2.2.12以上版本,否則跟ORACLE Instant Client Package 10.2.0.4版本不兼容。
ORACLE Instant Client Package 10.2.0.4安裝Basic和ODBC這兩個,最好再裝上SQL*Plus這個,以便檢查分析之后的配置是否有錯。
配置ODBC DRIVER(/etc/odbcinst.ini)
[oracle_driver]
Description=odbc for oracle
Driver=/usr/lib/oracle/10.2.0.4/client64/lib/libsqora.so.10.1
[ODBC]
Trace=1
Debug=1
Pooling=No
配置SYSTEM DSN(/etc/odbc.ini)
[FINE_ZHH]
Driver=oracle_driver
Description=
DSN=FINE_ZHH
ServerName=FINE_CK
Database=ora92
UserID=theusrname
Password=thepasswd
METADATA_ID=0
ENABLE_USER_CATALOG=1
ENABLE_SYNONYMS=1
在/etc/profile文件最后加上所需的環境變量,如下(具體參數需要根據自己實際修改):
#ORACLE INSTANT CLIENT
#ADD BY JOJO
ORACLE_HOME=/usr/lib/oracle/10.2.0.4/client64
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
SQLPATH=$ORACLE_HOME/lib:$SQLPATH
TNS_ADMIN=$ORACLE_HOME
PATH=$PATH:$ORACLE_HOME/bin:.
TWO_TASK=orcl
export ORACLE_HOME
export SQLPATH
export TNS_ADMIN
export LD_LIBRARY_PATH
export TWO_TASK
export PATH
保存profile文件后執行#source /etc/profile命令使設置的環境變量在不重新登錄的情況下生效。
后來發現設置LD_LIBRARY_PATH這個變量重新登錄后無法生效。GOOGLE了一下發現不建議設置這個系統全局環境變量,于是干脆就把/usr/lib/oracle/10.2.0.4/client64/lib目錄下的文件都cp到/usr/local/lib目錄下。
在$TNS_ADMIN目錄下建立sqlnet.ora文件,內容如下:
SQLNET.AUTHENTICATION_SERVICES=(NTS)
NAMES.DIRECTORY_PATH=(TNSNAMES,ONAMES,HOSTNAME)
在同一目錄下建立tnsnames.ora,內容如下(具體參數需要根據自己實際修改):
FINE_CK=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.3.3)(PORT=1521))
)
(CONNECT_DATA=
(SERVER=DEDICATED)
(SERVICE_NAME=ora92)
)
)
到此為止配置都已經完成,通過sqlplus theusrname/passwd@FINE_CK命令如果能成功連接到ORACLE數據庫,那說明tnsnames.ora文件配置沒有問題。然后可以用unixODBC提供的isql FINE_CK -v命令測試ODBC配置是否正確了,成功連接的話就表明配置都沒有問題,可以使用ODBC連ORACLE了。
补充:
今天发现用2.2.14 x86_64版本的unixODBC虽然能连数据库,但在实际应用程序中无法SELECT,用ISQL工具登录执行select 1 from dual;发现报“IM003”错误。GOOGLE了一下,原来是个BUG,可以手动修改源代码,见http://forums.oracle.com/forums/thread.jspa?threadID=340030&start=15&tstart=60
一个省心的办法是直接下载测试版本的2.2.15pre,然后编译并安装。此时运行odbcinst -j;发现系统DSN和ODBC DRIVER配置文件的目录从/etc/目录改为/usr/local/etc/这个目录。要把原来的文件复制到新目录,其他不变。
Showing posts with label oracle. Show all posts
Showing posts with label oracle. Show all posts
Wednesday, September 2, 2009
Friday, February 1, 2008
在RHEL5.1上安装oracle 11g(linux x86_64)
以前在Debian上面成功安装过oracle 9i,那时费了好大的力才把需要的包一个一个apt-get过来。现在用Gentoo,但使用的是纯64位软件,所以估计没法装oracle 11g(x86_64版本貌似仍然需要一些32位的包)。都怪linux发行版五花八门,不象windows那么千篇一律。
这次在HP ProLiant G5上装了一个RHEL5.1,所以准备在这上面装一个oracle 11g x86_64的版本用作开发测试。值得庆幸的是RHEL是oracle认证的linux发行版,而且oracle自己的那个linux也是基于redhat的,所以应该问题不大。
最最值得庆幸的也是要感激的就是Jeff Hunter已经在CentOS5.1上成功安装了oracle 11g,英文原文Installing Oracle Database 11g Release 1 on Linux - (RHEL 5),因为CentOS是对RHEL的100%兼容版本,所以理论上RHEL上按照他给出的步骤可以100%成功安装。太easy了,傻瓜式的按部就班。在扮演傻瓜的同时也学到了不少redhat linux与Debian,Gentoo,FreeBSD所不同的地方。
1.安装RHEL5.1
这个没什么好说的,每个人有每个人的装法,就罗列一下安装的package groups。
*Desktop Environments
GNOME Desktop Environment
*Applications
Editors
Graphical Internet
Text-based Internet
*Development
Development Libraries
Development Tools
Legacy Software Development
*Servers
Server Configuration Tools
*Base System
Administration Tools
Base
Java
Legacy Software Support
System Tools
X Window System
2.装好之后把firewall和SELinux都暂时关掉。然后把oracle11g需要的包都检查一下是否全部都有,没有就从dvd装。
binutils-2.17.50.0.6
compat-libstdc++-33-3.2.3
compat-libstdc++-33-3.2.3 (32 bit)
elfutils-libelf-0.125
elfutils-libelf-devel-0.125
gcc-4.1.1
gcc-c++-4.1.1
glibc-2.5-12
glibc-2.5-12 (32 bit)
glibc-common-2.5
glibc-devel-2.5
glibc-devel-2.5-12 (32 bit)
libaio-0.3.106
libaio-0.3.106 (32 bit)
libaio-devel-0.3.106
libgcc-4.1.1
libgcc-4.1.1 (32 bit)
libstdc++-4.1.1
libstdc++-4.1.1 (32 bit)
libstdc++-devel 4.1.1
make-3.81
sysstat-7.0.0
3.确保/tmp有大于400M的空间并设置内核参数。
在/etc/sysctl.conf文件中有内核参数。
# +---------------------------------------------------------+
# | SHARED MEMORY |
# +---------------------------------------------------------+
kernel.shmmax = 536870912
kernel.shmmni = 4096
kernel.shmall = 2097152
# +---------------------------------------------------------+
# | SEMAPHORES |
# | ---------- |
# | |
# | SEMMSL_value SEMMNS_value SEMOPM_value SEMMNI_value |
# | |
# +---------------------------------------------------------+
kernel.sem = 250 32000 100 128
# +---------------------------------------------------------+
# | FILE HANDLES |
# ----------------------------------------------------------+
fs.file-max = 102696
# +---------------------------------------------------------+
# | LOCAL IP RANGE |
# ----------------------------------------------------------+
net.ipv4.ip_local_port_range = 1024 65000
# +---------------------------------------------------------+
# | NETWORKING |
# ----------------------------------------------------------+
net.core.rmem_default = 4194304
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 262144
使用#/sbin/sysctl -p命令让以上设置生效而不需reboot。
4.在/etc/hosts文件中把不要的hostname从回路地址中去掉,把ipv6也去掉。
127.0.0.1 test2 localhost.localdomain localhost
应该改为 127.0.0.1 localhost.localdomain localhost
5.创建oinstall,dba,oper,asm,asmdba这5个组,然后创建一个属于这5个组的oracle用户。在英文原文中对这5个组对应的数据库组有详细的说明。
可以使用命令行来创建:
# groupadd -g 501 oinstall
# groupadd -g 502 dba
# groupadd -g 503 oper
# groupadd -g 504 asm
# groupadd -g 506 asmdba
# useradd -m -u 501 -g oinstall -G dba,oper,asm -d /home/oracle -s /bin/bash -c "Oracle Software Owner" oracle
# id oracle
uid=501(oracle) gid=501(oinstall) groups=501(oinstall),502(dba),503(oper),504(asm)
之后设置密码给oracle用户。
6.查看nobody用户是否已经存在。
# id nobody
uid=99(nobody) gid=99(nobody) groups=99(nobody)
如果不存在就创建:
# /usr/sbin/useradd nobody
7.接下来就是创建oracle base directory了,对于非advanced安装,不需要指定数据文件的文件夹。
# mkdir -p /xxx/app/oracle
# chown -R oracle:oinstall /u01/app
# chmod -R 775 /u01/app
如果使用advanced安装,请看英文原文。
8.为oracle用户创建登陆脚本,在/home/oracle/.bash_profile文件中加入:
# User specific environment and startup programs
export ORACLE_BASE=/xxx/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.1.0/db_1
export ORACLE_PATH=$ORACLE_BASE/common/oracle/sql:.:$ORACLE_HOME/rdbms/admin
export ORACLE_SID=MYDBSID
export PATH=.:${JAVA_HOME}/bin:${PATH}:$HOME/bin:$ORACLE_HOME/bin
export PATH=${PATH}:/usr/bin:/bin:/usr/bin/X11:/usr/local/bin
export PATH=${PATH}:$ORACLE_BASE/common/oracle/bin
export ORACLE_TERM=xterm
export TNS_ADMIN=$ORACLE_HOME/network/admin
export ORA_NLS10=$ORACLE_HOME/nls/data
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$ORACLE_HOME/oracm/lib
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib:/usr/lib:/usr/local/lib
export CLASSPATH=$ORACLE_HOME/JRE
export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/jlib
export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/rdbms/jlib
export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/network/jlib
export THREADS_FLAG=native
export TEMP=/tmp
export TMPDIR=/tmp
9.用oracle用户进入X根据提示进行安装。我选的是基本安装,并且创建初始化数据库应该是没什么问题的,只是等待而已,呵呵~~!好了之后应该可以用https://localhost:1158/em登录了。
10.装好之后我发现重新启动后oracle没自动起来,看来自动启动/关闭脚本还没加,编辑/etc/oratab文件:
MYDBSID:/u01/app/oracle/product/11.1.0/db_1:Y
然后创建/etc/init.d/oracle文件,使得oracle作为系统的service。
文件内容:
#!/bin/sh
# chkconfig: 345 99 10
# description: Oracle auto start-stop script.
#
# Set ORA_HOME to be equivalent to the $ORACLE_HOME
# from which you wish to execute dbstart and dbshut;
#
# Set ORA_OWNER to the user id of the owner of the
# Oracle database in ORA_HOME.
ORA_HOME=/xxx/app/oracle/product/11.1.0/db_1
ORA_OWNER=oracle
if [ ! -f $ORA_HOME/bin/dbstart ]
then
echo "Oracle startup: cannot start"
exit
fi
case "$1" in
'start')
# Start the Oracle databases:
# The following command assumes that the oracle login
# will not prompt the user for any values
su - $ORA_OWNER -c "$ORA_HOME/bin/dbstart $ORA_HOME"
;;
'stop')
# Stop the Oracle databases:
# The following command assumes that the oracle login
# will not prompt the user for any values
su - $ORA_OWNER -c "$ORA_HOME/bin/dbshut $ORA_HOME"
;;
esac
之后# chmod 750 /etc/init.d/oracle
最后就是把这个启动脚本放到服务里面去。
英文原文中使用的是# chkconfig --level 345 oracle on这个命令把这个启动脚本防到3、4、5这3个run level中,但我用这个命令说command not found,只能从图形界面进去手动把这个服务加到服务列表里。效果一样。哈哈。
11.最后的最后就是这个,为了要使用web页面的em,所以必须要把emctl start dbconsole和emctl stop dbconsole放如/etc/init.d/oracle文件的适当位子。否则每次都要手动启动多麻烦啊~~!
英文原文写得很好很详细,我只是把我使用到的步骤从中抽取出来中文化了一下,而且很简略,有能力的朋友强烈建议看英文原文。
这次在HP ProLiant G5上装了一个RHEL5.1,所以准备在这上面装一个oracle 11g x86_64的版本用作开发测试。值得庆幸的是RHEL是oracle认证的linux发行版,而且oracle自己的那个linux也是基于redhat的,所以应该问题不大。
最最值得庆幸的也是要感激的就是Jeff Hunter已经在CentOS5.1上成功安装了oracle 11g,英文原文Installing Oracle Database 11g Release 1 on Linux - (RHEL 5),因为CentOS是对RHEL的100%兼容版本,所以理论上RHEL上按照他给出的步骤可以100%成功安装。太easy了,傻瓜式的按部就班。在扮演傻瓜的同时也学到了不少redhat linux与Debian,Gentoo,FreeBSD所不同的地方。
1.安装RHEL5.1
这个没什么好说的,每个人有每个人的装法,就罗列一下安装的package groups。
*Desktop Environments
GNOME Desktop Environment
*Applications
Editors
Graphical Internet
Text-based Internet
*Development
Development Libraries
Development Tools
Legacy Software Development
*Servers
Server Configuration Tools
*Base System
Administration Tools
Base
Java
Legacy Software Support
System Tools
X Window System
2.装好之后把firewall和SELinux都暂时关掉。然后把oracle11g需要的包都检查一下是否全部都有,没有就从dvd装。
binutils-2.17.50.0.6
compat-libstdc++-33-3.2.3
compat-libstdc++-33-3.2.3 (32 bit)
elfutils-libelf-0.125
elfutils-libelf-devel-0.125
gcc-4.1.1
gcc-c++-4.1.1
glibc-2.5-12
glibc-2.5-12 (32 bit)
glibc-common-2.5
glibc-devel-2.5
glibc-devel-2.5-12 (32 bit)
libaio-0.3.106
libaio-0.3.106 (32 bit)
libaio-devel-0.3.106
libgcc-4.1.1
libgcc-4.1.1 (32 bit)
libstdc++-4.1.1
libstdc++-4.1.1 (32 bit)
libstdc++-devel 4.1.1
make-3.81
sysstat-7.0.0
3.确保/tmp有大于400M的空间并设置内核参数。
在/etc/sysctl.conf文件中有内核参数。
# +---------------------------------------------------------+
# | SHARED MEMORY |
# +---------------------------------------------------------+
kernel.shmmax = 536870912
kernel.shmmni = 4096
kernel.shmall = 2097152
# +---------------------------------------------------------+
# | SEMAPHORES |
# | ---------- |
# | |
# | SEMMSL_value SEMMNS_value SEMOPM_value SEMMNI_value |
# | |
# +---------------------------------------------------------+
kernel.sem = 250 32000 100 128
# +---------------------------------------------------------+
# | FILE HANDLES |
# ----------------------------------------------------------+
fs.file-max = 102696
# +---------------------------------------------------------+
# | LOCAL IP RANGE |
# ----------------------------------------------------------+
net.ipv4.ip_local_port_range = 1024 65000
# +---------------------------------------------------------+
# | NETWORKING |
# ----------------------------------------------------------+
net.core.rmem_default = 4194304
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 262144
使用#/sbin/sysctl -p命令让以上设置生效而不需reboot。
4.在/etc/hosts文件中把不要的hostname从回路地址中去掉,把ipv6也去掉。
127.0.0.1 test2 localhost.localdomain localhost
应该改为 127.0.0.1 localhost.localdomain localhost
5.创建oinstall,dba,oper,asm,asmdba这5个组,然后创建一个属于这5个组的oracle用户。在英文原文中对这5个组对应的数据库组有详细的说明。
可以使用命令行来创建:
# groupadd -g 501 oinstall
# groupadd -g 502 dba
# groupadd -g 503 oper
# groupadd -g 504 asm
# groupadd -g 506 asmdba
# useradd -m -u 501 -g oinstall -G dba,oper,asm -d /home/oracle -s /bin/bash -c "Oracle Software Owner" oracle
# id oracle
uid=501(oracle) gid=501(oinstall) groups=501(oinstall),502(dba),503(oper),504(asm)
之后设置密码给oracle用户。
6.查看nobody用户是否已经存在。
# id nobody
uid=99(nobody) gid=99(nobody) groups=99(nobody)
如果不存在就创建:
# /usr/sbin/useradd nobody
7.接下来就是创建oracle base directory了,对于非advanced安装,不需要指定数据文件的文件夹。
# mkdir -p /xxx/app/oracle
# chown -R oracle:oinstall /u01/app
# chmod -R 775 /u01/app
如果使用advanced安装,请看英文原文。
8.为oracle用户创建登陆脚本,在/home/oracle/.bash_profile文件中加入:
# User specific environment and startup programs
export ORACLE_BASE=/xxx/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.1.0/db_1
export ORACLE_PATH=$ORACLE_BASE/common/oracle/sql:.:$ORACLE_HOME/rdbms/admin
export ORACLE_SID=MYDBSID
export PATH=.:${JAVA_HOME}/bin:${PATH}:$HOME/bin:$ORACLE_HOME/bin
export PATH=${PATH}:/usr/bin:/bin:/usr/bin/X11:/usr/local/bin
export PATH=${PATH}:$ORACLE_BASE/common/oracle/bin
export ORACLE_TERM=xterm
export TNS_ADMIN=$ORACLE_HOME/network/admin
export ORA_NLS10=$ORACLE_HOME/nls/data
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$ORACLE_HOME/oracm/lib
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib:/usr/lib:/usr/local/lib
export CLASSPATH=$ORACLE_HOME/JRE
export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/jlib
export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/rdbms/jlib
export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/network/jlib
export THREADS_FLAG=native
export TEMP=/tmp
export TMPDIR=/tmp
9.用oracle用户进入X根据提示进行安装。我选的是基本安装,并且创建初始化数据库应该是没什么问题的,只是等待而已,呵呵~~!好了之后应该可以用https://localhost:1158/em登录了。
10.装好之后我发现重新启动后oracle没自动起来,看来自动启动/关闭脚本还没加,编辑/etc/oratab文件:
MYDBSID:/u01/app/oracle/product/11.1.0/db_1:Y
然后创建/etc/init.d/oracle文件,使得oracle作为系统的service。
文件内容:
#!/bin/sh
# chkconfig: 345 99 10
# description: Oracle auto start-stop script.
#
# Set ORA_HOME to be equivalent to the $ORACLE_HOME
# from which you wish to execute dbstart and dbshut;
#
# Set ORA_OWNER to the user id of the owner of the
# Oracle database in ORA_HOME.
ORA_HOME=/xxx/app/oracle/product/11.1.0/db_1
ORA_OWNER=oracle
if [ ! -f $ORA_HOME/bin/dbstart ]
then
echo "Oracle startup: cannot start"
exit
fi
case "$1" in
'start')
# Start the Oracle databases:
# The following command assumes that the oracle login
# will not prompt the user for any values
su - $ORA_OWNER -c "$ORA_HOME/bin/dbstart $ORA_HOME"
;;
'stop')
# Stop the Oracle databases:
# The following command assumes that the oracle login
# will not prompt the user for any values
su - $ORA_OWNER -c "$ORA_HOME/bin/dbshut $ORA_HOME"
;;
esac
之后# chmod 750 /etc/init.d/oracle
最后就是把这个启动脚本放到服务里面去。
英文原文中使用的是# chkconfig --level 345 oracle on这个命令把这个启动脚本防到3、4、5这3个run level中,但我用这个命令说command not found,只能从图形界面进去手动把这个服务加到服务列表里。效果一样。哈哈。
11.最后的最后就是这个,为了要使用web页面的em,所以必须要把emctl start dbconsole和emctl stop dbconsole放如/etc/init.d/oracle文件的适当位子。否则每次都要手动启动多麻烦啊~~!
英文原文写得很好很详细,我只是把我使用到的步骤从中抽取出来中文化了一下,而且很简略,有能力的朋友强烈建议看英文原文。
Subscribe to:
Posts (Atom)