os: centos 7.6
db: oracle 19.3
jdbc 连接 oracle 有两种常见方式,thin 和 coi.
开发人员一般配置的都是 thin 方式,简单.
thin
thin 是 for thin client 的意思,是纯java实现的,通过Java sockets进行通信,属于4类驱动。
因此不需要在使用JDBC Thin的客户端机器上安装orcale客户端软件,所以有很好的移植性,通常用在web开发中。
JDBC Thin using an SID:
jdbc:oracle:thin:@192.168.56.100:1521:pdb1
JDBC Thin using a ServiceName:
jdbc:oracle:thin:@//192.168.56.100:1521/pdb1
JDBC Thin using a TNS
jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.56.100)(PORT=1521)))(CONNECT_DATA= (SERVER = DEDICATED)(SERVICE_NAME=pdb1)))
JDBC Thin using a TNSName
thin + tnsname 这个比较少见
jdbc:oracle:thin:@tns_pdb1
oci
oci是oracle call interface的缩写,是用C语言实现的,属于2类驱动。
因为它需要Oracle Call Interface and Net8,所以它需要在运行使用此驱动的JAVA程序的机器上安装客户端软件,其实主要是用到orcale客户端里以.dll方式或者.so提供的oci和服务器配置。
使用 coi ,最小环境为安装 Oracle Instant Client.
使用 oci 方式,一般是在 rac 的环境下,所以在 database server 端要创建 service ,并配置好 failover type.
JDBC Oci using an SID:
jdbc:oracle:oci:@192.168.56.100:1521:pdb1
JDBC Oci using a TNSName
jdbc:oracle:oci:@tns_pdb1
tnsname
不管是通过 thin 还是 oci 方式,使用 tnsname 就需要做一些额外设置
在运行java的用户下,或者全局设置
这里安装的是 Oracle Instant Client 19.3
$ vi /home/oracle/.bash_profile
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19.3.0/instantclient_19_3
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
export NLS_DATE_FORMAT='yyyy-mm-dd hh24:mi:ss'
export PATH=.:${PATH}:$HOME/bin:$ORACLE_HOME:$ORACLE_HOME/bin
export PATH=${PATH}:/usr/bin:/bin:/usr/bin/X11:/usr/local/bin
export PATH=${PATH}:$ORACLE_BASE/common/oracle/bin
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$ORACLE_HOME:$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=${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 TEMP=/tmp
export TMP=/tmp
export TMPDIR=/tmp
$ vi $ORACLE_HOME/network/admin/tnsnames.ora
tns_pdb1=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.56.100)(PORT=1521))
)
(CONNECT_DATA=
(SERVER = DEDICATED)
(SERVICE_NAME=pdb1)
)
)
参考:
https://www.oracle.com/database/technologies/instant-client/downloads.html
https://docs.oracle.com/en/database/oracle/oracle-database/19/jjdbc/JDBC-Thin-features.html#GUID-003FC8A9-9CD7-41C4-AD73-BE6F5D13D1DB
https://docs.oracle.com/en/database/oracle/oracle-database/19/jjdbc/JDBC-OCI-features.html#GUID-A8201BD0-BAED-4C54-B53B-C26C5F295B32