Oracle数据库中有这么几个概念:
数据库名(DB_NAME ),数据库实例名(INSTANCE_NAME),操作系统环境变量(ORACLE_SID),数据库服务名(SERVICE_NAME),数据库域名(DB_DOMAIN),全局数据库名(GLOBAL_NAME)。
你也许认为为什么会有这么多个名字呢,多麻烦啊,别着急,下面就来看看他们到底是怎么一回事:
数据库名(DB_NAME):是用于区分一个数据的内部标示,即Oracle数据库的内部表示。它是以二进制方式存储存储于数据库的控制文件的参数。在数据库安装或创建之后不得修改(其实是可以修改的,不过麻烦点),这个参数被写入pfile中 。
可以从形如 “D:\app\Carlos\admin\orcl\pfile”的文件夹中找到:
###########################################
# Database Identification
###########################################
db_domain=""
db_name=orcl
数据库实例名(INSTANCE_NAME):实例名用于和操作系统关联,在操作系统中要取得与数据库之间的交互必须使用数据库实例名。数据库名一般与实例名是一一对应的。但在Oracle的并行服务结构中却不是,数据库与实例是一对多的关系。
INSTANCE_NAME
----------------
orcl
操作系统环境变量(ORACLE_SID):操作系统环境变量(ORACLE_SID)与instance_name的关系:instance_name是Oracle的数据库参数,而oracle_sid则是操作系统的环境变量,用户和操作系统交互,也就是说要得到实例名,必须使用sid。在数据库安装结束时,oracle_sid已经是一个确定的字符串了,其值必须与数据库实例名相同。
数据库域名(DB_DOMAIN):在Oracle10g中db_domain表示域名,那么数据库域名是什么时候确定的呢?与数据库名,数据库实例名一样数据库域名在安装数据库时候已经确定。在确定数据库名时如果输入orcl则表示该数据库。如果输入orcl.carlos.net。后面的carlos.net则表示域名。
SQL> select value from v$parameter
2 where name = 'db_domain';
VALUE
--------------------------------------------------------------------------------
SQL> show parameter domain;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_domain string
没有值,表示我没有域名。
全局数据库名:则表示数据库名和域名的总和。如果没有域名那么,全局数据库名就是数据库名相同。
数据库服务名:它是从9I,10G开始引入的参数。用service_names表示。数据库服务名与全局数据库名相同。
SQL> show parameter service_name;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
service_names string orcl
总结:数据库实例名(INSTANCE_NAME),操作系统环境变量(ORACLE_SID)相同且与操作系统服务相关,
数据库名(DB_NAME)加上 数据库域名(DB_DOMAIN)就是 全局数据库名,也是 数据库服务名。