[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(邏輯伺服器)
- 登入 Azure Portal
- 搜尋「SQL servers」(注意是複數)→ 點擊「建立」
- 填寫基本資訊:
| 欄位 | 說明 / 建議值 |
|---|---|
| 訂用帳戶 | 選擇你的 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 驗證:整合企業帳號,更安全但設定複雜,適合企業環境
- 網路設定:
- 連線方法:公用端點(Public endpoint)
- 允許 Azure 服務存取:選「是」(讓 App Service 可以連線)
- 點擊「檢閱 + 建立」→「建立」
建立完成後,會得到伺服器網址:your-server-name.database.windows.net
2建立 Azure SQL Database
- 在剛建立的 SQL Server 頁面,點擊「+ 建立資料庫」
- 或搜尋「SQL databases」→「建立」
- 填寫基本資訊:
| 欄位 | 說明 / 建議值 |
|---|---|
| 訂用帳戶 | 與 SQL Server 相同 |
| 資源群組 | 與 SQL Server 相同 |
| 資料庫名稱 | 例如:MyAppDB 或 NorthwindDB |
| 伺服器 | 選擇剛才建立的 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 以上
- 備份儲存體備援:
- 開發環境:本地備援(最便宜)
- 生產環境:異地備援(較貴但更安全)
- 點擊「檢閱 + 建立」→「建立」
建立需要 2-5 分鐘。
3設定防火牆規則(允許本機連線)
在能用 SSMS 連線之前,必須先將本機 IP 加入防火牆白名單。
方法 1:透過 Azure Portal 設定
- 進入你的 SQL Server(不是 Database)
- 左側選單:Security → Networking
- 在「Firewall rules」區塊,點擊「+ Add your client IPv4 address」
- 會自動偵測你的公開 IP 並新增規則
- 點擊「Save」
方法 2:手動新增防火牆規則
- 先查詢你的公開 IP:前往 https://whatismyipaddress.com/
- 在 Azure Portal 的 Networking 頁面,點擊「+ Add a firewall rule」
- 設定:
- Rule name:MyHomeIP(自訂名稱)
- Start IP:你的公開 IP
- End IP:你的公開 IP(相同)
- 點擊「OK」→「Save」
如果你的 IP 是浮動的(家用網路通常是),每次 IP 變動後都需要重新新增規則,或者可以設定一個 IP 範圍。
4使用 SSMS 連線到 Azure SQL Database
下載安裝 SSMS
如果還沒有 SQL Server Management Studio (SSMS):
- 前往 Microsoft SSMS 下載頁面
- 下載並安裝最新版本(免費)
連線步驟
- 開啟 SSMS
- 在「連接到伺服器」對話框中填寫:
| 欄位 | 內容 |
|---|---|
| 伺服器類型 | Database Engine |
| 伺服器名稱 | your-server-name.database.windows.net |
| 驗證 | SQL Server 驗證 |
| 登入 | 步驟 1 設定的管理員帳號(例如:sqladmin) |
| 密碼 | 步驟 1 設定的密碼 |
- 點擊「選項 >>」→ 切換到「連線屬性」頁籤
- 在「連線到資料庫」欄位,輸入你的資料庫名稱(例如:
NorthwindDB) - 點擊「連接」
在物件總管中可以看到你的資料庫,展開後可以看到資料表、檢視等物件。
❌ 連線失敗常見錯誤
錯誤 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 匯出:
- 在 SSMS 中,對資料庫按右鍵 → 工作 → 匯出資料層應用程式
- 選擇儲存位置,產生 .bacpac 檔案
步驟 2:透過 Azure Portal 匯入
- 進入你的 SQL Server
- 點擊「匯入資料庫」
- 設定:
- 訂用帳戶:你的訂用帳戶
- 儲存體:點擊「選取」,上傳你的 .bacpac 檔案到 Azure Blob Storage
- 定價層:選擇合適的層級
- 資料庫名稱:輸入名稱(例如:Northwind)
- 伺服器管理員登入:你的管理員帳號
- 密碼:你的密碼
- 點擊「確定」,匯入需要幾分鐘
方法 2:使用 SSMS 匯入資料層應用程式
- 在 SSMS 中連線到 Azure SQL Server
- 對「資料庫」節點按右鍵
- 選擇「匯入資料層應用程式」
- 選擇你的 .bacpac 檔案
- 按照精靈完成匯入
方法 3:執行 SQL 指令碼建立資料表
- 在 SSMS 中開啟新查詢視窗
- 執行 CREATE TABLE、INSERT 等 SQL 指令碼
- 適合從零開始建立資料庫結構
- 不支援 .bak 備份檔:只能使用 .bacpac 或 SQL 指令碼
- 部分 T-SQL 語法不支援:例如 USE 語句、跨資料庫查詢等
- 匯入大型資料庫:可能需要較高的定價層,避免超時
6設定後端 App Service 防火牆規則
如果你的 .NET API 部署在 Azure App Service,需要將 App Service 的 Outbound IP 加入資料庫防火牆。
步驟:
- 進入你的 Azure App Service
- 左側選單:Settings → Networking
- 找到「Outbound traffic configuration」
- 複製「Outbound addresses」列出的所有 IP(通常有 4-6 個)
- 回到 SQL Server 的 Networking 頁面
- 將每個 Outbound IP 都加入防火牆規則:
- Rule name:AppService-IP-1, AppService-IP-2...
- Start IP / End IP:貼上 IP
- 點擊「Save」
在 SQL Server 的 Networking 頁面中,可以勾選「Allow Azure services and resources to access this server」,這樣所有 Azure 服務都能連線。但不建議用於生產環境,因為安全性較低。
7設定連線字串
取得連線字串
- 進入你的 SQL Database(不是 Server)
- 左側選單:Settings → Connection strings
- 選擇「ADO.NET」頁籤
- 複製連線字串,看起來像這樣:
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 環境變數
- 進入你的 Azure App Service
- 左側選單:Settings → Environment variables
- 點擊「+ Add」
- 設定:
- Name:
ConnectionStrings__DefaultConnection - Value:貼上完整的連線字串
- Name:
- 點擊「OK」→「Apply」
使用雙底線 __ 來表示 JSON 階層結構。ConnectionStrings:DefaultConnection → ConnectionStrings__DefaultConnection
在 .NET 程式碼中使用
var builder = WebApplication.CreateBuilder(args);
// 讀取連線字串
var connectionString = builder.Configuration
.GetConnectionString("DefaultConnection");
// 註冊 DbContext
builder.Services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(connectionString));
// ... 其他設定
🔧 進階設定與最佳實務
1. 啟用自動備份
Azure SQL Database 預設啟用自動備份,但可以調整設定:
- 進入 SQL Database
- 左側選單:Data management → Backups
- 檢視備份保留原則:
- Basic:保留 7 天
- Standard/Premium:保留 7-35 天(可自訂)
2. 設定查詢效能深入解析
- 進入 SQL Database
- 左側選單:Intelligent Performance → Query Performance Insight
- 可以看到哪些查詢最耗資源,協助優化效能
3. 設定警示
- 進入 SQL Database
- 左側選單:Monitoring → Alerts
- 建立新警示規則:
- 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:無法刪除資料庫
可能原因:
- 還有作用中的連線
- 資料庫正在進行備份或還原
解決方法:
- 中斷所有連線後再刪除
- 等待備份/還原作業完成
💰 成本優化建議
💡 省錢技巧
- 使用 Serverless 層級:閒置時自動暫停,只在使用時計費
- 選擇本地備援:開發環境不需要異地備援,可節省 50% 備份成本
- 定期清理測試資料庫:不用的資料庫記得刪除
- 使用保留執行個體:生產環境如果確定長期使用,可購買 1-3 年保留方案,省下 30-50%
- 監控 DTU 使用率:如果長期低於 20%,考慮降級
- 設定預算警示:避免超支
📚 重點整理
- 先建立 SQL Server,再建立 Database:兩者是不同的資源
- 防火牆設定:需要同時設定本機 IP(SSMS 連線)和 App Service IP(後端連線)
- 驗證方式:選擇 SQL 驗證(帳號密碼),新手較容易上手
- 免費層限制:Basic 最大 2 GB,適合開發測試,生產環境建議 Standard 以上
- 連線字串:使用環境變數存放,不要寫死在程式碼中
- 備份:Azure 自動備份,但 Basic 只保留 7 天
- 成本優化:開發環境建議使用 Serverless 層級
🔗 相關資源
希望這篇文章能幫助你順利在 Azure 上建立 SQL Database!
如果遇到其他問題,歡迎留言討論 😊
留言
張貼留言