linux mssql-tools sqlcmd висит бесконечно - PullRequest
0 голосов
/ 05 ноября 2019

Запуск 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).

У кого-нибудь есть идеи, что здесь может происходить или отладка предложений?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...