目錄:
表空間
什么是表空間:Oracle中的用戶都有屬于自己的默認的表空間肚邢,在一段內(nèi)存空間中存儲的大部分是表壹堰,所以稱為表空間拭卿。
用戶的表空間
1,系統(tǒng)用戶的表空間
2,普通用戶的表空間
為什么要給普通用戶創(chuàng)建屬于自己的表空間那?
項目中很可能與其他項目使用同一個數(shù)據(jù)庫贱纠,
多個用戶在使用同一個數(shù)據(jù)庫的時候有可能訪問同一個數(shù)據(jù)庫文件峻厚,
就會造成資源爭用問題,給不同的用戶指定不同的表空間谆焊,就可以讓他們
使用不同的數(shù)據(jù)文件惠桃,解決爭用問題。
用戶有一個缺省的表空間辖试,但是該用戶還可以使用其他的表空間辜王,如果我們在創(chuàng)建對象時不指定表空間,則對象存儲在缺省表空間中罐孝,要想讓對象存儲在其他表空間中呐馆,我們需要在創(chuàng)建對象時指定該對象的表空間
一、創(chuàng)建表空間語法及給用戶表空間
前提打開cmd輸入,進入sqlplus和連接數(shù)據(jù)庫及登錄sys莲兢。
登錄sys:
sqlplus sys/123456@ZhengJiaAo:1521/ORCL as sysdba
0.查看管理員用戶使用的表空間名稱列表
status狀態(tài)(只讀READ ONLY / 讀寫ONLINE)
SQL> select tablespace_name,status from dba_tablespaces;
SYSTEM ONLINE #系統(tǒng)表空間汹来,是永久系統(tǒng)表空間,用于存儲SYS用戶的表改艇、視圖收班、存儲過程對象。
SYSAUX ONLINE #作為EXAMPLE的輔助表空間
UNDOTBS1 ONLINE #存儲撤銷信息的undo表空間
TEMP ONLINE #臨時表空間谒兄,用戶存儲SQL語句處理的表示索引信息
USERS ONLINE #永久表空間摔桦,存儲數(shù)據(jù)庫用戶創(chuàng)建的數(shù)據(jù)庫對象
EXAMPLE ONLINE #安裝Oracle數(shù)據(jù)庫示例的表空間
1.創(chuàng)建臨時表空間: duke_temp
先創(chuàng)建好路徑 I:\Orcl\tablespace
CREATE TEMPORARY TABLESPACE duke_temp /* 臨時表空間名稱:duke_temp */
tempfile 'I:\Orcl\tablespace\duke_temp.dbf' /* 臨時表空間路徑 *//*--oracle文件路徑*/
size 50m /* 空間初始大小:50M*/
autoextend ON /* 開啟自動擴展 */
NEXT 50m /* 空間滿了一次擴展50M*/
maxsize 6G /* 空間最終大小6G,可設為 unlimited 大小不受限制*/
extent management local;
表空間已創(chuàng)建承疲。
SQL> select tablespace_name,status from dba_tablespaces;
TABLESPACE_NAME STATUS
------------------------------ ---------
SYSTEM ONLINE
SYSAUX ONLINE
UNDOTBS1 ONLINE
TEMP ONLINE
USERS ONLINE
EXAMPLE ONLINE
EBANK_TEMP ONLINE
ECIF_DATA ONLINE
ECIF_INDEX ONLINE
EIP_DATA ONLINE
YANG ONLINE
TABLESPACE_NAME STATUS
------------------------------ ---------
DUKE_TEMP ONLINE /*新創(chuàng)建的臨時表空間*/
已選擇12行邻耕。
2.創(chuàng)建數(shù)據(jù)表空間: duke_data
CREATE TABLESPACE duke_data /* 數(shù)據(jù)表空間名稱:duke_data */
datafile 'I:\Orcl\tablespace\duke_data.dbf' /* 數(shù)據(jù)表空間路徑 */
size 50m /* 表空間初始大小:50M */
autoextend ON /* 開啟自動擴展*/
NEXT 50m /* 表空間滿了后一次擴展50M */
maxsize 10G /* 空間最終大小10G,可設為 unlimited 大小不受限制*/
logging extent management local;
表空間已創(chuàng)建纪隙。
SQL> select tablespace_name,status from dba_tablespaces;
TABLESPACE_NAME STATUS
------------------------------ ---------
SYSTEM ONLINE
SYSAUX ONLINE
UNDOTBS1 ONLINE
TEMP ONLINE
USERS ONLINE
EXAMPLE ONLINE
EBANK_TEMP ONLINE
ECIF_DATA ONLINE
ECIF_INDEX ONLINE
EIP_DATA ONLINE
YANG ONLINE
TABLESPACE_NAME STATUS
------------------------------ ---------
DUKE_TEMP ONLINE /*新創(chuàng)建的臨時表空間*/
DUKE_DATA ONLINE /*新創(chuàng)建的數(shù)據(jù)表空間*/
已選擇13行赊豌。
3.創(chuàng)建用戶并指定表空間
CREATE USER duke /* 用戶名 */
IDENTIFIED BY duke /* 密碼 */
DEFAULT TABLESPACE duke_data /* 表空間 */ /*給用戶指定默認表空間*/
TEMPORARY TABLESPACE duke_temp /* 臨時表空間 */ /*默認臨時表空間*/
;
用戶已創(chuàng)建。
4.修改用戶默認和臨時表空間
為了方便以后數(shù)據(jù)的備份和恢復绵咱,僅僅將有價值的數(shù)據(jù)做備份可以提高效率和節(jié)省空間碘饼。
修改用戶默認表空間:
ALTER USER duke DEFAULT TABLESPACE USERS; /*duke 用戶名,USERS 默認(DEFAULT)表空間*/
用戶已更改悲伶。
修改用戶臨時表空間:
ALTER USER duke temporary TABLESPACE TEMP; /*修改臨時(temporary)表空間*/
注意:普通用戶沒有修改默認表空間的權限艾恼,但是可以通過授權來實現(xiàn)普通用戶也能夠修改默認表空間。
SQL> show user;
USER 為 "SYS"
SQL> select DEFAULT_TABLESPACE,TEMPORARY_TABLESPACE from dba_users where username='SYSTEM';
DEFAULT_TABLESPACE TEMPORARY_TABLESPACE
------------------------------ ------------------------------
SYSTEM TEMP
5.刪除空間表
----刪除非空表空間麸锉,包含物理文件
DROP TABLESPACE duke_data INCLUDING CONTENTS AND DATAFILES;
表空間已經(jīng)刪除钠绍。
刪除表空間后,原先指向該表空間的用戶仍然默認的空間位置花沉,
需要通過alter user 命令將用戶的表空間指向一個有效的表空間柳爽。
刪除表空間方法總結:
--刪除空的表空間媳握,但是不包含物理文件
drop tablespace duke_temp
--刪除非空表空間,但是不包含物理文件
drop tablespace duke_temp including contents;
--刪除空表空間磷脯,包含物理文件
drop tablespace duke_temp including datafiles;
--刪除非空表空間蛾找,包含物理文件
DROP TABLESPACE duke_data INCLUDING CONTENTS AND DATAFILES;
--如果其他表空間中的表有外鍵等約束關聯(lián)到了本表空間中的表的字段,就要加上CASCADE CONSTRAINTS
drop tablespace duke_temp including contents and datafiles CASCADE CONSTRAINTS;
--說明: 刪除了duke赵誓,只是刪除了該duke下的schema objects打毛,是不會刪除相應的表空間(tablespace)的。
drop user duke cascade俩功; --duke用戶
6.給用戶授權登錄和撤銷權限
新創(chuàng)建的用戶是不能登錄的幻枉,需授權才能登錄oracle數(shù)據(jù)庫,授予兩個系統(tǒng)內(nèi)置角色權限诡蜓,connect和resource熬甫。
conncet角色使用戶可以登錄; resource角色使得用戶可以程序開發(fā),如創(chuàng)建表蔓罚,觸發(fā)器等罗珍。
授權命令:
GRANT CONNECT,RESOURCE TO duke; /* duke用戶名 --授權為登錄oracle權限,具有創(chuàng)建脚粟,修改等基本權限*/
grant dba to duke; /*授權dba最高權限*/
登錄用戶dike
SQL> connect duke/duke
SQL> show user;
USER is "DUKE"
SQL>
7.查看表空間使用情況
SELECT UPPER(F.TABLESPACE_NAME) AS "表空間名稱",
ROUND(D.AVAILB_BYTES ,2) AS "表空間大小(G)",
ROUND(D.MAX_BYTES,2) AS "最終表空間大小(G)",
ROUND((D.AVAILB_BYTES - F.USED_BYTES),2) AS "已使用空間(G)",
TO_CHAR(ROUND((D.AVAILB_BYTES - F.USED_BYTES) / D.AVAILB_BYTES * 100,
2), '999.99') AS "使用比",
ROUND(F.USED_BYTES, 6) AS "空閑空間(G)",
F.MAX_BYTES AS "最大塊(M)"
FROM (
SELECT TABLESPACE_NAME,
ROUND(SUM(BYTES) / (1024 * 1024 * 1024), 6) USED_BYTES,
ROUND(MAX(BYTES) / (1024 * 1024 * 1024), 6) MAX_BYTES
FROM SYS.DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME) F,
(SELECT DD.TABLESPACE_NAME,
ROUND(SUM(DD.BYTES) / (1024 * 1024 * 1024), 6) AVAILB_BYTES,
ROUND(SUM(DECODE(DD.MAXBYTES, 0, DD.BYTES, DD.MAXBYTES))/(1024*1024*1024),6) MAX_BYTES
FROM SYS.DBA_DATA_FILES DD
GROUP BY DD.TABLESPACE_NAME) D
WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME
ORDER BY 4 DESC
8.查看普通用戶屬于哪個表空間
SQL> select username,default_tablespace from dba_users where username='SCOTT'; /*用戶名*/
USERNAME DEFAULT_TABLESPACE
------------------------------ ------------------------------
SCOTT USERS
9.查看所有表空間
SQL> select * from v$tablespace; /*包含從控制文件中獲取的表空間名稱和編號信息*/
TS# NAME INC BIG FLA ENC
---------- ------------------------------ --- --- --- ---
0 SYSTEM YES NO YES
1 SYSAUX YES NO YES
2 UNDOTBS1 YES NO YES
4 USERS YES NO YES
3 TEMP NO NO YES
6 EXAMPLE YES NO YES
8 EBANK_TEMP NO NO YES
9 ECIF_DATA YES NO YES
10 ECIF_INDEX YES NO YES
11 EIP_DATA YES NO YES
13 YANG YES NO YES
TS# NAME INC BIG FLA ENC
---------- ------------------------------ --- --- --- ---
14 DUKE_TEMP NO NO YES
15 DUKE_DATA YES NO YES
已選擇13行。
10.查看表空間下所有用戶
SQL> select distinct s.owner from dba_segments s where s.tablespace_name ='USERS'; /*USERS表空間下所有用戶*/
OWNER
------------------------------
SCOTT
SYSTEM
OE
11.查看當前用戶的表屬于哪個表空間
SQL> select table_name,tablespace_name from user_all_tables; /*查看當前用戶的表屬于哪些表空間*/
TABLE_NAME TABLESPACE_NAME
------------------------------ ------------------------------
MLOG$ SYSTEM
SLOG$ SYSTEM
RGROUP$ SYSTEM
RGCHILD$ SYSTEM
SYS_IOT_OVER_5140 SYSAUX
RULE_SET_PR$
SYS_IOT_OVER_5146 SYSAUX
RULE_SET_IOT$
SYS_IOT_OVER_5150 SYSAUX
RULE_SET_ROP$
SYS_IOT_OVER_5387 SYSAUX
12.查看用戶的默認表空間和臨時表空間
查看SYSTEM用戶的默認表空間和臨時表空間
SQL> select DEFAULT_TABLESPACE,TEMPORARY_TABLESPACE from dba_users where username='SYSTEM';
DEFAULT_TABLESPACE TEMPORARY_TABLESPACE
------------------------------ ------------------------------
SYSTEM TEMP
默認表空間
用戶在登陸后創(chuàng)建數(shù)據(jù)庫對象時蘸朋,如果沒有指定表空間核无,那么這些數(shù)據(jù)就會存儲到默認表空間。
13.系統(tǒng)表空間dba_tablespaces和用戶表空間user_tablespaces
普通用戶不能查看系統(tǒng)表空間dba_tablespaces藕坯,只能查看用戶表空間user_tablespaces
SQL> connect duke/duke
已連接团南。
SQL> show user;
USER 為 "DUKE"
SQL> select tablespace_name from dba_tablespaces;
select tablespace_name from dba_tablespaces
*
第 1 行出現(xiàn)錯誤:
ORA-00942: 表或視圖不存在
SQL> select tablespace_name from user_tablespaces;
TABLESPACE_NAME
------------------------------
SYSTEM
SYSAUX
UNDOTBS1
TEMP
USERS
EXAMPLE
EBANK_TEMP
ECIF_DATA
ECIF_INDEX
EIP_DATA
YANG
TABLESPACE_NAME
------------------------------
DUKE_TEMP
DUKE_DATA
已選擇13行。
14.查看表空間數(shù)據(jù)文件的存放路徑:
表空間數(shù)據(jù)文件都存放在永久性表空間中
SQL> desc dba_data_files; /*數(shù)據(jù)字典dba_data_file用于存放數(shù)據(jù)文件的屬性炼彪。*/
名稱 是否為空? 類型
----------------------------------------- -------- ----------------------------
FILE_NAME VARCHAR2(513)
FILE_ID NUMBER
TABLESPACE_NAME VARCHAR2(30)
BYTES NUMBER
BLOCKS NUMBER
STATUS VARCHAR2(9)
RELATIVE_FNO NUMBER
AUTOEXTENSIBLE VARCHAR2(3)
MAXBYTES NUMBER
MAXBLOCKS NUMBER
INCREMENT_BY NUMBER
USER_BYTES NUMBER
USER_BLOCKS NUMBER
ONLINE_STATUS VARCHAR2(7)
SQL> select file_name from dba_data_files where tablespace_name='DUKE_DATA';
FILE_NAME
--------------------------------------------------------------------------------
I:\ORCL\TABLESPACE\DUKE_DATA.DBF /*文件存放的位置*/
15.修改表空間的狀態(tài)(聯(lián)機/脫機吐根、只讀/讀寫)
設置表空間的聯(lián)機ONLINE或脫機狀態(tài)OFFLINE:表空間的默認狀態(tài)是聯(lián)機狀態(tài),如果表空間是脫機狀態(tài)辐马,不能夠使用這個表空間拷橘。
ALTER TABLESPACE tablespace_name ONLINE|OFFLINE;
例如:DUKE_DATA表空間脫機,查看表空間狀態(tài)
SQL> ALTER TABLESPACE duke_data OFFLINE; /*DUKE_DATA表空間脫機,需要使用大些字母*/
表空間已更改喜爷。
SQL> select STATUS from dba_tablespaces where tablespace_name='DUKE_DATA'; /*查看表空間狀態(tài)*/
STATUS
---------
OFFLINE
設置表空間的只讀|可讀寫狀態(tài):表空間默認為可讀寫狀態(tài)read write
ALTER TABLESPACE duke_data read only|read write;
注意:如果表空間狀態(tài)中擁有可read冗疮,那么表空間就必須是聯(lián)機狀態(tài)ONLINE的。
SQL> ALTER TABLESPACE duke_data read only;
ALTER TABLESPACE duke_data read only
*
第 1 行出現(xiàn)錯誤:
ORA-01539: 表空間 'DUKE_DATA' 未聯(lián)機
表空間聯(lián)機后更改狀態(tài)為只讀
SQL> ALTER TABLESPACE duke_data ONLINE;
表空間已更改檩帐。
SQL> select STATUS from dba_tablespaces where tablespace_name='DUKE_DATA';/*查案狀態(tài)*/
STATUS
---------
ONLINE
SQL> ALTER TABLESPACE duke_data read only;
表空間已更改术幔。
select tablespace_name,status from dba_tablespaces where tablespace_name='DUKE_DATA'; /*查看DUKE_DATA表空間狀態(tài),讀寫(ONLINE),DUKE_DATA要大寫*/
16.修改表空間的數(shù)據(jù)文件
注意:如果表空間添加數(shù)據(jù)文件湃密,那么表空間就必須是聯(lián)機狀態(tài)ONLINE的诅挑。
增加表空間中的數(shù)據(jù)文件 xx.dbf
SQL> select STATUS from dba_tablespaces where tablespace_name='DUKE_DATA'; /*查看狀態(tài)是否聯(lián)機*/
STATUS
---------
ONLINE
SQL> ALTER TABLESPACE duke_data ADD DATAFILE'I:\Orcl\tablespace\duke_data2.dbf' SIZE 50m; /*增加數(shù)據(jù)文件*/
表空間已更改四敞。
SQL> select file_name from dba_data_fileS where tablespace_name='DUKE_DATA';
/*查看數(shù)據(jù)文件及文件位置*/
FILE_NAME
--------------------------------------------------------------------------------
I:\ORCL\TABLESPACE\DUKE_DATA.DBF
I:\ORCL\TABLESPACE\DUKE_DATA2.DBF
注意:如果發(fā)現(xiàn)某個表空間存儲空間不足時,可以為表空間添加新的數(shù)據(jù)文件拔妥,擴展表空間大小
SQL> ALTER TABLESPACE DUKE_DATA ADD DATAFILE 'I:\ORCL\TABLESPACE\DUKE_DATA03.dbf' SIZE 2G AUTOEXTEND OFF; /*方法一:增加新的大數(shù)據(jù)文件忿危,達到增大表空間的目的*/
表空間已更改。
SQL> ALTER TABLESPACE DUKE_DATA /*方法二:增加數(shù)據(jù)文件*/
2 ADD DATAFILE 'I:\ORCL\TABLESPACE\DUKE_DATA04.dbf'
3 SIZE 100M
4 AUTOEXTEND ON
5 NEXT 10M
6 MAXSIZE 20480M;
表空間已更改毒嫡。
注意:在添加新的數(shù)據(jù)文件時癌蚁,如果同名的操作系統(tǒng)已經(jīng)存在,ALTER TABLESPACE語句將失敗兜畸。如果要覆蓋同名的操作系統(tǒng)文件時努释,則必須在后面顯示的指定REUSE子句。
- 調(diào)整數(shù)據(jù)文件的大小
SQL> ALTER DATABASE DATAFILE 'I:\ORCL\TABLESPACE\DUKE_DATA04.dbf' RESIZE 500M;
數(shù)據(jù)庫已更改咬摇。
- 刪除數(shù)據(jù)文件
注意:不能夠刪除表空間中的第一個數(shù)據(jù)文件伐蒂,如果將第一個數(shù)據(jù)文件刪除的話,相當于刪除了整個表空間肛鹏。
SQL> ALTER TABLESPACE DUKE_DATA DROP DATAFILE'I:\ORCL\TABLESPACE\DUKE_DATA04.dbf';
/*刪除方式一*/
表空間已更改逸邦。
SQL> alter tablespace DUKE_DATA drop datafile 'I:\ORCL\TABLESPACE\DUKE_DATA03.dbf';
/*刪除方式二*/
表空間已更改。
查看刪除文件后在扰,duke_data表空間的數(shù)據(jù)文件
SQL> select file_name from dba_data_fileS where tablespace_name='DUKE_DATA';
FILE_NAME
--------------------------------------------------------------------------------
I:\ORCL\TABLESPACE\DUKE_DATA.DBF
I:\ORCL\TABLESPACE\DUKE_DATA2.DBF
17.刪除表空間
基本語法:
DROP TABLESPAC tablespace_name [INCLUDING CONTENTS];
注意:如果你希望在刪除表空間的同時將表空間中的數(shù)據(jù)文件一同刪除時陷揪,需要加上[INCLUDING CONTENTS]
drop tablespace DUKE_DATA including contents;
/*刪除表空間*/
表空間已更改。
select file_name from dba_data_fileS where tablespace_name='DUKE_DATA';
/*查看表空間*/
沒有此DUKE_DATA表空間容燕。
18.用戶表空間限額
表空間存儲限制是用戶在某一個表空間中可以使用的存儲空間總數(shù)拄轻。
在創(chuàng)建或修改用戶時,可以由參數(shù)quota
指出皱卓。若用戶在向表空間存儲數(shù)據(jù)時裹芝,超出了此限額,則會產(chǎn)生錯誤娜汁。
錯誤信息:ORA-01536:space quota exceeded for tablespace tablespacename..’嫂易。
可以通過查詢字典dba_ts_quotas
查看表空間限額信息。
查看用戶的表空間配額
查看所有的用戶表空間配額情況
SQL> SELECT * FROM DBA_TS_QUOTAS
2 ;
TABLESPACE_NAME USERNAME BYTES
------------------------------ ------------------------------ ----------
MAX_BYTES BLOCKS MAX_BLOCKS DRO
---------- ---------- ---------- ---
SYSAUX APPQOSSYS 0
-1 0 -1 NO
SYSAUX FLOWS_FILES 0
-1 0 -1 NO
SYSAUX SYSMAN 160038912
-1 19536 -1 NO
TABLESPACE_NAME USERNAME BYTES
------------------------------ ------------------------------ ----------
MAX_BYTES BLOCKS MAX_BLOCKS DRO
---------- ---------- ---------- ---
SYSAUX OLAPSYS 4718592
-1 576 -1 NO
查看當前用戶表空間的配額情況
#查看當前用戶表空間的配額情況
SELECT * FROM USER_TS_QUOTAS;
SQL> DESC DBA_TS_QUOTAS;
名稱 是否為空? 類型
----------------------------------------- -------- ----------------------------
TABLESPACE_NAME NOT NULL VARCHAR2(30)
USERNAME NOT NULL VARCHAR2(30)
BYTES NUMBER
MAX_BYTES NUMBER
BLOCKS NUMBER
MAX_BLOCKS NUMBER
DROPPED VARCHAR2(3)
注意:若MAX_BYTES=-1
表示沒有配額限制
三掐禁、oralce 數(shù)據(jù)庫設置表空間的只讀/讀寫模式
意義:主要是為了確保數(shù)據(jù)完整性怜械。
如:數(shù)據(jù)備份與還原操作、歷史數(shù)據(jù)的完整性保護傅事」可以將表空間設置只讀模式。
只讀:是表空間中不能進行INSERT(插入)享完、UPDATE(修改)灼芭、DELETE(刪除)等操作。
需要dba權限的用戶登錄才可以進行一下操作:
1.打開cmd輸入,進入sqlplus和連接數(shù)據(jù)庫及登錄sys般又。
sqlplus sys/123456@ZhengJiaAo:1521/ORCL as sysdba
SQL> select tablespace_name,status from dba_tablespaces; //查看所有表空間狀態(tài)彼绷,讀寫(ONLINE)
TABLESPACE_NAME STATUS
------------------------------ ---------
SYSTEM ONLINE
SYSAUX ONLINE
UNDOTBS1 ONLINE
TEMP ONLINE
USERS ONLINE
EXAMPLE ONLINE
EBANK_TEMP ONLINE
ECIF_DATA ONLINE
ECIF_INDEX ONLINE
EIP_DATA ONLINE
YANG ONLINE
已選擇11行巍佑。
2.更改表空間狀態(tài):只讀(READ ONLY)。
SQL> alter tablespace users read only;
表空間已更改寄悯。
SQL> select tablespace_name,status from dba_tablespaces;
TABLESPACE_NAME STATUS
------------------------------ ---------
SYSTEM ONLINE
SYSAUX ONLINE
UNDOTBS1 ONLINE
TEMP ONLINE
USERS READ ONLY
EXAMPLE ONLINE
EBANK_TEMP ONLINE
ECIF_DATA ONLINE
ECIF_INDEX ONLINE
EIP_DATA ONLINE
YANG ONLINE
已選擇11行萤衰。
3.更改表空間狀態(tài)為:讀寫(ONLINE)。
SQL> alter tablespace users read write;
表空間已更改猜旬。
SQL> select tablespace_name,status from dba_tablespaces;
TABLESPACE_NAME STATUS
------------------------------ ---------
SYSTEM ONLINE
SYSAUX ONLINE
UNDOTBS1 ONLINE
TEMP ONLINE
USERS ONLINE
EXAMPLE ONLINE
EBANK_TEMP ONLINE
ECIF_DATA ONLINE
ECIF_INDEX ONLINE
EIP_DATA ONLINE
YANG ONLINE
已選擇11行脆栋。
四、Schema和用戶
Oracle的方案(Schema)和用戶(User)的區(qū)別
Schema定義:
A schema is a collection of database objects (used by a user).
Schema objects are the logical structures that directly refer to the database’s data.
A user is a name defined in the database that can connect to and access objects洒擦。
Schemas and users help database administrators manage database security
模式是數(shù)據(jù)庫對象(由用戶使用)的集合椿争。
Schema對象是直接引用數(shù)據(jù)庫數(shù)據(jù)的邏輯結構。
用戶是數(shù)據(jù)庫中定義的可以連接和訪問對象的名稱熟嫩。
模式和用戶幫助數(shù)據(jù)庫管理員管理數(shù)據(jù)庫安全性
從定義中我們可以看出schema為數(shù)據(jù)庫對象的集合秦踪,為了區(qū)分各個集合,我們需要給這個集合起個名字掸茅,這些名字就是我們在企業(yè)管理器的方案下看到的許多類似用戶名的節(jié)點椅邓,這些類似用戶名的節(jié)點其實就是一個schema,schema里面包含了各種對象如tables, views, sequences, stored procedures, synonyms, indexes, clusters, and database links.
1.一個用戶一般對應一個schema:
一個用戶一般對應一個schema昧狮,該用戶的schema名等于用戶名景馁,并作為該用戶缺省schema。這也就是在企業(yè)管理器的方案下看到schema名都為數(shù)據(jù)庫用戶名的原因逗鸣。
數(shù)據(jù)庫Schema有兩種含義:一種是概念上的Schema裁僧,指的是一組DDL語句集,該語句集完整地描述了數(shù)據(jù)庫的結構慕购。還有一種是物理上的 Schema,指的是數(shù)據(jù)庫中的一個名字空間茬底,它包含一組表沪悲、視圖和存儲過程等命名對象。物理Schema可以通過標準SQL語句來創(chuàng)建阱表、更新和修改殿如。例 如以下SQL語句創(chuàng)建了兩個物理Schema:
create schema SCHEMA_A;
create table SCHEMA_A.CUSTOMERS(ID int not null,……);
create schema SCHEMA_B;
create table SCHEMA_B.CUSTOMERS(ID int not null,……);
簡單的說:就是一個數(shù)據(jù)庫用戶所擁有的數(shù)據(jù)庫的對象。
比如scott用戶建立了表最爬,索引涉馁,視圖,存儲過程等對象爱致,那么這些對象就構成了schema scott
Oracle數(shù)據(jù)庫中不能新創(chuàng)建一個schema烤送,要想創(chuàng)建一個schema,只能通過創(chuàng)建一個用戶的方法解決(Oracle中雖然有create schema語句糠悯,但是它并不是用來創(chuàng)建一個schema的)帮坚,在創(chuàng)建一個用戶的同時為這個用戶創(chuàng)建一個與用戶名同名的schem并作為該用戶的缺省shcema.
即schema的個數(shù)同user的個數(shù)相同妻往,而且schema名字同user名字一一對應并且相同,所有我們可以稱schema為user的別名试和,雖然這樣說并不準確讯泣,但是更容易理解一些。
2.一個用戶還可以使用其他的schema:
訪問一個表時阅悍,沒有指明該表屬于哪一個schema中的好渠,系統(tǒng)就會自動給我們在表上加上缺省的sheman名.
訪問scott用戶下的emp表,通過select * from emp; 其實节视,這sql語句的完整寫法為select * from scott.emp;
在數(shù)據(jù)庫中一個對象的完整名稱為schema.object拳锚,而不屬user.object.
3.oracle中的schema就是指一個用戶下所有對象的集合:
schema本身不能理解成一個對象,oracle并沒有提供創(chuàng)建schema的語法肴茄,schema也并不是在創(chuàng)建user時就創(chuàng)建晌畅,而是在該用戶下創(chuàng)建第一個對象之后schema也隨之產(chǎn)生,只要user下存在對象寡痰,schema就一定存在抗楔,user下如果不存在對象,schema也不存在拦坠;這一點類似于temp tablespace group连躏,另外也可以通過oem來觀察,如果創(chuàng)建一個新用戶贞滨,該用戶下如果沒有對象則schema不存在入热,如果創(chuàng)建一個對象則和用戶同名的schema也隨之產(chǎn)生。