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)
資料檔案是資料庫的實體存儲機關,資料庫的資料在邏輯上是存儲在表空間中的,但真正落地是在某一個或者多個資料檔案中。而一個表空間可以由一個或者多個資料檔案組成,一個資料檔案隻能屬于一個表空間。一旦資料檔案被加入到某個表空間後,就不能删除這個檔案,如果要删除某個資料檔案,隻能删除其所屬于的表空間才行。
