程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> oracle表空間相關,oracle表空間

oracle表空間相關,oracle表空間

編輯:Oracle教程

oracle表空間相關,oracle表空間


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

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

大文件或小文件

大文件表空間由一個單一的大文件構成,即表空間和數據文件是一一對應的。當大文件表空間配合OMF(oracle managed files)和ASM技術一起使用會大大減小DBA的管理工作,因為此時數據文件對用戶完全透明,無需關心底層的數據文件管理。

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

本地管理或字典管理

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

字典管理

字典管理是通過sys方案裡的數據字典表裡的一些表來記錄表空間的區的分配情況,所以無論是分配或者回收區,都產生很多的SQL語句,這些SQL語句稱為遞歸SQL,並且這些遞歸SQL很多需要順序執行。因此在字典管理表空間裡執行DML操作可能會產生遞歸SQL,在有大量DML操作的情況下,這會產生嚴重的性能問題。

如果system表空間為本地管理表空間,則該數據庫不能創建字典管理表空間,但是該數據庫可以存在字典管理表空間,因為可以進行表空間遷移。

本地管理

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

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

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved