很多人还是困惑,下面再次尝试从几个不同角度区分一下: Oracle_SID / db_name, instance_name, service_names / service_name, sid / sid_name
- JDBC 连接
jdbc:oracle:thin:@//<host>:<port>/<service_name>
jdbc:oracle:thin:@<host>:<port>:<SID>
注意红色的 : / 区别;后面会介绍 SID / service_name
- 存在地方
Oracle_SID - OS 环境变量
db_name instance_name service_names - init 或者 spfile
service_name, sid - tnsnames.ora
SID_NAME - listener.ora
- db_name instance_name service_names
db_name - 安装时候库的名字
instance_name - 运行实例名,用在 jdbc 里面的 sid, listener.ora 里面的 sid_name,或者 tnsnames.ora 里面的 sid
service_name - 用在tnsnames.ora 里面,表示 listener 对外服务名,可以是 instance_name, service_names
service_names - instance 别名, RAC 中可以表示多个 instance
- listener 对外服务名
listener启动时候根据 listener.ora 配置的信息静态注册可用的服务(SID_NAME),同时数据库实例启动以后(PMON)会把 service_names,db_name 的值动态的注册到Listener。
准确的值通过 listener status 查看;个人建议非常仔细阅读并理解命令的输出。
- tnsnames.ora
里面的 service_name 任何一个 service_names 里面的值
如果使用 sid,是 instance_name - 不推荐使用 sid 了。