1. 程式人生 > >Oracle 11g R2 DBA 操作指南(13) 表空間與資料檔案管理

Oracle 11g R2 DBA 操作指南(13) 表空間與資料檔案管理

1.Oracle 資料庫的邏輯結構
(邏輯結構)一個數據庫有一個或多個表空間,一個表空間有一個或多個段,而一個段由一個或多個區段組成,一個區段由多個數據庫塊組成,一個數據庫塊由多個作業系統資料庫塊組成。
(物理結構)一個表空間有一個或多個數據檔案,一個數據檔案物理上由作業系統塊組成。
資料庫塊在建立資料庫時由初始化引數DB_BLOCK_SIZE設定,一般大小為4KB或8KB。

SELECT TABLESPACE_NAME, BLOCK_SIZE, CONTENTS FROM DBA_TABLESPACES;

2.表空間的分類以及建立表空間
Oracle資料庫把表空間分為兩類:系統表空間和非系統表空間。

建立表空間的語法為:
CREATE TABLESPACE tablespace_name
[DATAFILE clause ]
[MINIMUM EXTENT integer[k|m] ]
[BLOCKSIZE integer[k] ]
[LOGGING | NOLOGGING]
[DEFAULT storage_clause]
[ONLINE | OFFLINE]
[PERMANENT | TEMPORARY]

建立表空間
create tablespace user_data
datafile 'd:\userdata\userdata1.dbf' size 100M;

3.表空間磁碟管理的兩種方案
①資料字典管理
②本地管理

不使用資料字典管理的表空間提高了系統效率,解決了資料字典的瓶頸問題,但是本地管理的表空間不能隨意更改預設的儲存引數,如初始區段的大小,最大區段數等。(Oracle極力推薦本地管理的表空間)

4.建立表空間
①建立資料字典管理的表空間

create tablespace tianjin_data
datafile 'd:\userdata\tianjin01.dbf' size 100M,
         'e:\userdata\tianjin02.dbf' size 100M,
         'f:\userdata\tianjin03.dbf' size 100M
mininum extent 20k
extent management dictionary
default storage(initial 20k next 20k maxextents 500 pctincrease 0);

②建立本地管理的表空間

create tablespace beijing_data
datafile 'd:\userdata\beijingdata01.dbf' size 100M
extent management local
uniform size 1M;

③建立還原表空間
還原表空間只能存放還原段,不能存放其他任何堆芯。在建立還原表空間時,只能使用DATAFILE子句和EXTENT MANAGEMENT子句。

create undo tablespace user_undo
datafile 'd:\userdata\user_undo.dbf' size 30M;

④建立臨時表空間
在Oracle資料庫中臨時表空間用於使用者的特定會話活動,如使用者會話中的排序操作,排序的中間結果需要儲存在某個區域,這個區域就是臨時表空間。

臨時表空間是使用當前資料庫的多個使用者共享使用的。

create temporary tablespace user_temp
tempfile 'd:\userdata\user_temp.dbf' size 20M
extent management local
uniform size 1M;

通過資料字典檢視v$tempfile來檢視資料檔案資訊
SELECT FILE#, STATUS, ENABLED, BYTES, BLOCK_SIZE, NAME FROM V$TEMPFILE;

在初始化引數檔案中,有一個引數為SORT_AREA_SIZE,這是排序區尺寸大小,為了優化臨時表空間中排序操作的效能,最後將UNIFORM SIZE設定為SORT_AREA_SIZE的整數倍。

檢視當前資料庫的預設臨時表空間
SELECT * FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME LIKE 'DEFAULT%';

切換臨時表空間
alter database default temporary tablespace user_temp;
不能將預設臨時表空間離線。

2016/08/11 21:36:00

建立大檔案表空間
①使用大檔案表空間的一些限制
在Oracle11g中只有本地管理的且段空間自動管理的表空間才能使用大檔案表空間(Big File Tablespace),我們簡稱大檔案表空間為BFT。但是對於本地管理的回滾表空間和臨時表空間,不要求段空間管理的型別,可以使用BFT。

使用大檔案表空間在資料庫開啟時對於DBWR程序的效能會有顯著提高,但是該表空間的大檔案會增加表空間或整個資料庫的備份和恢復時間。
②使用大檔案表空間的優勢

.只需要建立一個數據檔案,大大減少了資料檔案的數量,簡化了資料檔案的管理,顯然資料檔案的減少使得控制檔案的容量也減少,因為控制檔案不需要記錄大量的資料檔案的儲存位置資訊。
.大檔案表空間的容量比普通表空間要大的多,所以其儲存能力顯著提高。一個普通的表空間最多可以用1024個數據檔案,而一個大檔案表空間只包含一個檔案,但是此檔案的容量上限是普通資料檔案的1024倍。

③建立大檔案表空間
建立大檔案表空間有3種方法,下面我們依次介紹這三種方法。

.在建立資料庫時,定義大檔案表空間並把它作為預設表空間。
建立資料庫時設定大檔案表空間的語句
create database 
set default bigfile tablespace tbs_name 
datafile 'd:\bigfile_tbs\bfile_tbs01.dbf' size 2G

一旦建立了預設表空間為大檔案表空間型別,則以後建立的表空間都為大檔案表空間,否則需要手工修改這個預設設定。
.在資料庫成功建立後,使用CREATE TABLESPACE BIGFILE建立大檔案表空間
建立大檔案表空間BIGFILETBS
create bigfile tablespace bigfiletbs
datafile 'd:\bigfile_tbs\bfile_tbs01.dbf' size 2G;

查詢表空間的資料檔案屬性資訊
select tablespace_name,file_name,bytes/(1024*1024*1024) G 
from dba_data_files;

查詢表空間BIGFILETBS的區段管理方式和段空間管理方式
select tablespace_name,initial_extent,contents,extent_management,segment_space_management
from dba_tablespaces
where tablespace_name like 'BIG%';

.通過改變預設表空間為大檔案表空間使得後來建立的表空間都為大檔案表空間。
alter tablespace set default bigfile tablespace;

④更改大檔案表空間的大小。
有兩種方式實現大檔案表空間容量的修改。

.alter tablespace bigfiletbs resize 4G;
.修改大檔案表空間大小為自動擴充套件
alter tablespace bigfiletbs autoextend on next 1G;

查詢當前資料庫的預設表空間的型別
select *
from database_properties
where property_name = ‘DEFAULT_TBS_TYPE’;

SMALLFILE(即小檔案表空間)

5.表空間管理
①離線管理

.查看錶空間lin的狀態
select status,contents,logging 
from dba_tablespaces 
where tablespace_name = 'LIN';

.查看錶空間LIN是否存在
select table_name,owner 
from dba_tables
where tablespace_name = 'LIN';

.將表空間LIN設定為離線狀態
alter tablespace lin offline;

.查詢表空間LIN中的資料檔案的狀態
select file#,name,status
from v$datafile
where file#>10;

.查詢表空間LIN中的表EMPLOYEES
select * 
from scott.employees;

②只讀管理
只讀管理就是把表空間設定為只讀狀態,這樣表空間中的資料只能被使用者讀取,而不能做任何修改或插入操作。

.將USERS表空間設定為只讀狀態
alter tablespace users read only;
.將只讀狀態的表空間users設定為正常狀態
alter tablespace users read write;

6.表空間和資料檔案管理
①修改表空間大小
修改表空間的大小有4種方法:

.在建立表空間時,使用AUTOEXTEND ON 子句使得表空間在需要時可以自動擴充套件;
create tablespace manager_tbs1
datafile 'd:\tbs_manager1\tbs1.dbf'
size 100M
autoextend on;

查看錶空間MANAGER_TBS1的資料檔案的擴充套件方式
select file_name,tablespace_name,blocks,status,autoextensible 
from dba_data_files
where tablespace_name like 'MAN%';

.在建立表空間後,使用alter databse命令修改表空間中的資料檔案為自動擴充套件。
create tablespace manage_tbs
datafile 'd:\tbs_manager\tbs01.dbf'
size 50M
uniform size 1M;

查看錶空間是否可自動擴充套件
select tablespace_name,file_name,autoextensible from dba_data_files;

使用alter database命令修改表空間中的資料檔案為自動擴充套件
alter database datafile 'd:\tbs_manager\tbs01.dbf' autoextend on next 1MB;

.在②中使用alter database命令修改了表空間中的資料檔案可以自動擴充套件,現在我們用另一種方法即在表空間中增加一個數據檔案的方式增加表空間容量。

假設表空間MANAGE_TBS中的資料檔案沒有設定為自動擴充套件。
向表空間MANAGE_TBS中增加了一個數據檔案
alter tablespace manager_tbs
add datafile 'd:\tbs_manager\tbs02.dbf'
size 50MB;

.我們將表空間MANAGE_TBS中的資料檔案d:\tbs_manager\tbs01.dbf修改為100MB(修改前50M)

alter database
datafile 'd:\tbs_manager\tbs01.dbf' resize 100MB;

2016/08/15 22:28:00

②修改表空間的儲存引數
修改表空間的儲存引數只對資料字典管理的表空間有效。

.修改該表空間分配的最小EXTENT尺寸
alter tablespace tianjin_data
minimum extent 2M;

.修改表空間tianjin_data的預設儲存子句
alter tablespace tianjin_data
default storage(initial 2M next 2M maxextents 50);

*在Oracle11g中已經不允許建立資料字典管理的表空間。只有在Oracle 9i以及之前的版本可以建立資料字典管理的表空間。

③刪除表空間
DROP TABLESPACE tablespace_name
[INCLUDING CONTENTS [AND DATAFILES] [CASCADE CONSTRAINTS] ]

.刪除表空間並且刪除該表空間中的資料檔案
drop tablespace manage_tbs including contents and datafiles;

*如果使用drop tablespace manage_tbs指令刪除該表空間則只是刪除了控制檔案中指向該資料檔案的檔案指標,而實際的資料檔案不會被刪除。
*在刪除表空間時,Oracle推薦將表空間置於離線狀態,以避免仍然有事務在操作表空間中的區段。

④遷移資料檔案
遷移資料檔案主要分兩種,即遷移系統表空間中的檔案和遷移非系統表空間中的檔案。

.遷移系統表空間中的資料檔案。
A.我們先檢視當前系統表空間中的資料檔案資訊。
select tablespace_name,file_name,bytes,status
from dba_data_files
where tablespace_name = 'SYSTEM';
B.使用具有DBA許可權的使用者登入資料庫伺服器,然後關閉資料庫。
shutdown immediate;
C.複製SYSTEM表空間的資料檔案到新的目錄下,將該目錄為D:\SYSTEM.
host copy 舊路徑 新路徑;
*因為系統表空間SYSTEM中的資料檔案大小不同,所有需要等待的時間也有差異,如提示【已複製 1個檔案】,說明成功複製了SYSTEM表空間中的檔案。
D。開啟資料庫到MOUNT狀態,然後使用ALTER DATABASE RENAME FILE指令遷移資料檔案。
startup mount;
資料庫裝載完畢
alter database rename file '舊路徑' to '新路徑';
*當開啟資料庫到MOUNT狀態時,啟動例項但是Oracle不會開啟資料檔案,所以遷移資料檔案的指令可以成功執行。
E.開啟資料庫,使用指令ALTER DATABASE OPEN。
alter database open;

.遷移非系統表空間
在Oracle中,要求這種非系統表空間沒有活躍的還原段、臨時段、排序段等,這種非系統表空間才可以遷移。
A.把表空間MANAGE_TBS設定為離線。
alter tablespace manage_tbs offline;
B.複製資料檔案到新的磁碟目錄下,檔名不變。
host copy 舊路徑 新路徑;
C.使用指令ALTER DATABASE RENAME DATAFILE遷移資料檔案。
alter tablespace manage_tbs 
rename datafile '舊路徑' to '新路徑';
D.把表空間聯機
alter tablespace manage_tbs online;

2016/08/16 21:29:00