發(fā)布時間: 2017-06-16 13:40:50
一、Oracle表空間
1.Oracle表空間與SQL Server文件組對比
SQL Server的文件組(文件組包括若干MDF,NDF數(shù)據(jù)文件)對我們來說并不陌生,前段時間我在博客“怎樣玩轉(zhuǎn)千萬級別的數(shù)據(jù)” 提到了過表分區(qū)的概念,其實表分區(qū)說到本質(zhì)上就是按一定條件把不同數(shù)據(jù)放在不同的數(shù)據(jù)文件里,這些數(shù)據(jù)文件在物理上是相對獨立的,在邏輯上又是一個整體。特別強(qiáng)調(diào)一下,在SQL Server中,建表時是默認(rèn)把所有的表都保存在PRIMARY默認(rèn)文件組 ,當(dāng)數(shù)據(jù)庫中表很多,并且數(shù)據(jù)量很大時,會導(dǎo)致數(shù)據(jù)庫性能嚴(yán)重下降,對于一些大數(shù)據(jù)的處理,有必要將一些大表數(shù)據(jù)放到不同的文件組中,以提高數(shù)據(jù)庫的性能。這也是優(yōu)化SQL Server 數(shù)據(jù)庫的一個重要手段。
從SQL Server轉(zhuǎn)到Oracle也許會感到不適,因為Oracle里沒有文件組和數(shù)據(jù)文件的概念。但是有表空間的概念,表空間是Oracle的邏輯結(jié)構(gòu),一個Oracle數(shù)據(jù)庫可以有一個或者多個表空間,一個表空間又對應(yīng)著多個物理的數(shù)據(jù)庫文件。其實SQL Server的文件組轉(zhuǎn)到Oracle就是表空間,Oracle的表空間轉(zhuǎn)到SQL Server就是文件組。這篇博文重點來討論Oracle的表空間。
2.創(chuàng)建,修改,刪除Oracle表空間
Oracle的表空間分了幾種類型,臨時表空間,用戶表空間,還原表空間,大文件表空間等,我選擇臨時表空間和用戶表空間為例來演示怎么在Oracle中創(chuàng)建表空間,創(chuàng)建表空間,一般都是DBA干的事情,所以我選擇sys的用戶登錄創(chuàng)建表空間。
2.1創(chuàng)建臨時表空間,用TEMPFILE 關(guān)鍵字,下邊幾個參數(shù)要重點注意一下。
SIZE *[K,M]表空間的初始大小,單位可以是[K,M]
MAXSIZE *[K,M]表空間的較大存儲值,maxsize unlimited 是指表空間的大小不受限制。
AUTOEXTEND ON NEXT *[K,M] 設(shè)置表空間自動擴(kuò)展
EXTENT MANAGEMENT LOCAL本地管理表空間。
extent是“區(qū)間”的意思,在oracle數(shù)據(jù)庫中:extent management 有兩種方式 extent management local(本地管理); extent management dictionary(數(shù)據(jù)字典管
理)默認(rèn)的是local本地管理表空間有自動分配(AUTOALLOCATE)和統(tǒng)一大小分配(UNIFORM)兩種空間分配方式,自動分配方式(AUTOALLOCATE)是由系統(tǒng)來自動決定extents
大小,而統(tǒng)一大小分配(UNIFORM)則是由用戶指定extents大小。這兩種分配方式都提高了空間管理效率。uniform:默認(rèn)為1M大小,在temp表空間里為默認(rèn)的,但是不能被應(yīng)用
在undo表空間.
--創(chuàng)建 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創(chuàng)建用戶表空間,參數(shù)與臨時表空間基本一致
--創(chuàng)建 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.創(chuàng)建用戶
創(chuàng)建用戶時,需要注意如下幾個參數(shù)。
IDENTIFIED BY *** ,用戶的密碼。
DEFAULT TABLESPACE *** 默認(rèn)用戶表空間。
TEMPORARY TABLESPACE *** 默認(rèn)臨時空間。
CREATE USER xcj01 IDENTIFIED BY xcj01 DEFAULT TABLESPACE tsUserTest TEMPORARY TABLESPACE tsTempTest;
2.修改密碼
alter user xcj01 identified by xcj01;
3.刪除用戶以及跟用戶關(guān)聯(lián)的對象
drop user xcj01 CASCADE;
三、Oracle用戶授權(quán)
1.Oralce的特殊權(quán)限
1.1 系統(tǒng)權(quán)限unlimited tablespace是隱含在dba, resource角色中的一個系統(tǒng)權(quán)限. 當(dāng)用戶得到dba或resource的角色時, unlimited tablespace系統(tǒng)權(quán)限也隱式受權(quán)給用戶.
1.2 系統(tǒng)權(quán)限unlimited tablespace不能被授予role, 可以被授予用戶.
1.3 系統(tǒng)權(quán)限unlimited tablespace不會隨著resource, dba被授予role而授予給用戶.
2.特殊角色
2.1 DBA角色,是授權(quán)數(shù)據(jù)庫管理員的權(quán)限
2.2 CONNECT角色, 是授予最終用戶的典型權(quán)利,最基本的 一個(CREATE SESSION)
2.3 RESOURCE 角色,是授予開發(fā)人員的 默認(rèn)有八個權(quán)限(CREATE SEQUENCE,CREATE TRIGGER,CREATE CLUSTER,CREATE PROCEDURE,CREATE TYPE,CREATE OPERATOR,CREATE TABLE,CREATE INDEXTYPE)
2.4 exp_full_database角色,擁有導(dǎo)出數(shù)據(jù)庫的權(quán)限
2.5 imp_full_database角色,擁有導(dǎo)入數(shù)據(jù)庫的權(quán)限
3.用戶授權(quán)示
--授權(quán) 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;
四、查詢用戶的權(quán)限
以下的查詢中,基本都要以DBA的角色進(jìn)行查詢,如果權(quán)限不夠,有可能查詢不出來數(shù)據(jù)。
1.查看用戶擁有那些角色
select * from dba_role_privs a where a.grantee='XCJ01'; --或 select * from dba_sys_privs a where a.grantee='XCJ01';
2.查看角色擁有那些權(quán)限
select ROLE, PRIVILEGE from role_sys_privs where role='RESOURCE'; --RESOURCE,CONNECT,DBA --或 select grantee,privilege from dba_sys_privs where grantee='RESOURCE';
3.為用戶取消角色
revoke resource from XCJ01;
4.為用戶取消權(quán)限
revoke unlimited tablespace from XCJ01;
5.最后附加一個非常有用的技巧:查看Oracle的版本號。
select * from v$version where rownum 1;