Oracle中Basic与TNS的区别及与Oracle三种连接方式的关系

Oracle JDBC连接一共有三种方式,分别是:SERVICE_NAME、SID和TNSName。

1.SERVICE_NAME方式:jdbc:oracle:thin:@//<host>:<port>/<SERVICE_NAME>  

2.SID连接方式:jdbc:oracle:thin:@<host>:<port>:<SID> 
                    或:jdbc:oracle:thin:@<host>:<port>/<SID>

3.TNSName连接方式:jdbc:oracle:thin:@<TNSName>

打开oracle路径下的D:oraclexeapporacleproduct11.2.0server etworkADMIN nsames.ora文件

红线框内的db25就是TNSName,是属于客户端的参数,其余内容都是服务端的参数。

SERVICE_NAME和SID的比较:
    SID是对内的,是实例级别的一个名字,用来内部之间称呼用。
    SERVICE_NAME是对外的,是数据库级别的一个名字,用来告诉外面的人,我数据库叫"SERVICE_NAME"。

访问数据库的过程:
要想访问数据库,必须把数据库文件加载进实例中。SID即INSTANCE_NAME是用来唯一标示实例的。SERVICE_NAME是oracle8i新引进的,8i之前,一个数据库只能由一个实例对应,但是随着高性能的需求,并行技术的使用,一个数据库可以由多个实例对应了,比较典型的应用如RAC。为了充分利用所有实例,并且令客户端连接配置简单,ORACLE提出了SERVICE_NAME的概念,该参数直接对应数据库,而不是某个实例。自此Oracle JDBC连接多使用SERVICE_NAME方式连接,逐渐替代SID方式连接。

===========================================================

oracle连接是TNSName格式,之前没有见过这样的格式,于是研究了下。
首先附上oracle连接:
(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.32)(PORT = 1551)) (CONNECT_DATA = (SERVER = CWDB) (SERVICE_NAME = CWDB) ) )

然后百度了下这种连接方式,发现Oracle其实是有三种连接方式的,感谢这位博主的文章:
https://blog.csdn.net/u012062455/article/details/52442838

然后尝试用Navicat 12.1连接数据库,发现一些连接参数看不懂。百度了下没找到类似的问题解答,下面说下自己的感悟吧,不一定对,不对的地方希望大神帮忙改正:

1:连接类型。
这里连接类型有两种:Basic和TNS两种。
我的理解是。Basic是基础的连接类型,可以支持SID和ServiceName两种连接方式连接Oracle,
TNS支持用TNSName的方式连接Oracle。
测试用连接类型改为TNS,参数改为上面的,可以连接成功:

TNS网络服务名其实可以读取文件中的几个服务,选中就可以如下:)

2.服务名和SID
服务名对应ServiceName的连接方式,SID对应的是SID的连接方式。只要将对应的service_name和sid输入即可。(此处没有测试。)

另Navicat12.1有时候会因为和oracle版本不一样连接不上,需要修改这里的配置:
工具—选项—环境:

这个网上很多,可以多备用几个。更改完需要重启。

转 : https://blog.csdn.net/qq_40391559/article/details/87936681

https://blog.csdn.net/qq_39688195/article/details/103579926

原文地址:https://www.cnblogs.com/fps2tao/p/14059678.html