Бесконечное "Получение метаданных"

Обсуждение возникших проблем, предложений и ошибок dbForge for Oracle
Закрыто
ZVanoZ
Сообщения: 79
Зарегистрирован: Чт 18 ноя 2010 16:50

Бесконечное "Получение метаданных"

Сообщение ZVanoZ » Пт 18 окт 2013 13:32

Рабочее место:
dbForge for Oracle 3.5.185
Windows 7, 64x

Сервер:
Linux
Oracle 11
Схема с достаточно большим количеством объектов

Код: Выделить всё

-- 1248
select count(*) from dba_tables where owner = 'XXX';
-- 987
select count(*) from dba_views where owner = 'XXX';
Действия:
1. Соединяемся с БД.
2. Жмем CTRL+N (новый скрипт)
Тут же в строке статусбара пишет "Получение метаданных (схема ХХХ)".
Прогрессбар заполняется на 40% за 2-3 секунды, а потом останавливается.
Так продолжается бесконечно (более 3х часов точно).
'Ctrl+Shift+R' прерывает текущую загрузку метаданных и начинает новую, которая тоже виснет.
3. Пытаемся редактировать скрипт используя автоподстановку.
В списке подстановки доступны только названия схем БД.
4. Нажимаем "Закрыть соединение".
Прога виснет наглухо.
Прибить получилось только из диспетчера задач.

PS: На сравнительно небольших БД загрузка метаданных проходит за 2-3 секунды.
Есть подозрение, что причина одинакова с http://forums.devart.com/ru/viewtopic.php?f=22&t=13652

Alexander

Re: Бесконечное "Получение метаданных"

Сообщение Alexander » Пн 21 окт 2013 10:04

Не могли бы Вы выполнить следующее:

1. Выберите 'Сервис -> Параметры' в основном меню.
2. В открывшемся окне 'Параметры' откройте ветку 'Среда -> Окно вывода'.
3. Выберите опции 'Вести журнал ошибок приложения' и 'Писать запросы, посылаемые программой, в SQL журнал'.
4. Отключите опцию 'Удалять лог файл после закрытия приложения'.
5. OK.
6. В момент зависания при получении метаданных по CTRL+N, пожалуйста, откройте папку инсталляции dbForge Studio for Oracle (обычно %programfiles%\Devart\dbForge Studio for Oracle\) и пришлите нам сгенерированный .log файл с самой поздней датой или запрос из SQL журнала, на котором происходит зависание при получении метаданных. Для этого выберите 'Вид -> Окно вывода' в основном меню и перейдите на вкладку 'SQL журнал', предварительно выполнив команду 'Очистить все', доступную в контекстном меню вкладки 'SQL журнал'.

ZVanoZ
Сообщения: 79
Зарегистрирован: Чт 18 ноя 2010 16:50

Re: Бесконечное "Получение метаданных"

Сообщение ZVanoZ » Вт 05 ноя 2013 14:37

Код: Выделить всё

BEGIN
  SELECT USER INTO :userName FROM "PUBLIC".dual;
  BEGIN
    SELECT default_tablespace INTO :default_tablespace FROM user_users WHERE username = :userName;
    exception when no_data_found then null;
  END;
  BEGIN
    SELECT object_name INTO :xml_db FROM all_objects WHERE owner = 'XDB' AND object_type = 'PACKAGE' AND object_name = 'DBMS_XMLSCHEMA';
    exception when no_data_found then null;
  END;
  SELECT
    SUBSTR(MAX(CASE parameter WHEN 'NLS_NUMERIC_CHARACTERS' THEN VALUE END), 1, 1),
    MAX(CASE parameter WHEN 'NLS_NUMERIC_CHARACTERS' THEN VALUE END)
  INTO :sessionDecimalSeparator, :sessionLengthSemantics
  FROM nls_session_parameters WHERE parameter = 'NLS_NUMERIC_CHARACTERS' OR parameter = 'NLS_LENGTH_SEMANTICS';
  SELECT
    SUBSTR(MAX(CASE parameter WHEN 'NLS_NUMERIC_CHARACTERS' THEN VALUE END), 1, 1),
    MAX(CASE parameter WHEN 'NLS_LENGTH_SEMANTICS' THEN VALUE END)
  INTO :databaseDecimalSeparator, :databaseLengthSemantics
  FROM nls_database_parameters WHERE parameter = 'NLS_NUMERIC_CHARACTERS' OR parameter = 'NLS_LENGTH_SEMANTICS';
  SELECT * INTO :globalName FROM global_name;
END;
Параметры:
	userName: 
	default_tablespace: 
	xml_db: 
	sessionDecimalSeparator: 
	sessionLengthSemantics: 
	databaseDecimalSeparator: 
	databaseLengthSemantics: 
	globalName: 
Время выполнения: 0,51932340527512 секунд

SELECT COUNT(*) FROM USER_ROLE_PRIVS WHERE GRANTED_ROLE IN ('SELECT_CATALOG_ROLE', 'DBA') AND DEFAULT_ROLE = 'YES'
Время выполнения: 0,0881452752026892 секунд

Begin
dbms_output.enable(20000);
dbms_warning.set_warning_setting_string('disable:all' ,'session');
End;
Время выполнения: 0,214613310312986 секунд

SELECT u.username
FROM   dba_users u
WHERE EXISTS (SELECT 1 FROM dba_objects o WHERE o.owner = u.username )
UNION ALL
SELECT 'PUBLIC'
FROM   dual
ORDER  BY 1
Время выполнения: 0,0284671782465393 секунд

SELECT
  username
FROM sys.all_users
Время выполнения: 0,0649408415246799 секунд

SELECT UNIQUE VALUE 
FROM V$NLS_VALID_VALUES 
WHERE PARAMETER ='CHARACTERSET'
ORDER BY VALUE
Время выполнения: 0,0261269610997293 секунд

SELECT tablespace_name FROM user_tablespaces
Время выполнения: 0,0410024102892763 секунд

SELECT
    p.object_name
  , NVL2(b.object_name, 1, 0) as has_body
FROM sys.all_objects p, (select * from sys.all_objects WHERE owner = 'TESTDB' AND object_type = 'PACKAGE BODY') b
WHERE p.owner = 'TESTDB' AND p.object_type = 'PACKAGE' And p.object_name = b.object_name (+)
Время выполнения: 0,0343964322727271 секунд

SELECT
    ao.object_id
  , ao.object_name
  , ao.object_type
FROM sys.all_objects ao
WHERE ao.owner = 'TESTDB'
    AND ((ao.object_type = 'TABLE'
    AND EXISTS (SELECT 1
        FROM sys.all_tables aat
        WHERE aat.owner = 'TESTDB'
          AND aat.table_name = ao.object_name
          AND aat.nested = 'NO'
          AND aat.dropped = 'NO'))
    OR ao.object_type IN ('VIEW', 'FUNCTION', 'PROCEDURE', 'SEQUENCE', 'TRIGGER'))
    AND generated = 'N'
ORDER BY
    ao.object_id
  , ao.object_type
Время выполнения: 0,0327521369599767 секунд

SELECT
    o2.object_id AS owner_id
  , tc2.column_name
  , DECODE(tc2.nullable, 'Y', 1, 0) AS is_nullable
  , tc2.data_type
  , tc2.data_type_owner
  , CASE WHEN tc2.data_type IN ('NCHAR', 'NVARCHAR2') THEN tc2.char_length ELSE tc2.data_length END AS data_length
  , tc2.data_precision
  , tc2.data_scale
  , tc2.virtual_column
  , tc2.char_used
FROM (SELECT
        OBJECT_ID
      , OBJECT_NAME
    FROM all_objects o
    WHERE o.owner = 'TESTDB'
        AND o.object_type IN ('TABLE', 'VIEW')
        AND o.generated = 'N') o2
JOIN (SELECT
        data_type
        , data_type_owner
        , data_length
        , data_precision
        , data_scale
        , column_name
        , column_id
        , table_name
        , nullable
        , char_length
        , char_used
        , virtual_column
    FROM all_tab_cols tc
    WHERE tc.owner = 'TESTDB' AND tc.HIDDEN_COLUMN = 'NO') tc2
    ON o2.object_name = tc2.table_name
ORDER BY
    o2.object_id
  , tc2.column_id
Время выполнения: 0,0291838977446053 секунд

SELECT
    ao.object_id AS owner_id
  , ac.constraint_name
  , ac.constraint_type
  , ac.r_owner AS referenced_table_schema
  , rac.table_name AS referenced_table_name
FROM all_constraints ac, all_constraints rac, all_objects ao
WHERE ac.constraint_type IN ('P', 'U', 'R') AND
    ac.owner = 'TESTDB' AND
    ao.owner = ac.owner AND
    ao.object_name = ac.table_name AND
    ac.r_owner = rac.owner(+) AND
    ac.r_constraint_name = rac.constraint_name(+)
ORDER BY
    ao.object_id
  , ac.constraint_name
Время выполнения: 2,56825486929308 секунд
Дальше ничего не делает. Прогрессбар замер на 30%

ZVanoZ
Сообщения: 79
Зарегистрирован: Чт 18 ноя 2010 16:50

Re: Бесконечное "Получение метаданных"

Сообщение ZVanoZ » Вт 05 ноя 2013 16:15

Спустя 2 часа "висяка" выполнил пару-тройку запросов. Прогресс в том же состоянии.
Вот весь лог:

Код: Выделить всё

BEGIN
  SELECT USER INTO :userName FROM "PUBLIC".dual;
  BEGIN
    SELECT default_tablespace INTO :default_tablespace FROM user_users WHERE username = :userName;
    exception when no_data_found then null;
  END;
  BEGIN
    SELECT object_name INTO :xml_db FROM all_objects WHERE owner = 'XDB' AND object_type = 'PACKAGE' AND object_name = 'DBMS_XMLSCHEMA';
    exception when no_data_found then null;
  END;
  SELECT
    SUBSTR(MAX(CASE parameter WHEN 'NLS_NUMERIC_CHARACTERS' THEN VALUE END), 1, 1),
    MAX(CASE parameter WHEN 'NLS_NUMERIC_CHARACTERS' THEN VALUE END)
  INTO :sessionDecimalSeparator, :sessionLengthSemantics
  FROM nls_session_parameters WHERE parameter = 'NLS_NUMERIC_CHARACTERS' OR parameter = 'NLS_LENGTH_SEMANTICS';
  SELECT
    SUBSTR(MAX(CASE parameter WHEN 'NLS_NUMERIC_CHARACTERS' THEN VALUE END), 1, 1),
    MAX(CASE parameter WHEN 'NLS_LENGTH_SEMANTICS' THEN VALUE END)
  INTO :databaseDecimalSeparator, :databaseLengthSemantics
  FROM nls_database_parameters WHERE parameter = 'NLS_NUMERIC_CHARACTERS' OR parameter = 'NLS_LENGTH_SEMANTICS';
  SELECT * INTO :globalName FROM global_name;
END;
Параметры:
	userName: 
	default_tablespace: 
	xml_db: 
	sessionDecimalSeparator: 
	sessionLengthSemantics: 
	databaseDecimalSeparator: 
	databaseLengthSemantics: 
	globalName: 
Время выполнения: 0,51932340527512 секунд

SELECT COUNT(*) FROM USER_ROLE_PRIVS WHERE GRANTED_ROLE IN ('SELECT_CATALOG_ROLE', 'DBA') AND DEFAULT_ROLE = 'YES'
Время выполнения: 0,0881452752026892 секунд

Begin
dbms_output.enable(20000);
dbms_warning.set_warning_setting_string('disable:all' ,'session');
End;
Время выполнения: 0,214613310312986 секунд

SELECT u.username
FROM   dba_users u
WHERE EXISTS (SELECT 1 FROM dba_objects o WHERE o.owner = u.username )
UNION ALL
SELECT 'PUBLIC'
FROM   dual
ORDER  BY 1
Время выполнения: 0,0284671782465393 секунд

SELECT
  username
FROM sys.all_users
Время выполнения: 0,0649408415246799 секунд

SELECT UNIQUE VALUE 
FROM V$NLS_VALID_VALUES 
WHERE PARAMETER ='CHARACTERSET'
ORDER BY VALUE
Время выполнения: 0,0261269610997293 секунд

SELECT tablespace_name FROM user_tablespaces
Время выполнения: 0,0410024102892763 секунд

SELECT
    p.object_name
  , NVL2(b.object_name, 1, 0) as has_body
FROM sys.all_objects p, (select * from sys.all_objects WHERE owner = 'TESTDB' AND object_type = 'PACKAGE BODY') b
WHERE p.owner = 'TESTDB' AND p.object_type = 'PACKAGE' And p.object_name = b.object_name (+)
Время выполнения: 0,0343964322727271 секунд

SELECT
    ao.object_id
  , ao.object_name
  , ao.object_type
FROM sys.all_objects ao
WHERE ao.owner = 'TESTDB'
    AND ((ao.object_type = 'TABLE'
    AND EXISTS (SELECT 1
        FROM sys.all_tables aat
        WHERE aat.owner = 'TESTDB'
          AND aat.table_name = ao.object_name
          AND aat.nested = 'NO'
          AND aat.dropped = 'NO'))
    OR ao.object_type IN ('VIEW', 'FUNCTION', 'PROCEDURE', 'SEQUENCE', 'TRIGGER'))
    AND generated = 'N'
ORDER BY
    ao.object_id
  , ao.object_type
Время выполнения: 0,0327521369599767 секунд

SELECT
    o2.object_id AS owner_id
  , tc2.column_name
  , DECODE(tc2.nullable, 'Y', 1, 0) AS is_nullable
  , tc2.data_type
  , tc2.data_type_owner
  , CASE WHEN tc2.data_type IN ('NCHAR', 'NVARCHAR2') THEN tc2.char_length ELSE tc2.data_length END AS data_length
  , tc2.data_precision
  , tc2.data_scale
  , tc2.virtual_column
  , tc2.char_used
FROM (SELECT
        OBJECT_ID
      , OBJECT_NAME
    FROM all_objects o
    WHERE o.owner = 'TESTDB'
        AND o.object_type IN ('TABLE', 'VIEW')
        AND o.generated = 'N') o2
JOIN (SELECT
        data_type
        , data_type_owner
        , data_length
        , data_precision
        , data_scale
        , column_name
        , column_id
        , table_name
        , nullable
        , char_length
        , char_used
        , virtual_column
    FROM all_tab_cols tc
    WHERE tc.owner = 'TESTDB' AND tc.HIDDEN_COLUMN = 'NO') tc2
    ON o2.object_name = tc2.table_name
ORDER BY
    o2.object_id
  , tc2.column_id
Время выполнения: 0,0291838977446053 секунд

SELECT
    ao.object_id AS owner_id
  , ac.constraint_name
  , ac.constraint_type
  , ac.r_owner AS referenced_table_schema
  , rac.table_name AS referenced_table_name
FROM all_constraints ac, all_constraints rac, all_objects ao
WHERE ac.constraint_type IN ('P', 'U', 'R') AND
    ac.owner = 'TESTDB' AND
    ao.owner = ac.owner AND
    ao.object_name = ac.table_name AND
    ac.r_owner = rac.owner(+) AND
    ac.r_constraint_name = rac.constraint_name(+)
ORDER BY
    ao.object_id
  , ac.constraint_name
Время выполнения: 2,56825486929308 секунд

Begin
dbms_output.enable(20000);
dbms_warning.set_warning_setting_string('disable:all' ,'session');
End;
Время выполнения: 0,0113548603020909 секунд

select * from table(sys_ocinumberlis())
ORA-00904: "SYS_OCINUMBERLIS": invalid identifier

BEGIN
  dbms_output.get_line(:LINE, :STATUS);
END;
Параметры:
	LINE: 
	STATUS: 
Время выполнения: 0,013857939156274 секунд

COMMIT
Время выполнения: 0,0202505011437115 секунд

ALTER SESSION SET CURRENT_SCHEMA = "TESTDB"
Время выполнения: 0,011392616061364 секунд

select * from table(sys.ocinumberlis(1))
ORA-00904: "SYS"."OCINUMBERLIS": invalid identifier

BEGIN
  dbms_output.get_line(:LINE, :STATUS);
END;
Параметры:
	LINE: 
	STATUS: 
Время выполнения: 0,0106682174258187 секунд

COMMIT
Время выполнения: 0,022075256187225 секунд

ALTER SESSION SET CURRENT_SCHEMA = "TESTDB"
Время выполнения: 0,0107530079021524 секунд

select * from table(ODCINumberList(1))
ORA-00904: "ODCINUMBERLIST": invalid identifier

BEGIN
  dbms_output.get_line(:LINE, :STATUS);
END;
Параметры:
	LINE: 
	STATUS: 
Время выполнения: 0,0102449049722735 секунд

COMMIT
Время выполнения: 0,021405251442158 секунд

ALTER SESSION SET CURRENT_SCHEMA = "TESTDB"
Время выполнения: 0,0227465407885386 секунд

select * from table(sys.ODCINumberList(1))
Время выполнения: 0,294548971939472 секунд

BEGIN
  dbms_output.get_line(:LINE, :STATUS);
END;
Параметры:
	LINE: 
	STATUS: 
Время выполнения: 0,0103293754845456 секунд

COMMIT
Время выполнения: 0,0202002667860346 секунд

ALTER SESSION SET CURRENT_SCHEMA = "TESTDB"
Время выполнения: 0,0100414078290726 секунд

select t.column_value as id from table(sys.ODCINumberList(1)) t
Время выполнения: 0,0301473095341931 секунд

BEGIN
  dbms_output.get_line(:LINE, :STATUS);
END;
Параметры:
	LINE: 
	STATUS: 
Время выполнения: 0,00990414324663054 секунд

select t.column_value as id from table(sys.ODCINumberList(1)) t
Время выполнения: 0,0214686043263621 секунд

COMMIT
Время выполнения: 0,0197264000107508 секунд

ALTER SESSION SET CURRENT_SCHEMA = "TESTDB"
Время выполнения: 0,0176165569883191 секунд
Есть подозрение, что в момент получения метаданных было разорвано соединение с БД.
Обратите внимание на фрагмент:

Код: Выделить всё

SELECT
    ao.object_id AS owner_id
  , ac.constraint_name
  , ac.constraint_type
  , ac.r_owner AS referenced_table_schema
  , rac.table_name AS referenced_table_name
FROM all_constraints ac, all_constraints rac, all_objects ao
WHERE ac.constraint_type IN ('P', 'U', 'R') AND
    ac.owner = 'TESTDB' AND
    ao.owner = ac.owner AND
    ao.object_name = ac.table_name AND
    ac.r_owner = rac.owner(+) AND
    ac.r_constraint_name = rac.constraint_name(+)
ORDER BY
    ao.object_id
  , ac.constraint_name
Время выполнения: 2,56825486929308 секунд

Begin
dbms_output.enable(20000);
dbms_warning.set_warning_setting_string('disable:all' ,'session');
End;
Время выполнения: 0,0113548603020909 секунд
Кстати, лог на диск не пишется. Возможно, это тоже бага.
Программа установлена в c:\Program Files\Devart\dbForge Studio for Oracle\
Лог копипастил из интерфейса программы.

Alexander

Re: Бесконечное "Получение метаданных"

Сообщение Alexander » Пт 08 ноя 2013 12:09

Спасибо за ответ.

Нам удалось воспроизвести данную проблему. В данный момент мы продолжаем заниматься её исследованием и свяжемся с Вами в ближайшее время.

Закрыто