数据库与实例的关系
Reference
[1] https://www.jianshu.com/p/45e30f510b77
首先说说,数据库是做什么?
数据库是用来长久存储数据的,而我们大家都知道内存只能临时存储,磁盘等才能真正存储数据.那你说数据库会放那里呢?肯定是存放在磁盘上,其实数据库就是磁盘上的一个文件。
从上面我们得出结论:数据库==磁盘上的文件.
既然数据库可以看成磁盘上文件,我们怎么使用数据库呢?
如果说我们可以直接使用数据库,那就等价与直接使用磁盘上的文件.我们知道这样的一个常识:必须把磁盘上的文件读入内存才能使用.
那正确的流程是不是应该这样呢?把磁盘上文件先读入内存,然后再使用呢.
对了,这个才是使用数据库的正确流程.
数据库如何读入内存呢?
这个时候,就是我们要介绍的instance(实例)了.实例就是内存结构和一组后台进程.
实际上,正常的数据库读入内存的过程是,由实例中一组后台进程从磁盘上将数据文件读入到实例的内存中,然后经过在内存中对数据的操作再从实例的内存中经过一组后台进程写到数据库中.
那实例相对与数据库而言,应该就是数据库的运行环境(虽不准确但也很贴切).
实例是位于物理内存里的数据结构,由线程和内存池组成,实例才是真正用于操作数据库文件的(即前面说的一系列文件);
如Oracle实例: 位于物理内存里的数据结构,它由操作系统的多个后台进程和一个共享的内存池所组成,共享的内存池可以被所有进程访问。
用户如果要存取数据库里的数据, 必须通过Oracle实例才能实现,而不能直接读取硬盘上的文件。
备注:其实Oracle实例也即是平常所说的数据库服务(service)
实例相对与数据库而言,可以理解为是数据库的运行环境(不准确但也还算贴切)。
实例与数据库
Oracle
数据库与实例之间是 1对1或1/n 的关系,即实例只能对于一个数据库,而一个数据库能有对个实例:
在非并行的数据库系统中每个Oracle数据库与一个实例相对应;
在并行的数据库系统中,一个数据库会对应多个实例,同一时间用户只与一个实例相联系,当某一个实例出现故障时,其他实例自动服务,保证数据库正常运行。
mysql
一般情况下一个实例操作一个或多个数据库;集群情况下多个实例操作一个或多个数据库。