暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

数据库常见连接方式及规范建议

IT那活儿 2021-01-10
2819
点击上方蓝字关注我们

Oracle数据库的远程连接可以通过多种方式来实现,本文我们主要介绍线上的生产环境远程连接Oracle数据库的方法和注意事项,并通过示例来说明,接下来我们就开始介绍。

一、常见连接方式总体介绍

  Oracle数据库常见连接方式主要有如下两类:

1、Oracle TNS:TNS(transparence Network Substrate透明网络底层)是Oracle Net的一部分,专门用来管理和配置Oracle数据库和客户端连接的一个工具,如果通过TNS连接Oracle,那么客户端必须安装Oracle client程序。

2、JDBC:是一种针对Java语言的数据库连接,全称Java Database Connectivity。主要是用来规范客户端如何访问数据库的应用程序接口,并支持增删改查等API接口。如果通过JDBC连接Oracle,需要安装Java JDK环境及ojdbcX.jar驱动包。不依赖Oracle client程序。

JDBC连接串配置一般有如下三种方式:

  • 使用service_name,配置方式:jdbc:oracle:thin:@//<host>:<port>/<service_name>

  • 使用SID,配置方式:jdbc:oracle:thin:@<host>:<port>/<SID>

  • 使用SID,配置方式:jdbc:oracle:thin:@<host>:<port>:<SID>

LDAP是轻量目录访问协议,英文全称是LightweightDirectory AccessProtocol,目录服务是一种特殊的数据库系统,以树状的层次结构来存储数据,适用于多读少写场景。LDAP本身并不支持连接数据库,而是用来访问解析存储在LDAP中的数据库连接配置信息。使用LDAP的优点是:针对数量不断增加的目录信息实现统一管理,操作简单易于维护,支持在任何计算机平台上都很容易访问LDAP目录。

针对生产环境特点,梳理应用连接oracle数据库的规范要求如下:

  • 不推荐配置使用scan_ip,原因是scan_ip会根据节点连接数和负载情况动态解析分配会话连接的节点,可能会导致GC争用,影响数据库性能。

  • 统一要求使用虚IP连接数据库。

  • 推荐使用FAILOVER故障转移配置。

二、JDBC(java进程)

Java程序可以通过OCI和Thin两种方式访问ORACLE数据库。

1、OCI是一种胖客户端的连接方式,客户端通过原生java方法调用clibrary(即OCI),一般而言采用这种方式需要安装和配置oracle客户端环境。

配置说明:

(1)url=jdbc:oracle:oci:@<TNSName别名>,可以配置tnsnames.ora然后使用TNSName别名,tnsnames.ora配置并不是必须的,不使用TNSNAME别名的情况下连接串写法如下(以某生产库为例):

url=jdbc:oracle:oci:@(DESCRIPTION =(ADDRESS_LIST =(LOAD_BALANCE = off)(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.21.30)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.21.31)(PORT = 1521)) )(CONNECT_DATA = (service_name = dbsnc) (FAILOVER_MODE =(type = session) (method = basic)(retries = 60)(delay = 5))))

(2)JDBC-OCI支持TAF,采用这种方式可以实现failover,当前连接的节点宕机时,连接的会话会自动进行故障转移而不会断开。

推荐配置样例:

程序中使用连接串样例:

配置文件:

配置文件中连接串的配置示例:

优先连节点1的配置:

url=jdbc:oracle:oci:@(DESCRIPTION =(ADDRESS_LIST =(LOAD_BALANCE = off)(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.21.30)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.21.31)(PORT = 1521)) )(CONNECT_DATA = (service_name = dbsnc) (FAILOVER_MODE =(type = session) (method = basic)(retries = 60)(delay = 5))))

优先连节点2的配置:

url=jdbc:oracle:oci:@(DESCRIPTION =(ADDRESS_LIST =(LOAD_BALANCE = off)(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.21.31)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.21.30)(PORT = 1521)) )(CONNECT_DATA = (service_name = dbsnc) (FAILOVER_MODE =(type = session) (method = basic)(retries = 60)(delay = 5))))

2、JDBCThin驱动程序方式连接oracle数据库时,是纯java实现tcp/ip的c/s通信,不需要完整安装Oracle客户端软件,以linux.x64+oracle11g为例,只需要下载instantclient-basic-linux.x64-11.2.0.4.0.zip并使用其中的ojdbc6.jar等驱动文件,同时安装JDK(建议1.6以上)。

配置说明:

(1)url=jdbc:oracle:thin:@<TNSName别名>,可以配置tnsnames.ora然后使用TNSName别名,tnsnames.ora配置并不是必须的,不使用TNSNAME别名的情况下连接串写法如下(以某线上生产为例):

url=jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS_LIST =(LOAD_BALANCE = off)(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.21.30)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.21.31)(PORT = 1521)) )(CONNECT_DATA = (service_name = dbsnc) (FAILOVER_MODE =(type = session) (method = basic)(retries = 60)(delay = 5))))

(2)oracle数据库10.2.0.1版本开始支持TNSName,尽管JDBC-THIN不支持TAF,但这种写法使用很方便,当前连接的节点宕机时,客户端程序重启或客户端程序自动重连时能很快连到另外一个节点。

推荐配置样例:

程序中使用连接串样例:

配置文件:

配置文件中连接串的配置示例:

优先连节点1的配置:

url=jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS_LIST =(LOAD_BALANCE = off)(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.21.30)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.21.31)(PORT = 1521)) )(CONNECT_DATA = (service_name = dbsnc) (FAILOVER_MODE =(type = session) (method = basic)(retries = 60)(delay = 5))))

优先连节点2的配置:

url=jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS_LIST =(LOAD_BALANCE = off)(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.21.31)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.21.30)(PORT = 1521)) )(CONNECT_DATA = (service_name = dbsnc) (FAILOVER_MODE =(type = session) (method = basic)(retries = 60)(delay = 5))))

三、weblogic (多数据源+IP)

Weblogic连接oracle数据库可以只依赖JDBC+oracle驱动包,此配置不需要安装oracle客户端。推荐使用Weblogic多数据源方式来实现failover,与Weblogic多数据源配置样例(具体前台配置可参考多数据源+LDAP):

  1.先配置2个单数据源,jdbc连接串推荐使用数据库的虚IP

数据源1- dbsnc1:jdbc:oracle:thin@192.168.21.30/dbsnc

数据源2- dbsnc2:jdbc:oracle:thin@192.168.21.31/dbsnc

 2、配置多数据源dbsnc,选中dbsnc1和dbsnc2两个一般数据源。

四、weblogic (多数据源+LDAP)

Weblogic连接oracle数据库可以只依赖JDBC+oracle驱动包,此配置不需要安装oracle客户端。推荐使用Weblogic多数据源方式来实现failover,与Weblogic多数据源配置样例:

1.先配置2个单数据源,jdbc连接串推荐使用LDAP

jdbc:oracle:thin:@ldap://192.125.50.245:3060/dbsnc1,cn=OracleContext,dc=chinashsnc,dc=com ldap://192.125.50.246:3060/dbsnc1,cn=OracleContext,dc=chinashsnc,dc=com

jdbc:oracle:thin:@ldap://192.125.50.245:3060/dbsnc2,cn=OracleContext,dc=chinashsnc,dc=com ldap://192.125.50.246:3060/dbsnc2,cn=OracleContext,dc=chinashsnc,dc=com

2.配置多数据源,选中前面配置的2个单数据源:

五、tuxedo中间件(IP)

通过tuxedo中间件连接oracle数据库可以使用TNS方式,需要安装oracle客户端。

以某线上生产库为例:

(1)、如下在oracle客户端中sqlnet.ora配置优先使用TNS:

在oracle客户端中sqlnet.ora配置优先使用TNS

  NAMES.DIRECTORY_PATH=(TNSNAMES,HOSTNAME,ONAMES)

(2)、在$ORACLE_HOME/network/admin/tnsnames.ora文件中添加对应TNS串配置:

优先连节点1的配置(dbsnc1_failover):

dbsnc1_failover =  (DESCRIPTION =    (LOAD_BALANCE=OFF)    (FAILOVER=ON)    (ADDRESS_LIST =       (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.21.30)(PORT = 1521))       (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.21.31)(PORT = 1521))    )    (CONNECT_DATA =      (SERVICE_NAME = dbsnc)      (SERVER=DEDICATED)      (FAILOVER_MODE=        (type = session)        (method = basic)        (retries = 180)        (delay = 5)      )    )  )

优先连节点2的配置(dbsnc2_failover):

dbsnc2_failover =  (DESCRIPTION =    (LOAD_BALANCE=OFF)    (FAILOVER=ON)    (ADDRESS_LIST =       (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.21.31)(PORT = 1521))       (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.21.30)(PORT = 1521))    )    (CONNECT_DATA =      (SERVICE_NAME = dbsnc)      (SERVER=DEDICATED)      (FAILOVER_MODE=        (type = session)        (method = basic)        (retries = 180)        (delay = 5)      )

 )  )

(3)、使用tnsping命令测试数据库连接,可以看到使用TNS解析并连接成功。

(4)、使用tmloadcf命令更新tuxedo数据源配置,注意将SqlNet参数值修改为TNS中已配置好的数据源名称,如下:

OPENINFO="Oracle_XA:Oracle_XA+acc=P/USERNAME/PASSWORD+SesTm=150+LogDir=.+SqlNet=dbsnc1_failover+Loose_Coupling=true"

六、tuxedo中间件(LDAP)

通过tuxedo中间件连接oracle数据库时,如有搭建LDAP服务器,推荐使用LDAP进行域名解析。

以某线上生产库为例:

(1)、如下在oracle客户端中sqlnet.ora配置优先使用ldap:

在oracle客户端中sqlnet.ora配置优先使用TNS

NAMES.DIRECTORY_PATH=(LDAP,TNSNAMES,HOSTNAME,ONAMES)

同时创建ldap.ora文件并添加LDAP服务器配置

(2)、在LDAP服务器(192.125.50.245,192.125.50.246)中添加对应LDAP连接串配置:

优先连节点1的配置(dbsnc1_failover):

# dbsnc1_failover, OracleContext, chinashsnc.com

dn: cn=dbsnc1_failover,cn=OracleContext,dc=chinashsnc,dc=com

cn: dbsnc1_failover

objectclass: top

objectclass: orclNetService

orclnetdescstring: (DESCRIPTION=(ADDRESS_LIST=(LOAD_BALANCE=off)(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.21.30)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.21.31)(PORT=1521)))(CONNECT_DATA=(service_name=dbsnc)(FAILOVER_MODE=(type=session)(method=basic)(retries=180)(delay=5))))

优先连节点2的配置(dbsnc2_failover):

# dbsnc2_failover, OracleContext, chinashsnc.com

dn: cn=dbsnc2_failover,cn=OracleContext,dc=chinashsnc,dc=com

cn: dbsnc2_failover

objectclass: top

objectclass: orclNetService

orclnetdescstring: (DESCRIPTION=(ADDRESS_LIST=(LOAD_BALANCE=off)(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.21.31)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.21.30)(PORT=1521)))(CONNECT_DATA=(service_name=dbsnc)(FAILOVER_MODE=(type=session)(method=basic)(retries=180)(delay=5))))

(3)、使用tnsping命令测试数据库连接,可以看到使用LDAP解析并连接成功。

(4)、使用tmloadcf命令更新tuxedo数据源配置,注意将SqlNet参数值修改为LDAP中已配置好的数据源名称,如下:

OPENINFO="Oracle_XA:Oracle_XA+acc=P/USERNAME/PASSWORD+SesTm=150+LogDir=.+SqlNet=dbsnc1_failover+Loose_Coupling=true"

(5)、使用tmadm-g命令可以查看当前tuxedo已配置的服务。

七、Shell脚本

Shell脚本连接oracle数据库一般可通过oracle数据库自带的sqlplus工具,使用灵活方便,需要依赖于客户端上已安装oracle客户端。

1,配置说明:

(1)安装配置oracle客户端,设置环境变量;

(2)oracle客户端tnsnames.ora文件中连接串配置为failover方式,tnsnames位置:$ORACLE_HOME/network/admin/tnsnames.ora

(3)sqlplus用户名/密码@“tnsname中的别名”的方式进行连接时,客户端需要配置tnsname中的别名。

2,推荐配置样例:

Shell脚本中连接实例(数据库用户名,密码,tnsname中的别名根据实际情况填写):

tnsnames.ora文件中连接串的配置示例(failover):

优先连节点1的配置(dbsnc1_failover):

dbsnc1_failover =  (DESCRIPTION =    (LOAD_BALANCE=OFF)    (FAILOVER=ON)    (ADDRESS_LIST =       (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.21.30)(PORT = 1521))       (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.21.31)(PORT = 1521))    )    (CONNECT_DATA =      (SERVICE_NAME = dbsnc)      (SERVER=DEDICATED)      (FAILOVER_MODE=        (type = session)        (method = basic)        (retries = 180)        (delay = 5)      )    )  )

  优先连节点2的配置(dbsnc2_failover):

dbsnc2_failover =  (DESCRIPTION =    (LOAD_BALANCE=OFF)    (FAILOVER=ON)    (ADDRESS_LIST =       (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.21.31)(PORT = 1521))       (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.21.30)(PORT = 1521))    )    (CONNECT_DATA =      (SERVICE_NAME = dbsnc)      (SERVER=DEDICATED)      (FAILOVER_MODE=        (type = session)        (method = basic)        (retries = 180)        (delay = 5)      )    )  )

注:tnsnames.ora配置并不是必须的,不使用TNSNAME别名的情况下写法如下:

sqlplus 

dbauser/********@(DESCRIPTION=(ADDRESS_LIST=(LOAD_BALANCE=off)(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.21.30)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.21.31)(PORT=1521)))(CONNECT_DATA=(service_name=dbsnc)(FAILOVER_MODE=(type=session)(method=basic)(retries=180)(delay=5))))

END

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论