Oracle中实例(Instance)和数据库(database)的区别

在实际的开发应用中,关于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进程结束,然后重新建立这个instance的一个进程,再load另外一个数据库。否则肯定要抛除ORA-16169错误,说数据库已经被打开。因为一个数据库Instance在其生存期中最多只能load和打开一个instance.

1、实例和SID的关系是什么?
经常有人问SID 是什么?在Oracle 系统中SID 是一个经常出现的变量,如环境变量ORACLE_SID,初始化文件initSID.ora,那究竟什么是SID 呢?其实SID 就是Oracle 实例的标识,不同的SID 对应不同的内存缓冲(SGA)和不同的后台进程。这样一来我们就可以得当在一台物理的服务器上可以有多个SID 的数据库实例。
2、Oracle数据库和实例的关系是什么?
数据库是由物理文件和存取数据文件的实例组成,当存取数据文件的实例是一个的时候,数据库被称做单节点数据库。这是我们看到的最多的数据库形式。当然还有一种多节点数据库,就是一个以上的实例共同访问一个数据库(或者说共同访问一组数据文件),更好的提供稳定性和并行处理能力。这在8i中被称为OPS(Oracle Parallel Server ),在Oracle9i 中被称为RAC(real application cluster)。在这种数据库中。两个/多个实例分别在不同服务器上,所有Oracle 数据文件在共享的磁盘阵列上,多个服务器上的实例可以同时工作,他们通过一个内部的网络进行通信。如果一台服务器不能提供服务的话,另一台会接管它的工作,特别是在关键的业务有很大的潜力。
这里,我们了解了实例和数据库的关系,一个数据库可以有多个实例,但是一个实例却不可能对应多个数据库,在一般的情况下,我们都是用的单节点数据库,即一个实例仅仅对应一个数据库。

好多人学了很长时间的数据库了,但实例(例程)和数据库经常搞昏.这个可能是学院教育的后遗症吧.
首先说说,数据库是做什么?数据库是用来长久存储数据的,而我们大家都知道内存只能临时存储,磁盘等才能真正存储数据.那你说数据库会放那里呢?肯定是存放在磁盘上,其实数据库就是磁盘上的一个文件.
从上面我们得出结论:数据库==磁盘上的文件.
既然数据库可以看成磁盘上文件,我们怎么使用数据库呢?
如果说我们可以直接使用数据库,那就等价与直接使用磁盘上的文件.我们知道这样的一个常识:必须把磁盘上的文件读入内存才能使用.这就与我们以前所知道的一个常识相违背了。那正确的流程是不是应该这样呢?把磁盘上文件先读入内存,然后再使用呢。对了,这个才是使用数据库的正确流程。

数据库如何读入内存呢?
这个时候,就是我们要介绍的instance(实例)了.实例就是内存结构和一组后台进程.实际上,正常的数据库读入内存的过程是,由实例中一组后台进程从磁盘上将数据文件读入到实例的内存中,然后经过在内存中对数据的操作再从实例的内存中经过一组后台进程写到数据库中.
那实例相对与数据库而言,应该就是数据库的运行环境(随不准确但也很贴切).
我们知道了instance和database的区别后.下面我们做一个Oracle的例子,一块深刻的理解下这两个概念.在Oracle中打开一个数据库,这个时候我们要使用sqlplus了.sqlplus是oracle的一个连接工具,相当于sql server中的查询分析器.
使用用户名:system
密码:manger(自己在装Oracle时设定的)
点登录进入sqlplus.
登录sqlplus以后,system这个用户是没有权限启动实例的,所以我们这时要更换登录用户.
使用sys用户连接的命令如下 :
conn sys as dba
密码:
输入完后.可以再输入如下命令查看当前用户:
show user;
一:下面就可以打开数据库了
1.启动实例(instance)
startup nomount
2.将数据库装载到实例(instance)中
alter database mount
3.打开数据库
alter database open
二:关闭数据库:
1.shutdown immediate(包括三个步骤如下所述:)
首先关闭数据库
然后从实例上卸载数据库
最后关闭实例
通过Oracle打开以及关闭一个数据库的例子我们可以清楚的区分.数据库(database)和实例(instance)的概念.

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值