|
Shell скрипт формирует большой размер лога 32-битного sqlplus
|
|||
---|---|---|---|
#18+
День добрый, Система RHEL7, 64bit. Oracle client 64bit and 32bit. sh-файл использует sqlplus(32bit) для вывода output в лог-файл. Лог файл получается неадекватного размера по команде ll . Реальный размер(точнее объем данных) невелик, и его можно проверить с помощью команд du -sh ,... Скрипт, использующий 64битный sqlplus, проблемы этой не имеет. Изменения 32бит скрипта приводят к тому, что ll начинает показывать нормальный(небольшой) размер. Детали ниже, задача заставить первый скрипт отрабатывать с нормальным размером, т.к. в системе много подобных скриптов. Непонятна эта заморочка и куда копать неясно. Вручную в sqlplus (32bit) : spool filename .. spool off Дает нормальный размер файла. Первый скрипт: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Запускаем первый скрипт, смотрим размер лога: Код: plsql 1. 2. 3. 4. 5. 6. 7.
Убираем echo "Finished" , и ll показывает нормальный(небольшой) размер: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Запускаем : Код: plsql 1. 2. 3. 4. 5. 6. 7.
Ставим вывод в файл в самом скрипте (sqlplus -s testuser/testuser@TSTDB > tst.log ) , получаем нормальный размер лога: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Запускаем третий скрипт: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8.
Меняем ORACLE_HOME на 64-битного клиента - во всех случаях срабатывает нормально. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2021, 20:38 |
|
Shell скрипт формирует большой размер лога 32-битного sqlplus
|
|||
---|---|---|---|
#18+
А как определён алиас ll? Что он вызывает? Почему в выводе только размер, без имени файла, группы, владельца, даты, маски прав и тд? Обычно ll это алиас к ls -ltrh или чему-то подобному. В общем, чтобы посмотреть - выполните alias, либо alias ll. Почему у Вас shebang-строка в начале скрипта указывает на ksh, а сам скрипт - с расширением .sh? Не уверен что это "плохо" и на что-то влияет - но тем не менее. В качестве терминатора для SQL скрипта, который подаётся на вход SQL*Plus, Вы используете символ "!", который в SQL*Plus скриптах является алиасом команды host, суть выполняющей запуск команд ОС. Опять же не уверен что это плохо в Вашем случае, но вдруг начинается какой-то цикл, который забивает spool-файл, пока не закомментирован последний вызов echo Finished. В общем, попробуйте заменить на EOF, обычно народ в сети использует такую строку как терминатор. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2021, 21:53 |
|
Shell скрипт формирует большой размер лога 32-битного sqlplus
|
|||
---|---|---|---|
#18+
А Вы смотрели на результат вывода, который попадает в файл? Вместо SELECT * FROM USER_TABLES, попробуйте вывести только первое поле, TABLE_NAME, и добавьте сортировку - ORDER BY TABLE_NAME, сгенерите оба вывода, из под клиента 32-бита и из под 64-бита - и сравните через Notepad++, в режиме Split Screen, когда оба файла на экране, рядом друг с другом. Или в Total Commander, просто File -> Compare by Contents. Ну или ещё каким инструментом, который Вам ближе и под рукой, просто утилитой diff, если вы только под Linux, без GUI на этом сервере, и файлы вытащить для анализа нет возможности. Честно говоря, ощущение что у Вас разные алиасы в tnsnames.ora описаны для базы TSTDB - т.е. переключая клиенты 32/64-бит, Вы соединяетесь с разными базами. Поэтому и вывод отличается. Может быть такое? Проверить очень просто конечно, начиная с tnsping TSTDB, и сравнить значение HOST и SERVICE_NAME (или SID), или, после подключения, SELECT INSTANCE_NAME, HOST_NAME FROM V$INSTANCE, тоже сразу будет видно, куда Вы подключены, сервер и экземпляр. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2021, 22:03 |
|
Shell скрипт формирует большой размер лога 32-битного sqlplus
|
|||
---|---|---|---|
#18+
Всем спасибо за советы, sh - ksh - без разницы. ll - неполный вывод - у меня нет тырнета с той системы, часть примеров вручную набрал, но смысл передан. коннект там к одной базе, ошибки тут нет, да и потом, вы же посмотрите - убираешь добавление строки в sh скрипте и размер файла нормальный. Код: plsql 1.
Тут вроде как Oracle уже вообще не при чем, ведь не sqlplus добавляет, а echo, за блоком sqlplus. Но в 64битной версии нет этой проблемы с этой же версией скрипта и echo "Finished" не мешает. Далее, вручную с этим же коннектом если делаешь в sqlplus: Код: plsql 1. 2. 3.
тоже всё нормально. Бред какой-то, но как-то проблему решать надо или все скрипты переделывать. Благо решение есть - даже два. Либо использовать вывод в файл скрипте, Код: plsql 1. 2. 3.
а не как Код: plsql 1.
либо закомментарить последнее echo: Код: plsql 1.
Посмотрел количество строк в vi и cat test.log |wc -l - в большом и маленьком файле кол-во строк одинаковое. Но естественно по большому файлу команда дольше работала. diff разницы не дал. ! менял на несколько вариантов(тоже мысль была) - но мимо. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2021, 23:01 |
|
Shell скрипт формирует большой размер лога 32-битного sqlplus
|
|||
---|---|---|---|
#18+
как echo "Finished" может увеличить размер файла в 16000 раз? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2021, 23:08 |
|
Shell скрипт формирует большой размер лога 32-битного sqlplus
|
|||
---|---|---|---|
#18+
Вот прямо такую вот команду Keklik Код: plsql 1.
выполняет без выдачи сообщения об ошибке? Код: plsql 1. 2. 3. 4.
:-) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2021, 23:15 |
|
Shell скрипт формирует большой размер лога 32-битного sqlplus
|
|||
---|---|---|---|
#18+
Keklik, У SQL*Plus есть замечательная команда SPOOL. Почему бы её не использовать? Мсье знает толк в извращениях? :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2021, 23:27 |
|
Shell скрипт формирует большой размер лога 32-битного sqlplus
|
|||
---|---|---|---|
#18+
Сделал, чтобы скрипт выводил заведомо мало информации (rownum < 4), размер остался огромным все-равно: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
Код: plsql 1. 2. 3. 4.
хотя файл почти 1.5ГБ, содержимое выводит быстро, но потом cat висит, после Elapsed: 00:00:00.02, т.е. в конце файла лабуда какая-то напичкана: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Комментарим echo: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
Запускаем - размер лога 129 байт: Код: plsql 1. 2. 3. 4.
Меняю в первом скрипте export ORACLE_HOME= на 64битный - всё ОК, независимо от echo "Finished" . ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2021, 23:29 |
|
Shell скрипт формирует большой размер лога 32-битного sqlplus
|
|||
---|---|---|---|
#18+
SQL*Plus, SQL*Plusвыполняет без выдачи сообщения об ошибке? Я же написал, что часть скриптов руками добирал, а не копировал с рабочего примера. Следующие примеры аккуратнее сделал. И пожалуйста читайте, что я пишу - в первом сообщении указано, что вручную в sqlplus : spool fname ... spool off работает всё нормально. Там беда начинается ЗА БЛОКОМ sqlplus. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2021, 23:33 |
|
Shell скрипт формирует большой размер лога 32-битного sqlplus
|
|||
---|---|---|---|
#18+
Keklik, 1) Сделайте файл runme-32.sql Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9.
Выполните его 32-битным SQL*Plus Код: plaintext
2) Сделайте файл runme-64.sql Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9.
Выполните его 64-битным SQL*Plus. Код: plaintext
3) Сравните результаты. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2021, 23:37 |
|
Shell скрипт формирует большой размер лога 32-битного sqlplus
|
|||
---|---|---|---|
#18+
SQL*Plus, Мсье, это дает одинаковый результат, об этом написано в первом сообщении. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2021, 23:40 |
|
Shell скрипт формирует большой размер лога 32-битного sqlplus
|
|||
---|---|---|---|
#18+
Keklik SQL*Plus, Там беда начинается ЗА БЛОКОМ sqlplus. Тогда вам надо это всё писать в форуме про Linux/UNIX, ибо SQL*Plus здесь не при чём . ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2021, 23:40 |
|
Shell скрипт формирует большой размер лога 32-битного sqlplus
|
|||
---|---|---|---|
#18+
На одну строку различается кол-во строк, вот она и раздута: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2021, 23:50 |
|
Shell скрипт формирует большой размер лога 32-битного sqlplus
|
|||
---|---|---|---|
#18+
авторибо SQL*Plus здесь не при чём . и про это я тоже написал. Этим бы и занялся(писать линуксоидам), но когда используется 64-битный клиент(ORACLE_HOME в скрипте) - проблемы НЕТ. Значит версия клиента влияет. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2021, 23:52 |
|
Shell скрипт формирует большой размер лога 32-битного sqlplus
|
|||
---|---|---|---|
#18+
Keklik авторибо SQL*Plus здесь не при чём . и про это я тоже написал. Этим бы и занялся(писать линуксоидам), но когда используется 64-битный клиент - проблемы НЕТ. Значит версия клиента влияет. Проведите описанный выше эксперимент 22349619 и после этого делайте выводы. Пока ваш вывод - это не более, чем фантазия. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2021, 23:55 |
|
Shell скрипт формирует большой размер лога 32-битного sqlplus
|
|||
---|---|---|---|
#18+
т.е. то что я говорю, с первого сообщения, что вручную со spool fname работает с любым клиентом - это фантазия? Еще показательно, в первом сообщении, третий пример тоже работает(вывод в файл в самом скрипте задан sqlplus -s testuser/testuser@TSTDB > tst.log ): Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
запуск: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8.
По примеру с rownum <4, в vi перейти на 12 строку не получается. Визуально там 11 строк в большом файле, все также как в мелком. Включил отображение скрытых файлов (set list) - картинка на обоих файлах одинакова. Но у большого файла больше на одну строку по cat : Код: plsql 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2021, 00:06 |
|
Shell скрипт формирует большой размер лога 32-битного sqlplus
|
|||
---|---|---|---|
#18+
Keklik, Слишком много слов и мало дел. Еще проверьте командой which, какие именно SQL*Plus вызываются в каждом случае Код: plsql 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2021, 00:11 |
|
Shell скрипт формирует большой размер лога 32-битного sqlplus
|
|||
---|---|---|---|
#18+
Keklik, Посмотрите ваш файл программой hexdump Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2021, 00:22 |
|
Shell скрипт формирует большой размер лога 32-битного sqlplus
|
|||
---|---|---|---|
#18+
Забыл дать сравнение: Код: plsql 1. 2. 3. 4. 5.
авторСлишком много слов и мало дел И кто-то писатель похоже. Завтра продолжу разбираться. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2021, 00:40 |
|
Shell скрипт формирует большой размер лога 32-битного sqlplus
|
|||
---|---|---|---|
#18+
Код: plsql 1. 2. 3. 4. 5.
упростил до предела запрос: Код: plsql 1.
tst2.ksh добавил which sqlplus Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Код: plsql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2021, 01:03 |
|
Shell скрипт формирует большой размер лога 32-битного sqlplus
|
|||
---|---|---|---|
#18+
Keklik, Почему после селекта нет команды exit; для sqlplus? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2021, 03:06 |
|
Shell скрипт формирует большой размер лога 32-битного sqlplus
|
|||
---|---|---|---|
#18+
Sayan Malakshinov, В рабочем примере есть exit. Но без него, кстати тоже будет работать. Как понять что за данные размещены в последней строке и как оно туда попадает? - строка примерно в 1.4ГБ. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2021, 08:35 |
|
Shell скрипт формирует большой размер лога 32-битного sqlplus
|
|||
---|---|---|---|
#18+
SQL*Plus, Прогнал runme-32.sql, runme-64.sql в 32-битном и 64-битном клиентах. Как и говорил, там всё работает, и лог-файлы получаются одинаковыми - небольшой размер, diff тоже не находит отличий. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2021, 08:46 |
|
Shell скрипт формирует большой размер лога 32-битного sqlplus
|
|||
---|---|---|---|
#18+
Убрал лишнее, оставил два простых примера в 32-битном клиенте. В текстовый файл выводится sysdate - т.е. размер файла должен быть минимальным. Отличие примеров только в том, что после блока sqlplus , в первом случае идет добавление строки командой: echo "Finished" Во втором примере echo закоментарен: #echo "Finished" Далее вручную добавляю строку к результатам работы второго примера(echo "Finished" >> tst3.log), но такое добавление не увеличило до ГБ размера файла, хотя оно ничем не отличается от echo в ksh-скрипте. Первый пример, генерит огромный файл, в котором содержится одна строка с sysdate: Код: 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.
Запускаем, получаем огромный файл: Код: plsql 1. 2. 3. 4.
Второй пример, после блока sqlplus закомментарено добавление строки #echo "Finished": Код: 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.
Запускаем, получаем нормальный размер файла: Код: plsql 1. 2. 3. 4. 5. 6.
Сравниваем файлы, diff ругается на бинарный файл, cmp показывает наличие символа EOF в tst3.log(в небольшом файле), и по факту не находит в tst2.log строки с текстом Finished, т.е. вместо Finished echo добавило непойми что в скрипте на 1.4ГБ. Код: plsql 1. 2. 3. 4. 5. 6.
Добавляем строку с текстом "Finished" в небольшой файл, т.е. делаем ровно то, что делал скрипт, генерирующий большой файл, но результат иной(файл остается небольшим): Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2021, 09:50 |
|
Shell скрипт формирует большой размер лога 32-битного sqlplus
|
|||
---|---|---|---|
#18+
Забыл добавить вывод hexdump после создания файлов, hexdump видит Finished в большом файле: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2021, 10:05 |
|
|
start [/forum/topic.php?fid=52&msg=40085291&tid=1880016]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
80ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
68ms |
get tp. blocked users: |
2ms |
others: | 237ms |
total: | 427ms |
0 / 0 |