一:Oracle表空間
1,Oracle表空間與SQL Server檔案組對比
SQL Server的檔案組(檔案組包括若干MDF,NDF資料檔案)對我們來說並不陌生,前段時間我在部落格“怎樣玩轉千萬級別的資料”提到了過表分割槽的概念,其實表分割槽說到本質上就是按一定條件把不同資料放在不同的資料檔案裡,這些資料檔案在物理上是相對獨立的,在邏輯上又是一個整體。特別強調一下,在SQL Server中,建表時是預設把所有的表都儲存在PRIMARY預設檔案組 ,當資料庫中表很多,並且資料量很大時,會導致資料庫效能嚴重下降,對於一些大資料的處理,有必要將一些大表資料放到不同的檔案組中,以提高資料庫的效能。這也是優化SQL Server 資料庫的一個重要手段。
從SQL Server轉到Oracle也許會感到不適,因為Oracle裡沒有檔案組和資料檔案的概念。但是有表空間的概念,表空間是Oracle的邏輯結構,一個Oracle資料庫可以有一個或者多個表空間,一個表空間又對應著多個物理的資料庫檔案。其實SQL Server的檔案組轉到Oracle就是表空間,Oracle的表空間轉到SQL Server就是檔案組。這篇博文重點來討論Oracle的表空間。
2,建立,修改,刪除Oracle表空間
Oracle的表空間分了幾種型別,臨時表空間,使用者表空間,還原表空間,大檔案表空間等,我選擇臨時表空間和使用者表空間為例來演示怎麼在Oracle中建立表空間,建立表空間,一般都是DBA乾的事情,所以我選擇sys的使用者登入建立表空間。
2.1,建立臨時表空間,用TEMPFILE 關鍵字,下邊幾個引數要重點注意一下。
SIZE *[K,M]表空間的初始大小,單位可以是[K,M]
MAXSIZE *[K,M]表空間的最大儲存值,maxsize unlimited 是指表空間的大小不受限制。
AUTOEXTEND ON NEXT *[K,M] 設定表空間自動擴充套件
EXTENT MANAGEMENT LOCAL本地管理表空間。
extent是“區間”的意思,在oracle資料庫中:extent management 有兩種方式 extent management local(本地管理); extent management dictionary(資料字典管
理)預設的是local本地管理表空間有自動分配(AUTOALLOCATE)和統一大小分配(UNIFORM)兩種空間分配方式,自動分配方式(AUTOALLOCATE)是由系統來自動決定extents
大小,而統一大小分配(UNIFORM)則是由使用者指定extents大小。這兩種分配方式都提高了空間管理效率。uniform:預設為1M大小,在temp表空間裡為預設的,但是不能被應用
在undo表空間.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
--建立 CREATE TEMPORARY TABLESPACE tsTempTest TEMPFILE 'E:DataBasetsTempTest01.dbf' SIZE 64M AUTOEXTEND ON NEXT 32M MAXSIZE 1024M, 'E:DataBasetsTempTest02.dbf' SIZE 64M AUTOEXTEND ON NEXT 32M MAXSIZE 1024M, 'E:DataBasetsTempTest03.dbf' SIZE 64M AUTOEXTEND ON NEXT 32M MAXSIZE 1024M EXTENT MANAGEMENT LOCAL; --增加 ALTER TABLESPACE tsTempTest ADD TEMPFILE 'E:DataBasetsTempTest04.DBF' SIZE 64M AUTOEXTEND ON NEXT 32M maxsize unlimited; --刪除 DROP TABLESPACE tsTempTest INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS; |
2.2,建立使用者表空間,引數與臨時表空間基本一致
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
--建立 CREATE TABLESPACE tsUserTest datafile 'E:DataBasetsUserTest01.dbf' size 64M AUTOEXTEND ON NEXT 32M maxsize unlimited , 'E:DataBasetsUserTest02.dbf' size 64M AUTOEXTEND ON NEXT 32M maxsize unlimited , 'E:DataBasetsUserTest03.dbf' size 64M AUTOEXTEND ON NEXT 32M maxsize unlimited extent management local ; --增加 ALTER TABLESPACE tsUserTest ADD DATAFILE 'E:DataBasetsUserTest04.DBF' SIZE 64M AUTOEXTEND ON NEXT 32M maxsize unlimited; --刪除 DROP TABLESPACE tsUserTest INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS; |
二:Oracle使用者
1,建立使用者:
建立使用者時,需要注意如下幾個引數。
IDENTIFIED BY *** ,使用者的密碼。
DEFAULT TABLESPACE *** 預設使用者表空間。
TEMPORARY TABLESPACE *** 預設臨時空間。
1 2 3 |
CREATE USER xcj01 IDENTIFIED BY xcj01 DEFAULT TABLESPACE tsUserTest TEMPORARY TABLESPACE tsTempTest; |
2,修改密碼:
1 2 |
alter user xcj01 identified by xcj01; |
3,刪除使用者以及跟使用者關聯的物件:
1 |
drop user xcj01 CASCADE; |
三:Oracle使用者授權
1,Oralce的特殊許可權
1.1,系統許可權unlimited tablespace是隱含在dba, resource角色中的一個系統許可權. 當使用者得到dba或resource的角色時, unlimited tablespace系統許可權也隱式受權給使用者.
1.2,系統許可權unlimited tablespace不能被授予role, 可以被授予使用者.
1.3,系統許可權unlimited tablespace不會隨著resource, dba被授予role而授予給使用者.
2,特殊角色
2.1,DBA角色,是授權資料庫管理員的許可權
2.2,CONNECT角色, 是授予終端使用者的典型權利,最基本的 一個(CREATE SESSION)
2.3,RESOURCE角色,是授予開發人員的 預設有八個許可權(CREATE SEQUENCE,CREATE TRIGGER,CREATE CLUSTER,CREATE PROCEDURE,CREATE TYPE,CREATE OPERATOR,CREATE TABLE,CREATE INDEXTYPE)
2.4,exp_full_database角色,擁有匯出資料庫的許可權
2.5,imp_full_database角色,擁有匯入資料庫的許可權
3,使用者授權示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
--授權 GRANT CONNECT, RESOURCE, --DBA, --unlimited tablespace, CREATE SESSION, CREATE ANY SEQUENCE, CREATE ANY TABLE, CREATE ANY VIEW , CREATE ANY INDEX, CREATE ANY PROCEDURE, CREATE ANY DIRECTORY, ALTER SESSION, ALTER ANY SEQUENCE, ALTER ANY TABLE, --ALTER ANY VIEW , --不能修改檢視 ALTER ANY INDEX, ALTER ANY PROCEDURE, --ALTER ANY DIRECTORY, --不能修改目錄 --DROP SESSION, --不能刪除Session DROP ANY SEQUENCE, DROP ANY TABLE, DROP ANY VIEW , DROP ANY INDEX, DROP ANY PROCEDURE, DROP ANY DIRECTORY, SELECT ANY TABLE, SELECT ANY DICTIONARY, INSERT ANY TABLE, UPDATE ANY TABLE, DELETE ANY TABLE, DEBUG ANY PROCEDURE, DEBUG CONNECT SESSION, exp_full_database, imp_full_database TO xcj01; |
四:查詢使用者的許可權
以下的查詢中,基本都要以DBA的角色進行查詢,如果許可權不夠,有可能查詢不出來資料。
1,檢視使用者擁有那些角色
1 2 3 |
select * from dba_role_privs a where a.grantee='XCJ01'; --或 select * from dba_sys_privs a where a.grantee='XCJ01'; |
2,檢視角色擁有那些許可權
1 2 3 |
select ROLE, PRIVILEGE from role_sys_privs where role='RESOURCE'; --RESOURCE,CONNECT,DBA --或 select grantee,privilege from dba_sys_privs where grantee='RESOURCE'; |
3,為使用者取消角色
1 |
revoke resource from XCJ01; |
4,為使用者取消許可權
1 |
revoke unlimited tablespace from XCJ01; |
5,最後附加一個非常有用的技巧:檢視Oracle的版本號。
1 |
select * from v$version where rownum 1; |
五:總結
這些是Oracle的入門級知識,不是什麼高深的理論,但是是經過專案的實踐提煉,不管DBA還是開發人員都能用到,寫出來與大家共勉。
寫到最後,你們也要給我動力,幫忙“贊”一下,“贊”的高尿的遠!