簡體   English   中英

Linux bash 腳本:如何在 msssql-server 上的 RESTORE DATABASE 查詢中檢測到錯誤?

[英]Linux bash script: How can I detect an error on a RESTORE DATABASE query on msssql-server?

Syncing a windows app with a linux website, I use a bash script which transfers each day a MS-SQL database from a Windows machine to a Linux installation, and uploads it to the mssql-server with the code below:

sqlcmd -b -S localhost -U SA -P <password> -Q "RESTORE DATABASE <dbname> FROM DISK = '/home/<user>/$newdb' WITH MOVE '<x_Data>' TO '/var/opt/mssql/data/<dbname>.mdf', MOVE 'x_Log' TO '/var/opt/mssql/data/<dbname>_Log.ldf'"

大多數情況下,這條線都能完美運行。 但在某些情況下,恢復失敗並出現如下錯誤:“Sqlcmd:錯誤:Microsoft ODBC Driver 17 for SQL Server:登錄超時已過期。”

我似乎無法找到一種方法來檢測這些錯誤並通過重復該過程或重新啟動 mssql-server 來使腳本做出相應的響應。

有誰知道如何檢測失敗的查詢響應?

提前致謝!

如果作業失敗,您已經在使用-b標志來終止作業 這將該命令的退出狀態設置為非零。 (有點像%ERRORLEVEL%在 Windows 上的工作方式。)

可以在 bash 腳本中使用$?訪問最后一個命令的退出狀態 .

像這樣的東西可以工作:

sqlcmd -b ...
if [[ $? -ne 0 ]]; then
  echo "SQL upload failed"
  mail -s "sql error!" "admin@example.com" "sql broke again"
  exit 1
fi

當然可以縮短。 甚至像(sqlcmd -b...) || (echo "Failed"; exit 1) (sqlcmd -b...) || (echo "Failed"; exit 1)可能對你有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM