数据库与实例
首先,数据库是什么?
数据库的作用是长久存储数据,而内存只能临时存储,磁盘等才能真正存储数据。其实数据库就是磁盘上的一系列物理文件。
例如MySQL数据库,就是由一些列物理文件组成,如:frm、MYD、MYI、ibd等结尾的文件。
然后我们得纠正一个概念,我们平常说的数据库,如Oracle或Oracle数据库,指的其实是Oracle数据库管理系统,
而Oracle数据库管理系统,指的是管理数据库访问的计算机软件,它由Oracle数据库和Oracle实例(instance)构成。
那么我们如何使用数据库呢,即如何操作磁盘里的一系列文件?
我们知道这样的一个常识:必须把磁盘上的文件读入内存才能使用。
那正确的流程就是把磁盘上文件先读入内存,然后使用。
实际上,正常的数据库读入内存的过程是,由实例中一组后台进程从磁盘上将数据文件读入到实例的内存中,然后经过在内存中对数据的操作再从实例的内存中经过一组后台进程写到数据库中。
接着上面说什么是实例?
实例是位于物理内存里的数据结构,由线程和内存池组成,实例才是真正用于操作数据库文件的(即前面说的一系列文件);
如Oracle实例: 位于物理内存里的数据结构,它由操作系统的多个后台进程和一个共享的内存池所组成,共享的内存池可以被所有进程访问。
用户如果要存取数据库里的数据, 必须通过Oracle实例才能实现,而不能直接读取硬盘上的文件。
备注:其实Oracle实例也即是平常所说的数据库服务(service)
实例相对与数据库而言,可以理解为是数据库的运行环境(不准确但也还算贴切)。
实例与数据库
Oracle
数据库与实例之间是 1对1或1/n 的关系,即实例只能对于一个数据库,而一个数据库能有对个实例:
在非并行的数据库系统中每个Oracle数据库与一个实例相对应;
在并行的数据库系统中,一个数据库会对应多个实例,同一时间用户只与一个实例相联系,当某一个实例出现故障时,其他实例自动服务,保证数据库正常运行。
mysql
一般情况下一个实例操作一个或多个数据库;集群情况下多个实例操作一个或多个数据库。
--------------------------------------------------------------------------------------------------