资讯专栏INFORMATION COLUMN

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

IT那活儿 / 3691人阅读
数据库常见连接方式及规范建议
点击上方蓝字关注我们


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:@//:/

  • 使用SID,配置方式:jdbc:oracle:thin:@:/

  • 使用SID,配置方式:jdbc:oracle:thin:@::

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:@,可以配置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:@,可以配置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




文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/130034.html

相关文章

  • http

    摘要:响应行由协议,状态码,状态码的文本描述组成,他们之间使用空格隔开。状态码的文本描述状态码描述说明表示客户端请求成功。 简介 在1990年,HTTP就成为WWW的支撑协议。当时由其创始人WWW之父蒂姆·贝纳斯·李(TimBemers—Lee)提出,随后WWW联盟(WWW Consortium)成立,组织了IETE(Internet Engineering Task Force)小组进一步...

    rockswang 评论0 收藏0
  • http

    摘要:响应行由协议,状态码,状态码的文本描述组成,他们之间使用空格隔开。状态码的文本描述状态码描述说明表示客户端请求成功。 简介 在1990年,HTTP就成为WWW的支撑协议。当时由其创始人WWW之父蒂姆·贝纳斯·李(TimBemers—Lee)提出,随后WWW联盟(WWW Consortium)成立,组织了IETE(Internet Engineering Task Force)小组进一步...

    lijinke666 评论0 收藏0
  • 学Java编程需要注意的地方

    摘要:学编程真的不是一件容易的事不管你多喜欢或是多会编程,在学习和解决问题上总会碰到障碍。熟练掌握核心内容,特别是和多线程初步具备面向对象设计和编程的能力掌握基本的优化策略。   学Java编程真的不是一件容易的事,不管你多喜欢或是多会Java编程,在学习和解决问题上总会碰到障碍。工作的时间越久就越能明白这个道理。不过这倒是一个让人进步的机会,因为你要一直不断的学习才能很好的解决你面前的难题...

    leanxi 评论0 收藏0
  • 【负载均衡 ULB】常见问题指导

    摘要:的运行状态是指什么运行是指整个负载均衡的状态,只要后端服务器有一台存活,负载均衡还是运行状态。需注意的是,后端状态由负载均衡健康检查确定。轮询算法能否使所有服务节点请求数均衡负载均衡的轮询算法是针对连接的。ULB的会话保持是如何实现的?请求代理请求代理模式下(HTTP、HTTPS),会话保持功能是利用cookie实现的。ULB会向源端写cookie,并根据请求带有的cookie信息,直接将请...

    Tecode 评论0 收藏0
  • 离大厂近一点《阿里巴巴集团Web安全测试规范》独家版

    摘要:今天,我们就离大厂更近一点,共同学习阿里这份阿里巴巴集团安全测试规范阿里巴巴集团安全测试规范阿里巴巴集团安全测试规范背景简介为了规避安全风险规范代码的安全开发,以及如何系统的进行安全性测试,目前缺少相应的理论和方法支撑。 很多人都知道,在学校学的技术,初创公司的技术,外包公司的技术,自研公司...

    wudengzan 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<