powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Shell скрипт формирует большой размер лога 32-битного sqlplus
25 сообщений из 29, страница 1 из 2
Shell скрипт формирует большой размер лога 32-битного sqlplus
    #40085195
Keklik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
День добрый,

Система 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.
u01/> cat tst.sh

#!/bin/ksh

export ORACLE_HOME=/oravl01/oracle/19.3_32
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export PATH=$ORACLE_HOME/bin:$PATH

sqlplus -s testuser/testuser@TSTDB  << !

set echo on
set timing on

select  *  from from user_tables;
!

echo "Finished"

exit 0




Запускаем первый скрипт, смотрим размер лога:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
u01/>./tst.sh > tst.log

u01/>ll  tst.log 
1,497,772,720

u01/>du -sh tst.log 
96k




Убираем echo "Finished" , и ll показывает нормальный(небольшой) размер:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
u01/> cat tst.sh

#!/bin/ksh

export ORACLE_HOME=/oravl01/oracle/19.3_32
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export PATH=$ORACLE_HOME/bin:$PATH

sqlplus -s testuser/testuser@TSTDB  << !

set echo on
set timing on

select  *  from from user_tables;
!

#echo "Finished"

exit 0


Запускаем :
Код: plsql
1.
2.
3.
4.
5.
6.
7.
u01/>./tst.sh > tst.log

u01/>ll  tst.log  
94038

u01/>du -sh tst.log 
96k




Ставим вывод в файл в самом скрипте (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.
u01/> cat tst.sh

#!/bin/ksh

export ORACLE_HOME=/oravl01/oracle/19.3_32
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export PATH=$ORACLE_HOME/bin:$PATH

sqlplus -s testuser/testuser@TSTDB > tst.log << !

set echo on
set timing on

select  *  from from user_tables;
!

echo "Finished"

exit 0




Запускаем третий скрипт:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
u01/>./tst.sh 


u01/>ll  tst.log  
94038

u01/>du -sh tst.log 
96k



Меняем ORACLE_HOME на 64-битного клиента - во всех случаях срабатывает нормально.
...
Рейтинг: 0 / 0
Shell скрипт формирует большой размер лога 32-битного sqlplus
    #40085201
Фотография shane54
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как определён алиас ll? Что он вызывает? Почему в выводе только размер, без имени файла, группы, владельца, даты, маски прав и тд? Обычно ll это алиас к ls -ltrh или чему-то подобному.
В общем, чтобы посмотреть - выполните alias, либо alias ll.

Почему у Вас shebang-строка в начале скрипта указывает на ksh, а сам скрипт - с расширением .sh? Не уверен что это "плохо" и на что-то влияет - но тем не менее.

В качестве терминатора для SQL скрипта, который подаётся на вход SQL*Plus, Вы используете символ "!", который в SQL*Plus скриптах является алиасом команды host, суть выполняющей запуск команд ОС. Опять же не уверен что это плохо в Вашем случае, но вдруг начинается какой-то цикл, который забивает spool-файл, пока не закомментирован последний вызов echo Finished. В общем, попробуйте заменить на EOF, обычно народ в сети использует такую строку как терминатор.
...
Рейтинг: 0 / 0
Shell скрипт формирует большой размер лога 32-битного sqlplus
    #40085206
Фотография shane54
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А Вы смотрели на результат вывода, который попадает в файл? Вместо 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, тоже сразу будет видно, куда Вы подключены, сервер и экземпляр.
...
Рейтинг: 0 / 0
Shell скрипт формирует большой размер лога 32-битного sqlplus
    #40085221
Keklik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо за советы,

sh - ksh - без разницы.
ll - неполный вывод - у меня нет тырнета с той системы, часть примеров вручную набрал,
но смысл передан.

коннект там к одной базе, ошибки тут нет, да и потом,
вы же посмотрите - убираешь добавление строки в sh скрипте и размер файла нормальный.
Код: plsql
1.
#echo "Finished"


Тут вроде как Oracle уже вообще не при чем, ведь не sqlplus добавляет, а echo, за блоком sqlplus.
Но в 64битной версии нет этой проблемы с этой же версией скрипта и echo "Finished" не мешает.


Далее, вручную с этим же коннектом если делаешь в sqlplus:
Код: plsql
1.
2.
3.
spool fname.log
..
spool off



тоже всё нормально.

Бред какой-то, но как-то проблему решать надо или все скрипты переделывать.
Благо решение есть - даже два.

Либо использовать вывод в файл скрипте,
Код: plsql
1.
2.
3.
..
sqlplus -s testuser/testuser@TSTDB > tst.log << !
..


а не как
Код: plsql
1.
u01/>./tst.sh > tst.log



либо закомментарить последнее echo:
Код: plsql
1.
#echo "Finished"




Посмотрел количество строк в vi и cat test.log |wc -l -
в большом и маленьком файле кол-во строк одинаковое.

Но естественно по большому файлу команда дольше работала.
diff разницы не дал.

! менял на несколько вариантов(тоже мысль была) - но мимо.
...
Рейтинг: 0 / 0
Shell скрипт формирует большой размер лога 32-битного sqlplus
    #40085223
Keklik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
как
echo "Finished"

может увеличить размер файла в 16000 раз?
...
Рейтинг: 0 / 0
Shell скрипт формирует большой размер лога 32-битного sqlplus
    #40085224
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот прямо такую вот команду
Keklik

Код: plsql
1.
select  *  from from user_tables;



выполняет без выдачи сообщения об ошибке?
Код: plsql
1.
2.
3.
4.
select  *  from from user_tables
                *
ERROR at line 1:
ORA-00903: invalid table name


:-)
...
Рейтинг: 0 / 0
Shell скрипт формирует большой размер лога 32-битного sqlplus
    #40085227
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Keklik,

У SQL*Plus есть замечательная команда SPOOL.
Почему бы её не использовать?
Мсье знает толк в извращениях?
:-)
...
Рейтинг: 0 / 0
Shell скрипт формирует большой размер лога 32-битного sqlplus
    #40085228
Keklik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сделал, чтобы скрипт выводил заведомо мало информации (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.
/u01 > cat tst2.ksh

#!/bin/ksh 

export ORACLE_HOME=/oravl01/oracle/19.3_32

export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib

export PATH=$ORACLE_HOME/bin:$PATH


sqlplus -s testuser/testuser@TSTDB   << EOF
set echo on
set linesize 120
set timing on
set pagesize 0
select  table_name, synonym_name from syn where rownum < 4;
EOF

echo "Finished"

exit 0



Код: plsql
1.
2.
3.
4.
/u01 >./tst2.ksh > tst2.log

/u01 > ll tst2.log
-rw-r--r-- 1 oracle dba 1497493643 Jul 22 01:46 tst2.log




хотя файл почти 1.5ГБ, содержимое выводит быстро, но потом cat висит,
после Elapsed: 00:00:00.02, т.е. в конце файла лабуда какая-то напичкана:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
/u01 >cat tst2.log
tab1
tab1

tab2
tab2

tab3
tab4


Elapsed: 00:00:00.02




Комментарим echo:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
/u01 > cat tst3.ksh

#!/bin/ksh 

export ORACLE_HOME=/oravl01/oracle/19.3_32

export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib

export PATH=$ORACLE_HOME/bin:$PATH


sqlplus -s testuser/testuser@TSTDB   << EOF
set echo on
set linesize 120
set timing on
set pagesize 0
select  table_name, synonym_name from syn where rownum < 4;
EOF

#echo "Finished"

exit 0



Запускаем - размер лога 129 байт:
Код: plsql
1.
2.
3.
4.
/u01> ./tst3.ksh > tst3.log

/u01> ll  tst3.log
-rw-r--r-- 1 oracle dba 129 Jul 22 01:54 tst3.log




Меняю в первом скрипте export ORACLE_HOME= на 64битный - всё ОК, независимо от
echo "Finished" .
...
Рейтинг: 0 / 0
Shell скрипт формирует большой размер лога 32-битного sqlplus
    #40085231
Keklik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SQL*Plus,
SQL*Plusвыполняет без выдачи сообщения об ошибке?

Я же написал, что часть скриптов руками добирал, а не копировал с рабочего примера.
Следующие примеры аккуратнее сделал.

И пожалуйста читайте, что я пишу - в первом сообщении указано,
что вручную в sqlplus :
spool fname
...
spool off

работает всё нормально.
Там беда начинается ЗА БЛОКОМ sqlplus.
...
Рейтинг: 0 / 0
Shell скрипт формирует большой размер лога 32-битного sqlplus
    #40085232
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Keklik,

1) Сделайте файл runme-32.sql
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
set echo on
set linesize 120
set timing on
set pagesize 0

SPOOL runme-32.log
select  table_name, synonym_name from syn where rownum < 4;
SPOOL OFF;
EXIT;


Выполните его 32-битным SQL*Plus

Код: plaintext
sqlplus -s testuser/testuser@TSTDB @runme-32.sql


2) Сделайте файл runme-64.sql
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
set echo on
set linesize 120
set timing on
set pagesize 0

SPOOL runme-64.log
select  table_name, synonym_name from syn where rownum < 4;
SPOOL OFF;
EXIT;


Выполните его 64-битным SQL*Plus.

Код: plaintext
sqlplus -s testuser/testuser@TSTDB @runme-64.sql


3) Сравните результаты.
...
Рейтинг: 0 / 0
Shell скрипт формирует большой размер лога 32-битного sqlplus
    #40085233
Keklik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SQL*Plus,

Мсье, это дает одинаковый результат, об этом написано в первом сообщении.
...
Рейтинг: 0 / 0
Shell скрипт формирует большой размер лога 32-битного sqlplus
    #40085234
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Keklik
SQL*Plus,
Там беда начинается ЗА БЛОКОМ sqlplus.

Тогда вам надо это всё писать в форуме про Linux/UNIX, ибо SQL*Plus здесь не при чём .
...
Рейтинг: 0 / 0
Shell скрипт формирует большой размер лога 32-битного sqlplus
    #40085237
Keklik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На одну строку различается кол-во строк, вот она и раздута:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
u01/> ll tst2.log
-rw-r--r-- 1 oracle dba 1497493643 Jul 22 01:46 tst2.log

u01/> ll tst3.log
-rw-r--r-- 1 oracle dba 129 Jul 22 01:54 tst3.log
 
u01/> cat tst2.log| wc -l
12

u01/> cat tst3.log |wc -l
11
...
Рейтинг: 0 / 0
Shell скрипт формирует большой размер лога 32-битного sqlplus
    #40085239
Keklik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторибо SQL*Plus здесь не при чём .
и про это я тоже написал.
Этим бы и занялся(писать линуксоидам), но когда используется 64-битный клиент(ORACLE_HOME в скрипте) - проблемы НЕТ.
Значит версия клиента влияет.
...
Рейтинг: 0 / 0
Shell скрипт формирует большой размер лога 32-битного sqlplus
    #40085240
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Keklik
авторибо SQL*Plus здесь не при чём .

и про это я тоже написал.
Этим бы и занялся(писать линуксоидам), но когда используется 64-битный клиент - проблемы НЕТ.
Значит версия клиента влияет.

Проведите описанный выше эксперимент 22349619 и после этого делайте выводы.
Пока ваш вывод - это не более, чем фантазия.
...
Рейтинг: 0 / 0
Shell скрипт формирует большой размер лога 32-битного sqlplus
    #40085244
Keklik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
т.е. то что я говорю, с первого сообщения, что вручную со
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.
u01/> cat tst.sh

#!/bin/ksh

export ORACLE_HOME=/oravl01/oracle/19.3_32
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export PATH=$ORACLE_HOME/bin:$PATH

sqlplus -s testuser/testuser@TSTDB > tst.log << !

set echo on
set timing on

select  *  from  user_tables;
!

echo "Finished"

exit 0 




запуск:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
u01/>./tst.sh 


u01/>ll  tst.log  
94038

u01/>du -sh tst.log 
96k




По примеру с rownum <4, в vi перейти на 12 строку не получается.
Визуально там 11 строк в большом файле, все также как в мелком.

Включил отображение скрытых файлов (set list) - картинка на обоих файлах одинакова.

Но у большого файла больше на одну строку по cat :
Код: plsql
1.
2.
3.
4.
5.
u01/> cat tst2.log| wc -l
12

u01/> cat tst3.log |wc -l
11
...
Рейтинг: 0 / 0
Shell скрипт формирует большой размер лога 32-битного sqlplus
    #40085246
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Keklik,

Слишком много слов и мало дел.

Еще проверьте командой which, какие именно SQL*Plus вызываются в каждом случае

Код: plsql
1.
2.
$ which sqlplus
/u01/app/oracle/product/19.0.0.0/dbhome_1/bin/sqlplus
...
Рейтинг: 0 / 0
Shell скрипт формирует большой размер лога 32-битного sqlplus
    #40085248
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Keklik,

Посмотрите ваш файл программой hexdump

Код: plaintext
$ hexdump -C tst2.log | more
...
Рейтинг: 0 / 0
Shell скрипт формирует большой размер лога 32-битного sqlplus
    #40085253
Keklik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Забыл дать сравнение:

Код: plsql
1.
2.
3.
4.
5.
u01/> cmp  -c tst2.log tst2-2.log

u01/> cmp -b -l tst2.log tst3.log
128  62 2     60 0
cmp: EOF on tst3.log




авторСлишком много слов и мало дел
И кто-то писатель похоже.

Завтра продолжу разбираться.
...
Рейтинг: 0 / 0
Shell скрипт формирует большой размер лога 32-битного sqlplus
    #40085254
Keklik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plsql
1.
2.
3.
4.
5.
>which sqlplus
/oravl01/oracle/19.3_32/bin/sqlplus

>file   /oravl01/oracle/19.3_32/bin/sqlplus
/oravl01/oracle/19.3_32/bin/sqlplus: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=0b7ab7cb6578f679074bd1f06788e4780aee89f2, not stripped



упростил до предела запрос:
Код: plsql
1.
select sysdate from dual;




tst2.ksh добавил which sqlplus
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
>ls -l *log
-rw-r--r-- 1 oracle dba 1498103886 Jul 22 03:16 tst2.log
-rw-r--r-- 1 oracle dba         32 Jul 22 03:18 tst3.log

>hexdump -C tst2.log | more
00000000  2f 6f 72 61 76 6c 30 31  2f 6f 72 61 63 6c 65 2f  |/oravl01/oracle/|
00000010  31 39 2e 33 5f 33 32 2f  62 69 6e 2f 73 71 6c 70  |19.3_32/bin/sqlp|
00000020  6c 75 73 0a 32 32 2d 4a  55 4c 2d 32 31 0a 0a 45  |lus.22-JUL-21..E|
00000030  6c 61 70 73 65 64 3a 20  30 30 3a 30 30 3a 30 30  |lapsed: 00:00:00|
00000040  2e 30 31 0a 00 00 00 00  00 00 00 00 00 00 00 00  |.01.............|
00000050  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
594b4040  00 00 00 00 00 46 69 6e  69 73 68 65 64 0a        |.....Finished.|
594b404e



Код: plsql
1.
2.
3.
4.
>hexdump -C  tst3.log | more
00000000  32 32 2d 4a 55 4c 2d 32  31 0a 0a 45 6c 61 70 73  |22-JUL-21..Elaps|
00000010  65 64 3a 20 30 30 3a 30  30 3a 30 30 2e 30 30 0a  |ed: 00:00:00.00.|
00000020
...
Рейтинг: 0 / 0
Shell скрипт формирует большой размер лога 32-битного sqlplus
    #40085263
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Keklik,

Почему после селекта нет команды exit; для sqlplus?
...
Рейтинг: 0 / 0
Shell скрипт формирует большой размер лога 32-битного sqlplus
    #40085274
Keklik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sayan Malakshinov,

В рабочем примере есть exit.
Но без него, кстати тоже будет работать.
Как понять что за данные размещены в последней строке
и как оно туда попадает? - строка примерно в 1.4ГБ.
...
Рейтинг: 0 / 0
Shell скрипт формирует большой размер лога 32-битного sqlplus
    #40085275
Keklik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SQL*Plus,

Прогнал runme-32.sql, runme-64.sql в 32-битном и 64-битном клиентах.
Как и говорил, там всё работает, и лог-файлы получаются одинаковыми - небольшой размер, diff тоже не находит отличий.
...
Рейтинг: 0 / 0
Shell скрипт формирует большой размер лога 32-битного sqlplus
    #40085291
Keklik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Убрал лишнее, оставил два простых примера в 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.
> cat tst2.ksh
#!/bin/ksh 


export ORACLE_HOME=/oravl01/oracle/19.3_32

export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib

export LIBHOME=/oravl01/oracle/19.3_32/lib


export PATH=$ORACLE_HOME/bin:$PATH


sqlplus -s testuser/testuser@TSTDB  << EOF
set echo on
set linesize 120
set timing on
set pagesize 0
select sysdate from dual;
exit
EOF

echo "Finished"

exit 0



Запускаем, получаем огромный файл:
Код: plsql
1.
2.
3.
4.
> ./tst2.ksh > tst2.log

> ll  tst2.log
-rw-r--r-- 1 oracle dba 1497878570 Jul 22 11:22 tst2.log




Второй пример, после блока 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.
> cat tst3.ksh
#!/bin/ksh 


export ORACLE_HOME=/oravl01/oracle/19.3_32

export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib

export LIBHOME=/oravl01/oracle/19.3_32/lib


export PATH=$ORACLE_HOME/bin:$PATH


sqlplus -s testuser/testuser@TSTDB   << EOF
set echo on
set linesize 120
set timing on
set pagesize 0
select sysdate from dual;
exit
EOF

#echo "Finished"

exit 0



Запускаем, получаем нормальный размер файла:
Код: plsql
1.
2.
3.
4.
5.
6.
> ./tst3.ksh > tst3.log


> ll tst*log
-rw-r--r-- 1 oracle dba 1497878570 Jul 22 11:22 tst2.log
-rw-r--r-- 1 oracle dba         32 Jul 22 11:44 tst3.log




Сравниваем файлы, diff ругается на бинарный файл, cmp показывает наличие
символа EOF в tst3.log(в небольшом файле), и по факту не находит в tst2.log строки
с текстом Finished, т.е. вместо Finished echo добавило непойми что в скрипте на 1.4ГБ.
Код: plsql
1.
2.
3.
4.
5.
6.
> diff tst3.log tst2.log
Binary files tst3.log and tst2.log differ

> cmp -b -l tst2.log tst3.log
31  60 0     61 1
cmp: EOF on tst3.log





Добавляем строку с текстом "Finished" в небольшой файл, т.е.
делаем ровно то, что делал скрипт, генерирующий большой файл,
но результат иной(файл остается небольшим):
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
> echo "Finished" >> tst3.log

> ll tst3.log
-rw-r--r-- 1 oracle dba 41 Jul 22 11:47 tst3.log

> 
> 
> cat tst3.log
22-JUL-21

Elapsed: 00:00:00.00
Finished
...
Рейтинг: 0 / 0
Shell скрипт формирует большой размер лога 32-битного sqlplus
    #40085298
Keklik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Забыл добавить вывод hexdump после создания файлов, hexdump видит Finished
в большом файле:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
> ll tst*log

-rw-r--r-- 1 oracle dba         32 Jul 22 12:03 tst3.log
-rw-r--r-- 1 oracle dba 1498394666 Jul 22 12:28 tst2.log


> hexdump -C tst2.log | more
00000000  32 32 2d 4a 55 4c 2d 32  31 0a 0a 45 6c 61 70 73  |22-JUL-21..Elaps|
00000010  65 64 3a 20 30 30 3a 30  30 3a 30 30 2e 30 30 0a  |ed: 00:00:00.00.|
00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
594fb020  00 46 69 6e 69 73 68 65  64 0a                    |.Finished.|
594fb02a


> hexdump -C  tst3.log  | more
00000000  32 32 2d 4a 55 4c 2d 32  31 0a 0a 45 6c 61 70 73  |22-JUL-21..Elaps|
00000010  65 64 3a 20 30 30 3a 30  30 3a 30 30 2e 30 31 0a  |ed: 00:00:00.01.|
00000020
...
Рейтинг: 0 / 0
25 сообщений из 29, страница 1 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Shell скрипт формирует большой размер лога 32-битного sqlplus
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]