表空間和數(shù)據(jù)文件
1、Database 按邏輯劃分(一對多): Tablespace(邏輯區(qū)域:表空間) > Segment(某一個特定邏輯結(jié)構(gòu)所占用空間的集合:段【table/index/temp/rollback】) > Extent(空間分配單位:分區(qū))> Oracle Block(Oracle使用和存儲單位:塊) > OS Block
Tablespace 按物理結(jié)構(gòu)劃分(一對多):Datafile > OS Block
(注意:分區(qū)單位=塊的整數(shù)倍。)
sql>select * from v$datafile
sql>select t1.name,t2.name from v$tablespace t1,v$datafile t2 where t1.ts#=t2.ts#
sql>alter tablespace users add datafile 'd:\oracle\oradata\fox\users02.dbf' size 10m
2、系統(tǒng)表空間和非系統(tǒng)表空間
(SYSTEM TABLESPACE /NON-SYSTEM TABLESPACE)
system tablespace 系統(tǒng)表空間:數(shù)據(jù)庫信息、數(shù)據(jù)字典、系統(tǒng)回滾段(dba_rollback_seqs)
non-system tablespace 非系統(tǒng)表空間:分離段(只讀和讀寫數(shù)據(jù)分開)、方便管理每個表空間、控制用戶的空間限額
sql>alter user kong quota 10m on users;
3、創(chuàng)建表空間:
語法:
CREATE Tablespace XXX
[datafile 'xxx']--OMF
SIZE xxx--kb,mb
EXTENT MANAGEMENT local/dictionary --分區(qū)管理(local 本地管理/dictionary 字典管理)
DEFAULT STORAGE (XXX) ---默認(rèn)管理方式(只用于字典管理分區(qū)):initial/next/pctincrease/min extents/max extents...
==================================
CREATE TABLESPACE userdata
DATAFILE '/u01/oradata/userdata01.dbf' SIZE 100M
AUTOEXTEND ON NEXT 5M MAXSIZE 200M;
==================================
sql> create tablespace kong
datafile 'd:\oracle\oradata\fox\kong.dbf' size 5m
extent management dictionary
default storage (initial 100k next 100k
pctincrease 10)
offline
本地管理:自由空間記錄在bitmap位圖中(0/1)。每一個bit響應(yīng)一個塊或塊的集合。bit值指示它是否
free 或 used??臻g分配時或回收時并不需要和數(shù)據(jù)字典表打交道,不跟系統(tǒng)表產(chǎn)生資源征用,不會產(chǎn)生回滾數(shù)據(jù)(不需要修改數(shù)據(jù)表),不會產(chǎn)生遞歸資源的征用。
兩種分配方式:UNIFORM <統(tǒng)一分配>/ autoallocate <自動分配>
sql>create tablespace kong1
datafile 'd:\oracle\oradata\fox\kong1.dbf' size 5m
extent management local
uniform size 1m
sql> create tablespace kong2
datafile 'd:\oracle\oradata\fox\kong2.dbf' size 5m
extent management local autoallocate;
字典管理:默認(rèn)管理方式。自由空間記錄在數(shù)據(jù)字典表中。產(chǎn)生回滾數(shù)據(jù)。也會產(chǎn)生不必要的遞歸空間所帶來的負(fù)擔(dān)。優(yōu)點(diǎn):可以控制表空間分配和使用情況。每個段存儲在同一個表空間中可以有不同的存儲參數(shù)。缺點(diǎn):產(chǎn)生碎片,存在碎片壓縮的問題。
=======================
CREATE TABLE userdata DATAFILE '/u01/oradata/userdata01.dbf' SIZE 500M
EXTENT MANAGEMENT DICTIONARY
DEFAULT STORAGE(initial 1M NEXT 1M )
=======================
字典管理方式更改存儲參數(shù)設(shè)定:
ALTER TABLESPACE userdata MINIMUM EXTENT 2M
ALTER TABLESPACE userdata DEFAULT STORAGE(INITIAL 2M NEXT 2M MAXEXTENTS 999);
sql>alter tablespace kong
minimum extent 10m;
sql>alter tablespace kong
default storage(initial 1m
next 1m
pctincrease 20);
4、Undo(回滾) 表空間:
用來儲存Undo段(回滾段),不可以保存其他任何對象,分區(qū)使用本地管理,只能使用DATAFILE、EXTENT
MANAGEMENT 來創(chuàng)建回滾Undo表空間。
===================================
CREATE UNDO TABLESPACE undo1 DATAFILE '/u01/oradata/undo01.dbf' SIZE 40m
================================
回滾Undo段:環(huán)路順序循環(huán)使用,處理舊值。提供讀一致性,允許回滾section
sql>delete kong.sales; //刪除數(shù)據(jù)操作
sql>select * from kong.sales; //只要沒有commit,就將舊數(shù)據(jù)保存在回滾段中。
sql>rollback; //舊數(shù)據(jù)從回滾段中恢復(fù)
sql>select * from kong.sales; //舊數(shù)據(jù)重現(xiàn)
sql>show parameter undo
sql>create undo tablespace kong3
datafile 'd:\oracle\oradata\fox\kong3.ora' size 5m
extent management local
sql>create table tt1(id int) tablespace kong3; //此時不能在撤銷表空間中創(chuàng)建段。
5、Temporary Tablespace 臨時表空間
用于排序,不可以存儲任何其他永久對象。建議使用本地管理分區(qū)extends。
sql> select * from kong.sales order by qty desc; //邏輯上的排序(數(shù)量上的代謝哦?。?,Oracle嘗試儲存在內(nèi)存區(qū)域中進(jìn)行,如果內(nèi)存區(qū)域不夠,就使用臨時段(temp segment)來支持排序.
sql>create temporary tablespace kong4
tempfile 'd:\oracle\oradata\fox\kong4.ora' size 5m
extent management local;
sql>create table tt1 (id int) tablespace kong4; //不允許將永久對象存放在Temporarytablespace中。
默認(rèn)(Default)臨時表空間:創(chuàng)建用戶時,允許你指定一個datase范圍的一個默認(rèn)的臨時表空間,避免了使用一個系統(tǒng)的表空間存儲臨時數(shù)據(jù)??梢允褂肅reate database 和Alter database 命令來創(chuàng)建和修改臨時表空間。默認(rèn)的臨時表空間是本地管理的。
sql>alter databse default temporary tablespace kong4; //指定表空間為臨時表空間。
默認(rèn)臨時表空間的約束限制條件:不考慮備份,不能drop刪除,不能只讀,不能離線,不能修改默認(rèn)表空間為永久表空間。
sql>alter tablespace kong4 offline; //不允許離線
sql>alter tablespace kong4 read only; //不允許只讀
sql>drop tablespace kong4;// 不允許刪除
6、OFFLINE STATUS 離線狀態(tài)(可以部分的關(guān)閉數(shù)據(jù)庫):
不是所有表空間都可以是離線狀態(tài)。系統(tǒng)表空間、活動的Undo回滾段、默認(rèn)臨時表空間就無法處于離線狀態(tài)。
sql> select * from kong.sales;
sql> alter tablespace users offline; //設(shè)置表空間離線
sql> select * from kong.sales //無法讀取表數(shù)據(jù)
sql> alter tablespace users online; //關(guān)閉離線狀態(tài)打開在線狀態(tài)。
7、READ ONLY Tablespace只讀狀態(tài)的表空間:表空間僅僅用于讀操作。數(shù)據(jù)對象能從只讀表空間中刪除。
建立一個只讀表空間放到可移動只讀媒介上(如光盤)方式:
ALTER TABLESPACE ...READ ONLY
MOVE the data file to the WORM drive
ALTER TABLESPACE..RENAME DATAFILE..;
sql>alter tablespace users read only;
sql>drop table employees;
sql>run
8、刪除表空間:
從數(shù)據(jù)字典中刪除表空間,表空間內(nèi)容從數(shù)據(jù)字典中刪除,也可以將物理數(shù)據(jù)文件一起刪除。
================================
DROP TABLESPACE userdata
INCLUDING CONTENTS AND DATAFILES;
================================
sql>conn sys/admin1@fox as sysdba
sql>grant dba to kong;
sql>create table tt1 (id int) tablespace kong1; //在表空間kong1上創(chuàng)建表tt1
sql>drop tablespace kong1; //刪除表空間kong1
sql>input INCLUDING contents
sql>run //只刪除內(nèi)容
sql>drop tablespace kong2 including contents and datafiles; //刪除了表空間kong2的內(nèi)容和物理數(shù)據(jù)文件。
9、擴(kuò)展表空間:自動/手工(resize 改變大小 或 添加新的數(shù)據(jù)文件)
(1)自動擴(kuò)展 AUTOEXTEND
===================
ALTER DATABASE DATAFILE
' /u01/oradata/userdata02.dbf' SIZE 200M
AUTOEXTEND ON NEXT 10M MAXSIZE 500M;
========================
sql>alter database datafile 'd:\oracle\oradata\fox\kong.dbf'
2 autoextend on;
sql>del 2
sql>input resize 50m
sql>l
sql>run //DML/query訪問的文件11處于脫機(jī)狀態(tài)
sql>alter tablespace kong online; //將表空間設(shè)置為在線狀態(tài)。
sql>alter database datafile 'd:\oracle\oradata\fox\kong.dbf' resize 50m;
sql>alter tablespace kong
add datafile 'd:\oracle\oradata\fox\konga.dbf' size 10m; //添加新的文件
10、移動數(shù)據(jù)文件:
ALTER TABLESPACE 表空間必須是離線的。目標(biāo)物理數(shù)據(jù)文件必須存在。
sql> alter tablespace kong offline;
手動修改konga.dbf 改為 kong01.dbf
sql> alter tablespace kong rename datafile 'd:\oracle\oradata\fox\konga.dbf' to 'd:\oracle\oradata\fox\kong01.dbf'
【注意】sql> alter tablespace system offline; //數(shù)據(jù)字典內(nèi)容是必須的,不能離線。
比較:ALTER DATABASE 數(shù)據(jù)庫必須shutdown并且啟動到mounted狀態(tài) ,目標(biāo)數(shù)據(jù)文件必須存在。
ALTER DATABASE RENAME FILE '/u01/oradata/system01.dbf' TO '/u03/oradata/system01.dbf';
11、OMF(Oralce Managed Files): Oracle管理文件機(jī)制
sql>alter system set db_create_file_dest='d:\oracle\oralog';
sql>create tablespace omftb; //默認(rèn)配置文件100MB
sql>drop tablespace omftb; //刪除表空間,相應(yīng)的配置文件也一起刪除。
12、獲得表空間信息:
表空間信息:DBA_TABLESPACES \V$TABLESPACE
數(shù)據(jù)文件信息:DBA_DATA_FILES\V$DATAFILE
臨時文件信息:DBA_TEMP_FILES\V$TEMPFILE
sql>select * from dba_tablespaces;
sql>select * from v$tablespace;
sql>select * from v$datafile;
sql>select * from dba_data_files;