[Cloud CICD] 資料庫篇 - Azure SQL Server + Azure SQL Database

前言:本篇記錄了在 Azure 上建立 SQL Server 和 SQL Database 的完整流程,包含免費層資源選擇、本機 SSMS 連線、資料庫還原,以及防火牆設定。適合第一次在 Azure 上建立資料庫的開發者。

📦 基本概念

🤔 Azure SQL Server vs Azure SQL Database

  • Azure SQL Server:邏輯伺服器(類似容器),管理多個資料庫的安全性、登入帳號、防火牆規則
  • Azure SQL Database:實際的資料庫實體,儲存資料表、預存程序等資料
  • 關係:一個 SQL Server 可以包含多個 Database(類似一台實體伺服器可以有多個資料庫)

🗺️ 建立流程總覽

1. 建立 Azure SQL Server
2. 建立 Azure SQL Database
3. 設定防火牆規則(本機 IP)
4. 使用 SSMS 連線
5. 還原/匯入資料
6. 設定後端防火牆(App Service IP)
7. 設定連線字串

📝 詳細步驟

1建立 Azure SQL Server(邏輯伺服器)

  1. 登入 Azure Portal
  2. 搜尋「SQL servers」(注意是複數)→ 點擊「建立
  3. 填寫基本資訊:
欄位 說明 / 建議值
訂用帳戶 選擇你的 Azure 訂用帳戶
資源群組 建立新的或選擇現有的(建議與 App Service 同一個)
伺服器名稱 例如:my-sql-server-2025(全球唯一,會變成 my-sql-server-2025.database.windows.net
位置 East Asia(建議與 App Service 同區域,降低延遲)

🔐 驗證方法(重要!)

選擇「使用 SQL 驗證」:

  • 伺服器管理員登入:輸入管理員帳號(例如:sqladmin
  • 密碼:設定強式密碼(至少 8 個字元,包含大小寫、數字、特殊符號)
⚠️ 重要提醒:

請務必記住這組帳號密碼!這是連線到資料庫的唯一方式,Azure 不會儲存明文密碼,忘記就只能重設。

💡 驗證方式比較:
  • SQL 驗證(推薦新手):使用帳號密碼,簡單直接,適合開發測試
  • Azure AD 驗證:整合企業帳號,更安全但設定複雜,適合企業環境
  1. 網路設定:
    • 連線方法:公用端點(Public endpoint)
    • 允許 Azure 服務存取:選「是」(讓 App Service 可以連線)
  2. 點擊「檢閱 + 建立」→「建立

建立完成後,會得到伺服器網址:your-server-name.database.windows.net

2建立 Azure SQL Database

  1. 在剛建立的 SQL Server 頁面,點擊「+ 建立資料庫
  2. 或搜尋「SQL databases」→「建立
  3. 填寫基本資訊:
欄位 說明 / 建議值
訂用帳戶 與 SQL Server 相同
資源群組 與 SQL Server 相同
資料庫名稱 例如:MyAppDBNorthwindDB
伺服器 選擇剛才建立的 SQL Server

💰 計算與儲存體設定(關鍵!)

點擊「設定資料庫」選擇效能層級:

🆓 免費/低成本方案選擇

選項 1:Basic(最便宜,適合測試)

  • 服務層級:Basic
  • DTU:5 DTU
  • 儲存體上限:2 GB
  • 費用:約 NT$150-200/月
  • 適合:開發測試、小型專案

選項 2:Standard S0(推薦入門)

  • 服務層級:Standard
  • DTU:10 DTU
  • 儲存體上限:250 GB
  • 費用:約 NT$450-500/月
  • 適合:小型正式環境

選項 3:Serverless(彈性計費,推薦!)

  • 服務層級:General Purpose - Serverless
  • vCore:1 vCore(最小)
  • 自動暫停延遲:1 小時(閒置後自動暫停,不計費)
  • 費用:依使用量計費,閒置時幾乎免費
  • 適合:不定期使用的開發環境
⚠️ 免費層限制:
  • Basic 層級:單一資料庫最大 2 GB,效能較慢,不支援異地備援
  • 並行連線數:Basic 最多 30 個並行工作階段
  • 備份保留:Basic 只保留 7 天,Standard 以上可保留 35 天
  • 效能:Basic/S0 適合開發測試,生產環境建議至少 S1 以上
  1. 備份儲存體備援:
    • 開發環境:本地備援(最便宜)
    • 生產環境:異地備援(較貴但更安全)
  2. 點擊「檢閱 + 建立」→「建立

建立需要 2-5 分鐘。

3設定防火牆規則(允許本機連線)

在能用 SSMS 連線之前,必須先將本機 IP 加入防火牆白名單。

方法 1:透過 Azure Portal 設定

  1. 進入你的 SQL Server(不是 Database)
  2. 左側選單:SecurityNetworking
  3. 在「Firewall rules」區塊,點擊「+ Add your client IPv4 address
  4. 會自動偵測你的公開 IP 並新增規則
  5. 點擊「Save

方法 2:手動新增防火牆規則

  1. 先查詢你的公開 IP:前往 https://whatismyipaddress.com/
  2. 在 Azure Portal 的 Networking 頁面,點擊「+ Add a firewall rule
  3. 設定:
    • Rule name:MyHomeIP(自訂名稱)
    • Start IP:你的公開 IP
    • End IP:你的公開 IP(相同)
  4. 點擊「OK」→「Save
💡 提示:

如果你的 IP 是浮動的(家用網路通常是),每次 IP 變動後都需要重新新增規則,或者可以設定一個 IP 範圍。

4使用 SSMS 連線到 Azure SQL Database

下載安裝 SSMS

如果還沒有 SQL Server Management Studio (SSMS):

  1. 前往 Microsoft SSMS 下載頁面
  2. 下載並安裝最新版本(免費)

連線步驟

  1. 開啟 SSMS
  2. 在「連接到伺服器」對話框中填寫:
欄位 內容
伺服器類型 Database Engine
伺服器名稱 your-server-name.database.windows.net
驗證 SQL Server 驗證
登入 步驟 1 設定的管理員帳號(例如:sqladmin)
密碼 步驟 1 設定的密碼
  1. 點擊「選項 >>」→ 切換到「連線屬性」頁籤
  2. 在「連線到資料庫」欄位,輸入你的資料庫名稱(例如:NorthwindDB
  3. 點擊「連接
✅ 連線成功!

在物件總管中可以看到你的資料庫,展開後可以看到資料表、檢視等物件。

❌ 連線失敗常見錯誤

錯誤 1:Cannot open server 'xxx' requested by the login

  • 原因:你的 IP 沒有加入防火牆白名單
  • 解決:回到步驟 3 新增防火牆規則

錯誤 2:Login failed for user 'xxx'

  • 原因:帳號或密碼錯誤
  • 解決:確認帳號密碼,或在 Azure Portal 重設密碼

錯誤 3:Cannot open database "xxx" requested by the login

  • 原因:資料庫名稱錯誤,或該帳號沒有權限
  • 解決:確認資料庫名稱拼寫正確

5還原北風資料庫(或匯入其他資料)

Azure SQL Database 支援多種匯入資料的方式:

方法 1:使用 .bacpac 檔案(推薦)

步驟 1:準備 .bacpac 檔案

  • 北風資料庫 .bacpac 檔案可以從 Microsoft SQL Server Samples 下載
  • 或從本機 SQL Server 匯出:
    1. 在 SSMS 中,對資料庫按右鍵 → 工作 → 匯出資料層應用程式
    2. 選擇儲存位置,產生 .bacpac 檔案

步驟 2:透過 Azure Portal 匯入

  1. 進入你的 SQL Server
  2. 點擊「匯入資料庫
  3. 設定:
    • 訂用帳戶:你的訂用帳戶
    • 儲存體:點擊「選取」,上傳你的 .bacpac 檔案到 Azure Blob Storage
    • 定價層:選擇合適的層級
    • 資料庫名稱:輸入名稱(例如:Northwind)
    • 伺服器管理員登入:你的管理員帳號
    • 密碼:你的密碼
  4. 點擊「確定」,匯入需要幾分鐘

方法 2:使用 SSMS 匯入資料層應用程式

  1. 在 SSMS 中連線到 Azure SQL Server
  2. 對「資料庫」節點按右鍵
  3. 選擇「匯入資料層應用程式
  4. 選擇你的 .bacpac 檔案
  5. 按照精靈完成匯入

方法 3:執行 SQL 指令碼建立資料表

  1. 在 SSMS 中開啟新查詢視窗
  2. 執行 CREATE TABLE、INSERT 等 SQL 指令碼
  3. 適合從零開始建立資料庫結構
⚠️ Azure SQL Database 限制:
  • 不支援 .bak 備份檔:只能使用 .bacpac 或 SQL 指令碼
  • 部分 T-SQL 語法不支援:例如 USE 語句、跨資料庫查詢等
  • 匯入大型資料庫:可能需要較高的定價層,避免超時

6設定後端 App Service 防火牆規則

如果你的 .NET API 部署在 Azure App Service,需要將 App Service 的 Outbound IP 加入資料庫防火牆。

步驟:

  1. 進入你的 Azure App Service
  2. 左側選單:SettingsNetworking
  3. 找到「Outbound traffic configuration
  4. 複製「Outbound addresses」列出的所有 IP(通常有 4-6 個)
  5. 回到 SQL ServerNetworking 頁面
  6. 將每個 Outbound IP 都加入防火牆規則:
    • Rule name:AppService-IP-1, AppService-IP-2...
    • Start IP / End IP:貼上 IP
  7. 點擊「Save
💡 快速設定:

在 SQL Server 的 Networking 頁面中,可以勾選「Allow Azure services and resources to access this server」,這樣所有 Azure 服務都能連線。但不建議用於生產環境,因為安全性較低。

7設定連線字串

取得連線字串

  1. 進入你的 SQL Database(不是 Server)
  2. 左側選單:SettingsConnection strings
  3. 選擇「ADO.NET」頁籤
  4. 複製連線字串,看起來像這樣:
Server=tcp:your-server.database.windows.net,1433;
Initial Catalog=YourDatabase;
Persist Security Info=False;
User ID=your-username;
Password={your_password};
MultipleActiveResultSets=False;
Encrypt=True;
TrustServerCertificate=False;
Connection Timeout=30;

修改連線字串

{your_password} 替換成實際密碼:

Server=tcp:my-sql-server.database.windows.net,1433;
Initial Catalog=NorthwindDB;
Persist Security Info=False;
User ID=sqladmin;
Password=YourStrongPassword123!;
MultipleActiveResultSets=False;
Encrypt=True;
TrustServerCertificate=False;
Connection Timeout=30;

設定到 Azure App Service 環境變數

  1. 進入你的 Azure App Service
  2. 左側選單:SettingsEnvironment variables
  3. 點擊「+ Add
  4. 設定:
    • Name:ConnectionStrings__DefaultConnection
    • Value:貼上完整的連線字串
  5. 點擊「OK」→「Apply
💡 記得:

使用雙底線 __ 來表示 JSON 階層結構。ConnectionStrings:DefaultConnectionConnectionStrings__DefaultConnection

在 .NET 程式碼中使用

📄 Program.cs
var builder = WebApplication.CreateBuilder(args);

// 讀取連線字串
var connectionString = builder.Configuration
    .GetConnectionString("DefaultConnection");

// 註冊 DbContext
builder.Services.AddDbContext<ApplicationDbContext>(options =>
    options.UseSqlServer(connectionString));

// ... 其他設定

🔧 進階設定與最佳實務

1. 啟用自動備份

Azure SQL Database 預設啟用自動備份,但可以調整設定:

  1. 進入 SQL Database
  2. 左側選單:Data managementBackups
  3. 檢視備份保留原則:
    • Basic:保留 7 天
    • Standard/Premium:保留 7-35 天(可自訂)

2. 設定查詢效能深入解析

  1. 進入 SQL Database
  2. 左側選單:Intelligent PerformanceQuery Performance Insight
  3. 可以看到哪些查詢最耗資源,協助優化效能

3. 設定警示

  1. 進入 SQL Database
  2. 左側選單:MonitoringAlerts
  3. 建立新警示規則:
    • DTU 使用率超過 80%
    • 儲存體使用率超過 90%
    • 失敗的連線次數過多

4. 使用 Always Encrypted(進階安全性)

對敏感資料(如身分證字號、信用卡號)進行加密,即使資料庫管理員也無法讀取。

5. 定期更新統計資料

Azure SQL Database 通常自動維護統計資料,但可以手動更新:

-- 更新所有資料表的統計資料
EXEC sp_updatestats;

🐛 常見問題排解

問題 1:資料庫效能很慢

可能原因:

  • DTU 使用率持續接近 100%
  • 查詢未建立索引
  • 選擇的定價層太低

解決方法:

  • 升級到更高的定價層
  • 使用 Query Performance Insight 找出慢查詢並優化
  • 為常用查詢欄位建立索引

問題 2:儲存空間不足

解決方法:

  • 升級到更高的定價層以獲得更多儲存空間
  • 刪除不需要的歷史資料
  • 壓縮資料表或使用資料壓縮功能

問題 3:連線逾時

可能原因:

  • 網路不穩定
  • 資料庫負載過高
  • 查詢執行時間過長

解決方法:

  • 增加連線字串中的 Connection Timeout
  • 優化查詢效能
  • 使用連線池(Connection Pooling)

問題 4:無法刪除資料庫

可能原因:

  • 還有作用中的連線
  • 資料庫正在進行備份或還原

解決方法:

  • 中斷所有連線後再刪除
  • 等待備份/還原作業完成

💰 成本優化建議

💡 省錢技巧

  1. 使用 Serverless 層級:閒置時自動暫停,只在使用時計費
  2. 選擇本地備援:開發環境不需要異地備援,可節省 50% 備份成本
  3. 定期清理測試資料庫:不用的資料庫記得刪除
  4. 使用保留執行個體:生產環境如果確定長期使用,可購買 1-3 年保留方案,省下 30-50%
  5. 監控 DTU 使用率:如果長期低於 20%,考慮降級
  6. 設定預算警示:避免超支

📚 重點整理

🔑 關鍵要點:
  1. 先建立 SQL Server,再建立 Database:兩者是不同的資源
  2. 防火牆設定:需要同時設定本機 IP(SSMS 連線)和 App Service IP(後端連線)
  3. 驗證方式:選擇 SQL 驗證(帳號密碼),新手較容易上手
  4. 免費層限制:Basic 最大 2 GB,適合開發測試,生產環境建議 Standard 以上
  5. 連線字串:使用環境變數存放,不要寫死在程式碼中
  6. 備份:Azure 自動備份,但 Basic 只保留 7 天
  7. 成本優化:開發環境建議使用 Serverless 層級

🔗 相關資源


希望這篇文章能幫助你順利在 Azure 上建立 SQL Database!
如果遇到其他問題,歡迎留言討論 😊

留言

這個網誌中的熱門文章

[C#] 無法載入檔案或組件 或其相依性的其中之一。 找到的組件資訊清單定義與組件參考不符。 (發生例外狀況於 HRESULT: 0x80131040)

[Cloud CICD] 後端篇 - .Net8 WebApi, Github Action, Azure App Service

[Cloud CICD] 前端篇 - Vue3, Github Action, Azure Static Web App