Oracle表空間

數(shù)據(jù)庫、數(shù)據(jù)庫實例、表空間、用戶

完整的Oracle數(shù)據(jù)庫通常由兩部分組成:Oracle數(shù)據(jù)庫和數(shù)據(jù)庫實例。

  1. 數(shù)據(jù)庫是一系列物理文件的集合(數(shù)據(jù)文件,控制文件,聯(lián)機日志,參數(shù)文件等);
  2. Oracle數(shù)據(jù)庫實例則是一組Oracle后臺進程/線程以及在服務器分配的共享內(nèi)存區(qū)。

在啟動Oracle數(shù)據(jù)庫服務器時,實際上是在服務器的內(nèi)存中創(chuàng)建一個Oracle實例(即在服務器內(nèi)存中分配共享內(nèi)存并創(chuàng)建相關的后臺內(nèi)存),然后由這個Oracle數(shù)據(jù)庫實例來訪問和控制磁盤中的數(shù)據(jù)文件。Oracle有一個很大的內(nèi)存塊,稱為全局區(qū)(SGA)。

  1. 數(shù)據(jù)庫

數(shù)據(jù)庫是數(shù)據(jù)的集合。Oracle是一種數(shù)據(jù)庫管理系統(tǒng)(DBMS),是一種關系型的數(shù)據(jù)庫管理系統(tǒng)(RDBMS)。
通常情況了我們稱的“數(shù)據(jù)庫”,并不僅指物理的數(shù)據(jù)集合,他包含物理數(shù)據(jù)、數(shù)據(jù)庫管理系統(tǒng)。也即物理數(shù)據(jù)、內(nèi)存、操作系統(tǒng)進程的組合體。

我們在安裝Oracle數(shù)據(jù)庫時,會讓我們選擇安裝啟動數(shù)據(jù)庫(即默認的全局數(shù)據(jù)庫)

oracle1.jpg

啟動數(shù)據(jù)庫:也叫全局數(shù)據(jù)庫,是數(shù)據(jù)庫系統(tǒng)的入口,它會內(nèi)置一些高級權限的用戶如SYS,SYSTEM等。我們用這些高級權限賬號登陸就可以在數(shù)據(jù)庫實例中創(chuàng)建表空間,用戶,表了。

全局數(shù)據(jù)庫名:就是一個數(shù)據(jù)庫的標識,在安裝時就要想好,以后一般不修改,修改起來也麻煩,因為數(shù)據(jù)庫一旦安裝,數(shù)據(jù)庫名就寫進了控制文件,數(shù)據(jù)庫表,很多地方都會用到這個數(shù)據(jù)庫名。

查詢當前數(shù)據(jù)庫名:

select name from v$database;
  1. 數(shù)據(jù)庫實例

實例是訪問Oracle數(shù)據(jù)庫所需的一部分計算機內(nèi)存和輔助處理后臺進程,是由進程和這些進程所使用的內(nèi)存(SGA)所構成一個集合。

其實就是用來訪問和使用數(shù)據(jù)庫的一塊進程,它只存在于內(nèi)存中。就像Java中new出來的實例對象一樣。

我們訪問Oracle都是訪問一個實例,但這個實例如果關聯(lián)了數(shù)據(jù)庫文件,就是可以訪問的,如果沒有,就會得到實例不可用的錯誤。

實例名指的是用于響應某個數(shù)據(jù)庫操作的數(shù)據(jù)庫管理系統(tǒng)的名稱,也叫SID。實例名是由參數(shù)instance_name決定的。

查詢當前數(shù)據(jù)庫實例名:

select instance_name from v$instance;

數(shù)據(jù)庫實例名(instance_name)用于對外部連接。在操作系統(tǒng)中要取得與數(shù)據(jù)庫的聯(lián)系,必須使用數(shù)據(jù)庫實例名。比如我們作開發(fā),要連接數(shù)據(jù)庫,就得連接數(shù)據(jù)庫實例名:

jdbc:oracle:thin:@localhost:1521:orcl(orcl就為數(shù)據(jù)庫實例名)

一個數(shù)據(jù)庫可以有多個實例,在作數(shù)據(jù)庫服務集群的時候可以用到。

  1. 表空間

Oracle數(shù)據(jù)庫是通過表空間來存儲物理表的,一個數(shù)據(jù)庫實例可以有N個表空間,一個表空間下可以有N張表。

有了數(shù)據(jù)庫,就可以創(chuàng)建表空間。

表空間(Tablespace)是數(shù)據(jù)庫的邏輯劃分,每個數(shù)據(jù)庫至少有一個表空間(稱作SYSTEM表空間)。為了便于管理和提高運行效率,可以使用一些附加表空間來劃分用戶和應用程序。例如:USER表空間供一般用戶使用,RBS表空間供回滾段使用。一個表空間只能屬于一個數(shù)據(jù)庫。

創(chuàng)建表空間語法:

CREATE TABLESPACE 表空間名稱  
DATAFILE          表空間數(shù)據(jù)文件路徑  
SIZE              表空間初始大小  
AUTOEXTEND ON

如:

create tablespace db_test  
datafile 'D:\oracle\product\10.2.0\userdata\db_test.dbf'  
size 50m  
autoextend on;

查看已經(jīng)創(chuàng)建好的表空間:

select default_tablespace, temporary_tablespace, d.username from  dba_users d
  1. 用戶

Oracle數(shù)據(jù)庫建好后,要想在數(shù)據(jù)庫里建表,必須為數(shù)據(jù)庫建立用戶,并為用戶指定表空間。

上面我們建好了數(shù)據(jù)庫和表空間,接下來建用戶:

創(chuàng)建新用戶:

CREATE USER          用戶名  
IDENTIFIED BY        密碼  
DEFAULT TABLESPACE   表空間(默認USERS)  
TEMPORARY TABLESPACE 臨時表空間(默認TEMP) 

如:

CREATE USER utest  
IDENTIFIED BY utestpwd  
DEFAULT TABLESPACE db_test  
TEMPORARY TABLESPACE temp; 

有了用戶,要想使用用戶賬號管理自己的表空間,還得給它分權限:

GRANT CONNECT TO utest;  
GRANT RESOURCE TO utest;  
GRANT dba TO utest; -- dba為最高級權限,可以創(chuàng)建數(shù)據(jù)庫,表等。

查看數(shù)據(jù)庫用戶:

-- 連接SQLPlus
$ sqlplus / as sysdba

-- SQLPlus下切換到用戶abc, 密碼abcd
connect abd/abcd

-- 查詢當前用戶,命令可以不用加分號
show user

-- 查看所有用戶
select username, user_id from dba_users;

Oracle數(shù)據(jù)庫表空間

Oracle表空間涉及的相關概念關系:

主要有:數(shù)據(jù)庫、表空間、段、區(qū)間、數(shù)據(jù)塊等。其中最核心的概念就是Oracle特有的表空間。一個數(shù)據(jù)庫實例可以有N個表空間,一個表空間下可以又N個表。

表空間2.png

表空間是一個邏輯概念,一個數(shù)據(jù)庫對應一或多個表空間,每個表空間在物理上對應一或多個數(shù)據(jù)文件(.dbf)。

一般一個表空間上只創(chuàng)建一個用戶名。用戶名類似于MySQL的數(shù)據(jù)庫名,Oracle的用戶名.表名等價于MySQL的數(shù)據(jù)庫名.表名,因此在寫兼容MySQL和Oracle的語句時可以用到。

Oracle安裝完數(shù)據(jù)庫的一般流程:建表空間(分區(qū))-->建用戶(分配相應的表空間和用戶權限)-->登陸用戶,建用戶表。

表空間1.jpg

數(shù)據(jù)庫、表空間(Tablespace)、段(Segment)、區(qū)間(Extent)、Oracle數(shù)據(jù)塊,它們之間是依次存在一對多的對應關系。

  • 每個表空間邏輯上由若干段(Segment)組成,表空間物理上由若干數(shù)據(jù)庫文件(.dbf)組成,數(shù)據(jù)文件是實實在在的OS文件。邏輯上表空間中一般有多個表。每個ORACLE數(shù)據(jù)庫均有SYSTEM表空間。

  • 每個段(Segment)邏輯上有若干區(qū)間(Extent)組成,段可以有表段、索引段、回滾段、臨時段和高速緩存段等,一個表要占一個段,一個索引也要占一個段。通??梢杂帽韥砝斫舛?,即一個表對應一個段。

  • 一個區(qū)間(Extent)又有一組連續(xù)的數(shù)據(jù)塊(data block)組成。這段連續(xù)的數(shù)據(jù)塊邏輯上是連續(xù)的,有可能在物理磁盤上是分散的。

  • 一個Oracle數(shù)據(jù)塊(通常是8K)對應了若干的OS磁盤塊(例如:1K)。

典型的數(shù)據(jù)庫及表空間名稱(注意表空間名都是大寫):

  1. 系統(tǒng)表空間(SYSTEM)
    系統(tǒng)表空間(SYSTEM Tablespace )是每個Oracle數(shù)據(jù)庫都必須具備的。這是數(shù)據(jù)庫創(chuàng)建時自動創(chuàng)建的。SYSTEM表空間必須總要保持聯(lián)機,因為其包含著整個數(shù)據(jù)庫的[數(shù)據(jù)字典]。

不能脫機offline
不能置為只讀read only
不能重命名
不能刪除

  1. 輔助表空間(SYSAUX)
    SYSAUX表空間是作為SYSTEM表空間的輔助表空間。使用獨立表空間或系統(tǒng)表空間的數(shù)據(jù)庫組件在SYSAUX表空間中創(chuàng)建,通過分離這些組件和功能,SYSTEM 表空間的負荷得以減輕,反復創(chuàng)建一些相關對象及組件引起SYSTEM 表空間的碎片問題得以避免。SYSAUX表空間不可用,數(shù)據(jù)庫核心功能將保持有效;使用SYSAUX表空間的特點將會失敗或功能受限。

不能刪除
不能重命名
不能置為read only

  1. 臨時表空間(TEMP)

TEMP臨時表空間主要用來做查詢和存放一些緩沖區(qū)數(shù)據(jù),臨時表空間消耗的主要原因是需要對查詢的中間結果進行排序。重啟數(shù)據(jù)庫可以釋放臨時表空間,如果不能重啟實例,而一直保持sql語句的執(zhí)行,TEMP表空間會一直增長。直到耗盡磁盤空間。
臨時表空間的主要作用:

索引create或rebuild
Order by或group by
Distinct操作
Union或intersect或minus
Sort-merge joins
analyze

使用原理 :在oracle數(shù)據(jù)庫中進行排序,分組匯總,索引等時,會產(chǎn)生很多的臨時數(shù)據(jù),通常情況下,oracle數(shù)據(jù)庫會將這些臨時數(shù)據(jù)存放到內(nèi)存的PGA內(nèi)。在這個程序全局區(qū)中有一個叫做排序區(qū)的地方,專門用來存放這些因為排序操作而產(chǎn)生的臨時數(shù)據(jù)。但這個分區(qū)的容量是有限的。當這個分區(qū)的大小不足以容納排序后所產(chǎn)生的記錄時,數(shù)據(jù)庫系統(tǒng)就會將臨時數(shù)據(jù)存放到臨時表空間中。這就是臨時表空間的來歷。

4.撤銷表空間

用于保存oracle數(shù)據(jù)庫撤銷信息,即保存用戶回滾段( Rollback Segment )的表空間稱之為回滾表空間(或簡稱為撤銷表空間(UNDO Tablespace))。

表空間操作示例

以下操作涉及的數(shù)據(jù)字典表:

  • dba_users:數(shù)據(jù)庫用戶信息表
  • dba_tablespaces:系統(tǒng)管理員級別查看的數(shù)據(jù)庫表空間信息表
  • user_tablespaces:普通用戶查看的數(shù)據(jù)庫表空間信息表
  • dba_data_files:表空間對應物理信息表
  • dba_tables:數(shù)據(jù)庫表元數(shù)據(jù)表
  1. 創(chuàng)建表空間

語法:

CREATE TABLESPACE 表空間名
DATAFILE '數(shù)據(jù)文件路徑' SIZE 大小
[AUTOEXTEND ON] [NEXT 大小]
[MAXSIZE 大小];

說明:

  • [ ]里面的內(nèi)容是可選項,數(shù)據(jù)文件路徑中若包含目錄需先創(chuàng)建
  • SIZE為初始表空間大小,單位為K或者M
  • AUTOEXTEND是否自動擴展,值為ONOFF
  • NEXT為文件滿了后擴展大小
  • MAXSIZE為文件最大大小,值為數(shù)值UNLIMITED(表示不限大小)

示例:

CREATE TABLESPACE ts_test
DATAFILE 'D:\oracle_tablespace\ts_test.dbf' SIZE 20M
AUTOEXTEND ON;
  1. 查詢表空間及相關信息

示例:

-- 查看用戶的默認表空間
select default_tablespace from dba_users where username='ABC';

-- 查看用戶的臨時表空間
select default_tablespace from dba_users where username='ABC';

-- 設置用戶的默認或臨時表空間, 普通用戶沒有設置表空間的權限
alter user username DEFAULT|TEMPORARY tablespace tablespace_name;

-- 查看目前已有的所有表空間
select tablespace_name from dba_data_files group by tablespace_name;
-- 或
select tablespace_name from dba_tablespaces group by tablespace_name;

-- 查詢表空間是否自動擴充等信息:
select file_name,autoextensible,increment_by from dba_data_files WHERE tablespace_name = 'XXX';

-- 查看表空間的狀態(tài),表空間的狀態(tài)分為ONLINE和OFFLINE,脫機時不可用,默認是聯(lián)機的
select status from dba_tablespaces where tablespace_name='XXX';

-- 查看表空間對應的物理數(shù)據(jù)文件
select file_name from dba_data_files where tablespace_name='XXX';

-- 查看表空間大?。▎挝唬篗B):
select tablespace_name, count(*), sum(blocks), sum(bytes)/1024/1024 from dba_data_files group by tablespace_name;

-- 查看指定表空間中的所有表(如果表空間中有表的話)
select tablespace_name, table_name from dba_tables where tablespace_name='XXX';

-- 查看某個表屬于哪個表空間
select table_name, tablespace_name from all_tables where table_name='YYY';
  1. 修改表空間

語法:

ALTER TABLESPACE 表空間名
ADD DATAFILE '文件路徑' SIZE 大小
[AUTOEXTEND ON] [NEXT大小]
[MAXSIZE 大小];

示例:

ALTER TABLESPACE ts_test
ADD DATAFILE 'D:\oracle_tablespace\ts_test2.dbf 'SIZE 5M
AUTOEXTEND ON;

-- 修改表空間聯(lián)機狀態(tài),表空間脫機時不可用,默認是聯(lián)機的
alter tablespace tablespace_name online|offline;

-- 設置表空間只讀或可讀寫的狀態(tài),只有在聯(lián)機狀態(tài)才可以更改,默認的聯(lián)機狀態(tài)就是讀寫狀態(tài)
alter tablespace tablespace_name read only | read write;

-- 增加數(shù)據(jù)文件
alter tablespace tablespace_name add datafile ‘xx.dbf’ size xx;

-- 移除數(shù)據(jù)文件,不能刪除表空間中的第一個數(shù)據(jù)文件,如果要刪除就需要刪除整個表空間
alter tablespace tablespace_name drop datafile ‘xx.dbf’;
  1. 刪除表空間

語法:

-- 僅刪除表空間
DROP TABLESPACE 表空間名;

-- 刪除表空間及數(shù)據(jù)文件
DROP TABLESPACE 表空間名 INCLUDING CONTENTS AND DATAFILES;

示例:

--僅刪除表空間
DROP TABLESPACE ts_test;

--刪除表空間及數(shù)據(jù)文件
DROP TABLESPACE ts_test INCLUDING CONTENTS AND DATAFILES;
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容