淺談Oracle12c 資料庫、用戶、CDB與PDB之間的關係名詞介紹:資料庫:資料庫(Database)是按照數據結構來組織、存儲和管理數據的倉庫,它產生 於距今六十多年前,隨著信息技術和市場的發展,特別是二十世紀九十年代以 後,數據管理不再僅僅是存儲和管理數據,而轉變成用戶所需要的各種數據管 理 ...
淺談Oracle12c 資料庫、用戶、CDB與PDB之間的關係
名詞介紹:
資料庫:資料庫(Database)是按照數據結構來組織、存儲和管理數據的倉庫,它產生 於距今六十多年前,隨著信息技術和市場的發展,特別是二十世紀九十年代以 後,數據管理不再僅僅是存儲和管理數據,而轉變成用戶所需要的各種數據管 理的方式。
C D B:CDB全稱為Container Database,中文翻譯為容器資料庫。
P D B:PDB全稱為Pluggable Database,中文翻譯為可插拔資料庫。
首先,我來談一下資料庫、user和schema之間的關係。在我看,資料庫就像是含有好多小房間的一個大大的倉庫,然後我們把這個大倉庫分了好幾塊,這就是schema。分出來的小倉庫得有人管理啊,管理的就叫做user。當然了,用戶可以在這些小倉庫內放置許多許多的貨物,這個貨物就是表和數據。至於很多人不懂user和schema之間的區別,我在此引用網上的一段話來解釋下他們之間的關係:
“user即Oracle中 的用戶,和所有系統的中用戶概念類似,用戶所持有的是系統的許可權及資源;而schema所涵蓋的是各種對象,它包含了表、函數、包等等對象的“所在地”, 並不包括對他們的許可權控制。好比一個房子,裡面放滿了傢具,對這些傢具有支配權的是房子的主人(user),而不是房子(schema)。你可以也是一個 房子的主人(user),擁有自己的房子(schema).可以通過alter session的方式進入別人的房子。如果你沒有特別指定的話,你所做的操作都是針對你當前所在房子中的東西。至於你是否有許可權使用(select)、搬 動(update)或者拿走(delete)這些傢具就看這個房子的主人有沒有給你這樣的許可權了,或者你是整個大廈(DB)的老大(DBA)。alter session set schema可以用來代替synonyms。如果你想調用其他schema的對象(有許可權的前提下),但並沒有建synonym,同時又不想把其他 schema名字放入代碼中,就可以首先使用alter session set schema=<其他schema名字>。”
這段話形象的闡釋了user和schema的區別和聯繫。
下麵我再談一下12c與之前的版本中的區別,那麼大家來猜猜最“Strongly”的區別是什麼呢。Bingo,就是pdb和cdb概念的引入。
這裡引用一下Oracle12c新特性的文檔中的一張圖來更方便的解釋CDB和PDB的關係。
CDB都有什麼組成部分呢。其實通過上圖我們可以清楚的看到:
1、ROOT:root,又名CDB$ROOT,用來存儲Oracle提供的metadata和common user 的。metadata的一個例子是Oracle提供的PL/SQL包的源代碼。Common user 指的是一個所有容器都知道的資料庫用戶(註意,當我們想在資料庫中創建 用戶的時候,一般是不能往ROOT中創建的。我們需要先通過語句alter session set container = PDB’s name 轉換到相應名稱的PDB下再創建用戶, 要想詳細瞭解關於common user 和 local user 的區別的話,請參考Oracle 官方文檔《Oracle Database Security Guide》)。 一個CDB只能有一個根。
2、SEED:seed,又名PDB$SEED,是用來創建新的PDB的模版。但是,你不能在seed 里添加或者修改對象,一個CDB只能有一個SEED。
3、PDB:PDB展現給用戶和應用的形象就像是一個沒有CDB的普通資料庫一樣。例 如,一個PDB可以包括支持一個特定應用程式所需的所有數據和代碼。PDB 完全向後相容Oracle12c之前版本的所有資料庫。
以上的每個組成部分都被稱為容器(container),ROOT、SEED、PDB都是容器。而這些容器在CDB中都有他們自己唯一的容器ID和名稱。我們可以很輕鬆的向CDB中插入一個PDB或者從CDB中拔出一個PDB。當我們將一個PDB插入CDB中時,相當於將這個PDB與CDB連接起來。反之則解除關係。
什麼?你問我Oracle為什麼這麼乾,這令你感到麻煩並且困擾。那麼,我告訴你。這其實大大方便了數據的遷移。我們可以很方便的將一個特定的PDB從一個CDB挪到另一個CDB上面而不改變裡面的任何數據和架構。這難道不是很wonderful嗎?當然,一個PDB只能在同一時間內插入一個CDB而不是多個。每一個PDB都有自己獨一無二的全局唯一標識符(GUID)來預防PDB的錯亂使用。
這篇文章到此結束啦~Hope can help~~