oracle表空間相關

數據庫被劃分爲若干個表空間,每一個表空間內保存一組相關的邏輯對象。每一個表空間由一個或者多個數據文件組成。oracle中的數據邏輯上存儲在表空間裏,物理上存儲在屬於該表空間的數據文件裏。表空間是用戶和物理存儲結構之間的紐帶。sql

下面介紹和表空間相關的一些概念。數據庫

大文件或小文件

大文件表空間由一個單一的大文件構成,即表空間和數據文件是一一對應的。當大文件表空間配合OMF(oracle managed files)和ASM技術一塊兒使用會大大減少DBA的管理工做,由於此時數據文件對用戶徹底透明,無需關心底層的數據文件管理。markdown

小文件表空間是oracle默認的表空間形式,一個表空間能夠由一個或者多個數據文件組成。oracle

本地管理或字典管理

本地管理和字典管理指的是表空間的區(extent)的管理模式(分配和回收)。性能

字典管理

字典管理是經過sys方案裏的數據字典表裏的一些表來記錄表空間的區的分配狀況,因此不管是分配或者回收區,都產生不少的SQL語句,這些SQL語句稱爲遞歸SQL,而且這些遞歸SQL不少須要順序執行。所以在字典管理表空間裏執行DML操做可能會產生遞歸SQL,在有大量DML操做的狀況下,這會產生嚴重的性能問題。spa

若是system表空間爲本地管理表空間,則該數據庫不能建立字典管理表空間,可是該數據庫能夠存在字典管理表空間,由於能夠進行表空間遷移。日誌

本地管理

本地管理表空間(默認方式,且oracle強烈推薦)管理區的方式和字典管理有很大的不一樣,每一個數據文件用一個位圖來管理區,獲取一個區只需將位圖對應的位由0改成1,回收該區只需將該位由1改成0。這就消除了遞歸SQL,使得空間的分配和回收被大大加速了。code

當一個對象須要更多空間時,數據庫是以區的形式分配給該對象的。該分配多大空間的區給一個對象由區大小分配模式決定,區大小分配模式分爲兩種,autoallocate模式和uniform模式。orm

autoallocate模式,這是oracle的默認分配模式,指的是oracle控制分配區應該是多大。對象

uniform模式,指的是全部的區都是統一的大小,默認是1M,能夠經過size指定區的大小。

若是能夠預先知道全部該表空間裏的段的大小較接近,且以類似的增加速度增加,則可使用uniform模式,不然應該使用autoallocate模式。

總的來講,通常狀況下使用autoallocate模式就能夠了。若是區段的數量太多,以致於影響了sql的執行效率,能夠考慮使用uniform模式,設置大的size,以使區的數量降到合理範圍內。

自動或手動段空間管理

段空間管理指的是oracle怎麼管理段裏的數據塊的空閒空間。

手動管理是遺留方式,不推薦使用。使用freelists,pctfree和pctused來管理段內的空閒空間,因爲該模式自身的緣由,很容易引發競爭而引發性能問題。

自動管理(默認,且oracle強烈推薦),oracle利用位圖塊裏的位圖來跟蹤段內的空閒空間。在該模式下只須要設置PCTFREE參數便可。

logging或nologging

logging是默認值,絕大多數狀況咱們也確實應該使用logging模式,使用nologging模式的機會很是少。

兩種模式對於普通的DML是同樣的,差異在於直接路徑加載。如CTAS語句,如create table test as select * from emp,相較於logging而言,nologging產生的重作日誌要少得多。

online或offline

表空間有在線和離線兩種狀態。

--使tbs表空間在線
alter tablespace tbs online;
--使表空間tbs正常離線,不須要介質恢復
alter tablespace tbs offline normal;
--使表空間tbs暫時離線,須要介質恢復
alter tablespace tbs offline temporary;
--使表空間tbs當即離線,須要介質恢復
alter tablespace tbs offline immediate;

read only或read write

默認爲read write表示可讀可寫。read only表示表空間只能讀取,不能寫入,對於某些特定目的,可能會頗有用,能夠有效防止用戶誤操做致使數據損壞。

--使tbs表空間只讀
alter tablespace tbs read only;
--使表空間tbs可讀寫
alter tablespace tbs read write;

表空間,還原表空間和臨時表空間

表空間

這是平時使用的最多的一種,用於保存表和索引等持久數據的表空間。

--建立tbs表空間,本地管理,自動區大小模式,自動段空間管理,---數據文件tbs_o1.dbf初始大小爲10M,自動增加,每次10M,最大可--以到1000M
--通常以該模板來建立表空間就能夠了,根據本身的須要修改一下。
CREATE TABLESPACE tbs DATAFILE '/u01/oradata/orcl/tbs_01.dbf' SIZE 10M AUTOEXTEND ON NEXT 10M MAXSIZE 1000M EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;

--建立tbs1表空間,本地管理,統一區大小16M,自動段空間管理
CREATE TABLESPACE tbs1 DATAFILE '/u01/oradata/orcl/tbs1_01.dbf' SIZE 100M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 16M --建立tbs2表空間,大文件表空間,本地管理,自動區大小模式,自動段空間管理。 CREATE BIGFILE TABLESPACE tbs2 DATAFILE '/u01/oradata/orcl/tbs2_01.dbf' SIZE 100G --建立tbs3表空間,字典管理 CREATE TABLESPACE tbs3 DATAFILE '/u01/oradata/orcl/tbs3_01.dbf' SIZE 100M EXTENT MANAGEMENT DICTIONARY;

--增長數據文件
ALTER TABLESPACE tbs ADD DATAFILE '/u01/oradata/orcl/tbs_02.dbf' SIZE 10M AUTOEXTEND ON NEXT 10M MAXSIZE 1000M;

還原表空間(undo tablespace)

還原表空間是一種特殊的表空間,只用於存儲還原信息。

oracle的還原管理分爲自動還原管理(默認、推薦)和手動還原管理(基本不會使用了)。
自動還原管理的配置也很是簡單,只須要要將undo_management參數設置爲auto,將undo_tablespace參數設置爲已經建立好的還原表空間。

在自動還原管理下,雖然能夠建立多個還原表空間,可是隻有一個還原表空間其做用。當事務內的第一條DML語句運行時,系統爲該事務在當前還原表空間分配一個還原段(undo segment),同時分配一個事務表。

注意,若是沒有指定還原表空間,oracle會使用系統的撤銷段(在system表空間裏),一旦發現這種狀況,應該立刻建立一個還原表空間,而且指定表空間。

還原表空間的建立和普通表空間是同樣的,只是須要增長undo關鍵字。

--建立還原表空間tbs
CREATE UNDO TABLESPACE tbs DATAFILE '/u01/oradata/orcl/tbs_01.dbf' SIZE 10M AUTOEXTEND ON NEXT 10M MAXSIZE 1000M EXTENT MANAGEMENT LOCAL

臨時表空間

主要用於存儲臨時表數據,對於排序和哈希密集型查詢,須要在臨時表空間裏暫時存儲排序和哈希數據。

臨時表空間和普通表空間的區別在於,臨時表空間必須是以uniform模式進行區大小管理

--建立臨時表空間temp1,區大小爲1M(默認狀況)
CREATE TEMPORARY TABLESPACE temp1 TEMPFILE '/u01/oradata/orcl/temp1_01.dbf' SIZE 10M AUTOEXTEND ON NEXT 10M MAXSIZE 1000M; --建立臨時表空間temp2,區大小爲4M CREATE TEMPORARY TABLESPACE temp2 TEMPFILE '/u01/oradata/orcl/temp2_01.dbf' SIZE 10M AUTOEXTEND ON NEXT 10M MAXSIZE 1000M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 4M --增長臨時文件 ALTER TABLESPACE temp ADD TEMPFILE '/u01/oradata/orcl/temp1_02.dbf' SIZE 10M AUTOEXTEND ON NEXT 10M MAXSIZE 1000M;

--刪除表空間裏的某個臨時文件
ALTER DATABASE TEMPFILE '/u01/oradata/orcl/temp1_02.dbf' DROP INCLUDING DATAFILES;

--縮減臨時表空間的大小

ALTER TABLESPACE temp1 SHRINK SPACE;
ALTER TABLESPACE temp1 SHRINK SPACE KEEP 100M;

--設置數據庫的默認臨時表空間
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp1;
--設置用戶的臨時表空間
ALTER USER scott TEMPORARY TABLESPACE temp1;

OMF

OMF主要是爲了簡化數據文件的管理工做,建立表空間時不須要指定datafile或者tempfile子句。OMF由三個參數控制,

DB_CREATE_FILE_DEST

數據文件,在線重作日誌文件,控制文件和臨時文件放在該目錄下。

DB_CREATE_ONLINE_LOG_DEST_n

在線重作日誌文件和控制文件的多路備份放在該目錄下

DB_RECOVERY_FILE_DEST

若是沒有設置DB_CREATE_ONLINE_LOG_DEST_n,則在線重作日誌文件和控制文件的多路備份放在該目錄下。

管理表空間的一些字典

dba_tablespaces

dba_free_space

dba_segments

dba_data_files

dba_temp_files

database_properties

v$datafile

v$tempfile

v$filestat

相關文章
相關標籤/搜索