DM8与Oracle关于模式、用户等概念的分析
最近在學(xué)習(xí)達(dá)夢(mèng)數(shù)據(jù)庫(kù)時(shí)對(duì)達(dá)夢(mèng)的模式概念有些模糊,所以將它和Oracle的進(jìn)行了對(duì)比。
一、Oracle數(shù)據(jù)庫(kù)關(guān)于模式、用戶等概念的分析
Oracle數(shù)據(jù)庫(kù)是我行一直使用的數(shù)據(jù)庫(kù),相對(duì)來(lái)說(shuō)schema的概念比較清晰。先用官方解釋來(lái)闡述下,在來(lái)講講我的理解。
原文: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.
大意:模式是數(shù)據(jù)庫(kù)對(duì)象的集合。模式對(duì)象是數(shù)據(jù)庫(kù)數(shù)據(jù)的邏輯結(jié)構(gòu)。(把數(shù)據(jù)庫(kù)對(duì)象用模式分開(kāi)成不同的邏輯結(jié)構(gòu))。
schema里面包含了各種對(duì)象如tables, views, sequences, stored procedures, synonyms, indexes, clusters, and database links等。
在我的理解中,schema的個(gè)數(shù)和名字都和user相同,但是schema和user的創(chuàng)建時(shí)間是不同的。schema是不能通過(guò)創(chuàng)建得到的,默認(rèn)是在創(chuàng)建用戶的時(shí)候自動(dòng)生成的,在創(chuàng)建一個(gè)用戶的同時(shí)為這個(gè)用戶創(chuàng)建一個(gè)與用戶名同名的schema并作為該用戶的缺省 schema。一個(gè)用戶有一個(gè)缺省的schema,其schema名就等于用戶名,當(dāng)然一個(gè)用戶還可以使用其他的schema。如果我們?cè)L問(wèn)一個(gè)表時(shí),沒(méi)有指明該 表屬于哪一個(gè)schema中的,系統(tǒng)就會(huì)自動(dòng)給我們?cè)诒砩霞由先笔〉膕chema名。比如我們?cè)谠L問(wèn)數(shù)據(jù)庫(kù)時(shí),訪問(wèn)scott用戶下的emp表,通過(guò) select * from emp; 其實(shí),這sql語(yǔ)句的完整寫(xiě)法為select * from scott.emp。
在數(shù)據(jù)庫(kù)中一個(gè)對(duì)象的完整名稱為schema.object,而不屬user.object。類似如果我們?cè)趧?chuàng)建對(duì)象時(shí)不指定該對(duì)象 的schema,在該對(duì)象的schema為用戶的缺省schema。這就像一個(gè)用戶有一個(gè)缺省的表空間,但是該用戶還可以使用其他的表空間,如果我們?cè)趧?chuàng) 建對(duì)象時(shí)不指定表空間,則對(duì)象存儲(chǔ)在缺省表空間中,要想讓對(duì)象存儲(chǔ)在其他表空間中,我們需要在創(chuàng)建對(duì)象時(shí)指定該對(duì)象的表空間。
二、DM8數(shù)據(jù)庫(kù)關(guān)于模式、用戶等概念的分析
官方定義為:用戶的模式(SCHEMA)指的是用戶賬號(hào)擁有的對(duì)象集,在概念上可將其看作是包含表、視圖、索引和權(quán)限定義的對(duì)象。包含表、視圖、約束、索引、序列、觸發(fā)器、存儲(chǔ)過(guò)程/函數(shù)、包、同義詞、類、域等。
使用模式的主要原因:
可以使用如下語(yǔ)句查詢數(shù)據(jù)庫(kù)中所有模式:
在DM中,一個(gè)用戶可以擁有多個(gè)模式,一個(gè)模式僅歸屬于一個(gè)用戶;一個(gè)模式中的對(duì)象(表、視圖等)可以被多個(gè)用戶使用(前提是有訪問(wèn)權(quán)限)。
而這就是Oracle和DM最大的不同。
如果要查看數(shù)據(jù)庫(kù)中所有模式分別歸屬于哪個(gè)用戶,可以使用如下語(yǔ)句查詢:
使用如下語(yǔ)句可以查詢某模式(這里以TEST模式為名,模式名區(qū)分大小寫(xiě))下的所有數(shù)據(jù)庫(kù)對(duì)象:
也可以在DM管理工具對(duì)象導(dǎo)航窗口查看模式下的所有對(duì)象,如下圖所示。在DM數(shù)據(jù)庫(kù)中,除模式對(duì)象之外,還有模式對(duì)象之外的其他對(duì)象,稱為非模式對(duì)象,比如:用戶、角色、表空間、目錄等。
在創(chuàng)建用戶時(shí),系統(tǒng)會(huì)為每一個(gè)用戶自動(dòng)建立了一個(gè)與用戶名同名的模式作為其默認(rèn)模式,用戶還可以用模式定義語(yǔ)句建立其它模式。這一點(diǎn)也是和Oracle迥然不同的。
在創(chuàng)建模式時(shí)也可以同時(shí)創(chuàng)建模式下對(duì)象,只有具有CREATE SCHEMA權(quán)限的用戶才能創(chuàng)建模式。圖形化如圖:
或者用命令也可:
create schema MYDM authorization test;如果我們不再使用某個(gè)模式,可以刪除該模式;使用如下語(yǔ)句刪除模式,默認(rèn)為RESTRICT方式(如果模式下存在對(duì)象則不能直接刪除,可以使用CASCADE級(jí)聯(lián)刪除模式及模式下的所有對(duì)象)。
DROP SCHEMA <模式名> [RESTRICT | CASCADE];
模式一旦定義,該用戶所建基表、視圖等均屬該模式,其它用戶訪問(wèn)該用戶所建立的基表、視圖等均需在表名、視圖名前冠以模式名;引用模式對(duì)象的格式如下:
[模式名].對(duì)象名
在當(dāng)前模式和要引用的模式對(duì)象所屬的模式相同時(shí),可以省略模式名。當(dāng)訪問(wèn)一個(gè)表時(shí),沒(méi)有指明該表屬于哪一個(gè)模式,系統(tǒng)會(huì)自動(dòng)在表前加上缺省的模式名。類似地,如果我們?cè)趧?chuàng)建對(duì)象時(shí)不指定該對(duì)象的模式,則該對(duì)象的模式為用戶的缺省模式。如果當(dāng)前模式和要引用的模式對(duì)象所屬的模式相同,可省略模式名。
我們也可以使用如下語(yǔ)句指定某個(gè)模式為當(dāng)前模式(前提是該模式屬于當(dāng)前登錄用戶):
SET SCHEMA <模式名>;
如下樣例,我們使用SYSDBA查詢DMHR模式下的部門信息表,在未設(shè)置模式時(shí),默認(rèn)情況下,當(dāng)前模式是登錄用戶的同名模式(即SYSDBA),所以我們?cè)L問(wèn)DMHR模式下的表需要加上模式名;當(dāng)我們使用如下命令設(shè)置了當(dāng)前模式為DMHR時(shí),則訪問(wèn)DMHR模式下的表可以不必再加上模式名,簡(jiǎn)化了對(duì)象的訪問(wèn)。
三、Oracle和DM8數(shù)據(jù)庫(kù)關(guān)于模式、用戶等概念的對(duì)比
綜上所述,我們看出Oracle和DM之間在模式的這個(gè)定義上有所不同的:
1)Oracle的話,一個(gè)用戶一般對(duì)應(yīng)一個(gè)schema,該用戶的schema名等于用戶名,并作為該用戶缺省schema。?而DM數(shù)據(jù)中一個(gè)用戶下可以存在多個(gè)schema。
2)Oracle數(shù)據(jù)庫(kù)中不能新創(chuàng)建一個(gè)schema,要想創(chuàng)建一個(gè)schema,只能通過(guò)創(chuàng)建一個(gè)用戶的方法解決?。而DM數(shù)據(jù)庫(kù)中,在創(chuàng)建用戶時(shí),系統(tǒng)會(huì)為每一個(gè)用戶自動(dòng)建立了一個(gè)與用戶名同名的模式作為其默認(rèn)模式,并且用戶還可以用模式定義語(yǔ)句建立其它模式。
3)Oracle數(shù)據(jù)庫(kù)不能刪除或者創(chuàng)建模式,而DM數(shù)據(jù)庫(kù)可以刪除或者創(chuàng)建模式。
總結(jié)
以上是生活随笔為你收集整理的DM8与Oracle关于模式、用户等概念的分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: win8.1 linux系统,电脑显示w
- 下一篇: 经典算法题:字典树、并查集、单调栈、二分