久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Oracle同義詞是什么

168次閱讀
沒有評論

共計 4607 個字符,預計需要花費 12 分鐘才能閱讀完成。

這篇文章主要介紹“Oracle 同義詞是什么”,在日常操作中,相信很多人在 Oracle 同義詞是什么問題上存在疑惑,丸趣 TV 小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Oracle 同義詞是什么”的疑惑有所幫助!接下來,請跟著丸趣 TV 小編一起來學習吧!

同義詞概念

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

同義詞分類

Oracle 同義詞有兩種類型,分別是 Oracle 公用同義詞與 Oracle 私有同義詞。普通用戶創建的同義詞一般都是私有同義詞,公有同義詞一般由 DBA 創建,普通用戶如果希望創建公用同義詞,則需要 CREATE  PUBLIC SYNONYM 這個系統權限。

1  Oracle 公用同義詞: 由一個特殊的用戶組 Public 所擁有。顧名思義,數據庫中所有的用戶都可以使用公用同義詞。公用同義詞往往用來標示一些比較普通的數據庫對象,這些對象往往大家都需要引用。

2  Oracle 私有同義詞: 它是跟公用同義詞所對應,它是由創建它的用戶所有。當然,這個同義詞的創建者,可以通過授權控制其他用戶是否有權使用屬于自己的私有同義詞。

同義詞作用

1   多用戶協同開發中,可以屏蔽對象的名字及其持有者。如果沒有同義詞,當操作其他用戶的表時,必須通過 user 名.object 名的形式,采用了 Oracle 同義詞之后就可以隱蔽掉 user 名,當然這里要注意的是:public 同義詞只是為數據庫對象定義了一個公共的別名,其他用戶能否通過這個別名訪問這個數據庫對象,還要看是否已經為這個用戶授權。

2   為用戶簡化 sql 語句。上面的一條其實就是一種簡化 sql 的體現,同時如果自己建的表的名字很長,可以為這個表創建一個 Oracle 同義詞來簡化 sql 開發。

3 為分布式數據庫的遠程對象提供位置透明性。

4 Oracle 同義詞在數據庫鏈接中的作用

數據庫鏈接是一個命名的對象,說明一個數據庫到另一個數據庫的路徑,通過其可以實現不同數據庫之間的通信。

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

同義詞權限管理

與同義詞相關的權限有 CREATE SYNONYM、CREATE ANY SYNONYM、CREATE PUBLIC SYNONYM 權限。

用戶在自己的模式下創建私有同義詞,這個用戶必須擁有 CREATE SYNONYM 權限,否則不能創建私有同義詞。

如下所示,用戶 DM 缺少 CREATE SYNONYM 權限,創建同義詞時會報 ORA-01031 錯誤

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 賬號給 DM 賬號賦予 CREATE SYNONYM 的權限

SQL  GRANT CREATE SYNONYM TO DM; Grant succeeded.

然后創建私有同義詞

SQL  CREATE SYNONYM TEST FOR DM.TM_WGG_ATM_GTW_MON; Synonym created

2. 如果需要在其它模式下創建同義詞,則必須具有 CREATE ANY SYNONYM 的權限。

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

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

用 sys 賬號給 DM 賬號賦予 CREATE ANY SYNONYM 的權限

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

3. 創建公有同義詞則需要 CREATE PUBLIC SYNONYM 系統權限。

創建同義詞

創建同義詞的語法如下:

普通用法如下所示:

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

如果要創建一個遠程的數據庫上的某張表的同義詞,需要先創建一個 Database  Link(數據庫連接)來擴展訪問,然后再使用如下語句創建數據庫同義詞:create synonym table_name for  table_name@DB_Link;

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

查看同義詞

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;

使用同義詞可以保證當數據庫的位置或對象名稱發生改變時,應用程序的代碼保持穩定不變,僅需要改變同義詞;

當使用一個沒有指定 schema 的同義詞是,首先在用戶自己的 schema 中尋找,然后再公共同義詞中尋找

刪除同義詞

DROP [ PUBLIC ] SYNONYM [ schema. ]  同義詞名稱  [ FORCE ]; DROP SYNONYM SYSN_TEST; DROP PUBLIC SYNONYM PUBLIC_TEST;-- 當同義詞的原對象被刪除是,同義詞并不會被刪除

編譯同義詞

ALTER SYNONYM T COMPILE; -- 當同義詞的原對象被重新建立時,同義詞需要重新編譯

對原對象進行 DDL 操作后,同義詞的狀態會變成 INVALID; 當再次引用這個同義詞時,同義詞會自動編譯,狀態會變成 VALID,無需人工干預,當然前提是不改變原對象的名稱

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. 公用同義詞與私有同義詞能否同名呢? 如果可以,訪問同義詞時,是共有同義詞還是私有同義詞優先?

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

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

因為 HR 沒有訪問 OE 模式下對象的權限,如果 OE 用戶給 HR 用戶賦予了 SELECT 對象等權限,那么 HR 用戶即可訪問。

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

在用戶 kerry 下,創建表 TEST

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

創建私有同義詞 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

注意:對象 (表) 與私有同義詞不能同名,否則會報 ORA-00955 錯誤

創建公共同義詞 TEST,如下所示,公共同義詞可以對象同名

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

訪問 TEST 時,如下所示:它是表 TEST 的內容,而不是公共同義詞的內容

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 后,此時數據庫訪問的是公共同義詞

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

結論:存在同名對象和公共同義詞時,數據庫優先選擇對象作為目標,存在同名私有同義詞和公共同義詞時,數據庫優先選擇私有同義詞作為目標。

到此,關于“Oracle 同義詞是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注丸趣 TV 網站,丸趣 TV 小編會繼續努力為大家帶來更多實用的文章!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-27發表,共計4607字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 读书| 张家港市| 张北县| 新乡市| 长寿区| 依安县| 伊春市| 盘锦市| 东乡族自治县| 大渡口区| 三明市| 鄂托克前旗| 上饶县| 镇坪县| 垦利县| 宽甸| 湘潭市| 延川县| 额济纳旗| 合山市| 阿拉尔市| 新巴尔虎左旗| 江华| 中宁县| 山阴县| 富锦市| 南宁市| 富宁县| 乌兰县| 谢通门县| 平潭县| 昌江| 澄江县| 苍梧县| 贵溪市| 龙胜| 平舆县| 邢台县| 全州县| 万全县| 广州市|