Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Лимит в 1000 ролей: ora-600 [17182] на Java  [new]
Сэмка
Member

Откуда:
Сообщений: 372
Приветствую всех!

Нарвался на такую штуку: если у пользователя больше 1000 ролей, то он не может создавать джаву, а также юзать созданную при помощи sqlj. Обычная, созданная руками, при этом пашет. Трейсы показали, что свал происходит после такого запроса:

select privilege#, level
  from sysauth$
connect by grantee# = prior privilege#
       and privilege# > 0
 start with (grantee# = :1 or grantee# = 1)
        and privilege# > 0

Понятно, вычисляются мои роли. Ну, во-первых, почему без distinct? Такой запрос от владельца выдает 10000 строк, а различных чуть больше 1000. Ладно, это лирика. Трейс и ввел в заблуждение, на разных машинах разные цифры, закономерность неясна была. Потом догадался с distinct и без level - бинго! Ровно после 1000 начинается трабл. Еще тяжело отловить было, поскольку повторные (в пределах сессии) вызовы не валились, сколько ролей не создавай: это элемент разбора курсора, делался 1 раз. Я так вижу ситуацию, что выполняется этот запрос, дальше дистинктизация делается "на клиенте :-)", все это пишется в коллекцию длиной 1000, и вылетает с ошибкой памяти.

Пробовал на 9.2.0 с разными патчлевелами (до 9.2.0.8) на разных осях (шпукс, солярка).
Вопрос: кто-то встречался с таким? Лечится? Суппорт напрЯжен, но может, кто-то уже исправлял?

Спасибо
27 июн 07, 21:03    [4323678]     Ответить | Цитировать Сообщить модератору
 Re: Лимит в 1000 ролей: ora-600 [17182] на Java  [new]
Timm
Member

Откуда: Moscow, Ё-burg
Сообщений: 3696
"то он не может создавать джаву, а также юзать созданную при помощи sqlj"
- что означает? не может сделать create java ... ? или вызывать java sp?
Пример в студию.
28 июн 07, 11:26    [4325583]     Ответить | Цитировать Сообщить модератору
 Re: Лимит в 1000 ролей: ora-600 [17182] на Java  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10039
Сэмка
Приветствую всех!

Нарвался на такую штуку: если у пользователя больше 1000 ролей, то он не может создавать джаву, а также юзать созданную при помощи sqlj. Обычная, созданная руками, при этом пашет.


Well, если у пользователя больше 1000 ролей - design фтопку. Actually I mean enabled roles. On enterprise level user can run many different apps each associated with certain number of roles, obviously way less than 1000 but total number or roles granted to user can exceed 1000. Key here is not to make all roles user default roles but rather enable specific roles from application itself, e.g. when user logs in to the app. So I would test user " не может создавать джаву, а также юзать созданную при помощи sqlj" on a user who is granted > 1000 roles but not all of them are enabled.

SY.
28 июн 07, 16:01    [4327648]     Ответить | Цитировать Сообщить модератору
 Re: Лимит в 1000 ролей: ora-600 [17182] на Java  [new]
Сэмка
Member

Откуда:
Сообщений: 372
SY,

дизайн не мой, изменению не подлежит. Мне самому не нравится, но не так категорично.

Ролей много, поскольку владелец схем их СОЗДАЕТ и ВЫДАЕТ, а НЕ ПОЛЬЗУЕТСЯ (admin, но не default).

Простой тесткейс:

begin

for i in 1..1001 loop
execute immediate 'create role test_role'||i;
end loop;

execute immediate 'create or replace and resolve java source named ExampleClass as
public class ExampleClass {
public static void dummy() {
return;
}}';

end;

Проверял только на *никсах, виндовые есть только 10g и 8.0.6, 9.2 негде развернуть. Ежли кто может попробовать на 9.2 и у него пройдет без ошибки - дайте конфигурацию
9 июл 07, 13:58    [4367479]     Ответить | Цитировать Сообщить модератору
 Re: Лимит в 1000 ролей: ora-600 [17182] на Java  [new]
Сэмка
Member

Откуда:
Сообщений: 372
Описочка. Должно быть
begin
  for i in 1..1001 loop
    execute immediate 'create role test_role'||i;
    execute immediate 'create or replace and compile java source named ExampleClass as 
                              public class ExampleClass {
                                     public static void dummy() {
                                            return;
                                     }
                              }';
    
  end loop;
end;
9 июл 07, 14:08    [4367542]     Ответить | Цитировать Сообщить модератору
 Re: Лимит в 1000 ролей: ora-600 [17182] на Java  [new]
Сэмка
Member

Откуда:
Сообщений: 372
Блин, утром из Крыма, всю ночь за рулем - еще не влился. Сорри. Compile тоже не важен, достаточно
begin
  for i in 1 .. 1001 loop
    execute immediate 'create role test_role' || i;
  end loop;

  execute immediate 'create or replace java source named ExampleClass as 
  public class ExampleClass {
  public static void dummy() {
  return;
  }}';

end;

При этом существенно выполнить это сразу после логина, а то, как я писал, если create java уже делалось, то ошибки не будет.
9 июл 07, 14:16    [4367592]     Ответить | Цитировать Сообщить модератору
 Re: Лимит в 1000 ролей: ora-600 [17182] на Java  [new]
denix1
Member

Откуда: Киев
Сообщений: 4656
Сэмка
Блин, утром из Крыма, всю ночь за рулем - еще не влился. Сорри. Compile тоже не важен, достаточно
begin
  for i in 1 .. 1001 loop
    execute immediate 'create role test_role' || i;
  end loop;

  execute immediate 'create or replace java source named ExampleClass as 
  public class ExampleClass {
  public static void dummy() {
  return;
  }}';

end;

При этом существенно выполнить это сразу после логина, а то, как я писал, если create java уже делалось, то ошибки не будет.

суппорту этот простой примерчик уже отправили ?

у меня на 10.2.0.3 HP-UX.IA64 и на 9.2.0.6 HP-UX.IA64 = отработал без проблем

вы уверены что достаточно только создать роли ?
без гранта их кому-то и последующим входом в систему ?
может еще какие-то привилегии нужно грантонуть ролям ?
9 июл 07, 18:07    [4369313]     Ответить | Цитировать Сообщить модератору
 Re: Лимит в 1000 ролей: ora-600 [17182] на Java  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
SY

Well, если у пользователя больше 1000 ролей - design фтопку..


+1
см. еще на (init.ora) max_enabled_roles
9 июл 07, 18:18    [4369367]     Ответить | Цитировать Сообщить модератору
 Re: Лимит в 1000 ролей: ora-600 [17182] на Java  [new]
Сэмказабылпароль
Guest
Далась вам эта топка :-) Реально система представляет собой некий виртуальный хостинг прикладного ПО. Работает несколько независимых экземпляров ПО с общим администрированием и естесственной возможностью консолидации. Проектировалось так, чтобы иметь 1 основной экземпляр для себя и еще несколько на продажу. Кто ж знал, что дело пойдет? Основное заблуждение считать, что эти роли кому-то дадены. Наоборот, этот кто-то их дает, но для этого должен хотя-бы их иметь. Так что enabled - мимо кассы.
10 июл 07, 00:10    [4370100]     Ответить | Цитировать Сообщить модератору
 Re: Лимит в 1000 ролей: ora-600 [17182] на Java  [new]
denix1
Member

Откуда: Киев
Сообщений: 4656
Сэмказабылпароль
Основное заблуждение считать, что эти роли кому-то дадены. Наоборот, этот кто-то их дает, но для этого должен хотя-бы их иметь. Так что enabled - мимо кассы.

enabled, не может быть мимо кассы, а вот max_enabled_roles можно

насчет "этот кто-то их дает, но для этого должен хотя-бы их иметь" могу выссказать вам свои
сомнения в понимании вами сути написанной фразы...
в свете наличия следующей привилегии "GRANT ANY ROLE"
10 июл 07, 10:43    [4370907]     Ответить | Цитировать Сообщить модератору
 Re: Лимит в 1000 ролей: ora-600 [17182] на Java  [new]
Сэмка
Member

Откуда:
Сообщений: 372
Если бы вместо чешуи у рыб была бы шерсть... :-)

Еще раз: Само приложение чужое, советы по его изменению не интересны, я и сам могу их дать множество :-); роли создаются и раздаются владельцем схемы (не DBA!). В этом суть написанной мной выше фразы.

Отсутствие согласованности во фразе
denix1
enabled, не может быть мимо кассы, а вот max_enabled_roles можно
скрывает от меня ее смысл. Что "не может", а что "можно"? Данный параметр влияет именно на enabled роли, а у владельца схемы их статический набор далекий от лимита. Кроме того, кол-во enabled ролей уж никак не может быть 1000. Это к опросу о сомнениях, они беспочвенны.

А скрипт действительно прошел? Запущеный сразу после логина? Вот мой результат


SQL> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle9i Enterprise Edition Release 9.2.0.6.0 - 64bit Production
PL/SQL Release 9.2.0.6.0 - Production
CORE    9.2.0.6.0       Production
TNS for HPUX: Version 9.2.0.6.0 - Production
NLSRTL Version 9.2.0.6.0 - Production

SQL> create user test_ora_600 identified by test_ora_600;

User created.

SQL> grant create session, create role, create procedure to test_ora_600;

Grant succeeded.

SQL> connect test_ora_600/test_ora_600
Connected.
SQL> 
SQL> begin
  2    for i in 1..1001 loop
  3      execute immediate 'create role test_role'||i;
  4    end loop;
  5    execute immediate 'create or replace java source named ExampleClass as
  6    public class ExampleClass {
  7    public static void dummy() {
  8    return;
  9    }}';
 10  end;
 11  /
begin
*
ERROR at line 1:
ORA-00600: internal error code, arguments: [17182], [0x800003FFFF810050], [],
[], [], [], [], []
ORA-06512: at line 5
10 июл 07, 15:34    [4373513]     Ответить | Цитировать Сообщить модератору
 Re: Лимит в 1000 ролей: ora-600 [17182] на Java  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10039
denix1
насчет "этот кто-то их дает, но для этого должен хотя-бы их иметь" могу выссказать вам свои
сомнения в понимании вами сути написанной фразы...
в свете наличия следующей привилегии "GRANT ANY ROLE"


Well, I prefer application owner approach. Each application is associated with application owner account which is granted application roles (with grant option). This way "этот кто-то их дает, но для этого должен хотя-бы их иметь" has a small number of granted roles.

SY.
10 июл 07, 15:49    [4373632]     Ответить | Цитировать Сообщить модератору
 Re: Лимит в 1000 ролей: ora-600 [17182] на Java  [new]
Dacota
Member

Откуда: Днепропетровск
Сообщений: 71
Сэмка
SY,

дизайн не мой, изменению не подлежит. Мне самому не нравится, но не так категорично.

Ролей много, поскольку владелец схем их СОЗДАЕТ и ВЫДАЕТ, а НЕ ПОЛЬЗУЕТСЯ (admin, но не default).

Простой тесткейс:

begin

for i in 1..1001 loop
execute immediate 'create role test_role'||i;
end loop;

execute immediate 'create or replace and resolve java source named ExampleClass as
public class ExampleClass {
public static void dummy() {
return;
}}';

end;

Проверял только на *никсах, виндовые есть только 10g и 8.0.6, 9.2 негде развернуть. Ежли кто может попробовать на 9.2 и у него пройдет без ошибки - дайте конфигурацию


На 10.2.0.3 прошло.
10 июл 07, 15:58    [4373713]     Ответить | Цитировать Сообщить модератору
 Re: Лимит в 1000 ролей: ora-600 [17182] на Java  [new]
denix1
Member

Откуда: Киев
Сообщений: 4656
Сэмка
А скрипт действительно прошел? Запущеный сразу после логина?


$ sqlplus '/ as sysdba'

SQL*Plus: Release 9.2.0.6.0 - Production on Tue Jul 10 14:46:22 2007

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.


Connected to:
Oracle9i Enterprise Edition Release 9.2.0.6.0 - 64bit Production
With the Partitioning option
JServer Release 9.2.0.6.0 - Production

SQL> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle9i Enterprise Edition Release 9.2.0.6.0 - 64bit Production
PL/SQL Release 9.2.0.6.0 - Production
CORE    9.2.0.6.0       Production
TNS for HPUX: Version 9.2.0.6.0 - Production
NLSRTL Version 9.2.0.6.0 - Production

SQL> create user test_ora_600 identified by test_ora_600;

User created.

SQL> grant create session, create role, create procedure to test_ora_600;

Grant succeeded.

SQL> connect test_ora_600/test_ora_600
Connected.
SQL> begin
  2      for i in 1..1001 loop
  3        execute immediate 'create role test_role'||i;
  4      end loop;
  5      execute immediate 'create or replace java source named ExampleClass as
  6      public class ExampleClass {
  7      public static void dummy() {
  8      return;
  9      }}';
 10    end;
 11  /

PL/SQL procedure successfully completed.

SQL> select count(*) from session_roles;

  COUNT(*)
----------
         0

SQL> connect test_ora_600/test_ora_600
ERROR:
ORA-01925: maximum of 120 enabled roles exceeded
10 июл 07, 16:02    [4373748]     Ответить | Цитировать Сообщить модератору
 Re: Лимит в 1000 ролей: ora-600 [17182] на Java  [new]
denix1
Member

Откуда: Киев
Сообщений: 4656
SY
denix1
насчет "этот кто-то их дает, но для этого должен хотя-бы их иметь" могу выссказать вам свои
сомнения в понимании вами сути написанной фразы...
в свете наличия следующей привилегии "GRANT ANY ROLE"


Well, I prefer application owner approach. Each application is associated with application owner account which is granted application roles (with grant option). This way "этот кто-то их дает, но для этого должен хотя-бы их иметь" has a small number of granted roles.

SY.

да я и сам за раздачу прикладных ролей администратором приложения, который не есть при этом АБД
просто напрягла безапеляционность фразы "для этого должен хотя-бы их иметь"
10 июл 07, 16:11    [4373812]     Ответить | Цитировать Сообщить модератору
 Re: Лимит в 1000 ролей: ora-600 [17182] на Java  [new]
Сэмка
Member

Откуда:
Сообщений: 372
denix1,

Спасибо. Ну, с последней ошибкой понятно, нужно было alter user сделать; просто у меня в начале скрипта идет клинап, так что повторно этим тестовым юзером я не вхожу, только сразу после создания.

"Безапеляционное" высказывание не было общим и относилась к этому конкретному "кому-то". Вообще-то из сображений безопасности прикладное администрирование должно вестись лицом отличным от владельца схемы, но имеем то что имеем.

Ладно, понял что проблема с конкретным экземпляром, придется подключать RDA.
10 июл 07, 16:28    [4373937]     Ответить | Цитировать Сообщить модератору
 Re: Лимит в 1000 ролей: ora-600 [17182] на Java  [new]
Сэмка
Member

Откуда:
Сообщений: 372
Dacota

На 10.2.0.3 прошло.


За 10-ку я и не сомневался, но переводить такую толстую систему очень тяжело, лучше бы было сейчас решить в пределах этой версии. Хотя, придется все равно когда-нибудь апгрейдиться.
10 июл 07, 16:30    [4373963]     Ответить | Цитировать Сообщить модератору
 Re: Лимит в 1000 ролей: ora-600 [17182] на Java  [new]
denix1
Member

Откуда: Киев
Сообщений: 4656
Сэмка
Dacota

На 10.2.0.3 прошло.


За 10-ку я и не сомневался, но переводить такую толстую систему очень тяжело, лучше бы было сейчас решить в пределах этой версии. Хотя, придется все равно когда-нибудь апгрейдиться.

с конца этого месяца в поддержке вроде как остается только 9.2.0.8
хотя Вы вроде как писали что на ней тоже пробовали...

Сэмка
Ну, с последней ошибкой понятно, нужно было alter user сделать

это понятно... просто мне было интересно показать что ошибка таки не зависит
от количества enabled ролей и соответсвенно от количества грантов
т.е. то что вы уже писали

Сэмка
придется подключать RDA.

это Как ?

ПС.
суппорт чего-то уже ответил ?
10 июл 07, 16:55    [4374205]     Ответить | Цитировать Сообщить модератору
 Re: Лимит в 1000 ролей: ora-600 [17182] на Java  [new]
Сэмка
Member

Откуда:
Сообщений: 372
Remote Diagnostic Agent. Note:314422.1 на металинке.

Супорт подтвердил, что у них тоже не воспроизводится, а у нас на 4-х разных базах никак не связанных (в смысле, что с разной прикладнухой).

Ладно, всем спасибо, проблема перестала быть критичной
10 июл 07, 17:07    [4374292]     Ответить | Цитировать Сообщить модератору
 Re: Лимит в 1000 ролей: ora-600 [17182] на Java  [new]
denix1
Member

Откуда: Киев
Сообщений: 4656
Сэмка
Remote Diagnostic Agent. Note:314422.1 на металинке.

я уж было подумал, что RDA - это чудак который реально решает проблемы :-)
10 июл 07, 17:18    [4374398]     Ответить | Цитировать Сообщить модератору
 Re: Лимит в 1000 ролей: ora-600 [17182] на Java  [new]
Сэмка
Member

Откуда:
Сообщений: 372
:-)
10 июл 07, 17:19    [4374409]     Ответить | Цитировать Сообщить модератору
 Re: Лимит в 1000 ролей: ora-600 [17182] на Java  [new]
Сэмка
Member

Откуда:
Сообщений: 372
denix1,

а какая версия шпукса? Поточнее, если можно.
10 июл 07, 17:44    [4374604]     Ответить | Цитировать Сообщить модератору
 Re: Лимит в 1000 ролей: ora-600 [17182] на Java  [new]
Сэмка
Member

Откуда:
Сообщений: 372
И что выдает opatch lsinventory ?
10 июл 07, 18:42    [4374980]     Ответить | Цитировать Сообщить модератору
 Re: Лимит в 1000 ролей: ora-600 [17182] на Java  [new]
denix1
Member

Откуда: Киев
Сообщений: 4656
Сэмка
а какая версия шпукса? Поточнее, если можно.

uname -a
HP-UX rx2620ux B.11.23 U ia64 4003445830 unlimited-user license


Сэмка
И что выдает opatch lsinventory ?

$ORACLE_HOME/OPatch/opatch lsinventory

Oracle Interim Patch Installer version 1.0.0.0.57
Copyright (c) 2007 Oracle Corporation. All Rights Reserved..

We recommend you refer to the OPatch documentation under
OPatch/docs for usage reference. We also recommend using
the latest OPatch version. For the latest OPatch version
and other support related issues, please refer to document
293369.1 which is viewable from metalink.oracle.com

Oracle Home : /ora1/oracle/product/9ir2
Oracle Home Inventory : /opt/oracle/product/9ir2/inventory
Central Inventory : /opt/oracle/oraInventory
from : /var/opt/oracle/oraInst.loc
OUI location : /opt/oracle/product/9ir2/oui
OUI shared library : /opt/oracle/product/9ir2/oui/lib/hpunix/liboraInstaller.so
Java location : /opt/oracle/product/9ir2/jre/1.4.2/bin/java
Log file location : /ora1/oracle/product/9ir2/.patch_storage/<patch ID>/*.log

Creating log file "/opt/oracle/product/9ir2/.patch_storage/LsInventory__07-10-2007_18-50-19.log"

Result:

There is no Interim Patch


OPatch succeeded.
10 июл 07, 19:53    [4375173]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить