Oracle 的 表空間(Tablespace)、用戶(User)、模式(Schema)
前面有整理了一篇 Oracle 數據庫(database) 與 實例(instance) 的概念及關系整理 。
那接下來就往下整理一個數據庫里面的一些其他幾個東西之間的奇奇怪怪的關系。
一、表空間(Tablespace)
講表空間的話我就想到Oracle的邏輯存儲結構了。所以還是簡單講講吧,有機會再單獨總結(抄襲)一篇。
在計算機技術中,邏輯就是虛擬的意思,實際的數據存儲在硬盤中那是物理級別的,也就是我們說的物理存儲結構。之間的關系我直接從官方文檔中截個圖放着,連接線的用的是烏鴉腳表示法來表示一對多的關系,看着還是很明確的!
圖中明顯可以看出:
1、在oracle的物理邏輯存儲結構中,從小到大都是的關系如下,然后從大到小都是一對多的關系:
Oracle data block(數據塊)-->Extent(擴展區)-->Segment(段)-->Tablespace(表空間)
2、物理存儲結構上,OS block(操作系統的存儲塊),windows系統上的話,其實也就是我們格式化硬盤的時候選的分配單元大小,Oracle數據塊跟操作系統塊是一對多的關系。然后,比較重要的一個,一個Oracle的表空間,可以對應多個數據文件。
(一)表空間概述
1、上面剛其實也已經提到,表空間就是個邏輯存儲容器,在對應的物理級別上,表空間的數據內容是存儲在一個或者多個數據文件或者臨時文件中。
2、表空間主要有Permanent Tablespaces(永久表空間)、Temporary Tablespaces(臨時表空間)、Undo Tablespaces(撤銷表空間)三種,Oracle Database 11g r2在用dbca數據庫管理助手創建數據庫的時候,默認會創建三個永久表空間(SYSTEM、SYSAUX、USERS),一個臨時表空間(TEMP),一個撤銷表空間(UNDOTBS1)。
3、 Oracle數據庫有幾個缺省表空間,其中SYSTEM和SYSAUX 表空間是一個Oracle數據庫必須有的。
4、表空間的模式,也可以稱為狀態,可以設置表空間的online(聯機)或者offline(脫機),Read/write(讀/寫) 或者 Read-only(只讀) 。
(二)永久表空間
用於存儲數據庫中的持久性模式對象,如表、索引、視圖等,其數據在物理上對應一個或者多個數據文件。永久表空間也是我們實際中用的最多的一個類型的表空間。
(三)臨時表空間
見名知意,不能進行永久對象的存儲。其主要用途在於存儲臨時表的數據、提供空間進行排序操作、創建索引等等。
臨時表的話,例如會話級臨時表,往里面插入數據進行操作的時候數據使用的就是臨時表空間。
創建Oracle數據庫的時候可以設置一個叫sort_area_size的參數,默認值為65536,排序的時候會首先使用這部分內存,如果不足就會使用臨時表空間。
(四)撤銷表空間
撤銷表空間主要用於DML語句的數據管理,當執行insert,update,delete的時候,舊的數據就會存放到undo表空間。undo表空間的4個常見作用。
1、事務回滾,我們對數據進行dml操作的時候,如果撤銷修改,就會通過undo表空間記錄的修改數據把數據恢復到修改前。有些存儲過程中通過exception捕捉異常的時候經常會有一句rollback,也是這個作用,對當前事務的數據操作進行回滾恢復。
2、數據庫恢復,數據庫異常關閉,重新啟動的時候會通過undo表空間將回退未提交的事務。
3、讀一致性,在一個會話操作數據未提交的時候,通過undo表空間保證其他人訪問的數據的一致性(就是未修改的樣子)。
4、閃回查詢,這是個很有趣的功能。可以查看某個時間點的時候的數據,經常,,算了,也不經常,主要用於誤操作、誤刪數據等的恢復。
綜上所述,這些東西日常來說基本都不用管。
(五)表空間模式
1、聯機(online)和脫機(offline)表空間
這個其實應該說是表空間的聯機狀態,Oracle數據庫再開啟狀態的時候,我們可以讓除了SYSTEM 表空間和臨時表空間外其他所有的表空間聯機或者脫機,offline狀態的表空間無法被除了Oracle外任何其他的應用程序訪問和讀寫。當然,如果剛好有個會話在操作這個表空間中的部分數據,也不會有太大的影響,Oracle會有相應的處理機制,不詳細說。
不想打了,直接從官方文檔摘抄一段:
表空間可以自動或手動脫機。例如,您可以將表空間脫機,以進行維護或備份與恢復。數據庫在遇到某些錯誤時會自動將一個表空間脫機,比如數據庫寫進程 (DBWn)多次試圖寫入數據文件但遭遇失敗時。當用戶試圖訪問一個脫機表空間中的表時,將收到一個錯誤。
(六)表空間創建語法
放一個永久表空間的創建語法及幾個常用的屬性對應的注釋吧
-
CREATE TABLESPACE "WEIXIN" --表空間名WEIXIN
-
LOGGING --啟動重做日志
-
DATAFILE 'D:\app\oradata\orcl\WEIXIN.DBF' --指定對應的數據文件,可以一個或者多個
-
SIZE 512M --數據文件大小
-
AUTOEXTEND ON --數據文件自動擴展
-
NEXT 1024K --一次擴展的大小
-
MAXSIZE UNLIMITED --數據文件最大容量:無限
-
EXTENT MANAGEMENT LOCAL --表空間本地管理
-
SEGMENT SPACE MANAGEMENT AUTO ; --存儲管理方式,AUTO為自動方式
二、用戶(User) & 模式(Schema)
(一)用戶
數據庫中的用戶,其實就是一個認證登錄的東西,用來連接和訪問數據庫的。
我們先看下創建用戶的語法:
-
CREATE USER "WEIXIN" --創建用戶WEIXIN
-
PROFILE "DEFAULT" --忽略對profile中的一些資源限制(什么鬼)
-
IDENTIFIED BY "weixin" --密碼為weixin
-
DEFAULT TABLESPACE "WEIXIN" --默認表空間WEIXIN,即數據默認存此表空間
-
ACCOUNT UNLOCK; --解鎖用戶
-
-
--通常建完用戶后會給用戶授予一些基本的權限
-
Grant connect, resource to weixin;
-
-
--或者直接再授個管理員權限
-
GRANT "DBA" TO "WEIXIN" WITH ADMIN OPTION;
-
--with admin option 表示在獲得權限的同時也獲得了將這個權限授予其他用戶的能力。
好,用戶就講到這。還有一個需要注意的是,oracle的安全策略方面默認一個用戶的密碼有效期為180天,我們可以直接把這個有效期調成永久。
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
(二)模式(scheam)
我們再偷偷搬運一下官方文檔的說法:數據庫模式是邏輯數據結構(並非我們上面說的邏輯存儲結構哈)或模式對象的集合。 數據庫模式由一個數據庫用戶擁有,並與用戶名具有相同的名稱。
其實就是,我們在創建用戶的時候,Oracle會自動創建一個與用戶名相同的數據庫模式,然后,該用戶下所有的對象(也稱為模式對象,如表、序列、視圖、同義詞、存儲過程等等等等),都是歸屬到這個數據庫模式。
簡單點可以說,模式是對象的集合,對象(表、存儲過程、視圖等等)是模式的元素?大概可以這么理解。歡迎糾正!
所以,數據庫模式是用來管理對象的。對象就是表呀、視圖呀這些,也被稱為數據庫的邏輯數據結構。
(有點亂。。。看好幾個關鍵字:模式、對象、邏輯數據結構)
舉個大家比較常用的例子,很多語言都會提供一個英文句號 "." 這么個東西,在很多IDE上,想調用一個對象的某個東西的時候,我們可以打個對象名,然后點一下,后面就會自動聯想出對象所有的變量呀,方法呀什么的。在oracle中也一樣,我們可以通過 模式.對象名的形式去訪問或者調用對象。
如下面的sql,就是通過指定模式名,然后點,后面跟上表名,就能查詢到lhy模式下的emps表。這個主要用於跨用戶的查詢。日常開發中用戶和模式的概念並不會分得很清楚,口頭上也就是說,查一下lhy用戶下的emps表,其實就是lhy用戶對應的lhy模式里面的emps表。
select * from lhy.emps;
還有一點,就是模式下面的對象所存儲的表空間,通常是由創建用戶的時候的default tablespace參數決定。當然,創建表的時候你也可以單獨制定這個表存在哪個表空間下面。
轉自:https://blog.csdn.net/Huay_Li/article/details/80575538