Synonym_View_Materialized和Public物件

lusklusklusk發表於2016-07-14

建立同義詞語法

CREATE [OR REPLACE] [PUBLIC] SYNONYM [schema.] 同義詞名稱 FOR [schema.] object [@dblink];

使用者具備select any table許可權即可建立(比如授予使用者dba許可權即可建立)

CREATE SYNONYM synonym_name FOR table.column雖然也正常建立,但是select * from synonym_name會報錯ORA-00980:同義詞轉換不再有效

 

建立檢視語法

CREATE [OR REPLACE] VIEW view_name as subquery 

使用者必須具備物件許可權才可建立(比如select * from table1授予使用者dba許可權也不行,必須單獨授予使用者table1的物件,grant select on table1 to user

 

目前public物件使用較多的就是db_linkSYNONYM兩類

臨時表建立時雖然要加public,但是owner不是publicowner就是建立它的使用者,而且dba_tables.tablespace_name為空。

 

ALLDBAUSER開頭的一般都是公共同義詞如下

CREATE OR REPLACE PUBLIC SYNONYM ALL_TABLES FOR SYS.ALL_TABLES;

CREATE OR REPLACE PUBLIC SYNONYM DBA_TABLES FOR SYS.DBA_TABLES;

CREATE OR REPLACE PUBLIC SYNONYM USER_TABLES FOR SYS.USER_TABLES;

SYSALLDBAUSER開頭的就是檢視了

CREATE OR REPLACE FORCE VIEW SYS.DBA_TABLES(欄位1,欄位2,...)

AS SELECT.....


 


1.  同義詞和檢視都不佔空間,在user_segments.segment_name一欄沒有同義詞和檢視的物件

2.  物化檢視佔用空間,但是在user_segments.segment_type顯示的值是table而不是MATERIALIZED VIEW

3.  Schema下的物件可以和公共同義詞同名,但是同一schema下各類物件之間不能同名,比如同一個使用者下不能同在同樣名稱的表、檢視、私有同義詞,否則報錯ORA-00955:名稱已由現有物件使用

4.  對錶進行DDL操作後,檢視或同義詞的狀態會變成INVALID;當再次引用這個檢視或同義詞時,檢視或同義詞會自動編譯不用重新整理,狀態會變成VALID,無需人工干預,當然前提是不改變原物件的名稱;MV需要自動重新整理或者手動重新整理的

5.  存在同名物件(表、檢視、私有同義詞)和公共同義詞時,資料庫優先選擇物件作為目標,最後才是公共同義詞

6.  Desc的物件可以是表、檢視、私有同義詞、公共同義詞

7.  綜合上面56得出結論:select * from name1時,是先看錶是否有叫name1的物件,再看檢視是否有叫name1的物件,再看私有同義詞是否有叫name1的物件,最後才看公共同義詞是否有叫name1的物件,如果都沒有則報錯ORA-00942:表或檢視不存在

8.  檢視和同義詞不能執行修改欄位型別長度的操作,但是可以執行dml語句如updatedelete,修改的資料最終是base table上的資料

9.  MV也可以直接updatedelete,但是不影響base table

10.同義詞可以建立在檢視CREATE SYNONYM SYNONYM_NAME for VIEW_NAME

11.同義詞只能在建立一個物件上,比如一張表或一張檢視,檢視可以建立在多張表上,建立在多張表上的檢視也可以建立同義詞。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30126024/viewspace-2122000/,如需轉載,請註明出處,否則將追究法律責任。

相關文章