Я пытаюсь автоматизировать некоторые проверки ограничений после огромного импорта данных, и я столкнулся с текущей проблемой. Я нашел обходной путь, который я также опишу, но если есть кто-то, кто лучше меня знает Linux и может объяснить, почему это происходит, я был бы очень признателен.
Так что, если я выполняю следующие команды из DB2 CLI после того, как я вошел в систему как владелец экземпляра, я получу выводимое значение без каких-либо ошибок.
bla:~> VAL=$(db2 -x 'select count(*) from SIM.SUPPLIER')
bla:~> echo value = $VAL
value = 621684
Если я сохраняю команды в файле select.sh и вызываю скрипт в том же процессе, используя . select.sh
после входа в систему как владелец экземпляра, я получаю сообщение об ошибке, что нет соединения с базой данных.
Я думаю, что каким-то образом подстановка команд выполняется в новом потоке, где соединение с сервером не переадресовано.
select.sh content:
VAL = $ (db2 -x 'выберите количество (*) из SCHEMA.TABLE')
значение эха = $ VAL
Как я запускаю скрипт:
bla:~> db2 connect to DB
Database Connection Information
Database server = DB2/LINUXX8664 11.1.0
SQL authorization ID = DB2INS10
Local database alias = DB
bla:~> . select.sh
value = SQL1024N A database connection does not exist. SQLSTATE=08003
bla:~>
Если select.sh содержит только команду db2, без назначения VAL соединение не будет потеряно:
select.sh content:
db2 -x 'выберите количество (*) из SIM.SUPPLIER'
bla:~> . select.sh
621684
bla:~>
А теперь обходной путь:
Запись SQL select в файл и вызов файла внутри select.sh делает трюк, и соединение не теряется.
select.sh content
echo 'выберите количество (*) из SIM.SUPPLIER;' > sql
db2 -txf sql
bla:~> . select.sh
621684
bla:~>
Но это не работает, и я не понимаю, почему:
echo 'выберите количество (*) из SIM.SUPPLIER;' > sql
echo $ (db2 -txf sql)
bla:~/> . select.sh
SQL1024N A database connection does not exist. SQLSTATE=08003
bla:~/>
Так может кто-нибудь объяснить мне, почему подстановка команд теряет соединение с сервером и как я все еще могу его использовать, но сохранить соединение с сервером.
PS: мне не разрешено подключаться к серверу внутри любых скриптов. Из-за соображений безопасности внутри файлов не должно быть никаких учетных данных. Соединение с сервером должно быть установлено до вызова других сценариев и только один раз.
Спасибо