posts - 310, comments - 6939, trackbacks - 0, articles - 3
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          Oracle:管理表空間

          Posted on 2008-06-08 09:55 詩特林 閱讀(1561) 評論(0)  編輯  收藏 所屬分類: Oracle
          管理表空間
          在管理表空間時應遵循以下原則:
          1)使用多重表空間。采用多重表空間可使數據庫操作更靈活。主要體現在以下方面:
            ·將用戶數據與數據字典數據相分離,并將不同表空間的數據文件分別存儲在不同磁盤上可以降低I/O競爭。
            ·將一個應用的數據與其他應用相分離,可以避免表空間脫機時多個應用受到影響。
           ·可根據需要將單個表空間脫機,從而獲得較好的可用性。
            ·通過為不同類型的數據庫預留表空間,以達到優化表空間的目的,如更新較高的或只讀,或臨時段存儲等。
            ·備份單個表空間。
          2)為用戶指定表空間限額。要創建、管理與使用表空間,必須首先以sys用戶并以as sysdba身份登錄數據庫。與Oracle9i不同,在Oracle 10g中,啟動SQL*Plus時的帳戶和口令不需加引號。命令格式是:
          sqlplus sys/<sys password>as sysdba
          在Oracle 10g中,創建和管理表空間所使用的數據字典和權限及語句可歸納如下。
          1.與表空間有關的數據字典
          查詢和使用與表空間有關的元數據均可從下列數據字典中獲得。主要包括:dba_tablespaces、dba_users、dba_ts_quotas、user_tablespaces、user_ts_quotas、user_extents、user_segments、user_free_space、dba_data_files、dba_extents、dba_free_space、dba_segments、dba_temp_files、dba_undo_extents、dba_rollback_segs、dba_data_files、v_$backup_datafile、v_$database_block_corruption、v_$datafile、v_$datafile_copy、v_$datafile_header、v_$rollstat、v_$segment_statistics、v_$undostat等。以v_$開頭的數據字典均保存為動態信息。
          2.與使用表空間有關的系統權限
          與表空間有關的主要系統權限有:create tablespace、alter tablespace、drop tablespace、manage tablespace和unlimited tablespace等。
          其中,unlimited tablespace是允許用戶無限制地訪問所有表空間。出于安全考慮,在授予該權限給用戶時應慎重。如果用戶不需要該系統權限,最好撤銷該權限,否則用戶會利用該權限蓄意創建大量對象或復制數據,從而塞滿表空間導致數據庫服務器崩潰。
          3.創建永久性的表空間
          命令格式:
          SQL>create[undo]tablespace tablespace
          [datafile filespec[autoextend_clause][,filespec[autoextend_clause]]...]
          [{minimum extent integer[ k|m]|blocksize integer[k]|{logging|nologging}
          |default storage_clause|{online|offline}
          |{permanent|temporary}|extent_management_clause|segment_management_clause
          }
          [ minimum extent integer[k|m]|blocksize integer[k]
          |{logging|nologging}|default storage_clause|{online|offline}
          |{permanent|temporary}|extent_management_clause|segment_management_clause
          ]...
          ];
          【例2-1】創建一個名為dalianren的表空間
          SQL>create tablespace dalianren nologging
          datafile′D:\oracle\product\10.2.0\oradata\dalianren\dalianren01.ora′size 50m blocksize 8192
          extent management local uniform size 256k
          segment space management auto;
          4.使一個表空間脫機
          命令格式:
          SQL>alter tablespace<tablespace_name>offline;
          【例2-2】將表空間dalianren脫機
          SQL>alter tablespace dalianren offline;
          注意 system表空間不能脫機。
          5.使一個表空間聯機
          命令格式:
          SQL>alter tablespace<tablespace_name>online;
          【例2-3】將表空間dalianren聯機
          SQL>alter tablespace dalianren online;
          6.使表空間只讀
          命令格式:
          SQL>alter tablespace<tablespace_name>read only;
          【例2-4】將表空間dalianren更改為只讀
          SQL>alter tablespace dalianren read only;
          7.使表空間可讀可寫
          命令格式:
          SQL>alter tablespace<tablespace_name>read write;
          【例2-5】將表空間dalianren更改為可讀寫
          SQL>alter tablespace dalianren read write;
          8.創建臨時表空間
          命令格式:
          SQL>create temporary tablespace<tablespace_name>
          tempfile′<data_file_path_and_file_name>′
              size<megabytes>m autoextend<on|off>
          extent management local uniform size<extent_size>;
          【例2-6】創建臨時表空間temp
          SQL>create temporary tablespace temp
          tempfile ′D:\ oracle\product\10.2.0\oradata dalian\temp01.ora′
          size 500m autoextend off
          extent management local uniform size 512k;
          注意雖然語句alter tablespace中帶有temporary關鍵字,但不能使用帶有temporary關鍵字的alter tablespace語句將一個本地管理的永久表空間轉變為本地管理的臨時表空間。必須使用create temporary tablespace語句直接創建本地管理的臨時表空間。
          9.添加臨時表空間的數據文件
          命令格式:
          SQL>alter tablespace<tablespace_name>add tempfile ′<path_and_file_name>′size<n>m;
          【例2-7】為臨時表空間temp_ren添加數據文件
          SQL>alter tablespace temp_ren add tempfile ′D:\oracle\product\10.2.0\oradata\dalian\temp_ren.dbf′size 100m;
          10.調整臨時表空間的數據文件
          命令格式:
          SQL>alter database tempfile ′<path_and_file_name>′resize<mega_bytes>m;
          【例2-8】調整臨時表空間的數據文件大小
          SQL>alter database tempfile ′D:\oracle\product\10.2.0\oradata\test \temp_ren.ora′ resize 20m;
          11.將表空間的數據文件或臨時文件脫機
          命令格式:
          SQL>alter database  datafile′<path_and_file_name>′ offline;
          SQL>alter database tempfile ′<path_and_file_name>′ offline;
          【例2-9】將表空間的數據文件或臨時文件脫機
          SQL>alter database  datafile ′D:\oracle\product\10.2.0\oradata\dalian\temp_ren.ora′ offline;
          SQL>alter database  tempfile ′D:\oracle\product\10.2.0\oradata\dalian\temp_ren.ora′offline;
          12.將臨時表空間聯機
          命令格式:
          SQL>Alter database tempfile ′<path_and_file_name>′online;
          【例2-10】將臨時表空間聯機
          SQL>Alter database tempfile ′D:\oracle\product\10.2.0\oradata\dalian\temp_ren.ora′ online;
          13.刪除表空間,但不刪除其文件
          命令格式:
          SQL>drop tablespace<tablespace_name>;
          【例2-11】刪除表空間dalianren,但不刪除其文件
          SQL>drop tablespace dalianren;
          14.刪除包含目錄內容的表空間
          命令格式:
          SQL>drop tablespace<tablespace_name>including contents;
          【例2-12】刪除表空間dalianren及其包含的內容
          SQL>drop tablespace dalianren including contents;
          15.刪除包含目錄內容和數據文件在內的表空間
          命令格式:
          SQL>drop tablespace<tablespace_name>including contents and datafiles;
          【例2-13】刪除表空間dalianren及其包含的內容以及數據文件
          SQL>drop tablespace dalianren including contents and datafiles;
          16.當含有參照性約束時,刪除包含目錄內容和數據文件在內的表空間
          命令格式:
          SQL>drop tablespace<tablespace_name>including contents and datafiles cascade constraints;
          【例2-14】將表空間dalianren及其包含的內容、數據文件以及相關約束一同刪除
          SQL>drop tablespace dalianren including contents and datafiles cascade constraints;
          17.表空間更名
          Oracle9i中不能直接將表空間更名。在Oracle 10g可直接更名永久表空間和臨時表空間。但是,system和sysaux表空間不能更名。
          命令格式:
          SQL>alter tablespace<old_tablespacename>rename to<new_tablespacename>;
          【例2-15】將表空間users更改為newusers
          SQL>alter tablespace users rename to newusers;
          在Oracle 10g中,如果一個撤銷表空間通過使用pfile的實例被更名,則警告日志文件中將寫入一個信息,提醒用戶更改undo_tablespace的參數值。
          注意當使用drop tablespace誤刪除了表空間之后,通過查看alert文件可以確定誤操作的時間。該文件位于Oracle_Home\admin\<SID>\bdump目錄下,名為alert_<SID>.log,如:D:\oracle\product\10.2.0\admin\test\bdump目錄下的alert_test.log文件。
          18.多重臨時表空間
          在Oracle 10g中增加了一個表空間組的概念,通過使用表空間組用戶可以使用一個以上的表空間存儲臨時段。表空間組是在第一個表空間被指定給該組時,由系統自動隱式創建的。例如:
            通過添加現有的表空間創建表空間組。
          SQL>alter tablespace temp tablespace group temp_ts_group;
            添加一個新的表空間給該已經創建的表空間組。
          SQL>create temporary tablespace temp2
          tempfile ′D:\oracle\product\10.2.0\oradata\test\temp201.dbf ′ size 20m tablespace group temp_ts_group;
          被指定給組的表空間可在視圖中查詢得到。
          SQL>select*from dba_tablespace_groups;
          group_nametablespace_name
          ------------------------------------------------------------
          temp_ts_grouptemp
          temp_ts_grouptemp2
          2 rows selected.
          SQL>
          一旦創建了表空間組,就可以將其指定給用戶或作為默認的臨時表空間,就像一個表空間一樣。
           ·將表空間組指定給用戶,作為臨時表空間。
          SQL>alter user scott temporary tablespace temp_ts_group;
           ·將表空間組作為默認的臨時表空間。
          SQL>alter database default temporary tablespace temp_ts_group;
           ·表空間也可以從表空間組中移出。
          SQL>alter tablespace temp2 tablespace group;
           ·查詢表空間組。
          SQL>select*from dba_tablespace_groups;
          group_nametablespace_name
          ------------------------------------------------------------
          temp_ts_grouptemp
          1 row selected.
          SQL>
          理論上,一個表空間組包含多少表空間是沒有最大限制的,但必須至少包含一個表空間。當最后一個表空間被刪除后,該表空間組也被隱式地刪除。若該表空間組仍然被指定做臨時表空間,則不可以刪除該組中的最后一個表空間成員。同時,表空間組不能與表空間同名。
          2.1.4表空間的相關查詢
          列出表空間、表空間的文件、分配的空間、空閑空間以及下一個空閑分區,如下所示。
          set linesize 132
          set pagesize 60
          col tablespace_name format a12
          col file_name format a38
          col tablespace_kb heading ′TABLESPACE|TOTAL KB′
          col kbytes_free heading ′TOTAL FREE|KBYTES′
          select ddf.tablespace_name tablespace_name,ddf.file_name file_name,ddf.bytes/1024 tablespace_kb,
          sum(fs.bytes)/1024 kbytes_free,max(fs.bytes)/1024 next_free
          from sys.dba_free_space fs,sys.dba_data_files ddf
          where ddf.tablespace_name=fs.tablespace_name
          group by ddf.tablespace_name,ddf.file_name,ddf.bytes/1024
          order by ddf.tablespace_name,ddf.file_name;
          列出數據文件,表空間名以及大小,如下所示。
          col file_name format a50
          col tablespace_name format a10
          select file_name,tablespace_name,round(bytes/1024000) MB
          from dba_data_files
          order by file_name;
          列出表空間、大小、空閑空間以及空閑空間的百分比,如下所示。
          select ddf.tablespace_name,sum(ddf.bytes) total_space,sum(dfs.bytes) free_space,
          round(((nvl(sum(dfs.bytes),0)/sum(ddf.bytes))*100),2) pct_free
          from dba_free_space dfs,dba_data_files ddf
          where ddf.tablespace_name=dfs.tablespace_name (+)
          group by ddf.tablespace_name
          order by ddf.tablespace_name;
          計算表空間每個數據文件實際的最小空間以及對應的文件名,其大小與磁盤操作系統中顯示的不同,如下所示。該語句運行需要較長時間。
          Select substr(df.file_name,1,70) filename,max(de.block_id*
          (de.bytes/de.blocks)+de.bytes)/1024 min_size
          from dba_extents de,dba_data_files df
          where de.file_id=df.file_id
          group by df.file_name;
          主站蜘蛛池模板: 连云港市| 万全县| 扎囊县| 克拉玛依市| 平武县| 津南区| 玉林市| 金湖县| 松溪县| 吉安市| 隆安县| 邻水| 成都市| 桂林市| 安阳县| 习水县| 葵青区| 当雄县| 英超| 永清县| 柳江县| 浙江省| 阳高县| 大英县| 大庆市| 平塘县| 平阴县| 湟中县| 钟山县| 丰镇市| 哈巴河县| 昭通市| 资溪县| 瓮安县| 宁河县| 阿拉善盟| 舒城县| 盐边县| 潞西市| 崇礼县| 沧州市|