轉 ORA-02030: can only select from fixed tables/views問題處理方法
問題描述:
在一個dba使用者下的儲存過程中需要使用v$的檢視,有ORA-02030報錯。
直接執行如下語句,可以正常執行:
insert into CURSORNUM_Rui select * from (select * from (select sid,value
from v$sesstat a,v$statname b
where a.statistic#=b.statistic#
and name='opened cursors current' order by 2 DESC)a
where rownum<2);
1
2
3
4
5
6
接下來編輯成儲存過程,如下:
create or replace procedure Rec_CursorNum is
begin
insert into CURSORNUM_Rui select * from (select * from (select sid,value
from v$sesstat a,v$statname b
where a.statistic#=b.statistic#
and name='opened cursors current' order by 2 DESC)a
where rownum<2);
end;
1
2
3
4
5
6
7
8
9
10
顯示該儲存過程不可用:
檢視具體資訊:
可以看到是由於該DBA使用者沒有對v$sesstat ,v$statname這兩個檢視的select許可權。
所以,現嘗試直接賦權,而不是通過角色賦權。
$ sqlplus / as sysdba
SQL> grant select on v$sesstat to rui;
grant select on v$sesstat to rui
*
ERROR at line 1:
ORA-02030: can only select from fixed tables/views
1
2
3
4
5
6
發現有ORA-02030報錯,處理方式如下:
select TABLE_NAME from dba_synonyms t where t.synonym_name = 'V$SESSTAT'; --結果為V_$SESSTAT
select TABLE_NAME from dba_synonyms t where t.synonym_name = 'V$STATNAME';--結果為V_$STATNAME
1
2
再次執行賦權語句:
SQL> grant select on V_$SESSTAT to rui;
Grant succeeded.
SQL> grant select on V_$STATNAME to rui;
Grant succeeded.
1
2
3
4
5
6
7
現已成功賦權。
接下來刪除之前的儲存過程Rec_CursorNum,然後重新建立。
ok啦!
————————————————
版權宣告:本文為CSDN博主「夜光小兔紙」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。
原文連結:https://blog.csdn.net/Ruishine/article/details/120890081