本文由一木译编著
请您多指正!
[@more@]数据库和实例这两个术语放在ORACLE环境里,会引起很多误解。
在ORACLE术语中,它们的定义如下:
数据库:物理操作系统文件或磁盘的集合。当使用ORACLE10G的自动存储管理或裸设备分区时,数据库在操作系统上没有表现为单独分开的文件,但是定义还是一样的。
实例:ORACLE后台进程或线程及共享内存区域的集合,这些共享内存区域是在一台机器上跑的进程或线程间共享内存区域。
一个数据库实例可以离开磁盘存储空间而存在,尽管这个实例存对这个世界没有什么作用,但它的确可以离开数据库单独存在。经这样思考或许会帮你在数据库与实例间划一条清晰的界线。这两个术语在有时是可以替换的,但是它们包含的是不同实质和概念。它们之间的关系是一个数据库可以被多个实例挂载或打开。一个实例在任何时间内只能挂载或打开一个数据库。实际上,一个实例在它的生命周期里最多只能挂载或打开一个数据库。相关的概念还有实例名和数据库名。顾名思义实例名就是实例的名字,数据库名就是数据库的名字。有了上面的准备,理解这两个概念显得更简单了。在参数文件里都有之对应的设置。
打开一个参数文件,里面肯定有instance_name 和db_name(database_name简写)。在默认情况下,单节点的实例名和数据库名是一样的。所以很多人会因些有一些理解不清。其实它们之间并没有必然联系。当然数据库名在你创建一个数据库时就指定了(在这个数据库存在的时间内原则上没有改变必要,所以很多情况下数据库名是稳定不变的,除非你是想做测试或吃饱撑着了。因为更改数据库名操作相对麻烦对数据库影响比较大)而实例名你只要把数据库关掉后,在参数文件里想改成什么都没问题,并且对数据库没有任何影响。
数据库与实例两个不同概念你还不清晰吗?那么进一步的解释能帮助你理解这些概念。一个实例只是一些操作系统进程或单进程多线程及一些内存集合。这些进程能对一个数据库进行操作。一个数据库只是一个文件的集合。在任何一个时间点,一个实例只能有一个文件集合与之相关。但更多的情况下,反之亦然,一个数据库将只有一个实例为之工作,但是在一些特殊情况下,如RAC环境中,ORACLE允许RAC运行在集群环境中的多个计算机,同时我们有多个实例同时挂载或打开在共享磁盘上的同一个数据库。 RAC能使人们同时地通过不同计算机访问同一个数据库。ORACLE RAC完整提供了一个高可用环境和潜在的结构扩容解决方案。正如前面提到的哪样,在很多情况下,实例与数据库之间的关系是一对一的关系。这也许就是为什么这两个术语会引起误解原因。
在很多人经验里,一个数据库就是一个实例,一个实例就是一个数据库。在很多测试环境里,就不是这么个情况了。在我的机器上,我有五个不同数据库,但在任何一个时间点上,只能一个ORACLE实例在跑(因为测试环境对硬件资源消耗很大,当前硬件配置只够跑一个实例。如果你机器硬件配置很好的话或实例对硬件要求很小,只要硬件条件允许一台机器上也可以同时跑多个实例对应打开多个数据库)但是按照我的需要不同时间里访问的数据库可能是不同的。通过简单的拥有不同配置文件,我能挂载和打开其中的任何一个数据库。这里,我只有一个实例但是有很多数据库。但在任何时间点,所以数据库中只有一个数据库可以被访问,因为我只有一个实例。因为一个实例不能同时打开多个数据库。
所以现在当有人讨论实例时,你应该知道他的意思是指ORACLE的进程及内存。当他们提到数据库时,他们是指包含数据的物理文件。一个数据库可以被多个实例访问,但在某一个时间点上一个实例只能为你提供对一个数据库的访问。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7248175/viewspace-999503/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/7248175/viewspace-999503/