打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Oracle Database与Oracle Instance
变量ORACLE_SID到底是什么,它跟instance有什么区别?

该问题有深度。
SID主要用于区分同一台计算机上的同一个数据库的不同实例。
oarcle数据库服务器主要有两部分组成:物理数据库和数据库管理系统
数据库管理系统是用户和物理数据库之间的一个中间层,是软件层。这个软件层具有一定的结构,这个结构又被称为例程结构。
在启动数据库时,oracle首先要在内存中获取、划分、保留各种用途的区域,运行各种用途的后台进程,即创建一个例程(instance),然后由该例程装载、打开数据库,最后由这个例程来访问和控制数据库的各种物理结构。
在启动数据库并使用数据库的时候,实际上是连接到该数据库的例程,通过例程来连接、使用数据库。所以例程是用户和数据库之间的一个中间层。
例程是由操作系统的内存结构和一系列进程所组成的,可以启动和关闭。
一台计算机上可以创建多个oracle数据库,当同时要使用这些数据库时,就要创建多个例程。为了不使这些例程相互混淆,每个例程都要用称为SID的符号来区分,即创建这些数据库时填写的数据库SID。

一个server可以安装多个database,每个database对应一个instance.
database与instance是一对一的关系.
database是物理文件的集合,而instance是内存区的集合.

在RAC环境下,一个database对应多个instance.一个instance只能对应一个database.

    1.2.5 INSTANCE_NAME的含义及作用

    作为Oracle数据库的重要组成部分INSTANCE也存在一个参数标示:INSTANCE_NAME。
    INSTANCE_NAME是Oracle数据库的一个参数,在参数文件中定义,用于标示数据库实例的名称,其缺省值通常就是ORACLE_SID,但是不同的实例可以有相同的实例名。通过简单的参数文件复制,我们就可以在同一台服务器上创建多个具有相同instance_name的实例。

    首先确认当前的参数文件:

    bash-2.03$ cd $ORACLE_HOME/dbs
    bash-2.03$ ls initeygle.ora 
    initeygle.ora

     

    复制参数文件,更改名称:

    bash-2.03$ cp initeygle.ora initjulia.ora

     

    接下来通过导入新的ORACLE_SID我们就可以启动新的实例:

    bash-2.03$ export ORACLE_SID=julia
    bash-2.03$ sqlplus "/ as sysdba"
    SQL*Plus: Release 9.2.0.4.0 - Production on Fri Feb 16 10:34:00 2007
    Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
    Connected to an idle instance.

     

    SQL> startup nomount;
    ORACLE instance started.

    Total System Global Area 303532408 bytes
    Fixed Size 731512 bytes
    Variable Size 184549376 bytes
    Database Buffers 117440512 bytes
    Redo Buffers 811008 bytes

     

    现在ORACLE_SID为julia的实例已经启动,操作系统上的进程以julia名称标记:

    bash-2.03$ ps -ef|grep pmon
    oracle 12396 1 0 16:30 ? 00:00:00 ora_pmon_julia
    oracle 16201 1 0 18:13 ? 00:00:00 ora_pmon_eygle
    oracle 16256 16219 0 18:14 pts/1 00:00:00 grep pmon

     

    但是新实例的instance_name仍然是eygle:

    SQL> show parameter instance_name
    NAME TYPE VALUE
    ------------------------------------ ---------------------- -----------------------
    instance_name string eygle

     

    总结一下,ORACLE_SID在这里用于标示进程,而instance_name则用来标示实例,两者可以具有不同的名称

    此外Oracle的监听器(listener)配置文件中的SID_NAME就是来自instance_name参数,监听器通过instance_name才能确定需要将连接请求注册到哪一个实例上。通常listener.ora文件中SID_NAME相关设置类似如下示例:

    SID_LIST_LISTENER =
    (SID_DESC =
    (GLOBAL_DBNAME = eygle)
    (ORACLE_HOME = /opt/oracle/product/9.2.0)
    (SID_NAME = eygle) 
    )
 

一般来说,Oracle Database与Oracle Instance一一对应,一个Oracle Database对应一个Oracle Instance。

  但在Oracle的并行环境(OPS , RAC)中,一个Oracle Database可对应多个Oracle Instance。

  我们通常所说的一个可以访问的数据库实际上有三部分组成:

  1.Oracle Software:一般存在本机硬盘上。由oracle的软件程序构成。

  2.Oracle Instance:启动数据库后存在,关闭数据库后消失。是oracle使用的内存结构与后台进程的集合。

  3.Oracle Database:存在本机硬盘上,或存储设备上。由oracle数据文件构成。


在实际的开发应用中,关于Oracle数据库,经常听见有人说建立一个数据库,建立一个Instance,启动一个Instance之类的话。 其实问他们什么是数据库,什么是Instance,很可能他们给的答案就是数据库就是Instance,Instance就是数据库啊,没有什么区别。在这里,只能说虽然他们Oracle用了可能有了一定的经验,不过基础的概念还是不太清楚。

  什么是数据库,其实很简单,数据库就是存储数据的一种媒介。比如常用的文件就是一种,在Oracle10G中,数据的存储有好几种。第一种是文件形式,也就是在你的磁盘中创建一批文件,然后在这些文件中存储信息。第二种就是磁盘阵列形式,这个是什么意思呢,这个就是说明数据库不是存放为某个文件,而是把一个或者多个磁盘格式化成Oracle的一种格式了,等于整个磁盘就是存放Oracle数据库的,不能作为别的用途。这样的优点是存储性能高,因为不再借助别的文件格式了,而是把整个磁盘都成为Oracle最适应的文件系统格式。当然还可能有别的形式,比如网络什么的。不过我们最常用的还是文件格式的,在文件格式中,数据库指的就是那些数据文件,控制文件以及REDO文件等等一系列文件。

  而什么是Instance呢,Instance其实就是指的操作系统中一系列的进程以及为这些进程所分配的内存块。在Oracle中,我们可以新建一个Oracle的Instance,这个时候虽然有了进程还有SGA等一系列的内存快,但是这个时候并没有把数据库文件读取进来。所以只是一个实例,在后来,你可以通过命令手动或者自动地把数据库文件加载进我们的数据库Instance中,这个时候的数据库才可以让我们真正的开始访问操作。

  所以说,数据库的应用如果想实现,数据库和数据库Instance是缺一不可的,如果只有数据库的那些文件,那么,只能代表数据在这个文件中,但是我们无法直接进行操作。而如果只有数据库Instance,那么我们虽然可以急性操作,但是也不知道操作哪些数据,操作生成的数据也无法保存等等。所以,当一个Oracle Instance真正Load了一个Oracle Database了以后,数据库才可以被我们使用。

  在这里要注意一点的是,Oracle的实例在启动以后,只能load一次数据库,如果想把数据库与Instance断开,然后再重新挂在(一个数据库Instance,那么就需要你首先把数据库Instance进程结束,然后重新建立这个instanc的一个进程,再load另外一个数据库。否则肯定要抛除ORA-16169错误,说数据库已经被打开。因为一个数据库Instance在其生存期中最多只能load和打开一个instance。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Oracle学习笔记(3)创建数据库
搞清概念:db_name,instance_name,ORACLE_SID,db_doma...
Oracle知识点总结二
Oracle的体系结构之基本概念(一)
Oracle数据库的启动
Oracle数据库的启动与关闭
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服