java应用通过jdbc连接数据库jdbc的串的3种写法:

1、通过service_name连接的串写法:jdbc:oracle:thin:@192.168.0.214:1521/db

或jdbc:oracle:thin:@//:/

如果service_name输入错误,报错信息如下:

javax.servlet.ServletException: java.sql.SQLException: Listener refused the connection with the following error:
ORA-12514, TNS:listener does not currently know of service requested in connect descriptor

测试运行Java 类,报错:

java.sql.SQLException: The Network Adapter could not establish the connection

 

可以尝试更换对应的 jdbc connection driver,官网的说明如下:

 

JDBC Thin Driver 11g Causes"Java.Sql.Sqlexception: Io Exception: The Network Adapter Could NotEstablish The Connection" While Connecting to Oracle Database 11g [ID947653.1]

 

Change the JDBC connection driver class inyour application server from:

oracle.jdbc.driver.OracleDriver

to

oracle.jdbc.OracleDriver

 

2、通过SID连接的串的写法:

jdbc:oracle:thin:@192.168.0.30:1521:db

jdbc:oracle:thin:@:: 

如果SID输入错误,报错信息如下:

javax.servlet.ServletException: java.sql.SQLException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor

3、使用tnsname

jdbc:oracle:thin:@

 

填写完全也可:

jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.3)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=db)))

 

连接rac集群,最好使用service_name连接:jdbc:oracle:thin:@scan-name:1521/db(scan_ip是写死在hosts文件中,如果使用dns服务器不知是否可以正常连接?),也可以实现分发的功能

针对DG切换问题,如果不考虑IP问题,建议在备库增加一个service_name,值与主库一致:alter system set service_names=sdb,db scope=both;增加后即可以保证主备有相同的service_name可以进行连接。

 

Db_name:对一个数据库的唯一标识,db_name最多8个字符。

Db_domain:定义一个数据库所在的域,是数据库管理员为了更好的管理分布式数据库而根据实际情况决定的,为了方便管理,可以将其等于互联网的域。

Global_name:对一个数据库的唯一标识,oracle建议使用此种方法命名数据库,该值是在创建数据库时决定的,缺省值为db_name.db_domain,在以后对参数文件中db_name与db_domain参数的任何修改均不影响global_name的值,如果要修改global_name,只能使用alter database rename golbal_name to 命令进行修改,然后修改相应参数。 

Service_name:该参数是8i后引进的,在之前,使用SID来标识数据库的一个实例,但是在rac环境中,一个数据库对应多个实例,设置比较反锁,因此引进了service_name参数,该参数对应一个数据库,而不是一个实例,缺省值为db_name.db_domain,即等于global_name,一个数据库可以对应多个service_name,以便实现灵活的配置,可以与SID不相同。

SID、instance_name:实例名称,用来区分不同的实例,在10G之后instance_name的值是动态从系统中获得,默认是取自ORACLE_SID,instance_name除了用来区分不同实例之外,在监听器动态注册时,还会用于向监听器注册。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28258625/viewspace-1442757/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/28258625/viewspace-1442757/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值