|
И снова Logminer
|
|||
---|---|---|---|
#18+
Наверное что-то с руками не так:-) Пытаюсь создать словарь execute dbms_logmnr_d.build('dict.ora', 'd:\oracle\admin\ds\logs'); Некоторое время он сервак думает, а затем выдает сообщение ORA-06532: Subscript outside of limit ORA-06512: at "SYS.DBMS_LOGMNR_D", line 793 ORA-06512: at line 2 Причем файл при этом создается, но, как я понимаю, в него попадают не все объекты. На другой БД все прекрасно работает. Подскажите, кто занет. Заранее благодарен. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2002, 14:25 |
|
И снова Logminer
|
|||
---|---|---|---|
#18+
Если закомментировать строку 793 в sys.dbms_logmnr_d.build, то процедура больше ошибок не выдает. Но вот правильно ли это? Подскажите кто знает, please! ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2002, 08:51 |
|
И снова Logminer
|
|||
---|---|---|---|
#18+
Я думаю в оракловых пакетах ничего трогать не надо. Перед вызовом процедуры build() для создания файла словаря LigMiner необходимо установить среду её использования, с помощью параметра utl_file_dir. Выставлен ли у тебя этот параметр?: utl_file_dir='d:\oracle\admin\ds\logs' Если не установлен, надо установить, после чего обязательнонужно перезагрузить БД. Проверте также, не существует ли уже файл d:\oracle\admin\ds\logs\dict.ora ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2002, 09:21 |
|
И снова Logminer
|
|||
---|---|---|---|
#18+
Пришли мне на ящик свой файл dbmslmd.sql ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2002, 09:40 |
|
И снова Logminer
|
|||
---|---|---|---|
#18+
В init.ora выставлен utl_file_dir, БД перегружалась. Файл dict.ora создается каждый раз при вызове dbms_logmnr_d.build(), однако я могу его удалить руками. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2002, 09:42 |
|
И снова Logminer
|
|||
---|---|---|---|
#18+
Судя по тексту пакета(который есть у меня для 8.1.7.3), такая картина: 1) В пакете dbms_logmnr_d есть следующая функция: Код: plaintext 1. 2.
В которой есть курсор который возвращает список столбцов для указанной таблицы in_Table_name: Код: 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.
2)Далее в цикле в функции get_column_description считывается этот курсор: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
При считывании этого курсора данные о столбцах помещаются в массив VARRAY, который был описан в начале пакета: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Ошибка которая у тебя происходит:"ORA-06532: Subscript outside of limit " означает что происходит обращение за границу массива, в данном случае масива col_test_array. Из определения видно, что он расчитан на максимальное кол-во столбцов таблицы = 38. Отсюда вывод: ошибка происходит при вызове функции get_column_description() для таблицы у которой более 38 столбцов. Эта функция в свою очередь вызывается из другой функции: record_table(). А функция record_table() вызывается для конкретных таблиц(видно из текста пакета): Код: 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. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66.
Тебе необходимо выяснить какое максимальное кол-во столбцов может быть для указанных таблиц и выставить это значения для(вместо 38): Код: plaintext 1. 2.
Определить какие таблицы имеют более 38 столбцов можно выяснить запросом: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
Ищи среди них выше указанные таблицы и определишь. Потом в пакете поменяй макс. значение в файле dbmslmd.sql и выполни его. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2002, 10:32 |
|
И снова Logminer
|
|||
---|---|---|---|
#18+
У меня версия 8.1.7.0. Насколько я понимаю, пакеты у нас различаются. Упоминания "38" в моем пакете нет, запрос тоже не выдает ни одной таблицы. TYPE col_desc_array IS VARRAY( 513 ) OF col_description; ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2002, 11:05 |
|
И снова Logminer
|
|||
---|---|---|---|
#18+
Вышли свой dbmslmd.sql ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2002, 11:15 |
|
И снова Logminer
|
|||
---|---|---|---|
#18+
да я уж выслал минут 40 назад ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2002, 11:16 |
|
И снова Logminer
|
|||
---|---|---|---|
#18+
1)Вначале попробуй следующее: перед вызовом execute dbms_logmnr_d.build('dict.ora', 'd:\oracle\admin\ds\logs'), сделай set serveroutput on; Выполняй или в SQLWorksheet или в SQL*Plus. Это даст более точно понять какая ошибка. Должно быть сообщение типа:ERROR <.........> Сообщение кинь в форум. Потом попробуй пункт 2. 2) Что-бы понять в какой строке происходит исходная ошибка, закомментарь временно следующий блок в файле, замени пакет и вновь попробуй: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2002, 11:38 |
|
И снова Logminer
|
|||
---|---|---|---|
#18+
Сообщение SQLPlus с исходным текстом пакета: Код: 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. 28. 29. 30. 31.
После закомментирования: Код: 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. 28. 29. 30. 31. 32.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2002, 12:11 |
|
И снова Logminer
|
|||
---|---|---|---|
#18+
Ошика происходит для таблицы INDCOMPART$(line 771): Код: plaintext 1.
Для этой таблицы делается вызов функции(line651): Код: plaintext 1.
Конкретная ошибка происходит в функции при выполнении get_column_description(line 301): Код: plaintext 1.
col_test_array содержит массив записей,где каждая запись содержит информацию об столбце.То есть в массив можно записать информацию о 513 колонках всех таблиц в целом. На таблице INDCOMPART$ массив исчерпался и происходит ошибка. Необходимо изменит это число(513) на число столбов во всех таблицах: Верни исходный текст пакета, замени 513 на новое значение в: Код: plaintext 1.
и в: Код: plaintext 1.
Если же указать просто значение больше 513, наобум, но бельше реального кол-ва столбцов всех таблиц - то будут другие ошибки. А вообще я советую тебе патч поставить. В LogMinere с 8.1.7.0 до 8.1.7.4 было три бага устранено. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2002, 12:40 |
|
И снова Logminer
|
|||
---|---|---|---|
#18+
Patch то у меня есть 8.1.7.4. Но почитал перепалку между вами и .dba и как то призадумался, а сыр во рту держал:-). А если БД распределенная и снимки с нее отправляются в БД без установленного патча? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2002, 12:48 |
|
И снова Logminer
|
|||
---|---|---|---|
#18+
Да, гарантии никто дать не сможет. Поставь хотя бы патч 8.1.7.3 - вроде никаких неожиданностей не было, у меня в мульти-мастер репликации один сервер стоит Linux Oracle 8.1.7.3 а другой Window Oracle 8.0.5. Кстати в 8.1.7.3 в пакете тоже есть условие EXIT WHEN col_count = 513, так что я думаю, всё равно произойдёт выход из цикла. Всё равно крректировать придёться видимо. Если конечно патч не меняет кол-во столбцов. Посмотри запрос: Код: plaintext 1. 2. 3. 4. 5. 6.
У меня: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2002, 14:05 |
|
|
start [/forum/topic.php?desktop=1&fid=52&tid=1992541]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
42ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
others: | 10ms |
total: | 145ms |
0 / 0 |