powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Найти источник "grant execute on SYS" в v$db_object_cache
11 сообщений из 11, страница 1 из 1
Найти источник "grant execute on SYS" в v$db_object_cache
    #39365515
Добрый день.
Как найти пакет или пользователя, который выполняет курсор, который отражается в v$db_object_cache как "grant execute on SYS"?
Что еще это может быть? Выполняется очень часто и фрагментирует shared pool до ORA-4031

В SQLAREA ничего похожего нет.

Код: plsql
1.
select * from (select * from v$db_object_cache order by loads desc) where rownum=1;



OWNERNAMEDB_LINKNAMESPACETYPESHARABLE_MEMLOADSEXECUTIONSLOCKSPINSKEPTCHILD_LATCHINVALIDATIONSHASH_VALUELOCK_MODEPIN_MODESTATUSTIMESTAMPPREVIOUS_TIMESTAMPLOCKED_TOTALPINNED_TOTALPROPERTYFULL_HASH_VALUEnullgrant execute on SYSnullSQL AREACURSOR156431219188119185400NO226831918803412088987NONENONEVALID2016-12-10/13:25:50null1918801null1abd5ab18f97e6a2bcef8947cb60589b

Oracle 11.2.0.3
...
Рейтинг: 0 / 0
Найти источник "grant execute on SYS" в v$db_object_cache
    #39365551
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey N. (Пермь),

java в базе используется?
...
Рейтинг: 0 / 0
Найти источник "grant execute on SYS" в v$db_object_cache
    #39365562
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И приведите более подробный текст ora-4031 возникающей у вас
...
Рейтинг: 0 / 0
Найти источник "grant execute on SYS" в v$db_object_cache
    #39365581
Оракловая JAVA не используется.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
Sat Dec 10 13:19:20 2016
Errors in file /oracle/logs/diag/rdbms/prim/prim/trace/prim_j020_20052.trc:
ORA-12012: ------ --- -------------- ------- 51942
ORA-04031: ---------- -------- 256 ---- ----------- ------ ("shared pool","SELECT USER FROM SYS.DUAL","KKSSP^4023","kgllk")
ORA-06512: --  "SYS.STANDARD", line 180
ORA-06512: --  line 9
ORA-04031: ---------- -------- 256 ---- ----------- ------ ("shared pool","select nvl(spare3,0), proper...","KKSSP^4023","kgllk")

Sat Dec 10 13:21:12 2016
Errors in file /oracle/logs/diag/rdbms/prim/prim/trace/prim_j019_20050.trc:
ORA-04031: ---------- -------- 56 ---- ----------- ------ ("shared pool","unknown object","KKSSP^5456","kglseshtSegs")

Sat Dec 10 13:21:13 2016
Errors in file /oracle/logs/diag/rdbms/prim/prim/trace/prim_j005_22177.trc:
ORA-04031: ---------- -------- 56 ---- ----------- ------ ("shared pool","unknown object","kglseshtSegs","kgllc")

Sat Dec 10 13:21:13 2016
Errors in file /oracle/logs/diag/rdbms/prim/prim/trace/prim_m000_22382.trc:
ORA-04031: unable to allocate 760 bytes of shared memory ("shared pool","unknown object","KKSSP^6779","kglss")

Sat Dec 10 13:21:13 2016
Process m000 died, see its trace file
--
replication_dependency_tracking turned off (no async multimaster replication found)
Errors in file /oracle/logs/diag/rdbms/prim/prim/trace/prim_ora_24179.trc  (incident=577435):
ORA-04031: unable to allocate 56 bytes of shared memory ("streams pool","unknown object","streams pool","fixed allocation callback")
Incident details in: /oracle/logs/diag/rdbms/prim/prim/incident/incdir_577435/prim_ora_24179_i577435.trc
...
Рейтинг: 0 / 0
Найти источник "grant execute on SYS" в v$db_object_cache
    #39365594
Фотография SeaGate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey N. (Пермь),

Быстрый тест показывает, что можно попробовать использовать x$kglob.kglobt44.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
SQL> alter system flush shared_pool;

System altered.

SQL> 
SQL> create or replace procedure p0
  2  is
  3  begin
  4    execute immediate 'grant execute on dbms_lock to tc';
  5  end;
  6  /

Procedure created.

SQL> 
SQL> exec p0

PL/SQL procedure successfully completed.

SQL> 
SQL> col object_name for a20
SQL> col object_type for a20
SQL> 
SQL> select distinct l.kglobt44, o.object_name, o.object_type
  2    from v$db_object_cache c,
  3  	    x$kglob l,
  4  	    dba_objects o
  5   where c.name = 'grant execute on dbm'
  6  	and l.kglnahsv = c.full_hash_value
  7  	and o.object_id = l.kglobt44;

  KGLOBT44 OBJECT_NAME		OBJECT_TYPE
---------- -------------------- --------------------
    184977 P0			PROCEDURE


Судя по v$fixed_view_definition, в стандартных представлениях (GV$%) конкретно это поле для grant не визуализируется (дальше не grep-ал).
...
Рейтинг: 0 / 0
Найти источник "grant execute on SYS" в v$db_object_cache
    #39365600
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unable to allocate 56 bytes of shared memory ("streams pool","unknown object","streams pool","fixed allocation callback")

streams используется?
...
Рейтинг: 0 / 0
Найти источник "grant execute on SYS" в v$db_object_cache
    #39365607
SeaGate, вы большой молодец, спасибо. Виновника нашел.
Сейчас буду выяснять действительно ли он причина ORA-4031
...
Рейтинг: 0 / 0
Найти источник "grant execute on SYS" в v$db_object_cache
    #39365625
envunable to allocate 56 bytes of shared memory ("streams pool","unknown object","streams pool","fixed allocation callback")

streams используется?

Затрудняюсь сказать.
streams_pool_size = 0
...
Рейтинг: 0 / 0
Найти источник "grant execute on SYS" в v$db_object_cache
    #39365662
SeaGate 4 execute immediate 'grant execute on dbms_lock to tc';

Была найдена процедура с помощью запроса к x$kglob.
В ней динамическая генерация неименованного PL/SQL блока.
Но в ней нет никаких явных грантов. Из SYS пакетов используется только dbms_output.
Что то может вызывать неявный грант "grant execute on SYS"?
...
Рейтинг: 0 / 0
Найти источник "grant execute on SYS" в v$db_object_cache
    #39365822
dba123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey N. (Пермь),

ты там внимательней посмотри, а то вдруг инъекции
можно вообще не заметить что там исполняется, на первый взгляд
и базу обновить хорошо бы
396940.1 ORA-4031
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
declare
  l_stmt VARCHAR2(32000);
begin
   l_stmt := utl_encode.text_decode('
Cs4sIMvo8OAhCsrg6iDs7e7j7iDC4Owg7eDk7uHt7iDx8vDu9+XqLArX8u7hIOz7
8evoIO707vDs6Ovo8fwg4iDt6PUKwiDq4PDy6O3zIOTz+OXi7e7j7iDs6PDgLArR
7iDx7Pvx6+7sIOgg8Oj07ODs6CDx8uj1Pwo=','WE8ISO8859P1', utl_encode.base64);

   --  execute immediate l_stmt;
   dbms_output.put_line(l_stmt);
end;
/

DECLARE
 C1 NUMBER;
BEGIN
  C1 := DBMS_SQL.OPEN_CURSOR;
  DBMS_SQL.PARSE(C1,'declare begin execute immediate ''GRANT EXECUTE ON SYS TO SCOTT'';end;',0);
  DBMS_SQL.EXECUTE();
END;
/

PL/SQL procedure successfully completed.
...
Рейтинг: 0 / 0
Найти источник "grant execute on SYS" в v$db_object_cache
    #39366340
Фотография SeaGate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey N. (Пермь),

Alexey N. (Пермь)Что то может вызывать неявный грант "grant execute on SYS"?
Я бы начал с того, что в этих блоках, и с полного текста проблемной команды grant.
Найти виновника можно попытаться в ASH (v$active_session_history.sql_opname = 'GRANT OBJECT', like 'GRANT%', например).
Если с ASH не повезет, то уже более системно на выбор:
1. enable_ddl_logging
2. DDL trigger (before grant)
3. audit
4. trace[sql_ddl] (есть PL/SQL Call Stack)
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
SQL> alter system set events 'trace[sql_ddl]';

System altered.

... trace file ...
DDL end in opiexe
session id 127 inc 34484 pgadep 0 sqlid fmfmw2dvdgsgg txn 0x488ab4758 autocommit 1 commited 1 
DDL begin in opiprs
session id 127 inc 34484 pgadep 1 sqlid ga4mjzqbqftx5 oct 17 txn 0x488ab4758 autocommit 1 
----- Current SQL Statement for this session (sql_id=ga4mjzqbqftx5) -----
grant execute on dbms_output to tc
----- PL/SQL Stack -----
----- PL/SQL Call Stack -----
  object      line  object
  handle    number  name
45dfb0e00         4  procedure SCOTTY.P0
44265ee80         1  anonymous block

DDL end in opiexe
session id 127 inc 34484 pgadep 1 sqlid ga4mjzqbqftx5 txn 0x488ab4758 autocommit 1 commited 1 



Для полного текста еще можно subheap dump сделать, вида (для 'grant execute on dbms_output to tc'):
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
SQL> select addr
  2    from v$db_object_cache
  3   where name = 'grant execute on dbm'
  4     and status = 'VALID';

ADDR
----------------
00000004802B3600

SQL> alter session set events 'immediate trace name heapdump_addr level 1, addr 0x00000004802B3600';

Session altered.

SQL> select value from v$diag_info where name='Default Trace File';

VALUE
--------------------------------------------------------------------------------
.../sid_ora_62939.trc

...trace file...
4802B37B0 00000000 00000000 6772616E 74206578  [........grant ex]
4802B37C0 65637574 65206F6E 2064626D 735F6F75  [ecute on dbms_ou]
4802B37D0 74707574 20746F20 74630000 00000000  [tput to tc......]


Сходу не могу сказать, как более просто текст получить post factum. В library_cache dump для этого случая полный текст присутствует, но это не точечное получение.

Есть еще:
Patch 20308798 - DBA_HIST_SQLTEXT SHOWS TRUNCATED STATEMENT IN CASE STATEMENT IS CREATE TABLE
но я не вижу, что он для GRANT что-то меняет.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Найти источник "grant execute on SYS" в v$db_object_cache
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]