數(shù)據(jù)庫、數(shù)據(jù)庫實例、表空間、用戶
完整的Oracle數(shù)據(jù)庫通常由兩部分組成:Oracle數(shù)據(jù)庫和數(shù)據(jù)庫實例。
- 數(shù)據(jù)庫是一系列物理文件的集合(數(shù)據(jù)文件,控制文件,聯(lián)機日志,參數(shù)文件等);
- 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)。
- 數(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ù)庫)

啟動數(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;
- 數(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ù)庫服務集群的時候可以用到。
- 表空間
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
- 用戶
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個表。

表空間是一個邏輯概念,一個數(shù)據(jù)庫對應一或多個表空間,每個表空間在物理上對應一或多個數(shù)據(jù)文件(.dbf)。
一般一個表空間上只創(chuàng)建一個用戶名。用戶名類似于MySQL的數(shù)據(jù)庫名,Oracle的用戶名.表名等價于MySQL的數(shù)據(jù)庫名.表名,因此在寫兼容MySQL和Oracle的語句時可以用到。
Oracle安裝完數(shù)據(jù)庫的一般流程:建表空間(分區(qū))-->建用戶(分配相應的表空間和用戶權限)-->登陸用戶,建用戶表。

數(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ù)庫及表空間名稱(注意表空間名都是大寫):
- 系統(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
不能重命名
不能刪除
- 輔助表空間(SYSAUX)
SYSAUX表空間是作為SYSTEM表空間的輔助表空間。使用獨立表空間或系統(tǒng)表空間的數(shù)據(jù)庫組件在SYSAUX表空間中創(chuàng)建,通過分離這些組件和功能,SYSTEM 表空間的負荷得以減輕,反復創(chuàng)建一些相關對象及組件引起SYSTEM 表空間的碎片問題得以避免。SYSAUX表空間不可用,數(shù)據(jù)庫核心功能將保持有效;使用SYSAUX表空間的特點將會失敗或功能受限。
不能刪除
不能重命名
不能置為read only
- 臨時表空間(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ù)表
- 創(chuàng)建表空間
語法:
CREATE TABLESPACE 表空間名
DATAFILE '數(shù)據(jù)文件路徑' SIZE 大小
[AUTOEXTEND ON] [NEXT 大小]
[MAXSIZE 大小];
說明:
-
[ ]里面的內(nèi)容是可選項,數(shù)據(jù)文件路徑中若包含目錄需先創(chuàng)建 -
SIZE為初始表空間大小,單位為K或者M -
AUTOEXTEND是否自動擴展,值為ON或OFF -
NEXT為文件滿了后擴展大小 -
MAXSIZE為文件最大大小,值為數(shù)值或UNLIMITED(表示不限大小)
示例:
CREATE TABLESPACE ts_test
DATAFILE 'D:\oracle_tablespace\ts_test.dbf' SIZE 20M
AUTOEXTEND ON;
- 查詢表空間及相關信息
示例:
-- 查看用戶的默認表空間
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';
- 修改表空間
語法:
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’;
- 刪除表空間
語法:
-- 僅刪除表空間
DROP TABLESPACE 表空間名;
-- 刪除表空間及數(shù)據(jù)文件
DROP TABLESPACE 表空間名 INCLUDING CONTENTS AND DATAFILES;
示例:
--僅刪除表空間
DROP TABLESPACE ts_test;
--刪除表空間及數(shù)據(jù)文件
DROP TABLESPACE ts_test INCLUDING CONTENTS AND DATAFILES;