熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

Oracle數據庫的空間管理

2013-11-13 16:09:17  來源: Oracle 

  
   在Oracle數據庫中DBA可以通過觀測一定的表或視圖來了解當前空間的使用狀況進而作出可能的調整決定
  
  表空間的自由空間
  
   通過對表空間的自由空間的觀察可用來判斷分配給某個表空間的空間是太多還是不夠請看下列的語句
  
  SQL > select afile_id FileNoatablespace_name
  Tablespace_name
   abytes Bytesabytessum(nvl(bbytes)) Used
   sum(nvl(bbytes)) Free
   sum(nvl(bbytes))/abytes* %free
   from dba_data_files a dba_free_space b
   where afile_id=bfile_id(+)
   group by atablespace_name
   afile_idabytes order by atablespace_name;
  
  File Tablespace
  No _nameBytes Used Free %free
  
  IDX_JF E+ E+
   JFSJTS E+ E+
  JFSJTS E+ E+
   RBS
  RBSE+ E+
   RBSJF E+ E+
   SFGLTS E+ E+
   SFSJTS E+ E+
   SYSTEM
   TEMP
   TOOLS
   USERS
  
   rows selected
   可以看出在FileNo為的表空間RBS中只有%的分配空間未被使用這個比例太小了而在SYSTEM及TEMP等表空間中高達%以上的空間未被利用對於生產型數據庫這個表空間的設置有些偏高
  
   關於自由空間的管理有下面的一些建議
  
  利用Export及Import命令卸出和裝入表空間可以釋放大量的空間從而緩解增加另外的數據文件的要求
  
  如果包含具有高插入(insert)和更新(update)活動的表的表空間中自由空間的比重下降到了%以下要為此表空間增加更多的空間
  
  對於一個基本是靜態表數據的表空間如果有多於%的自由空間則可以考慮減少分配給它的文件空間量
  
  減少SYSTEM表空間的空間量比較困難因為那要重建數據庫
   二 表及索引的擴展
  
   A為了防止表或索引被過分擴展及時實現對數據庫的調整用戶應當經常對有關對象進行觀察
  
   我們可以認為擴展區域大於個的表或索引為過分擴展(overextended)請看下面的語句
  
  SQL > select substr(segment_name)
   Segment_namesegment_type
   substr(tablespace_name)
   Tablepace_nameextentsMax_extents
   from dba_segments
   where extents > and owner=JFCL
   order by segment_name;
  
  SEGMENT_NAMESEGMENT TABLEPACE_
  EXTENTS MAX_EXTENTS
   _TYPE
  
  CHHDFYB TABLE JFSJTS
  CHHDFYB_DHHMINDEX JFSJTS
  DJHZFYB_BF TABLE JFSJTS
  DJHZFYB_DJHMINDEX IDX_JF
  DJHZFYB_JZHMINDEX IDX_JF
  GSMFYB TABLE JFSJTS
  JFDHTABLE JFSJTS
  JFDH_DHHM INDEX IDX_JF
  JFDH_JZHM INDEX IDX_JF
  XYKFYB TABLE JFSJTS
  YHDATABLE JFSJTS
  YHDA_BAKTABLE JFSJTS
  YHHZFYB_ TABLE JFSJTS
  
   rows selected
   通過觀察 DBA可以及時發現問題並進行相應的處理
  
   我們可以利用export卸出表然後刪除表再利用import命令將表裝入這樣可以將不連續的區域合並成一個連續的空間
  
   B如果用戶希望對表的空間設置進行優化例如需要改變表EMP的initial參數可以采用下面的方法
  
   在將EMP表卸出並刪除後執行imp命令時使用indexfile參數
  
   imp userid=scott/tiger file=empdmp indexfile=empsql Oracle把表和索引的創建信息寫到指定的文件而不是把數據寫回
  
   打開empsql文件
  
  REM CREATE TABLE SCOTTEMP (EMPNO
  NUMBER( ) ENAME
  REM VARCHAR() JOB VARCHAR()
  MGR NUMBER( ) HIREDATE DATE
  REM SAL NUMBER( ) COMM NUMBER
  ( ) DEPTNO NUMBER( ))
  REM PCTFREE PCTUSED INITRANS
  MAXTRANS LOGGING STORAGE(INITIAL
  REM NEXT MINEXTENTS MAXEXTENTS
   PCTINCREASE FREELISTS
  REM FREELIST GROUPS BUFFER_POOL DEFAULT)
   TABLESPACE USER_DATA ;
  REM rows
   對它進行編輯去除REM等信息找到Initial參數根據需要改變它
  
   在SQL*plus中執行empsql
  
   裝入數據
  
   imp userid=scott/tiger ignore=y file=empdmp
  
   需要注意的是ignore參數必須設為Y
  
   C可以用下面的語句來觀察表或索引距離達到最大擴展的狀況UNUSE為距離達到最大擴展的值在User_extents表中extent_id是從開始記述數的
  
  SQL >select atable_name TABLE_NAMEmax
  (amax_extents) MAXEXTENTS
   max(bextent_id)+ IN USE MAX
  (amax_extents)(max(bextent_id)+) UNUSE
   from user_tables a user_extents b
   where atable_name=bsegment_name
   group by atable_name ORDER BY ;
  
  TABLE_NAME MAXEXTENTS IN USEUNUSE
  
  YZPHB
  SHJYB
  SHFYB
  RCHDB
  SJTXDZB
  SJTXDAB
  CHYHB
  JFDH
   rows selected
   如果UNUSE小到一定的程度我們就應該加以關注進行適當的調整處理
  
   三 關於連續空間
  
   可以用下面的語句來查看數據庫中的自由空間
  
  SQL > select * from dba_free_space
   where tablespace_name=SFSJTS
   order by block_id;
  
  TABLESPACE FILE_ID BLOCK_ID BYTESBLOCKS
  _NAME
  
  SFSJTS
  SFSJTS
  SFSJTS
  SFSJTS
  SFSJTS
  SFSJTS
  SFSJTS
  SFSJTS
  SFSJTS
  SFSJTS
  
   rows selected
   我們可以通過命令的結果來估計相鄰自由空間的真正數量對每一行用起始快的id(BLOCK_ID)加上自由塊(BLOCKS)的數量如果其和與下一行的塊id(BLOCK_ID)相等則此兩行是連續的如上例第二行和第三行+=+!=所以從block_id為開始+=個block的連續空間
  
   在Oracle數據庫的後台系統監視器(SMON)周期性地合並自由空間相鄰的塊以得到更大的連續塊而DBA可以用SQL命令來完成這個工作
  
   alter tablespace tablespace_name coalesce;
  
   Oracle空間管理對數據庫的工作性能有重要影響其管理方法值得我們認真摸索研究&#;

From:http://tw.wingwit.com/Article/program/Oracle/201311/17904.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.