首先,數據庫是什么?
數據庫的作用是長久存儲數據,而內存只能臨時存儲,磁盤等才能真正存儲數據。其實數據庫就是磁盤上的一系列物理文件。
例如MySQL數據庫,就是由一些列物理文件組成,如:frm、MYD、MYI、ibd等結尾的文件。
然后我們得糾正一個概念,我們平常說的數據庫,如Oracle或Oracle數據庫,指的其實是Oracle數據庫管理系統,
而Oracle數據庫管理系統,指的是管理數據庫訪問的計算機軟件,它由Oracle數據庫和Oracle實例(instance)構成。
那么我們如何使用數據庫呢,即如何操作磁盤里的一系列文件?
我們知道這樣的一個常識:必須把磁盤上的文件讀入內存才能使用。
那正確的流程就是把磁盤上文件先讀入內存,然后使用。
實際上,正常的數據庫讀入內存的過程是,由實例中一組后台進程從磁盤上將數據文件讀入到實例的內存中,然后經過在內存中對數據的操作再從實例的內存中經過一組后台進程寫到數據庫中。
接着上面說什么是實例?
實例是位於物理內存里的數據結構,由線程和內存池組成,實例才是真正用於操作數據庫文件的(即前面說的一系列文件);
如Oracle實例: 位於物理內存里的數據結構,它由操作系統的多個后台進程和一個共享的內存池所組成,共享的內存池可以被所有進程訪問。
用戶如果要存取數據庫里的數據, 必須通過Oracle實例才能實現,而不能直接讀取硬盤上的文件。
備注:其實Oracle實例也即是平常所說的數據庫服務(service)
實例相對與數據庫而言,可以理解為是數據庫的運行環境(不准確但也還算貼切)。
實例與數據庫
Oracle
數據庫與實例之間是 1對1或1/n 的關系,即實例只能對於一個數據庫,而一個數據庫能有對個實例:
在非並行的數據庫系統中每個Oracle數據庫與一個實例相對應;
在並行的數據庫系統中,一個數據庫會對應多個實例,同一時間用戶只與一個實例相聯系,當某一個實例出現故障時,其他實例自動服務,保證數據庫正常運行。
mysql
一般情況下一個實例操作一個或多個數據庫;集群情況下多個實例操作一個或多個數據庫。
--------------------------------------------------------------------------------------------------