Oracle容易混淆的几个概念

       Oracle的几个术语:数据库、数据库实例、SID、ORACLE_SID,比较迷惑人,下面分别解释一下:

 

数据库:数据库就是能看到的物理文件,一个Oracle可以安装多个数据库。例如在安装Oracle时候创建了数据库orcl,那么在Oracle的安装目录里oradata文件夹就会有目录“orcl”。

数据库名:就是数据库的名称标识,如orcl, 这种只适用于单机。数据库处于一个网络中的名称标识是全局数据库名。比如数据库宿主机的域为service1, 那么数据库的全局数据库名为orcl.service1;

查询当前数据名

方法一:select name from v$database;

方法二:show parameter db

数据库实例:客户端是通过数据库实例与数据库交互的,实例是访问Oracle数据库时计算机内存和后台进程。其实实例不需要一个与其相关联的数据库,没有任何数据文件也可以启动实例。在非并行服务器结构,每个Oracle数据库都会有一个数据库实例与其对应,但在oracle并行服务器架构(即oracle实时应用集群)中,数据库名和实例名是一对多的关系。

SID:数据库实例的唯一标示,通常情况下,SID等于数据库实例名。

查询当前数据库实例名

方法一:select instance_name from v$instance;

方法二:show parameter instance

ORACLE_SID:是操作系统环境变量,是可以修改的。用SQL Plus登录数据库时,如果不指定数据库实例就会使用ORACLE_SID指向的数据库实例进行连接。

数据库服务名:该参数是oracle8i引进的。在8i以前,我们用SID来表示数据库的一个实例,但是在Oracle的并行环境中,一个数据库对应多个实例,这样就需要多网络服务名,设置繁琐。为了方便并行环境中的设置,引进了service_name参数。该参数对应一个数据库,而不是一个实例。该参数的缺省值为db_name.db_domain,即等于global_name.如果数据库有域名,则数据库服务名就是全局数据库名;否则,数据库 服务名与数据库名相同。一个数据库可以对应多个service_name,以便实现更灵活的配置。该参数与SID没有直接关系,即 service_name 不必与SID一样。从Oracle8i开始的oracle网络组件,数据库与客户端连接的主机字符串使用的是数据库服务名。之前用的是SID,即数据库实例名。

查询数据库服务名

方法一:select value from v$parameter where name = 'service_name';

方法二:show parameter service_name

一般情况下我们开发中用到的数据库是单数据库实例,就是oracle中只有一个库。这个时候大部分都有:

 数据库服务名 = 全局数据库名 = 数据库名[+ 数据库域名] = SID

你可能感兴趣的:(oracle)