1. 程式人生 > 其它 >轉 ORA-02030: can only select from fixed tables/views問題處理方法

轉 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