將編輯好的 SQL 查詢複製到 SSMS 會出現無法執行錯誤

在 Docker 環境執行 SQL Server on Linux

此文章中會介紹在 Ubuntu 的 Docker 環境中啟用 Microsoft SQL Server on Linux 的映像檔並附加 AdvantureWork 範例資料庫。

文章環境

Ubuntu 作業系統

Docker 版本

取得 Microsoft SQL Server on Linux Image

安裝完成 Docker 後,先從官方 REPOSITORY 取得 Microsoft SQL Server on Linux Image。

描述中有提到要在 Docker 環境中執行 SQL Server on Linux 需要 3.25 GB 以上的記憶體,記憶體不夠的話就會無法執行(Container 執行起來後就會立刻關閉)。

執行時請確認使用者的權限

這裡使用 sudo -s 指令切換使用者。

將 Microsoft SQL Server on Linux 下載至本機的 Images 清單。

docker pull microsoft/mssql-server-linux

下載完成後可使用 docker images 指令本機電腦的 Images 清單。

執行 Microsoft SQL Server on Linux Image

將 AdventureWorks 範例資料庫放到主機的指定路徑,此情境中放在「/home/{user}/db」資料夾中。

使用 docker run 指令執行 image 檔案並將範例資料庫儲存資料夾位置對應到指定 Container 的資料夾。

docker run --name mssql-server-linux \
-e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=Pa$$w0rd' \
-p 1433:1433 \
-v /home/{user}/db:/var/opt/mssql/advantruework \
-d \
microsoft/mssql-server-linux
參數說明
--name mssql-server-linux 指定 Container 名稱
-e 'SA_PASSWORD=Pa$$w0rd' sa 帳號預設密碼
-p 1433:1433 主機與 Container 的連接埠對應
-v /home/{user}/db:/var/opt/mssql/advantruework 主機與 Container 資料夾對應
-d 持續執行
microsoft/mssql-server-linux 要執行的 image

使用 docker ps -a 指令查看 container 的狀態。

docker ps -a

接下來透過 docker exec 指令進入 container 確認 volumn 設定。

docker exec -it mssql-server-linux /bin/bash

出現 root@{亂碼} 代表目前終端機已經進入 Container。

切換路徑至先前設定的資料夾「/var/opt/mssql/advanturework」,確認主機的範例資料庫檔案是否存在於 Container 中。

已成功與主機做對應,在 Container 中對此資料夾的變更皆會與 HOST 的資料夾同步。

確認 SQL Server 資料庫連線

在這使用 SqlCmd 連線到 Microsoft SQL Server in Linux,確認資料庫已經正確啟用。

sqlcmd -S {主機位址} -U sa -P Pa$$w0rd
將 AdvantureWork 範例資料庫附加到 SQL Server

確認 SQL Server 有正確執行且可連線到之後,使用 SQL Server Management Studio 附加 AdvantureWork 範例資料庫。

這裡使用 T-SQL 進行資料庫的附加作業

USE [master]
GO

CREATE DATABASE [AdventureWorks2012] ON 
(
    FILENAME = N'/var/opt/mssql/advantruework/AdventureWorks2012_Data.mdf' 
)
FOR ATTACH
GO
提示訊息是因為沒有指定附加資料庫的 LOG 檔案,所以 SQL Server 會自動建立一個 LOG 檔案。

執行完成後 AdvantureWorks2012 資料庫就會出現在資料庫清單。

記得重新整理資料庫目錄清單。

若使用介面操作進行資料庫附加時須注意 Linux 檔案路徑的 "/" 與 Windows "\" 不相符,會出現有選擇到檔案卻無法附加功能的錯誤訊息。

參考資料

留言