真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Oracle同義詞是什么

這篇文章主要介紹“Oracle同義詞是什么”,在日常操作中,相信很多人在Oracle同義詞是什么問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”O(jiān)racle同義詞是什么”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!

創(chuàng)新互聯(lián)公司是專業(yè)的雙塔網(wǎng)站建設(shè)公司,雙塔接單;提供成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè),網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行雙塔網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!

同義詞概念

Oracle的同義詞(synonyms)從字面上理解就是別名的意思,和視圖的功能有點(diǎn)類似,就是一種映射關(guān)系。它可以節(jié)省大量的數(shù)據(jù)庫空間,對(duì)不同用戶的操作同一張表沒有多少差別;它擴(kuò)展了數(shù)據(jù)庫的使用范圍,能夠在不同的數(shù)據(jù)庫用戶之間實(shí)現(xiàn)無縫交互;Oracle數(shù)據(jù)庫中提供了同義詞管理的功能。同義詞是數(shù)據(jù)庫對(duì)象的一個(gè)別名,經(jīng)常用于簡(jiǎn)化對(duì)象訪問和提高對(duì)象訪問的安全性。在使用同義詞時(shí),Oracle數(shù)據(jù)庫將它翻譯成對(duì)應(yīng)方案對(duì)象的名字。與視圖類似,同義詞并不占用實(shí)際存儲(chǔ)空間,只在數(shù)據(jù)字典中保存了同義詞的定義。在Oracle數(shù)據(jù)庫中的大部分?jǐn)?shù)據(jù)庫對(duì)象,如表、視圖、物化視圖、序列、函數(shù)、存儲(chǔ)過程、包、同義詞等等,數(shù)據(jù)庫管理員都可以根據(jù)實(shí)際情況為它們定義同義詞。

同義詞分類

Oracle同義詞有兩種類型,分別是Oracle公用同義詞與Oracle私有同義詞。普通用戶創(chuàng)建的同義詞一般都是私有同義詞,公有同義詞一般由DBA創(chuàng)建,普通用戶如果希望創(chuàng)建公用同義詞,則需要CREATE  PUBLIC SYNONYM這個(gè)系統(tǒng)權(quán)限。

  • 1  Oracle公用同義詞:由一個(gè)特殊的用戶組Public所擁有。顧名思義,數(shù)據(jù)庫中所有的用戶都可以使用公用同義詞。公用同義詞往往用來標(biāo)示一些比較普通的數(shù)據(jù)庫對(duì)象,這些對(duì)象往往大家都需要引用。

  • 2  Oracle私有同義詞:它是跟公用同義詞所對(duì)應(yīng),它是由創(chuàng)建它的用戶所有。當(dāng)然,這個(gè)同義詞的創(chuàng)建者,可以通過授權(quán)控制其他用戶是否有權(quán)使用屬于自己的私有同義詞。

同義詞作用

  • 1  多用戶協(xié)同開發(fā)中,可以屏蔽對(duì)象的名字及其持有者。如果沒有同義詞,當(dāng)操作其他用戶的表時(shí),必須通過user名.object名的形式,采用了Oracle同義詞之后就可以隱蔽掉user名,當(dāng)然這里要注意的是:public同義詞只是為數(shù)據(jù)庫對(duì)象定義了一個(gè)公共的別名,其他用戶能否通過這個(gè)別名訪問這個(gè)數(shù)據(jù)庫對(duì)象,還要看是否已經(jīng)為這個(gè)用戶授權(quán)。

  • 2  為用戶簡(jiǎn)化sql語句。上面的一條其實(shí)就是一種簡(jiǎn)化sql的體現(xiàn),同時(shí)如果自己建的表的名字很長,可以為這個(gè)表創(chuàng)建一個(gè)Oracle同義詞來簡(jiǎn)化sql開發(fā)。

  • 3 為分布式數(shù)據(jù)庫的遠(yuǎn)程對(duì)象提供位置透明性。

  • 4 Oracle同義詞在數(shù)據(jù)庫鏈接中的作用

數(shù)據(jù)庫鏈接是一個(gè)命名的對(duì)象,說明一個(gè)數(shù)據(jù)庫到另一個(gè)數(shù)據(jù)庫的路徑,通過其可以實(shí)現(xiàn)不同數(shù)據(jù)庫之間的通信。

Create database link 數(shù)據(jù)庫鏈名 connect to user名 identified by 口令 using  ‘Oracle連接串’; 訪問對(duì)象要通過 object名@數(shù)據(jù)庫鏈名。同義詞在數(shù)據(jù)庫鏈中的作用就是提供位置透明性。

同義詞權(quán)限管理

與同義詞相關(guān)的權(quán)限有CREATE SYNONYM、CREATE ANY SYNONYM、CREATE PUBLIC SYNONYM權(quán)限。

用戶在自己的模式下創(chuàng)建私有同義詞,這個(gè)用戶必須擁有CREATE SYNONYM權(quán)限,否則不能創(chuàng)建私有同義詞。

如下所示,用戶DM缺少CREATE SYNONYM權(quán)限,創(chuàng)建同義詞時(shí)會(huì)報(bào)ORA-01031錯(cuò)誤

SQL> CREATE SYNONYM TEST FOR DM.TM_WGG_ATM_GTW_MON;   CREATE SYNONYM TEST FOR DM.TM_WGG_ATM_GTW_MON   ORA-01031: insufficient privileges

用sys賬號(hào)給DM賬號(hào)賦予CREATE SYNONYM的權(quán)限

SQL> GRANT CREATE SYNONYM TO DM;  Grant succeeded.

然后創(chuàng)建私有同義詞

SQL> CREATE SYNONYM TEST FOR DM.TM_WGG_ATM_GTW_MON;   Synonym created

2.如果需要在其它模式下創(chuàng)建同義詞,則必須具有CREATE ANY SYNONYM的權(quán)限。

看下面的例子,用戶DM想創(chuàng)建SCOTT模式下的私有同義詞

SQL> CREATE SYNONYM SCOTT.EM FOR SOCTT.EMP;   CREATE SYNONYM SCOTT.EM FOR SOCTT.EMP   ORA-01031: insufficient privileges

用sys賬號(hào)給DM賬號(hào)賦予CREATE ANY SYNONYM的權(quán)限

SQL> GRANT CREATE ANY SYNONYM TO DM;   Grant succeeded.   SQL> CREATE SYNONYM SCOTT.EM FOR SOCTT.EMP;   Synonym created

3.創(chuàng)建公有同義詞則需要CREATE PUBLIC SYNONYM系統(tǒng)權(quán)限。

創(chuàng)建同義詞

創(chuàng)建同義詞的語法如下:

Oracle同義詞是什么

普通用法如下所示:

SQL> GRANT CREATE ANY SYNONYM TO DM;   Grant succeeded.   SQL> CREATE SYNONYM SCOTT.EM FOR SOCTT.EMP;   Synonym created

如果要?jiǎng)?chuàng)建一個(gè)遠(yuǎn)程的數(shù)據(jù)庫上的某張表的同義詞,需要先創(chuàng)建一個(gè)Database  Link(數(shù)據(jù)庫連接)來擴(kuò)展訪問,然后再使用如下語句創(chuàng)建數(shù)據(jù)庫同義詞:create synonym table_name for  table_name@DB_Link;

公共同義詞是和用戶的schema無關(guān)的,但是公共的意思并不是所有的用戶都可以訪問它,必須被授權(quán)后才能進(jìn)行;私有同義詞是schema的對(duì)象

查看同義詞

SQL> SELECT * FROM DBA_SYNONYMS WHERE SYNONYM_NAME IN ( 'SYSN_TEST','PUBLIC_TEST');   OWNER            SYNONYM_NAME                   TABLE_OWNER                    TABLE_NAME                     DB_LINK ------------------------------ ------------------------------ ------------------------------  PUBLIC              PUBLIC_TEST                    ETL                            TEST                            ETL                 SYSN_TEST                      ETL                            TEST                              SQL> SELECT * FROM USER_SYNONYMS

使用同義詞

SELECT * FROM SYSN_TEST;
  • 使用同義詞可以保證當(dāng)數(shù)據(jù)庫的位置或?qū)ο竺Q發(fā)生改變時(shí),應(yīng)用程序的代碼保持穩(wěn)定不變,僅需要改變同義詞;

  • 當(dāng)使用一個(gè)沒有指定schema的同義詞是,首先在用戶自己的schema中尋找,然后再公共同義詞中尋找

刪除同義詞

DROP [ PUBLIC ] SYNONYM [ schema. ] 同義詞名稱 [ FORCE ];  DROP SYNONYM SYSN_TEST;  DROP PUBLIC SYNONYM PUBLIC_TEST;--當(dāng)同義詞的原對(duì)象被刪除是,同義詞并不會(huì)被刪除

編譯同義詞

ALTER  SYNONYM T COMPILE; --當(dāng)同義詞的原對(duì)象被重新建立時(shí),同義詞需要重新編譯

對(duì)原對(duì)象進(jìn)行DDL操作后,同義詞的狀態(tài)會(huì)變成INVALID;當(dāng)再次引用這個(gè)同義詞時(shí),同義詞會(huì)自動(dòng)編譯,狀態(tài)會(huì)變成VALID,無需人工干預(yù),當(dāng)然前提是不改變?cè)瓕?duì)象的名稱

SQL> SELECT * FROM T;            ID NAME ----------- ----------------------------------------------------------------   SQL> SELECT * FROM TEST;            ID NAME ----------- ----------------------------------------------------------------   SQL> ALTER TABLE TEST ADD SEX NUMBER(1);   Table altered  SQL> SELECT OBJECT_NAME, STATUS  FROM ALL_OBJECTS WHERE OBJECT_NAME='T';   OBJECT_NAME                    STATUS ------------------------------ ------- T                              INVALID

問題錦集

1.公用同義詞與私有同義詞能否同名呢?如果可以,訪問同義詞時(shí),是共有同義詞還是私有同義詞優(yōu)先?

可以,如果存在公用同義詞和私有同義詞同名的情況,在訪問同義詞時(shí),訪問的是私有同義詞的指向的對(duì)象。

2.為啥OE用戶創(chuàng)建的公用同義詞,HR用戶不能訪問呢?

因?yàn)镠R沒有訪問OE模式下對(duì)象的權(quán)限,如果OE用戶給HR用戶賦予了SELECT對(duì)象等權(quán)限,那么HR用戶即可訪問。

3.對(duì)象、私有同義詞、公共同義詞是否可以存在三者同名的情況?ORACLE中同義詞和表的優(yōu)先順序淺析是怎么樣的呢?

在用戶kerry下,創(chuàng)建表TEST

SQL>CREATE TABLE TEST  AS SELECT * FROM USER_OBJECTS WHERE 1= 0;

創(chuàng)建私有同義詞TEST

SQL> CREATE SYNONYM TEST FOR REF.REF_WGG_STUDENT;   CREATE SYNONYM TEST FOR REF.REF_WGG_STUDENT   ORA-00955: name is already used by an existing object

注意:對(duì)象(表)與私有同義詞不能同名,否則會(huì)報(bào)ORA-00955錯(cuò)誤

創(chuàng)建公共同義詞TEST,如下所示,公共同義詞可以對(duì)象同名

SQL> CREATE PUBLIC  SYNONYM TEST FOR REF.REF_WGG_STUDENT;   Synonym created

訪問TEST時(shí),如下所示:它是表TEST的內(nèi)容,而不是公共同義詞的內(nèi)容

SQL> SELECT * FROM TEST;   OBJECT_NAME     SUBOBJECT_NAME    OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE         CREATED     LAST_DDL_TIME TIMESTAMP           STATUS  TEMPORARY GENERATED SECONDARY

刪除表TEST后,此時(shí)數(shù)據(jù)庫訪問的是公共同義詞

SQL> DROP TABLE TEST PURGE;   Table dropped   SQL> SELECT * FROM TEST;            ID NAME ----------- --------------------------------           1 12   SQL>

結(jié)論:存在同名對(duì)象和公共同義詞時(shí),數(shù)據(jù)庫優(yōu)先選擇對(duì)象作為目標(biāo),存在同名私有同義詞和公共同義詞時(shí),數(shù)據(jù)庫優(yōu)先選擇私有同義詞作為目標(biāo)。

到此,關(guān)于“Oracle同義詞是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!


名稱欄目:Oracle同義詞是什么
鏈接URL:http://weahome.cn/article/iepocc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部