Schema

在Oracle資料庫裡面Schema的定義是Object的擁有者,也就是說一般使用者透過資料庫帳號存取資料庫,如果此帳號沒有擁有任何Oracle物件,則此帳號稱為使用者(User),如果此帳號擁有任何物件則此帳號就是Schema,舉例來說,資料庫帳號TIM所建立的test資料表格(Table)其完整名稱為tim.test,而此test資料表格(Table)就是屬於TIM這個Schema。再舉個例子,Schema就像是一個銀行帳號,存在裡面的錢就是屬於這個銀行帳號,如果有任何人要把錢存在此銀行帳號裡也都是屬於這個帳號的,所以說如果有任何Object只要是建置在此Schema下就是屬於這個Schema,一但有任何人要從此銀行帳號提錢出來,就必須拿到此帳號所開的支票,也就是需要此Schema的授權才能存取裡面的物件,因此可以說Schema就是邏輯上的銀行帳號。Schema重點如下:
  • 物件擁有者Schema及擁有DBA權限的帳號可決定使用者是否有權限存取這些物件,而Schema對於其所屬的物件擁有最大的控制權限。
    Schema可擁有資料庫中所有的型態的Object例如:表格(Table)、索引(Index)、視觀表(View)、循序項(Sequence)、同義字(Synonym)等等。
  • 在同一個資料庫裡不同的Schema可各自建立相同的物件名稱,例如SchemaTIM建置test這個資料表格(Table),另一個SchemaTOM也可以建置另一個test表格(Table)。
  • 一個Schema只能指定一個預設的Tablespace,當此Schema要建立儲存物件時如果不指定Tablespace,就會自動將此儲存物件的資料放在此預設的Tablespace裡面,如果建立儲存物件時如果有指定Tablespace,會將此儲存物件的資料放在此指定的Tablespace,但前提是此Schema擁有對指定的Tablespace使用的權限。
Schema與Oracle實體結構的關係
如果以Schema為中心,將Schema與實體結構整個串連在一起可以這麼看,一個Schema可以擁有數個表格(Table),而一個表格(Table)對應到一個Data Segment,一個Segemnt是由一個或是多個Extent組成,而這些Extent又是由數個Block組成,數個Block又可以組合成為一個實體儲存結構的Data File,而一個至Data File可對應到一個Tablespace,如此就將Schema與實體結構整個串連在一起。如圖所示

沒有留言:

張貼留言