Oracle基礎結構之表空間

luckyfriends發表於2014-02-24

文章版權所有Jusin Haoluckyfriends),支援原創,轉載請註明。

1. 表空間相關管理 明確表空間和資料檔案的目的

表空間和資料檔案:從邏輯上來講,Oracle將資料儲存在表空間中,實際上儲存在資料檔案中;

表空間:能屬於僅僅一個資料庫,包括一個或更多資料檔案,更進一步被劃分成為儲存的邏輯單元;

資料檔案:能屬於僅僅一個表空間和一個資料庫,模式物件(表、索引)資料的一個儲存處;

使用dbca建立資料庫中的的表空間構成

system:系統表和系統回滾段;

sysaux:某些系統標位置;

temp:臨時段;

undotbs1:回滾段;

users:使用者資料所在

example:示例模式的位置;

表空間概念

表空間型別:永久表空間、臨時表空間、還原表空間;

表空間的定義的管理方式:

1) 本地管理的表空間:自由的盤區資訊在表空間中被管理;

用點陣圖來記錄自由盤區資訊

每一點對映一個塊或若干塊;

點的值表明自由或者已被使用;

2) 詞典管理的表空間:自由盤區資訊在資料詞典中被管理(內部管理)

當空間分配獲得釋放時,適當的系統表被更新;

注意:如果系統表空間(system表空間)是本地管理方式則後續建立的表空間要都是本地管理的表空間;如果系統表空間是字典管理的表空間則後續建立的表空間可以是字典管理的也可以是本地管理的;

本地表空間的盤區管理有兩種方式:統一管理方式、自動管理方式;

使用命令建立表空間

建立普通表空間例子:

create tablespace user_data datafile 'F:\oracle\product\10.2.0\oradata\test\userdata01.dbf' size 10M extent management local segment space management auto;

create temporary tablespace temp_data tempfile 'F:\oracle\product\10.2.0\oradata\test\tempdata01.dbf' size 10M extent management local uniform size 16K;

create tablespace test01 datafile 'F:\oracle\product\10.2.0\oradata\test\test01_01.dbf' size 10M autoextend on next 1m maxsize 50m extent management local segment space management auto;

create tablespace test02 datafile 'F:\oracle\product\10.2.0\oradata\test\test02_01.dbf' size 50M extent management local uniform size 512K;

create tablespace test03 datafile 'F:\oracle\product\10.2.0\oradata\test\test03_01.dbf' size 10M autoextend on extent management local;

create tablespace test04 datafile 'F:\oracle\product\10.2.0\oradata\test\test04_01.dbf' size 10M autoextend on next 2m maxsize 50m autoallocate extent management local segment space management auto;

建立大檔案表空間

create bigfile tablespace bigtbs datafile 'F:\oracle\product\10.2.0\oradata\test\bigtbs_01.dbf' size 50G;

1)segment space management{auto|manual}表明了對segment中自由空間的管理方式(manual、auto),即表明追蹤segment中自由空間(表的剩餘空間)是透過freelist(manual)還是bitmaps(auto),如果設為auto在此tablespace中相應的物件的pctused、freelsit、freelistgroups儲存引數將被忽略;

2)segment space management 子句有一定的限制:only for permanent,local managed tablespace ,並且不能對system表空間使用;

3)Oracle 9i建立表空間預設是manual,10G預設是auto;

4)Oracle表空間由段(segment)組成,段由連續的塊(block)組成,當在表空間裡建立一個table、index等物件的時候,對於使用者而言稱其為物件,但是對於Oracle儲存的角度來說是segment;Oracle最小的讀寫單位是block,但是在為物件(segment)分配空間時單位是extent,這樣做是為了效率;

5)uniform size 5M表示是表空間未滿的情況下以5M的盤曲分配空間給段;autoallocate表示由Oracle自動分配盤區的大小(預設是自動的)

6)autoextend on next 64K表示表空間滿後,以64K的盤區單位為表空間擴充套件空間;

7)建立大檔案表空間可以指定盤區分配方式(如uniform或autoallocate)但是不能將段管理方式指定為manual;

8)建立臨時表空間時盤區分配方式不能指定為autoallocate,只能uniform(預設是manual);

9)建立撤銷表空間不能使用uniform指定統一的區大小;

、管理表空間 改變表空間狀態

表空間狀態:讀寫(read write)、只讀(read only)、離線(offline)

聯機狀態:alter tablespace test01 online;

離線狀態:alter tablespace test01 offline;

注意:表空間離線狀態下資料訪問是被禁止的,system表空間和包含回滾段的表空間不能被離線;

只讀表空間就是隻允許從中讀取資料,而不能寫資料的表空間,這類表空間通常用於儲存一些不允許使用者修改的資料;

alter tablespace test01 read only;

alter tablespace test01 read write;

刪除表空間

刪除表空間和之上的物件及表空間包含的資料檔案:drop tablespace user_data including contents and datafiles;

如果表空間中有內容則刪除表空間必須加上contents這項;

如果誤刪了某個不重要的表空間的資料檔案時想要刪除表空間不能或者重啟資料庫後只能到mount狀態不能開啟資料庫(同時不能刪除表空間),這時需要使表空間的資料檔案離線後再刪除或開啟資料庫後刪除:

alter database datafile 5 offline;

alter database datafile ‘/u01/test01.dbf’ offline drop;

如果對sysaux表空間執行了offline drop則在online的時候會提示進行介質恢復(recover database)

獲得表空間資訊

dba_tablespace

v$datafile

dba_data_files;

dba_temp_files;

v$tempfile

改變表空間的尺寸

> 為表空間建立新的資料檔案

alter tablespace my_data add datafile ‘f:\oracle\oradata\test\test01_02.dbf’ size 200m;

> 手工改變資料檔案尺寸

alter database datafile ‘f:\oracle\oradata\test\test01_02.dbf’ resize 200m;

> 使表空間自動擴充套件

alter database datafile ‘f:\oracle\oradata\test\test01_02.dbf’ autoextend on next 10m maxsize 500M;

alter database datafile ‘f:\oracle\oradata\test\test01_02.dbf’ autoextend off;

? 刪除資料檔案

alter tablespace test01 drop datafile ‘f:\oracle\oradata\test\test01_02.dbf’;

(刪除表空間的資料檔案前提是這個資料檔案中沒有資料並且該資料檔案正常(沒有離線、沒有壞))

移動資料檔案

方法1)

? 表空間必須離線(此時資料庫open)

? 目標資料檔案必須存在(複製資料檔案到目標位置)

? 用命令修改控制檔案指向:alter tablespace my_data rename datafile ‘f:\oracle\oradata\test\test01_02.dbf’ to ‘D:\oradata\test\test01_02.dbf’;’;

? 表空間聯機

這種情況下只能移動除系統表空間(system表空間)和回退表空間以外的其他資料檔案;

方法2)

? 資料庫要在mount狀態

? 目標資料檔案必須存在(複製資料檔案到目標位置)

? alter database rename file ‘f:\oracle\oradata\test\system01.dbf’ to ‘d:\ oradata\test\system01.dbf’ ;

? alter database open;

這種情況下可以一定包括系統表空間、回退表空間在內的所有資料檔案;

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

相關文章