基礎知識5——建立和管理表空間

與刃爭鋒發表於2014-01-07
建立和管理表空間
表空間時模式資料的倉庫,包括資料字典.所有資料庫必須有SYSTEM和SYSAUX表空間,實際中還有臨時表空間和撤銷表空間.在建立資料庫時,通常已經建立了這4個表空間.此後DBA可以為使用者資料建立更多表空間,為撤銷和臨時資料建立更多表空間.

1   CREATE SMALLFILE TABLESPACE "NEWTBS"
2   DATAFILE 'D:\oracle\product\10.2.0\oradata\bob\newtbs01.dbf'
3   SIZE 100M AUTOEXTEND ON NEXT 10M MAXSIZE 200M
4   LOGGING
5   EXTENT MANAGEMENT LOCAL
6   SEGMENT SPACE MANAGEMENT AUTO
7   DEFAULT NOCOMPRESS;


1-表空間預設是smallfile,可以由多個資料檔案組成,bigfile下只有一個資料檔案
2-資料檔案的名稱和位置
3-建立的資料檔案大小為100MB,變滿後自動擴大10MB,最大為200MB,預設方式下不啟用自動擴充套件
4-表空間中針對段的所有操作都生成重做,預設屬性,也可為極少操作比如生成索引等禁用重做的生成
5-表空間將使用點陣圖來分配區間,預設方式
6-表空間中的段將使用點陣圖來跟蹤塊的使用情況,預設方式
7-表空間中的段不壓縮,預設方式

所有表空間都應該在本地管理!

更改表空間
重新命名錶空間及其資料檔案
ALTER TABLESPACE tablespaceoldname RENAME TO tablespacenewname;
改起來挺簡單,但是很多站點依賴與命名約定將表空間與資料檔案關聯在一起,要重新命名資料檔案必須使資料檔案離線. 
具體請看:

http://blog.itpub.net/25025926/viewspace-1064894/

使表空間聯機或離線
ALTER TABLESPACE tablespacename OFFLINE [ NORMAL | IMMEDIATE | TEMPORARY ];

normal離線預設方式,強制實施針對所有表空間資料檔案的檢查點,包含表空間的塊的資料庫緩衝區快取中的每個髒緩衝區都將寫入到資料檔案中,此後表空間和資料檔案處於離線狀態.
immediate很極端,立即使表空間和資料檔案離線,不會轉儲任何髒緩衝區,這麼整資料檔案將受到損壞,聯機之前必須應用重做日誌的變更向量進行恢復,只有檔案已損壞,無法完成檢查點時,才會這麼整.
temporary離線針對所有可以執行檢查點操作的所有檔案實施檢查點,然後按順序使表空間及檔案離線.任何受損的檔案將立即離線.

將表空間標記為只讀:
ALTER TABLESPACE tablespacename [ READ ONLY | READ WRITE ]

只讀後,不能用DML更改,但能刪除,費解麼?因為刪除表並不對錶產生實際影響,針對資料字典的事務,會刪除描述表及其列的行;


重調錶空間大小
可以向其新增資料檔案,也可調整現有資料檔案的大小. 如果建立檔案時使用AUTOEXTEND,則可根據需要自動向上調整資料檔案的大小,
否則只能使用alter database命令手動方式更改:

ALTER DATABASE DATAFILE filename RESIZE n [ M | G | T ];    --MGT指的是檔案大小MB,GB,TB

比如來個例子:


alter database datafile 'd:\oracle\user02.dbf' resize 100m;


要向表空間新增一個檔案:

alter tablespace tablespacename 
add datafile 'D:\oracle\newfile02.dbf' size 100m;

可新增自動擴充套件

alter database datafile  'D:\oracle\newfile02.dbf' autoextend on next 100m maxsize 2g;


更改警報閾值
例項的MMON程式準實時監控每個表空間的滿度,預設表空間滿度超過85%,將發出警報;超過97%發出嚴重警報.
建議用em管理警報閾值


刪除表空間

DROP TABLESPACE tablespacename [ INCLUDING CONTENTS [ AND DATAFILES ] ];

如不指定INCLUDING CONTENTS關鍵字,表空間包含任何物件,則提示刪除失敗;如沒指定AND DATAFILES關鍵字,則刪除表空間
及其內容,但資料檔案還保留在磁碟上,需作業系統命令刪除(windows平臺必須手動刪除資料檔案).




OMF
有了oracle管理的檔案(oracle managed file OMF),DBA將不必瞭解有關檔案系統的任何知識,將以完全自動的方式完成資料庫檔案的建立,要啟用OMF,請設定一部分或所有下列例項引數:

db_create_file_dest                     --指定所有資料檔案的預設位置
db_create_online_log_dest_1     --指定聯機重做日誌檔案的預設位置
db_create_online_log_dest_2
db_create_online_log_dest_3
db_create_online_log_dest_4
db_create_online_log_dest_5
db_recovery_file_dest               --設定歸檔重做日誌檔案和備份檔案的預設位置.


除設定預設檔案位置外,OMF還生成檔名並在預設方式下設定檔案大小. 




又到了練習時間了,整個例子建立表空間並更改其屬性,此後啟用OMF

建立表空間

create tablespace newtbs
datafile 'D:\oracle\product\10.2.0\oradata\bob\newtbs_01.dbf' size 20m
extent management local autoallocate
segment space management auto;


在新的表空間建立表,並確定第一個區間的大小

create table newtab (c1 date) tablespace newtbs;

select extent_id,bytes from dba_extents
where owner='SYS' and segment_name='NEWTAB'



手動新增區間,重複執行以下命令來觀察每個新區建的大小:

alter table newtab allocate extent




使表空間離線

alter tablespace newtbs offline/online

設為只讀,再改為可讀寫

alter tablespace newtbs read only/read write


啟用OMF來建立資料檔案

alter system set db_create_file_dest='D:\oracle\product\10.2.0\oradata\bob';

使用最少的語法建立表空間

create tablespace omftbs;


確定OMF檔案的特性

select file_name,bytes,autoextensible,maxbytes,increment_by
from dba_data_files where tablespace_name='OMFTBS'

調整OMF檔案,使其更合理

alter database datafile
'D:\oracle\product\10.2.0\oradata\bob\omf.dbf' resize 500m   soso 

刪除表空間

drop tablespace omftbs including contents and datafiles;




管理表空間中的空間

區間管理:始終應該用本地管理,不要是用字典管理.

管理段空間:始終應該使用自動管理

要檢視任何表空間是否使用手動管理,請用此命令:


select tablespace_name,segment_space_management from dba_tablespaces
TABLESPACE_NAME    SEGMENT_SPACE_MANAGEMENT
-----------------------------------
SYSTEM    MANUAL
UNDOTBS1    MANUAL
SYSAUX    AUTO
TEMP    MANUAL
USERS    AUTO
EXAMPLE    AUTO
BOBTEST    AUTO






繼續練習,使用非預設的手動空間管理建立表空間:


create tablespace manualsegs segment space management manual;

手動技術確認新表空間存在

select segment_space_management from dba_tablespaces
where tablespace_name='MANUALSEGS';

在表空間中建立表和索引:

create table mantab (c1 number) tablespace manualsegs;
create index mantabi on mantab(c1) tablespace manualsegs;

新建將使用自動段空間管理(預設方式)的表空間:

create tablespace autosegs;



將物件移入新表空間

alter table mantab move tablespace autosegs;
alter index mantabi rebuild online tablespace autosegs;

確認物件位於正確的表空間中:

select tablespace_name from dba_segments
where segment_name like 'MANATAB%';

刪除原始的表空間:

drop tablespace manualsegs including contents and datafiles;

將新表空間重新命名為原來的名稱:

alter tablespace autosegs rename to manualsegs;

刪除表空間進行清理

drop tablespace manualsegs including contents and datafiles;


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25025926/viewspace-1067918/,如需轉載,請註明出處,否則將追究法律責任。

相關文章