# re: oracle 中关于 SID db_name、instance_name (转) 回复 更多评论
2008-09-24 14:51 by
1个机器上可以同时运行2个相同sid的数据库实例, 但是这两个实例不能使用同一个ORACLE_HOME, 因为oracle使用sid和ORACLE_HOME的组合来标示一个运行中的实例.
2 操作系统环境变量ORACLE_SID一般情况下和初始化参数instance_name保持一致, 如果不设置instance_name, 则他的值为ORACLE_SID, 但是也可以不一致, oracle向listener注册时使用的是instance_name.
3 java的jdbc连接的时候,使用的是instance_name, 因为jdbc要通过listener 连接的数据库, 而listener只知道instance_name.
4 listener会监听主机上的一个端口, 除非做特殊的配置, 否则他不会主动的监听任何实例. 实例启动后会向本地的1521或者locale_listener中配置的地址注册service, 而注册的依据就是instance_name, 当listener收到要求连接到特定service或instance_name的请求后, 就把这个请求转给注册这个service或instance_name的实例, 然后这个实例启动特定的进程为这个连接服务. 整个过程中不涉及ORACLE_SID环境变量.
5 访问数据库通过service或者instance_name, 不需要db_name, db_name用来唯一标示数据库, 和访问无关.
通常情况下, ORACLE_SID和instance_name是一致的, 所以这两者常常会被不加区分的使用.