Запуск sqlcmd
из пакета mssql-tools
для Linux (CentOS 7). Обнаружение того, что конкретный запрос с помощью этой команды неожиданно не выполняется (выполнялся в течение прошлого года, а сегодня больше не выполняется) и зависает на неопределенный срок. Упрощенная версия кода показана ниже:
tablename=$1
dist_mode=$2
TO_SERVER_ODBCDSN="-D -S MyMSSQLServer"
TO_SERVER_IP="-S 172.17.5.43"
DB="$dest_db"
TABLE="$tablename"
USER=$(tail -n+1 $basedir/src/mssql-creds.txt | head -1)
PASSWORD=$(tail -n+2 $basedir/src/mssql-creds.txt | head -1)
{
echo -e "Getting initial count"
before_count=$(/opt/mssql-tools/bin/sqlcmd \
-Q "set nocount on; select count(*) from dbo.$tablename" \
$TO_SERVER_ODBCDSN \
-U $USER -P $PASSWORD \
-d $DB \
-W -h-1 -k)
echo -e "Initial count: $before_count"
} || { echo -e "\n\nUnable to get MSSQL table count via slqcmd\nMay need to use absolute paths or link sqlcmd location to /usr/local/bin"; exit 255; }
{
echo -e "Truncating destination table: $DB/$TABLE"
/opt/mssql-tools/bin/sqlcmd -Q "select count(*) from dbo.$TABLE;
truncate table dbo.$TABLE;
select count(*) from dbo.$TABLE;" \
$TO_SERVER_ODBCDSN \
-U $USER -P $PASSWORD \
-d $DB
} || { echo -e "\nFailed to truncate MSSQL DB"; exit 255; }
Скрипт всегда висит на последней части, которая пытается усечь таблицу. (Примечание: «-D option: заставляет значение, переданное параметру bcp -S, интерпретировать как имя источника данных (DSN)». Я использую это для использования файла /etc/odbc.ini, а не строкового литерала IP. См. https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/connecting-with-bcp?view=sql-server-2017).
Таким образом, вывод выглядит как ...
##### Exporting MYTABLE data to MSSQL Server #####
Getting initial count
Initial count: 91840
Truncating destination table: DEST_DB/MYTABLE
^C <---- manually ctl+C to escape
Sqlcmd: Warning: The last operation was terminated because the user pressed CTRL+C.
Таблица существует на удаленной базе данных, указанной в команде, и предыдущий запрос может подсчитать строки (которые являются только91840).
У кого-нибудь есть идеи, что здесь может происходить или отладка предложений?