1. 程式人生 > 其它 >15.Oracle的使用者、Schema、資料庫、表空間、資料檔案的相互關係

15.Oracle的使用者、Schema、資料庫、表空間、資料檔案的相互關係

1.前言

  今天徹底搞懂Oracle的使用者、Schema、資料庫、表空間、資料檔案的相互關係

2.開始

  在進入抽象的概念之前,可以先看一下網上的這段比喻:

  “我們可以把Database(這裡應該是指某一個sid對應的資料庫)看做一個大倉庫,倉庫分了很多很多房間,Schema就是其中的房間,一個schema代表一個房間,table可以看做是每個schema中的床,table(床)被放入每個房間中,不能放置在房間外,user就是每個schema的主人,所以schema包含的是object,而不是user,user和schema是一一對應的,每個user在沒有特別指定下只能使用自己schema(房間)的東西,如果一個user想要使用其他schema(房間)的東西,那就要看那個schema(房間)的user(主人)有沒有給你這個許可權了,或者看這個倉庫的老大(DBA)有沒有給你這個許可權了。換句話說,如果你是某個倉庫的主人,那麼這個倉庫的使用權和倉庫中的東西都是你的(包括房間),你有完全的操作權,可以扔掉不用的東西從每個房間,也可以放置一些有用的東西都某一個房間,你還可以給每個user分配具體的許可權,也就是他到某一個房間能做寫什麼,是隻能看(read-only),還是可以像主人一樣有所有的控制權(R/W).這個就要看這個user所對應的角色role了。

3.具體介紹

  (1)資料庫:

  Oracle資料庫時資料的物理儲存。這就包括(資料檔案ORA或者DBF、控制檔案、聯機日誌、引數檔案)。其實Oracle資料庫的概念和其它資料庫不一樣,這裡的資料庫是一個作業系統只有一個庫。可以看做是oracle就只要一個大資料庫。

  (2)例項

  一個oracle例項(Oracle instance)有一系列的後臺程序(Backgroud processes)和記憶體結構(Memory Structures)組成,一個數據庫可以有n個例項。

  (3)使用者(user)

  使用者是在例項下建立的。不同例項可以建立相同名字的使用者。  

-- 建立新使用者時,同時要指明表空間和臨時表空間(建立建立時就指定表空間名)
create user testuser #profile "default" identified by "password123" default tablespace ts_test ##這裡要指定預設表空間 temporary tablespace tmp_ts_test ##這裡指定了臨時表空間 quota 500m on ts_test ##使用者在表空間的限額 account unlock; ##解鎖使用者

   *關於profile的說明(使用profile檔案實現使用者口令限制與資源限制)

  profile是口令限制,資源限制的命令集合,建立oracle資料庫時,oracle會自動建立命為default的profile,初始化的default沒有進行任何口令和資源限制,使用profile有以下一些注意事項:

  1.建立profile時,如果只設置了部分口令或者資源限制選項,其他選項會自動使用預設值(default的相應選項)

  2.建立使用者時,如果不指定profile選項,oracle會自動將default分配給相應的資料庫使用者

  3.一個使用者只能分配一個profile。如果要同時管理使用者的口令和資源,那麼在建立profile時應該同時指定口令和資源選項。

  4.使用profile管理口令時,口令管理選項總是處於被啟用狀態,但如果使用profile管理資源,必須要啟用資源限制。

  *關於profile使用實踐

  1)檢視當前存在的profile檔案 

select distinct profile from dba_profiles;
--檢視指定profile檔案中各資源的限制情況:
select resouce_name,limit from dba_profiles where profile='DEFAULT';

  2)修改現在profile檔案中資源選項: 

1 alter profile default limit FAILED_LOGIN_ATTEMPTS 1 password_lock_time 3;

  3)建立一個新的profile檔案

1 create profile lock_accout limit failed_login_attempts 3 password_lock_time 10;

  4)讓使用者使用新的profile檔案:

1 alter user testuser profile lock_accout;

  5)檢視使用者當前使用的profile檔案 

select username,profile from dba_users;

  6)使用profile檔案限制使用者對資源的使用;

1 --必須先啟用資源限制:
2 alter system set resource_limit=TRUE scope=memory;
3 --對資源限制做修改:
4 alter profile lock_accout limit cpu_per_session 5000;

  7)刪除profile

1 drop profile lock_accout;

  8)刪除profile並將使用當前profile的使用者profile改為default

1 drop profile lock_accout cascade;

  9)以下列出所有profile相關引數內容以便參考: 

FAILED_LOGIN_ATTEMPTS:用於指定聯絡登陸的最大失敗次數.
 
PASSWORD_LOCK_TIME:用於指定帳戶被鎖定的天數.
PASSWORD_LIFE_TIME:用於指定口令有效期
PASSWORD_GRACE_TIME:用於指定口令寬限期.
PASSWORD_REUSE_TIME:用於指定口令可重用時間.
PASSWORD_REUSE_MAX;用於指定在重用口令之前口令需要改變的次數.
PASSWORD_VERIFY_FUNCTION;是否校驗口令(校驗將值改為VERIFY_FUNCTION)
CPU_PER_SESSION:用於指定每個會話可以佔用的最大CPU時間.
LOGICAL_READS_PER_SESSON:用於指定會話的最大邏輯讀取次數.
PRIVATE_SGA:用於指定會話在共享池中可以分配的最大總計私有空間.需要注意,該選項只使用與共享伺服器模式.
COMPOSITE_LIMIT:用於指定會話的總計資源消耗(單位:服務單元).
CPU_PER_CALL:限制每次呼叫(解析,執行或提取資料)可佔用的最大CPU時間(單位:百分之一秒)
LOGICAL_READS_PER_CALL:用於限制每次呼叫的最大邏輯I/O次數.
SESSIONS_PER_USER:用於指定每個使用者的最大併發會話個數.
CONNECT_TIME:用於指定會話的最大連線時間.
IDLE_TIME:用於指定會話的最大空閒時間.

  (4)schema

  在Oracle中,一般一個使用者就對應一個schema,該使用者的schema名等於使用者名稱,並作為該使用者預設schema,使用者是不能建立schema的,schema在建立使用者的時候建立,並可以指定使用者的各種表空間(這點與pg是不同,pg是可以建立schema並指派給某個使用者)。當前連線到資料庫上的使用者建立的所有資料庫物件都預設資料這個schema(在不指明schema的情況下),比如若使用者scott連線到資料庫,然後create table test(id int null)建立表,那麼這個表被建立在了scott這個schema中;但若這樣create table testuser.test(id int not null)的話,這個表被建立在了testuser這個schema中,當前前提是許可權允許(即testuser使用者給scott使用者在其schema下建立資料表的許可權)。由此看來,schema是一個邏輯概念。

  但一定要注意一點:schema並不是在建立user時就建立的,而是在該使用者建立了第一個物件之後才將schema真正建立的,只有user下存在物件,他對應的schema才會存在,如果user下不存在任何物件了,schema也就不存在了。

  (5)表空間

  表空間是一個用來管理資料儲存邏輯概念,表空間只是和資料檔案(ORA或者DBF檔案)發生關係,資料檔案是物理的,一個表空間可以包含多個數據檔案,而一個數據檔案只能隸屬一個表空間。

  (6)資料檔案(dbf、ora)

  資料檔案是資料庫的物理儲存單位,資料庫的資料在邏輯上是儲存在表空間中的,但真正落地是在某一個或者多個數據檔案中。而一個表空間可以由一個或者多個數據檔案組成,一個數據檔案只能屬於一個表空間。一旦資料檔案被加入到某個表空間後,就不能刪除這個檔案,如果要刪除某個資料檔案,只能刪除其所屬於的表空間才行。