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

Oracle中的Instance实例和数据库的区别,第1张

Oracle中Instance实例数据库的区别

什么是数据库,其实很简单,数据库就是存储数据的一种媒介。比如常用的文件就是一种,在Oracle10G

中,数据的存储有好几种。第一种是文件形式,也就是在你的磁盘中创建一批文件,然后在这些文件中存储信息。第二种就是磁盘阵列形式,这个是什么意思呢,这

个就是说明数据库不是存放为某个文件,而是把一个或者多个磁盘格式化成Oracle的一种格式了,等于整个磁盘就是存放Oracle数据库的,不能作为别

的用途。

www.2cto.com

这样的优点是存储性能高,因为不再借助别的文件格式了,而是把整个磁盘都成为Oracle最适应的文件系统格式。当然还可能有别的形式,比如网络什么的。不过我们最常用的还是文件格式的,在文件格式中,数据库指的就是那些数据文件,控制文件以及REDO文件等等一系列文件。

而什么是Instance呢,Instance其实就是指的 *** 作系统中一系列的进程以及为这些进程所分配的内存块。在Oracle中,我们

可以新建一个Oracle的Instance,这个时候虽然有了进程还有SGA等一系列的内存快,但是这个时候并没有把数据库文件读取进来。所以只是一个

实例,在后来,你可以通过命令手动或者自动地把数据库文件加载进我们的数据库Instance中,这个时候的数据库才可以让我们真正的开始访问 *** 作。

www.2cto.com

所以说,数据库的应用如果想实现,数据库和数据库Instance是缺一不可的,如果只有数据库的那些文件,那么,只能代表数据在这个文件

中,但是我们无法直接进行 *** 作。而如果只有数据库Instance,那么我们虽然可以急性 *** 作,但是也不知道 *** 作哪些数据, *** 作生成的数据也无法保存等

等。所以,当一个Oracle Instance真正Load了一个Oracle Database了以后,数据库才可以被我们使用。

在这里要注意一点的是,Oracle的实例在启动以后,只能load一次数据库,如果想把数据库与Instance断开,然后再重新挂在一

个数据库Instance,那么就需要你首先把数据库Instance进程结束,然后重新建立这个instance的一个进程,再load另外一个数据

库。否则肯定要抛除ORA-16169错误,说数据库已经被打开。因为一个数据库Instance在其生存期中最多只能load和打开一个

instance。

ORACLE实例 = 进程 + 进程所使用的内存(SGA)

实例是一个临时性的东西,你也可以认为它代表了数据库某一时刻的状态!

数据库 = 重做文件 + 控制文件 + 数据文件 + 临时文件

数据库是永久的,是一个文件的集合。

ORACLE实例和数据库之间的关系

1.

临时性和永久性

2.

实例可以在没有数据文件的情况下单独启动 startup nomount , 通常没什么意义

3.

一个实例在其生存期内只能装载(alter database mount)和打开(alter database open)一个数据库

4.

一个数据库可被许多实例同时装载和打开(即RAC),RAC环境中实例的作用能够得到充分的体现!

下面对实例和数据库做详细的诠释:

在Oracle领域中有两个词很容易混淆,这就是“实例”(instance)和“数据库”(database)。作为Oracle术语,这两个词的定义如下:

q

数据库(database):物理 *** 作系统文件或磁盘(disk)的集合。使用Oracle 10g的自动存储管理(Automatic Storage Management,ASM)或RAW分区时,数据库可能不作为 *** 作系统中单独的文件,但定义仍然不变。

q

实例(instance):一组Oracle后台进程/线程以及一个共享内存区,这些内存由同一个计算机上运行的线程/进程所共享。这里可以维

护易失的、非持久性内容(有些可以刷新输出到磁盘)。就算没有磁盘存储,数据库实例也能存在。也许实例不能算是世界上最有用的事物,不过你完全可以把它想

成是最有用的事物,这有助于对实例和数据库划清界线。

这两个词有时可互换使用,不过二者的概念完全不同。实例和数据库之间的关系是:数据库可以由多个实例装载和打开,而实例可以在任何时间点装载和打开一个数据库。实际上,准确地讲,实例在其整个生存期中最多能装载和打开一个数据库!稍后就会介绍这样的一个例子。

是不是更糊涂了?我们还会做进一步的解释,应该能帮助你搞清楚这些概念。实例就是一组 *** 作系统进程(或者是一个多线程的进程)以及一些内存。这

些进程可以 *** 作数据库;而数据库只是一个文件集合(包括数据文件、临时文件、重做日志文件和控制文件)。在任何时刻,一个实例只能有一组相关的文件(与一

个数据库关联)。大多数情况下,反过来也成立:一个数据库上只有一个实例对其进行 *** 作。不过,Oracle的真正应用集群(Real

Application

Clusters,RAC)是一个例外,这是Oracle提供的一个选项,允许在集群环境中的多台计算机上 *** 作,这样就可以有多台实例同时装载并打开一个

数据库(位于一组共享物理磁盘上)。由此,我们可以同时从多台不同的计算机访问这个数据库。Oracle

RAC能支持高度可用的系统,可用于构建可扩缩性极好的解决方案。

数据库软件是一个数据库软件,就好像你的word,你安装的word,你能说你有文档了么?明显不能,只是你能够建立文档了。数据库软件就相当于word软件。

实例,指的是内存和具体的内容。还是用word举例,你利用word软件,新建立了一个word文档,这个word文档就是一个实例。有一部分内存被分配给这个word文档进行工作,就算你没有在上面写字,那么这个word文档也是一个实例,因为它存在。而后面的表空间(tablespace),数据文件(datafile),控制文件(controlfile),表(table)你可以认为都是数据这个实例的。

如果你在建立一个新word文档,那么这个新word文档,和上面你建立的这个word文档无关,因为两个文档确实没什么关系。当然不排除dblink,相当于word中的引用,不是完全一样,可是大概可以这样理解。

至于你的具体数据,就是你在word中书写的字。

一般情况下,这里这样理解,虽然有那么点不同,可是这么立即一般应用是没有问题的。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6465637.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-22
下一篇 2023-03-22

发表评论

登录后才能评论

评论列表(0条)

保存