1. 程式人生 > >Orace新建臨時表空間、資料表空間、使用者

Orace新建臨時表空間、資料表空間、使用者

1、新建臨時表空間

1.1.什麼是臨時表空間

在Oracle資料庫中進行排序、分組彙總、索引等到作時,會產生很多的臨時資料。如有一張員工資訊表,資料庫中是安裝記錄建立的時間來儲存的。如果使用者查詢時,使用Order BY排序語句指定按員工編號來排序,那麼排序後產生的所有記錄就是臨時資料。
對於這些臨時資料,Oracle資料庫是如何處理的呢?通常情況下,Oracle資料庫會先將這些臨時資料存放到記憶體的PGA(程式全域性區)內。在這個程式全域性區中有一個叫做排序區的地方,專門用來存放這些因為排序操作而產生的臨時資料。但是這個分割槽的容量是有限的。當這個分割槽的大小不足以容納排序後所產生的記錄時,資料庫系統就會將臨時資料存放到臨時表空間中。這就是臨時表空間的來歷。看起來好像這個臨時表空間是個臨時工,對於資料庫的影響不會有多大。其實大家這是誤解這個臨時表空間了。在使用者進行資料庫操作時,排序、分組彙總、索引這些作業是少不了,其會產生大量的臨時資料。為此基本上每個資料庫都需要用到臨時表空間。


1.2.臨時表空間作用

Oracle臨時表空間主要用來做查詢和存放一些緩衝區資料。臨時表空間消耗的主要原因是需要對查詢的中間結果進行排序。重啟資料庫可以釋放臨時表空間,如果不能重啟例項,而一直保持問題sql語句的執行,temp表空間會一直增長。直到耗盡硬碟空間。網上有人猜測在磁碟空間的分配上,oracle使用的是貪心演算法,如果上次磁碟空間消耗達到1GB,那麼臨時表空間就是1GB。也就是說當前臨時表空間檔案的大小是歷史上使用臨時表空間最大的大小。
臨時表空間的主要作用:

  • 索引create或rebuild
  • Order by 或 group by
  • Distinct 操作
  • Union 或 intersect 或 minus
  • Sort-merge joins
  • analyze
/*第1步:建立臨時表空間  */
create temporary tablespace user_temp  
tempfile 'D:\oracle\oradata\user_temp.dbf' 
size 10m  
autoextend on  
next 5m maxsize 20480m  
extent management local; 

2、建立資料表空間

表空間從某種意義上來說就是sqlserver中的資料庫。表空間是資料庫的邏輯組成部分,

從物理上將:資料庫資料存放在資料檔案中;

從邏輯上將:資料庫則是存放在表空間中;

表空間由一個或是多個數據檔案組成。

Oracle中邏輯結構包括表空間、段、區、塊。說明:

資料庫由表空間構成

而表空間又是由段構成

而段又是由區構成

而區又是由Oracle塊構成

/*第2步:建立資料表空間  */
create tablespace user_data  
logging  
datafile 'D:\oracle\oradata\user_data.dbf'
size 20m  
autoextend on  
next 5m maxsize 20480m  
extent management local;

3、新建使用者

為該表空間新建使用者。

/*第3步:建立使用者並指定表空間  */
create user username identified by password  
default tablespace user_data  
temporary tablespace user_temp; 

4、分配許可權

/*第4步:給使用者授予許可權  */
grant connect,resource,dba to username;