介紹
表空間是數據庫的邏輯組成部分
從物理上將:數據庫數據存放在數據文件中
從邏輯上將:數據庫則是存放在表空間中
表空間由一個或是多個數據文件組成
數據庫的邏輯結構
介紹:
Oracle中邏輯結構包括表空間、段、區、塊
說明:
數據庫由表空間構成
而表空間又是由段構成
而段又是由區構成
而區又是由Oracle塊構成
這樣的一種結果,可以提高數據庫的效率
表空間
介紹:
表空間用於從邏輯上組織數據庫的數據
數據庫邏輯上是由一個或是多個表空間組成的
表空間的作用:
1、控制數據庫占用的磁盤空間
2、dba可以將不同數據類型部署到不同的位置。這樣有利於提高i/o性能,同時利於備份和恢復等管理操作
建立表空間
建立表空間是使用create tablespace命令完成的,要注意時,一般情況下,建立表空間是特權用戶或是dba來執行的,如果用其它用戶來創建表空間,則用戶必須要具有create tablespace的系統權限
建立數據表空間
在建立數據庫后,為便於管理表,最好建立自己的表空間
create tablespace 表空間名 datafile '數據文件路徑' size 數據文件的大小 uniform size 區的大小;
create tablespace tangtao001 datafile 'd:\t001.dbf' size 20m uniform size 128k;
使用數據表空間
向新建的表空間添加表:
create table myDept(deptno number(4),dname varchar2(15),loc varchar2(13)) tablespace tangtao001;
說明:執行完上述命令后,會建立名稱為tangtao001 的表空間,並為該表空間建立名稱為t001.dbf的數據文件,區的大小為128k
1、顯示表空間信息
a) 查詢數據字典視圖dba_tablespaces。顯示表空間信息
select tablespace_name from dba_tablespaces;
2、顯示表空間所包含的數據文件
a) 查詢數據字典視圖dba_data_files,可以顯示表空間所包含的數據文件
select file_name,bytes from dba_data_files where tablespace_name='表空間名';
改變表空間的狀態
當建立表空間時,表空間處於聯機的(online)狀態,此時該表空間是可以訪問的,並且該表空間是可以讀寫的,即可以查詢該表空間的數據,而且還可以在表空間執行各種語句。但是在進行系統維護或是數據維護時,可能需要改變表空間的狀態,一般情況下,由特權用戶或是dba來操作
1、使表空間脫機
alter tablespace 表空間名 offline;
2、使表空間聯機
alter tablespace 表空間名 online;
3、只讀表空間
a) 當建立表空間時,表空間可以讀寫,如果不希望在該表空間上執行update、delete、insert操作,那么可以將該表空間修改為只讀
alter tablespace 表空間名 read only;
案例:
1、知道表空間名。顯示該表空間的所有表
select * from tall_tables where tablespace_name='表空間名';
2、知道表明,查看該表屬於哪個表空間
select tablespace_name,table_name from user_tables where table_name='emp';
注意:
通過2,可以知道scott.emp是在system這個表空間上,現在可以將system改為只讀,但是不會成功。因為system是系統表空間,如果是普通表空間,可以將其設為只讀
刪除表空間
一般情況下,有特權用戶或是dba來操作,如果是其它用戶操作,那么要求用戶具有drop tablespace系統權限
drop tablespace 表空間名 including contents and datafiles;
說明:
Including contents 表示刪除表空間,刪除該表空間的所有數據庫對象,而datafiles表示將數據庫文件也刪除
擴展表空間
表空間是由數據文件組成的,表空間的大小實際上就是數據文件相加后的大小。那么我們可以想象。假定表employee存放到tangtao001表空間上,初始大小就是2m。當數據滿2m空間后,如果在向employee表插入數據,這樣就會顯示空間不足的錯誤
案例說明:
1、建立一個表空間tangtao001
2、在該表空間上建立一個普通標mydment 其結構和dept一樣
3、向該表中加入數據insert into mydment select * from dept;
4、當一定時候就會出現無法擴展的問題,怎么辦?
5、就擴展該表空間,為其增加更多的存儲空間。有三種方法:
1、增加數據文件
alter tablespace 表空間名 add datafile '數據文件存放路徑' size 數據文件大小;
2、增加數據文件的大小
alter tablespace 表空間名 add datafile '數據文件存放的路徑' resize 數據文件新的大小;
這里需注意,數據文件的大小不要超過500m
3、設置文件的自動增長
alter tablespace 表空間名 add datafile '數據文件存放路徑' autoextend on next 每次增加的大小 maxsize 數據文件大小的最大值;
移動數據文件
有時,如果數據文件所在的磁盤損壞時,該數據文件不能再使用,為了能夠重新使用,需要將這些文件的副本移動到其它的磁盤,然后恢復
案例說明:
1、確定數據文件所在的表空間
select tablespace_name from dba_data_files where file_name='d:\t01.dbf';
2、使表空間脫機
a) 確保數據文件的一致性,將表空間轉變為offline的狀態
alter tablespace tangtao001 offline;
3、使用命令移動數據文件到指定的目標位置
host move d:t01.dbf c:t01.dbf;
4、執行alter tablespace命令
a) 在物理上移動了數據后,還必須執行alter tablespace命令對數據庫文件進行邏輯修改
alter tablespace tangtao001 rename datafile 'd:t01.dbf' to 'c:t01.dbf';
5、使得表空間聯機
a) 在移動了數據文件后,為了使用戶可以訪問該表空間,必須將其轉變為online的狀態
alter tablespace tangtao001 online;
表空間小結
1、了解表空間和數據文件的作用
2、掌握常用表空間,undo表空間和臨時表空間的建立方法
3、了解表空間的各個狀態
a) Online
b) Offline
c) Read write
d) Read only
4、了解移動數據文件的原因,即使用alter tablespace和alter datatable命令移動數據文件的方法