|
|
|
Тяпничный oracle/imp filter
|
|||
|---|---|---|---|
|
#18+
Привет коллеги. Такая вот задачка. Имеется лог следующего вида. Код: 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. 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. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. Это побочный эффект работы утилиты imp с опцией show=y Код: sql 1. При включении этой опции утилита imp не выполняет испорт а спулирует команды в текстовый лог. Необходимо: 1) Преобразовать его в нормальный скриптовый формат, пригодный для запуска в среде SQL*PLus Пример: Код: 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. 2) Убрать дополнительную информацию о физическом хранении Пример того ЧТО надо удалять Код: sql 1. 2. 3. 3) Трансформация 3.1) Опционально - убрать сведения о tablespaces Пример того ЧТО надо удалять Код: sql 1. 3.1) Опционально - трансформировать tablespaces (ниже в примерах как реализовать покажу). 4) Опционально - убрать опции partitions. (Детально поясню чуть позже но грубо говоря - удаляем все после ключевого слова PARTITION BY ... ) 5) Опционально - оставить только скрипты для создания tables, views, indexes. Все остальные - убрать. FAQ: Q: Почему нельзя законнектиться к исходной базе и сделать экспорт DDL скриптов с использованием Toad? A: Исходная БД недоступна. Нет прав. Или вообще БД уже не сущестует. Q: Почему нельзя просто импортировать dump в тестовую БД и на основе ее создать скрипт? A: Импорт не возможен т.к. целевая БД - express edition (бесплатная версия) либо не поддерживает опции partitioning, либо не имеет нужных tablespaces или их создание сопряжено с трудностями. Q: Почему нельзя было сделать expdp? A: Так получилось. Как реализовать? Как-то так: Код: sql 1. Пример командной строки с удалением tables, views. Код: sql 1. Пример командной строки с ремаппингом tablespaces (заменить все - на USERS): Код: sql 1. Пример командной строки с удалением сведений о partitioning: Код: sql 1. На чем реализовать? На чем угодно. Главное чтоб можно было запускать из консоли. Ссылки по теме https://docs.oracle.com/cd/E11882_01/server.112/e22490/original_import.htm#SUTIL001 Go! Go! P.S. И я тоже гоу... P.P.S В данном примере я использовал учебную схему HR из набора скриптов Oracle 11.2.0.XE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2016, 01:16 |
|
||
|
Тяпничный oracle/imp filter
|
|||
|---|---|---|---|
|
#18+
По структуре бросается в глаза ограничение кавычками каждой строки и перенос на следующую при превышении длины. Т.е. алгоритм примерно такой: 1. Прочитать очередную строку 2. Если не начинается с " и не заканчивается " то п.1. 3. Убрать " в начале и в конце и вывести строку 4. Длина строки максимальная? Если нет - добавить перевод строки. 5. переход к п.1 Например Код: sql 1. 2. 3. 4. будет Код: sql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2016, 09:55 |
|
||
|
Тяпничный oracle/imp filter
|
|||
|---|---|---|---|
|
#18+
Dima T4. Длина строки максимальная? Если нет - добавить перевод строки. Я не помню точно где декларирована максимальная толщина DDL команды но можно исходить из 32k символов (максимум для переменной VARCHAR2). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2016, 10:02 |
|
||
|
Тяпничный oracle/imp filter
|
|||
|---|---|---|---|
|
#18+
Опция Код: sql 1. следует понимать что все табличные пространства нужно замапить на USERS. Или еще вариант Код: sql 1. более детальный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2016, 10:51 |
|
||
|
Тяпничный oracle/imp filter
|
|||
|---|---|---|---|
|
#18+
Более плотный пример с удалением секции PARTITION_BY я приведу скоро. Только найду подходящий пример. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2016, 11:11 |
|
||
|
Тяпничный oracle/imp filter
|
|||
|---|---|---|---|
|
#18+
maytonЯ не помню точно где декларирована максимальная толщина DDL команды но можно исходить из 32k символов (максимум для переменной VARCHAR2). Нельзя. Существует полно DDL команд длиннее 32K (текст больших package body). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2016, 12:17 |
|
||
|
Тяпничный oracle/imp filter
|
|||
|---|---|---|---|
|
#18+
softwarermaytonЯ не помню точно где декларирована максимальная толщина DDL команды но можно исходить из 32k символов (максимум для переменной VARCHAR2). Нельзя. Существует полно DDL команд длиннее 32K (текст больших package body). Давайте пока проигнорируем этот момент. Пускай это нас не волнует в процессе написания imp filter. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2016, 12:31 |
|
||
|
Тяпничный oracle/imp filter
|
|||
|---|---|---|---|
|
#18+
Нафига это надо с практической точки зрения? 1. Бросается в глаза, что в логе нет никакого символа "конец команды". Т.е. разделить входной поток мусора из лога на отдельные команды - задача НЕ тревиальная 2. Подмена данных, да еще и осмысленная..... Можно через regexp - быстро, дешево, НЕ надежно и глюкаво Писать свой мини парсер SQL команда - НЕ быстро и НЕ дешево, зато будет гарантия более менее корректной работы. IMHO Вывод: 1. Задача не так просто как кажется 2. Дофига отлаживаться.... 3. Нет гарантии, что на других входных данных не будет ситуаций когда сглючим 4. Нафиг оно надо? Все делается и штатными средствами. IMPDP вроде умеет tablespace менять. См. https://community.oracle.com/thread/1045936?tstart=0 5. Вместо разработки фигни, проще купить админу пива и попросить его поменять tablespace при импорте ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2016, 13:30 |
|
||
|
Тяпничный oracle/imp filter
|
|||
|---|---|---|---|
|
#18+
maytonQ: Почему нельзя было сделать expdp? A: Так получилось. ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2016, 13:32 |
|
||
|
Тяпничный oracle/imp filter
|
|||
|---|---|---|---|
|
#18+
mayton Код: sql 1. может лучше из него вытаскивать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2016, 14:03 |
|
||
|
Тяпничный oracle/imp filter
|
|||
|---|---|---|---|
|
#18+
[quot Leonid Kudryavtsev] 1. Бросается в глаза, что в логе нет никакого символа "конец команды". Т.е. разделить входной поток мусора из лога на отдельные команды - задача НЕ тревиальная [/quit] Да. Нетривиальная. А когда это старина мейтон подкидывал вам в тяпницу банальности? Писать свой мини парсер SQL команда - НЕ быстро и НЕ дешево, зато будет гарантия более менее корректной работы. Давай промежуточный вариант. Без регекспов. Но и полноценный парсер тоже не надо. Реально (99%) меня интересуют такие ключевые слова как CREATE TABLE. 4. Нафиг оно надо? Все делается и штатными средствами. IMPDP вроде умеет tablespace менять. 5. Вместо разработки фигни, проще купить админу пива и попросить его поменять tablespace при импорте Impdp невозможен. Нету прав на файловые системы сервера. Админ пива не пьет да и вообще нет возможности с ним дружить. Отакие пироги. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2016, 14:14 |
|
||
|
Тяпничный oracle/imp filter
|
|||
|---|---|---|---|
|
#18+
eNosemayton Код: sql 1. может лучше из него вытаскивать? Можно. Это пойдет другой тяпничной задачкой когда я найду краш-нутые дампы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2016, 14:15 |
|
||
|
Тяпничный oracle/imp filter
|
|||
|---|---|---|---|
|
#18+
Up. Ну чо? Ну как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2016, 18:10 |
|
||
|
Тяпничный oracle/imp filter
|
|||
|---|---|---|---|
|
#18+
maytonДавай промежуточный вариант. Без регекспов. Но и полноценный парсер тоже не надо. Реально (99%) меня интересуют такие ключевые слова как CREATE TABLE. Лет 12 назад делал свой парсер на yaxx/lex. Нужно было отпарсить наш код на PL/SQL и потом зависимости оптимизировать. Месяца 2-а игрался. Т.ч. уже не интересно ))) Берешь SQL Reference от Oracle и делаешь парсер. В чем проблема? Кроме дофига убитого времени на фигню ((( maytonImpdp невозможен. Нету прав на файловые системы сервера. Админ пива не пьет да и вообще нет возможности с ним дружить. Отакие пироги. Поставь Oracle в виртуалку. Загрузи только описание таблиц, без данных. Делов на полдня, не напрягаясь. А я пошел пить пиво ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2016, 18:23 |
|
||
|
Тяпничный oracle/imp filter
|
|||
|---|---|---|---|
|
#18+
Спасибо Леонид. Ты - как всегда - точен А я пошёл. Меня теперь ждёт SQLite и картография мать ее пятак. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2016, 18:28 |
|
||
|
Тяпничный oracle/imp filter
|
|||
|---|---|---|---|
|
#18+
maytonUp. Ну чо? Ну как? Ораклов нет, да и не знаю его. Под стандартный SQL бесполезно подгонять. Сферический конь получится. Пробовал моим алгоритмом пройтись? 19070335 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2016, 19:43 |
|
||
|
Тяпничный oracle/imp filter
|
|||
|---|---|---|---|
|
#18+
Dima T, меня терзают смутніе сомнения по поводу 4. Длина строки максимальная? Если нет - добавить перевод строки. Посмотрю еще экспорты где длина вдруг(!) случайно совпала с макисмальной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2016, 14:54 |
|
||
|
Тяпничный oracle/imp filter
|
|||
|---|---|---|---|
|
#18+
По большому счету пофиг если в 1-2 местах слепит то что не надо слеплять. Запустишь скрипт - сглючит, поправишь руками и снова запустишь. Как понимаю потестить - не проблема. Выложи какой-нибудь файл с логом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2016, 14:58 |
|
||
|
Тяпничный oracle/imp filter
|
|||
|---|---|---|---|
|
#18+
Dima TПо большому счету пофиг если в 1-2 местах слепит то что не надо слеплять. Запустишь скрипт - сглючит, поправишь руками и снова запустишь. Как понимаю потестить - не проблема. Можно добавить стоп-слова такие как CREATE, ALTER, DROP.... они практически всегда стартуют новую команду. Выложи какой-нибудь файл с логом.Вообще ни проблема выложить. Проблема - отбелить данные чтоб не было следа каких-то бизнес-тайн. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2016, 16:16 |
|
||
|
Тяпничный oracle/imp filter
|
|||
|---|---|---|---|
|
#18+
maytonМожно добавить стоп-слова такие как CREATE, ALTER, DROP.... они практически всегда стартуют новую команду. Можно. Хуже не будет. Если в начале слово из набора - начинать с новой строки. maytonВообще ни проблема выложить. Проблема - отбелить данные чтоб не было следа каких-то бизнес-тайн. Реальные не стоит. В оракле нет какой-нибудь демо-базы? С инета что-нибудь качни. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2016, 16:26 |
|
||
|
Тяпничный oracle/imp filter
|
|||
|---|---|---|---|
|
#18+
Dima TРеальные не стоит. В оракле нет какой-нибудь демо-базы? С инета что-нибудь качни. Признаюсь честно. Не находил. Хотя лет 10 назад начал работать именно с Оракла много и плотно. Ну... в 1000 раз вероятнее найти дамп MySQL, PostgreS чемсабж. Наверное само по себе комьюнити достаточно закрыто и ничего особо не шарит крупного. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2016, 18:13 |
|
||
|
Тяпничный oracle/imp filter
|
|||
|---|---|---|---|
|
#18+
Dima TРеальные не стоит. В оракле нет какой-нибудь демо-базы? Есть scott / tiger. Можно поставить в момент установки системы. Хочется серьезной демо-БД на пару десятков гигабайт?... Не проблема ))) Есть Oracle e-Business Suite, демо версия Vision ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2016, 18:22 |
|
||
|
Тяпничный oracle/imp filter
|
|||
|---|---|---|---|
|
#18+
maytonПризнаюсь честно. Не находил.... Scott / Tiger - А это неуловимый Джо - а почему неуловимый, его никто поймать не может? - да кому он нужен ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2016, 18:23 |
|
||
|
Тяпничный oracle/imp filter
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev, спасибо. Гляну. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2016, 18:26 |
|
||
|
Тяпничный oracle/imp filter
|
|||
|---|---|---|---|
|
#18+
Накидал заготовку парсера. Обрезает кавычки, переносит по длине строки и ключевым словам Исходник Код: 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. 67. 68. 69. 70. 71. 72. 73. 74. 75. Попробуй на реальных логах, может этого достаточно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2016, 08:16 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=39219500&tid=1340736]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
145ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
85ms |
get tp. blocked users: |
2ms |
| others: | 253ms |
| total: | 532ms |

| 0 / 0 |
