• 数据库名与SID如下图所示,在没有数据库域名时,全局数据库名与数据库名为同一个值
  • 查询数据库名称SQL:
SELECT NAME FROM V$DATABASE;
  • 查询数据库当前实例名:
 SELECT INSTANCE_NAME FROM V$INSTANCE;

数据库名
数据库名是存储在控制文件中的名称,它代表的是数据库,也就是数据库包含的所有的物理文件的总称。

服务名
SERVICE_NAME指的是listener中的全局数据库名:这个名字是由listener.ora中GLOBAL_DBNAME参数决定的。SERVICE_NAME是Oracle8i新引进的,8i之前一个数据库只能有一个实例。8i之后一个数据库可以对应多个实例,例如RAC。为了充分利用所有实例,并且令客户端连接配置简单,ORACLE提出了SERVICE_NAME的概念。该参数直接对应数据库,而不是某个实例。

实例名
用于响应某个数据库操作的数据库管理系统的名称。实例名是由初始化参数文件的参数instance_name决定的。如果这个参数不被指定(即instance_name没有被指定为任何值),那么实例的名字由该用户的环境变量ORACLE_SID(注意这里是大写)决定。一个数据库可以有多个实例,例如RAC,实例名(SID)用于标识数据库内的每一个实例的名称


通俗地讲,SID是对内的,是实例级别的一个名字,用来内部之间称呼用。SERVICE_NAME是对外的,是数据库级别的一个名字,用来告诉外面的人!

  • JDBC连接数据库的三种方式:
格式一:jdbc:oracle:thin:@//<host>:<port>/<service_name>
通过SERVICE_NAME连接Oracle数据库,适合于单实例和多实例数据库
格式二:jdbc:oracle:thin:@<host>:<port>:<SID> 
通过实例名连接数据库,RAC环境下实例名不唯一,不能充分利用数据库资源
格式三:jdbc:oracle:thin:@<TNSNAME> 
通过本地配置的TNSNAME

以上三种方式常用一和三!

更多推荐

Oracle数据库名、实例名、服务名之间的区别与联系