2014-07-24 BaoXinjian
一、摘要
我們知道oarcle數據庫真正存放數據的是數據文件(data files);
Oarcle表空間(tablespaces)實際上是一個邏輯的概念,他在物理上是並不存在的,那麼把一組data files 捻在一起就成為一個表空間;
在ORACLE數據庫中,所有數據從邏輯結構上看都是存放在表空間當中,當然表空間下還有段、區、塊等邏輯結構;
從物理結構上看是放在數據文件中。一個表空間可由多個數據文件組成;
1. 表空間屬性
2. 基本的表空間(系統中默認創建的幾個表空間:)
3. 表空間的分類
4. 表空間的管理
5. 基本操作
二、結構分析
1. 表空間和數據文件的關系
2. 數據庫存儲結構
三、案例1 - 創建表空間
1. 創建表空間,並指定兩個數據庫文件
1 CREATE TABLESPACE BXJ_DATA 2 DATAFILE '/oradata/BXJ_DATA_001.dbf' 3 SIZE 100M 4 EXTENT MANAGEMENT LOCAL 5 SEGMENT SPACE MANAGEMENT AUTO ONLINE; 6 7 ALTER TABLESPACE BXJ_DATA 8 ADD DATAFILE '/oradata/BXJ_DATA_001.dbf' 9 SIZE 100M 10 AUTOEXTEND OFF;
四、案例2 - 表空間管理
1. 常用的表查詢
2. 查看表空間使用情況
3. 計算表空間使用情況(考慮了數據文件自動增長情況)
五、案例3 - 維護表空間
1. 表空間狀態有下面幾種狀態:online、offline、read only、read write
SELECT FILE#, STATUS, ENABLED FROM V$DATAFILE
2. 設置為脫機狀態
SQL>ALTER TABLESPACE TBS_DM_DAT OFFLINE IMMEDIATE;
3. 設置為聯機狀態
SQL> ALTER TABLESPACE TBS_DM_DAT ONLINE;
4. 設置為只讀狀態
SQL>ALTER TABLESPACE TBS_DM_DAT READY ONLY;
5. 設置為讀寫狀態
SQL>ALTER TABLESPACE TBS_DM_DAT READ WRITE;
6. 修改表空間名稱
在ORACLE 10g 之前,表空間的名稱是不能被修改的。在ORACLE 11G中,通過ALTER TABLESPACE 語句中使用RENAME子句,數據庫管理員可以修改表空間的名稱
7. 修改表空間自動增加打開
ALTER DATABASE DATAFILE '/database/oracle/oradata/gsp/tbs_dm_data_002.dbf' AUTOEXTEND ON;
8. 修改表空間自動增加關閉
ALTER DATABASE DATAFILE '/database/oracle/oradata/gsp/tbs_dm_data_002.dbf' AUTOEXTEND OFF;
六、案例4 - 表空間配額度
表空間不足與用戶配額不足是兩種不同的概念。表空間的大小是指實際的用戶表空間的大小,而配額大小指的是用戶指定使用表空間的的大小。兩者的解決方式亦不相同
1. 查看用戶和表弓箭配額
********************作者: 鮑新建********************
參考: http://www.cnblogs.com/kerrycode/p/3418694.html
當你用system創建了message表空間,和message用戶後,如果你不從system用戶退出,再以message用戶登陸,那麼,運行以上創建表的指令,所創建的表userinfo,就會被system用戶所擁有。所以,這個表應該在system表空間裡。在這樣的情況下,用戶message與這張表沒有任何關系。下次用message登陸時,message在一般情況下,不能往userinfo表裡插記錄,除非system給予message用戶特別許可,(GRANT insert on system.userinfo TO message;)。如果system給予了這種許可,用戶message所插的一切記錄,都會儲存在system表空間裡,而不是在message表空間中。
顯然,這是很糟糕的情況。一般情況下,應該避免讓普通用戶把數據儲存在system表空間裡。現有二種方法可以避免以上的情況:
1.從system用戶退出,再以message用戶登陸,然後運行以上創建表的指令。
2.依然是system用戶登陸,修改上述創建表的指令。在表名前,加上用戶名,並且在最後注明表空間名。請看下例:
CREATE TABLE message.userinfo
(
id VARCHAR2(32) NOT NULL,
name VARCHAR2(32) NOT NULL,
password VARCHAR2(32) NOT NULL,
CONSTRAINT userinfo_pk PRIMARY KEY (id),
CONSTRAINT userinfo_unique_name UNIQUE ( name )
)
TABLESPACE message;
用上述二種方法所創建的表userinfo,都會屬於用戶message。因此,message所插的一切記錄,都會儲存在message表空間中。
概念:表空間實質是組織數據文件的一種途徑,Oracle就是通過表空間這個數據庫對象完成對數據的組織的。在將數據插入Oracle數據庫之前,必須首先建立表空間,然後將數據插入表空間的一個對象中。解釋數據庫、表空間、數據文件、表、數據的最好辦法就是想象一個裝滿東西的櫃子。數據庫其實就是櫃子,櫃中的抽屜是表空間,抽屜中的文件夾是數據文件,文件夾中的紙是表,寫在紙上的信息就是數據。目的和意義:方便管理,就像每個城市會劃分成很多區,每個區又有很多街道一樣目的和意義具體體現在他的用途上:-目錄表空間
每個數據庫只有一個目錄表空間,它是在發出 CREATE DATABASE 命令時創建的。目錄表空間被 DB2 命名為 SYSCATSPACE,它保存了系統目錄表。總是在創建數據庫時創建該表空間。-常規表空間
常規表空間保存表數據和索引。它還可以保存諸如大對象(Large Object,LOB)之類的長數據,除非這些數據顯式地存儲在長表空間中。如果某些表空間是數據庫管理的空間(Database Managed Space,DMS),則可以將表及其索引分別放到單獨的常規表空間中。我們將在本文後面定義 DMS 和系統管理的空間(System Managed Space,SMS)之間的區別。每個數據庫中必須至少有一個常規表空間。創建數據庫時指定該表空間的缺省名為 USERSPACE1。-長表空間
長表空間用於存儲長型或 LOB 表列,它們必須駐留在 DMS 表空間中。它們還可以存儲結構化類型的列或索引數據。如果沒有定義長表空間,那麼將把 LOB 存儲在常規表空間中。長表空間是可選的,缺省情況下一個都不創建。-系統臨時表空間
系統臨時表空間用於存儲 SQL 操作(比如排序、重組表、創建索引和連接表)期間所需的內部臨時數據。每個數據庫必須至少有一個系統臨時表空間。隨數據庫創建的系統臨時表空間的缺省名為TEMPSPACE1。-用戶臨時表空間
用戶臨時表空間存儲已聲明的全局臨時表。創建數據庫時不存在用戶臨時表空間。至少應當創建一個用戶臨時表空間以允許定義已聲明的臨時表。用戶臨時表空間是可選的,缺省情況下一個都不創建。