Oracle培訓教程:表空間
最新學訊:近期OCP認證正在報名中,因考試人員較多請盡快報名獲取最近考試時間,報名費用請聯系在線老師,甲骨文官方認證,報名從速!
我要咨詢Oracle培訓教程:表空間,在數據庫系統中,存儲空間是較為重要的資源,合理利用空間,不但能節省空間,還可以提高系統的效率和工作性能。Oracle可以存放海量數據,所有數據都在數據文件中存儲。而數據文件大小受操作系統限制,并且過大的數據文件對數據的存取性能影響非常大。同時Oracle是跨平臺的數據庫,Oracle數據可以輕松的在不同平臺上移植,那么如何才能提供統一存取格式的大容量呢?Oracle采用表空間來解決。
表空間只是一個邏輯概念,若干操作系統文件(文件可以不是很大)可以組成一個表空間。表空間統一管理空間中的數據文件,一個數據文件只能屬于一個表空間。一個數據庫空間由若干個表空間組成。如圖所示:
圖1 數據空間、表空間和數據文件
Oracle中所有的數據(包括系統數據),全部保存在表空間中,常見的表空間有:
·系統表空間:存放系統數據,系統表空間在數據庫創建時創建。表空間名稱為SYSTEM。存放數據字典和視圖以及數據庫結構等重要系統數據信息,在運行時如果SYSTEM空間不足,對數據庫影響會比較大,雖然在系統運行過程中可以通過命令擴充空間,但還是會影響數據庫的性能,因此有必要在創建數據庫時適當的把數據文件設置大一些。
·TMEP表空間:臨時表空間,安裝數據庫時創建,可以在運行時通過命令增大臨時表空間。臨時表空間的重要作用是數據排序。比如當用戶執行了諸如Order by等命令后,服務器需要對所選取數據進行排序,如果數據很大,內存的排序區可能裝不下太大數據,就需要把一些中間的排序結果寫在硬盤的臨時表空間中。
·用戶表自定義空間:用戶可以通過CREATE TABLESPACE命令創建表空間。
創建表空間需要考慮數據庫對分區(Extent,一個Oracle分區是數據庫文件中一段連續的空間,Oracle分區是Oracle管理中最小的單位)的管理,比如當一個表創建后先申請一個分區,在Insert執行過程中,如果分區數據已滿,需要重新申請另外的分區。如果一個數據庫中的分區大小不一,創建表空間時需要考慮一系列問題。因此在Oracle8i之后,創建表空間都推薦使用“本地管理表空間”,這種表空間中的分區是一個固定大小的值,創建表空間的語法是:
語法結構:創建表空間
CREATE TABLESPACE 空間名稱 DATAFILE '文件名1' SIZE 數字M [,'文件名2' SIZE 數字….] EXTENT MANAGEMENT
LOCAL UNIFORM SIZE 數字M |
語法解析:
1. 文件名包括完整路徑和文件名,每個數據文件定義了文件的初始大小,初始大小一般以“M”為單位。一個表空間中可以有多個數據文件。
2. EXTENT MANAGEMENT LOCAL指明表空間類型是:本地管理表空間。本地管理表空間要求Oracle中的數據分區(Extent)大小統一。
3. UNIFORM SIZE:指定每個分區的統一大小。
案例5:創建一個表空間,包含兩個數據文件大小分別是10MB,5MB,要求extent的大小統一為1M。
代碼演示:創建表空間
SQL> CREATE TABLESPACE MYSPACE 2 DATAFILE 'D:/A.ORA' SIZE 10M, 3 'D:/B.ORA' SIZE 5M 4 EXTENT MANAGEMENT LOCAL 5 UNIFORM SIZE 1M 6 / Tablespace created |
必須是管理員用戶才能創建表空間,當表空間的空間不足時可以使用ALTER TABLESPACE命令向表空間中追加數據文件擴充表空間。
代碼演示:擴充表空間
SQL> ALTER TABLESPACE MYSPACE 2 ADD DATAFILE 'D:/C.ORA' SIZE 10M 3 /
Tablespace altered |
表空間可以在不使用時刪除,使用DROP TABLESPACE命令。
數據庫的所有數據全部在某一表空間中存放,在創建用戶時,可以為用戶指定某一表空間,那么該用戶下的所有數據庫對象(比如表)默認都存儲在該空間中。
代碼演示:為某一用戶指定默認表空間
SQL> CREATE USER ACONG IDENTIFIED BY ACONG 2 DEFAULT TABLESPACE MYSPACE 3 /
User created |
在創建表時,表中數據存放在用戶的默認表空間中,也可以通過tablespace子句為表指定表中數據存放在其他表空間中。
代碼演示:為表指定表空間
SQL> CREATE TABLE SCORES 2 ( 3 ID NUMBER , 4 TERM VARCHAR2(2), 5 STUID VARCHAR2(7) NOT NULL, 6 EXAMNO VARCHAR2(7) NOT NULL, 7 WRITTENSCORE NUMBER(4,1) NOT NULL, 8 LABSCORE NUMBER(4,1) NOT NULL 9 ) 10 TABLESPACE MYSPACE 11 /
Table created |
創建索引時也可以為索引指定表空間。
代碼演示:為索引指定表空間
SQL> CREATE INDEX UQ_ID ON SCORES(ID) 2 TABLESPACE MYSPACE; Index created |
表和索引一旦創建,表空間無法修改。