ORACLE中SID和SERVICE_NAME的区别

定义

  实例(SID)是操作系统中访问数据库所需要的一系列的进程和内存的集合。即使没有任何数据文件,实 例也可以启动。但是要想访问数据库,必须把数据库文件加载进实例中。实例和数据库的区别可以简单概括为:实例是临时的,它只在相关的进程和内存集合存在时 存在,而数据库是永久的,只要文件存在它就存在。一个实例只能对应一个数据库,但是一个数据库可以由多个实例对应(如RAC)。RAC就是多个实例同时打开一个数据库文件的系统,在结构上是多台机器,每台机器运行一个实例,每个实例都打开同一个数据库 (这个是用磁盘共享技术实现的),这些实例之间需要同步高速缓存,这样保证多个实例是完全一致的,不会相互冲突乃至覆盖。

  SERVER_NAME参数是由oracle8i开始引进的。在8i以前,使用SID来表示标识数据库的一个实例,但是在Oracle的并行环境中,一个 数据库对应多个实例,这样就需要多个网络服务名,设置繁琐。为了方便并行环境中的设置,引进了Service_name参数,该参数对应一个数据库,而不 是一个实例,而且该参数有许多其它的好处。该参数的缺省值为Db_name. Db_domain,即等于Global_name。一个数据库可以对应多个Service_name,以便实现更灵活的配置。该参数与SID没有直接关 系,即不必Service name 必须与SID一样,而sid是数据库实例的名字,每个实例各不相同。

JDBC连接配置

  1. 使用service_name,配置方式:jdbc:oracle:thin:@//<host>:<port>/<service_name>
  2. 使用SID,配置方式:jdbc:oracle:thin:@<host>:<port>/<SID> 
  3. 使用SID,配置方式:jdbc:oracle:thin:@<host>:<port>:<SID> 

鉴于以上情况,建议使用第一种连接字符串

原文地址:https://www.cnblogs.com/zhuitian/p/11530694.html