您好,登錄后才能下訂單哦!
這篇文章給大家介紹catalog.sql腳本怎么編寫,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。
前面介紹了如何通過手工創(chuàng)建數(shù)據(jù)庫,在創(chuàng)建數(shù)據(jù)庫之后執(zhí)行了腳本$ORACLA_HOME/rdbms/admin/catalog.sql腳本,這里著重介紹一下該腳本的作用。
該腳本用戶創(chuàng)建oracle動(dòng)態(tài)性能視圖,比如v$session,v$session_wait,v$transactoin等。這類性能視圖主要用于監(jiān)控oracle實(shí)例運(yùn)行的狀態(tài),腳本文件開始時(shí)的注釋已經(jīng)說明其作用:
Rem NAME
Rem CATALOG.SQL
Rem FUNCTION
Rem Creates data dictionary views.
Rem NOTES
Rem Must be run when connected AS SYSDBA
必須采用sysdba角色的用戶才可以執(zhí)行該腳本。
下面分析一下常用的v$session來分析一下
create or replace view v_$session as select * from v$session;
create or replace public synonym v$session for v_$session;
grant select on v_$session to select_catalog_role;
可以發(fā)現(xiàn)數(shù)據(jù)庫通過該執(zhí)行該腳本對(duì)底層的v$session視圖進(jìn)一步作了封裝。
通過創(chuàng)建一個(gè)新的視圖v_$session,并將該v_$session視圖的查詢權(quán)限分配了
select_catalog_role這個(gè)角色,任何user只要擁有select_catalog_role這個(gè)角色,都可以通過sys.v_$session來訪問sys用戶的v_$session視圖,但是考慮到用戶訪問的不便,同時(shí)也考慮對(duì)sys用戶對(duì)應(yīng)視圖的封裝,創(chuàng)建了一個(gè)public 同義詞。
擁有select_catalog_role角色的用戶其實(shí)訪問的只是v$session這個(gè)public同義詞,實(shí)現(xiàn)了對(duì)底層v$session視圖的封裝隱藏,用戶本身并不知道該視圖時(shí)sys用戶還是其他用戶。
進(jìn)一步向下查看,所有的動(dòng)態(tài)性能視圖都是通過這種方式對(duì)sys用戶下的視圖做了封裝隱藏。我們可以參照這種做法實(shí)現(xiàn)類似的封裝
SQL> conn / as sysdba
SQL>create table test(t number(10));
SQL>conn scott/tiger
SQL>select count(*) from test;
ERROR at line 1:
ORA-00942: table or view does not exist
切回到sys用戶
SQL>conn / as sysdba
SQL>create view test_ as select * from test;
View created.
SQL>create public synonym test for test_;
Synonym created.
SQL>grant select on test_ to tiger;
Grant succeeded.
對(duì)中間視圖test_查詢權(quán)限分配完畢。切回到scott用戶試下
SQL>conn scott/tiger
Connected.
SQL>select count(*) from test;
COUNT(*)
----------
0
可見scott用戶已經(jīng)可以查詢sys用戶下的test表。但是實(shí)際上用戶查詢的僅僅是這個(gè)public synonym。
catalog腳本中還需要注意一點(diǎn),所有的v_$視圖的查詢權(quán)限都分配給了select_catalog_role這個(gè)角色,意味著只要用戶分配給了該角色,就能查詢?cè)撃_本中所有的v$性能視圖。
SQL> grant select_catalog_role to scott;
Grant succeeded.
SQL> conn scott/tiger
Connected.
SQL> select count(*) from v$session;
COUNT(*)
----------
17
scott用戶已經(jīng)可以查詢v$session視圖,否則scott用戶按照utlsampl.sql創(chuàng)建之后不允許查詢v$之類的性能視圖。
而select_catalog_role這個(gè)角色是在執(zhí)行創(chuàng)建oracle數(shù)據(jù)庫腳本時(shí)自動(dòng)創(chuàng)建的,由于oracle創(chuàng)建數(shù)據(jù)庫時(shí)會(huì)自動(dòng)執(zhí)行$ORACLE_HOME/rdbms/admin/sql.bsq腳本。我們通過該腳本,可以看到具體如下:
/
create role select_catalog_role
/
create role execute_catalog_role
/
create role delete_catalog_role
/
grant select_catalog_role to dba with admin option
/
grant execute_catalog_role to dba with admin option
/
grant delete_catalog_role to dba with admin option
可以看到建庫時(shí)oracle自動(dòng)創(chuàng)建了select_catalog_role這個(gè)角色,將該角色賦予給dba角色,并允許dba角色的用戶賦予權(quán)限。
關(guān)于catalog.sql腳本怎么編寫就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。