oracle學習之邏輯結構2

邏輯結構之表空間

  表空間呢,肯定是相當重要,我不僅要會建表空間,理解裏面的參數,而且還要能夠管理監控表空間,使得表空間正常運轉。
  1.創建表空間
  
create tablespace tbs_test20140819
blocksize 16k
datafile 'e:/oracle/oradata/plmdemo/tbs_test0819.dbf' size 20m
autoextend on
next 5m  maxsize 100m
extent management local
uniform seize 5m
segment space management auto;
  這樣呢,一個測試表空間建好了,那麼如何監控表空間呢,下面來介紹。
  2.表空間監控
  
select a.tablespace_name "tablespace",trunc(a.total) "allocated(M)",ceil((1-b.free/a.total)*100) "Usage %", 
        trunc(b.free) " free space(M)" from 
        (select tablespace_name, sum(nvl(bytes,0))/1024/1024 total from dba_data_files group by tablespace_name) a,
        (select tablespace_name, sum(nvl(bytes,0))/1024/1024 free from dba_free_space group by tablespace_name) b
where a.tablespace_name=b.tablespace_name order by 3 desc;
  這段代碼咋一看很複雜,其實就是兩個表dba_data_files和dba_free_space,一個是存儲表空間總大小,一個是存儲free空間,具體表的參數可以desc查看。
  那麼對於臨時表空間,是在另外的表中查看:dba_temp_files和v$temp_space_header,具體代碼如下:
SELECT D.TABLESPACE_NAME,d.file_name,SPACE "SUM_SPACE(M)",BLOCKS SUM_BLOCKS, 
USED_SPACE "USED_SPACE(M)",ROUND(NVL(USED_SPACE,0)/SPACE*100,2) "USED_RATE(%)",
NVL(FREE_SPACE,0) "FREE_SPACE(M)"
FROM 
(SELECT TABLESPACE_NAME,file_name,file_id,ROUND(SUM(BYTES)/(1024*1024),2) SPACE,SUM(BLOCKS) BLOCKS
FROM DBA_TEMP_FILES
GROUP BY TABLESPACE_NAME,file_name,file_id) D,
(SELECT TABLESPACE_NAME,file_id,ROUND(SUM(BYTES_USED)/(1024*1024),2) USED_SPACE,
ROUND(SUM(BYTES_FREE)/(1024*1024),2) FREE_SPACE
FROM V$TEMP_SPACE_HEADER
GROUP BY TABLESPACE_NAME,file_id) F
WHERE  D.TABLESPACE_NAME = F.TABLESPACE_NAME(+) and d.file_id=f.file_id(+);
  
  3.表空間設置
  那麼針對表空間不足的情況呢,就會出現討厭的ora-01654錯誤,這時候就可以修改表空間屬性自動擴展表空間或者增加數據文件。
  設置成自動錶空間:
  
alter database  DATAFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\PLMDEMO\SYSTEM01.DBF' autoextend on next 50m maxsize unlimited;  ---普通表空間    
alter database  tempfile 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\PLMDEMO\TEMP01.DBF' autoextend on next 50m maxsize unlimited; --臨時表空間



  重新擴展,或者增加文件
      
擴展:  alter DATABASE  DATAFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\PLMDEMO\SYSTEM01.DBF' RESIZE 9000m; --普通表空間
        alter DATABASE  tempFILE 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\PLMDEMO\TEMP01.DBF' RESIZE 200m; --臨時表空間

增加文件: alter tablespace  SYSTEM  add datafile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\PLMDEMO\SYSTEM01.DBF' size 1g;------普通表空間     
           alter tablespace  TEMP  add tempfile 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\PLMDEMO\TEMP02.DBF' size 10m;-------臨時表空間

    當然對於一些特定的表空間,一些有資深dba對我們有一些建議,表空間儘量避免自動擴展,儘可能大。對於回滾表空間儘量規劃大,自動管理;對於臨時表空間,最好使用臨時表空間組;而業務表空間要根據業務分類進行配置,即時監控表空間使用情況。
  4.刪除表空間
  
drop tablespace tablespacename including contents and datafiles;
  如果是linux類系統,那麼使用這句代碼直接就刪除數據文件,但是win下面得手動刪除。
  5.切換回滾表空間
  當新建回滾表空間後,需要切換,那麼可以通過指令:
  
alter system set undo_tablespace=undo scope=both/memory/spfile;
  6.切換臨時表空間
  
alter user test temporary tablesapce temp1;
--改變數據庫的臨時表空間 alter database default temporary tablespace temp1;

  7.臨時表空間組
  隨着oracle的發展,臨時表空間組已經投入運用,可以做到爲同一用戶不同session設置不同的臨時表空間。
  7.1創建臨時表空間組(粘貼代碼太麻煩了,下面直接打吧)
  其實很簡單,就是在創建臨時表空間後面添加一個tablesapce goup。
  create temporary tablesapce temp01 tempfile 'xx/xx1.dbf' size 10m tablespace group temp_group1;
  create temporary tablesapce temp02 tempfile 'xx/xx2.dbf' size 10m tablespace group temp_group1;
  create temporary tablesapce temp03 tempfile 'xx/xx3.dbf' size 10m tablespace group temp_group1;
  這樣,臨時表空間組(可以創建多個)就建好了,可以自行通過數據字典查看(dba_tablespace_groups),那麼如何把已有臨時表空間添加到臨時表空間組呢?
  這樣就可以了,alter tablespace temp1  tablesapce group  tmp_group1;
  但是光是創建好了可不行,得讓系統或者用戶使用。
  alter user test temporary tablespace temp_group1;(此後可以通過v$sort_usage查看臨時表空間的使用情況)
  好了,邏輯結構簡單結束!
  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章