適用於:Linux 上的 SQL Server
本文說明如何對在 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 相容工具 (例如 errorlog 或 cat) 來瀏覽 檔案,如下所示:
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-setupsudo -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 開發問題的回答
- Microsoft SQL Server 授權條款及資訊
- 適用於商務使用者的支援選項
- 其他 SQL Server 說明與意見反應
參與編輯 SQL 文件
您知道您可以自行編輯 SQL 內容嗎? 這樣做不僅可以協助改善文件,也能名列該頁面的參與者。
如需詳細資訊,請參閱 編輯 Microsoft Learn 文件。