針對 Linux 上的 SQL Server 進行疑難排解
適用於:SQL Server - Linux
本文說明如何對在 Linux 上或 Linux 容器中執行的 SQL Server 進行疑難排解。 針對 Linux 上的 SQL Server 進行疑難排解時,請記得檢閱支援的功能和已知限制:
如需常見問題的解答,請參閱 Linux 上的 SQL Server 常見問題集。
針對連接失敗進行疑難排解
如果無法連線至 Linux SQL Server 執行個體,您必須確認若干事項。
如果您無法使用
localhost
進行本機連線,請嘗試改用 IP 位址 127.0.0.1。 有可能是localhost
未正確對應至此位址。確認可從您的用戶端機器連線到該伺服器名稱或 IP 位址。
若要尋找您 Ubuntu 機器的 IP 位址,您可以執行
ifconfig
命令,如下列範例所示:sudo ifconfig eth0 | grep 'inet addr'
針對 Red Hat,您可以使用
ip addr
命令,如下列範例所示:sudo ip addr show eth0 | grep "inet"
提示
此技術的其中一個例外與 Azure VM 相關。 針對 Azure VM,請在 Azure 入口網站中尋找 VM 的公用 IP。
如果適用,請確認您已在防火牆上開啟 SQL Server 連接埠 (預設值為 1433)。
針對 Azure VM,請確認您有適用於預設 SQL Server 連接埠的網路安全性群組規則。
確認使用者名稱和密碼未包含任何錯字、多餘空格,或不正確的大小寫。
嘗試搭配伺服器名稱明確設定通訊協定和連接埠號碼,如以下範例所示:
tcp:servername,1433
。網路連線問題也可能造成連線錯誤和逾時。 確認您的連線資訊和網路連線能力之後,請重新嘗試連線。
管理 SQL Server 服務
下一節將說明如何管理 SQL Server Linux 容器的執行。 若要管理 Linux 的服務,請參閱在 Linux 上啟動、停止和重新啟動 SQL Server 服務。
管理 SQL Server Linux 容器的執行
您可以執行下列命令來取得最新建立之 SQL Server Linux 容器的狀態和容器識別碼 (識別碼位於 CONTAINER ID
資料行底下):
sudo docker ps -l
您可以使用下列命令來停止或重新啟動 SQL Server 服務:
sudo docker stop <container ID>
sudo docker restart <container ID>
提示
如需更多 Linux 容器疑難排解秘訣,請參閱針對 SQL Server Docker 容器進行疑難排解。
存取記錄檔
SQL Server 資料庫引擎會記錄到 Linux 和容器安裝的 /var/opt/mssql/log/errorlog
檔案中。 您必須在超級使用者模式下,才能瀏覽此目錄。
安裝程式會記錄到這裡:/var/opt/mssql/setup-<time stamp representing time of install>
。您可以使用任何 UTF-16 相容工具 (例如 vim 或 cat) 來瀏覽 errorlog
檔案,如下所示:
sudo cat errorlog
如果您想要的話,也可以使用下列命令將檔案轉換成 UTF-8,以或多或少地讀取這些檔案:
sudo iconv -f UTF-16LE -t UTF-8 <errorlog> -o <output errorlog file>
擴充事件
透過 SQL 命令可以查詢擴充事件。 如需詳細資訊,請參閱擴充事件。
損毀傾印
在 Linux 的記錄檔目錄中尋找傾印。 檢查 /var/opt/mssql/log
目錄底下是否有 Linux 核心傾印 (.tar.gz2
副檔名) 或 SQL 小型傾印 (.mdmp
副檔名)。
例如,若要檢視核心傾印:
sudo ls /var/opt/mssql/log | grep .tar.gz2
針對 SQL 傾印,請使用此指令碼:
sudo ls /var/opt/mssql/log | grep .mdmp
以最低設定或單一使用者模式啟動 SQL Server
以最低設定模式啟動 SQL Server
如果設定值的設定 (如過度分配記憶體) 造成伺服器無法啟動,此模式將有其效用。
sudo -u mssql /opt/mssql/bin/sqlservr -f
以單一使用者模式啟動 SQL Server
有時,您可能需要使用啟動選項 -m
,以單一使用者模式啟動 SQL Server 的執行個體。 如需詳細資訊,請參閱啟動參數。 例如,您可能想要變更伺服器設定選項,或是復原損毀的 master
資料庫或其他系統資料庫。
例如,使用下列指令碼以單一使用者模式啟動 SQL Server:
sudo -u mssql /opt/mssql/bin/sqlservr -m
此指令碼會使用 sqlcmd 以單一使用者模式啟動 SQL Server:
sudo -u mssql /opt/mssql/bin/sqlservr -m sqlcmd
您應一律使用 mssql
使用者身分啟動 Linux 上的 SQL Server,以免未來發生啟動問題。 例如:sudo -u mssql /opt/mssql/bin/sqlservr [STARTUP OPTIONS]
如果您不慎以另一個使用者啟動了 SQL Server,就必須先將 SQL Server 資料庫檔案的擁有權變更回 mssql
使用者,再使用 systemd 來啟動 SQL Server。 例如,若要將 /var/opt/mssql
底下所有資料庫檔案的擁有權變更為 mssql
使用者,請執行下列命令:
chown -R mssql:mssql /var/opt/mssql/
重建系統資料庫
作為最後的手段,您可以選擇將 master
和 model
資料庫重建為預設版本。
警告
此程序具高風險,因為您可以「刪除您已設定的所有 SQL Server 系統資料」,包括使用者資料庫的相關資訊 (但不包括使用者資料庫本身)。
之後,您必須將使用者資料庫連結至執行個體。 此外也會刪除儲存在系統資料庫中的其他資訊,包括:
- 資料庫主要金鑰 (DMK) 資訊
- 在
master
中載入的任何憑證 - 帳戶的密碼
sa
msdb
中與作業有關的資訊msdb
中的 Database Mail 資訊sp_configure
選項
除非您的憑證和私密金鑰也已備份,否則您將無法重新連結使用透明資料加密 (TDE) 進行加密的任何使用者資料庫。
使用這些步驟前,請務必先了解其後果。
停止 SQL Server 資料庫引擎
sudo systemctl stop mssql-server
使用
force-setup
參數執行 sqlservrsudo -u mssql /opt/mssql/bin/sqlservr --force-setup
您應一律使用
mssql
使用者身分啟動 Linux 上的 SQL Server,以免未來發生啟動問題。在看到「復原已完成」訊息後,按 Ctrl+C。 這會關閉 SQL Server。
重新設定
sa
密碼。sudo /opt/mssql/bin/mssql-conf set-sa-password
警告
您的密碼應遵循 SQL Server 預設 密碼原則。 依預設,密碼長度必須至少有 8 個字元,並包含下列四種字元組合中其中三種組合的字元:大寫字母、小寫字母、以 10 為底數的數字以及符號。 密碼長度最多可達 128 個字元。 盡可能使用長且複雜的密碼。
啟動 SQL Server,並重新設定伺服器,包括還原或重新連結任何使用者資料庫。
sudo systemctl start mssql-server
改善效能
許多因素都會影響效能,包括資料庫設計、硬體和工作負載需求。 如果您想要改善效能,請先檢閱 Linux 上 SQL Server 的效能最佳做法和設定方針一文中的最佳做法。 然後探索一些可用來針對效能問題進行疑難排解的工具。
常見問題
您無法連線至遠端 SQL Server 執行個體。
請參閱連線到 Linux 上的 SQL Server一文的疑難排解小節。
您遇到錯誤訊息:
ERROR: Hostname must be 15 characters or less.
這是一個已知問題,每當嘗試安裝 SQL Server 套件的機器名稱長度超過 15 個字元時,就會發生。 目前除了變更機器名稱之外,沒有任何因應措施。 您可以藉由編輯
/etc/hostname
和/etc/hosts
、變更主機名、儲存每個檔案,以及重新啟動電腦來執行此動作。系統管理員 (
sa
) 密碼必須重設,這會暫時停止 SQL Server 服務。如果您忘記
sa
密碼,或因其他原因需要重設密碼,請遵循下列步驟。登入主機終端機,執行下列命令,並依照提示重設
sa
密碼:sudo systemctl stop mssql-server sudo /opt/mssql/bin/mssql-conf setup
警告
您的密碼應遵循 SQL Server 預設 密碼原則。 依預設,密碼長度必須至少有 8 個字元,並包含下列四種字元組合中其中三種組合的字元:大寫字母、小寫字母、以 10 為底數的數字以及符號。 密碼長度最多可達 128 個字元。 盡可能使用長且複雜的密碼。
密碼中的特殊字元可能會導致錯誤或登入失敗。
如果您在 SQL Server 密碼中使用某些字元,當您在 Linux 命令行上使用這些字元時,可能需要以反斜杠逸出它們。 例如,您必須在終端機命令/殼層腳本中使用美元符號 (
$
) 逸出:無法運作:
sudo sqlcmd -S myserver -U sa -P Test$$
有效:
sqlcmd -S myserver -U sa -P Test\$\$
相關內容
取得協助
- 對 SQL 的想法:有任何協助改善 SQL Server 的建議嗎?
- Microsoft Q & A (SQL Server)
- DBA Stack Exchange (標籤 sql-server):詢問 SQL Server 問題
- Stack Overflow (標籤 sql-server):SQL 開發問題的回答
- Reddit:有關 SQL Server 的一般討論
- Microsoft SQL Server 授權條款及資訊
- 適用於商務使用者的支援選項
- 其他 SQL Server 說明與意見反應
參與編輯 SQL 文件
您知道您可以自行編輯 SQL 內容嗎? 這樣做不僅可以協助改善文件,也能名列該頁面的參與者。
如需詳細資訊,請參閱如何參與 SQL Server 文件