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

Oracle空間管理的3技巧

2013-11-13 16:05:21  來源: Oracle 

  以下的文章主要是介紹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等表空間中高達%以上的空間未被利用對於生產型數據庫這個表空間的設置有些偏高

  關於自由Oracle空間管理有下面的一些建議

  利用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

  裝入數據

  mp 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/17790.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.