備份資料庫

新增範例資料庫

前言

在這個單元中,我們將一步一步地帶領你完成一個非常基礎但極為重要的任務:成功建立一個名為 demodb 的範例資料庫。

操作步驟:新增 demodb 資料庫

這是建立資料庫的核心操作。在你的資料庫管理工具中新增資料庫時,請在對應欄位輸入以下兩項關鍵資訊:

  1. 資料庫名稱:  demodb
  2. 資料庫路徑:  d:\db\sql2025

當你輸入完畢並執行新增後,系統會在指定的路徑下建立兩個非常重要的檔案。

操作步驟


核心觀念:認識資料庫實體檔案

我們在管理工具中看到的邏輯資料庫(例如 demodb),其背後是由硬碟上具體的實體檔案所構成的。對於一個基本的資料庫來說,最核心的就是以下這兩個檔案:

檔案名稱用途說明
demodb.mdf主資料庫檔案 (Primary Data File),這是存放所有資料(如資料表中的客戶資料)與資料庫物件(如索引、預存程序)的核心檔案。
demodb_log.ldf交易記錄檔案 (Transaction Log File),用來記錄所有資料的變動與交易過程,確保資料的完整性與可恢復性,例如在系統意外當機後,資料庫能藉此回復到出錯前的狀態。

總結說明

恭喜你!你已經成功完成了第一個資料庫的建立,並對資料庫的實體結構有了初步的認識。

讓我們快速回顧本次演練最重要的兩個學習成果:

  • 成功建立了名為 demodb 的資料庫。
  • 理解了資料庫是由 主資料庫檔 (.mdf) 與 交易記錄檔 (.ldf) 這兩種實體檔案所組成的。

交易 (Transaction)

1. 資料庫分類

市面上有許多的資料庫,以下用 交易 及 價格、維護性、資源 等來區分為 小型資料庫 、 中型資料庫 、 大型資料庫 等。

2. 交易的機制

3. 用在便利商店購買點數卡並儲值的例子

3.1 前言:生活中的「全有或全無」

  1. 在櫃檯完成付款: 您向店員支付點數卡的金額,店員刷條碼完成結帳,這時您的錢已經付出了。

  2. 在手機或電腦上輸入序號並完成儲值: 您刮開條碼,在遊戲或服務的介面輸入序號,點擊「儲值」,確認點數已成功加進您的帳戶。

    只有當這兩個步驟都順利完成時,這筆「購買並儲值」的交易才算成功。
    如果付款成功但序號無法儲值,或是您忘記儲值,那麼這筆錢就白花了(或者您需要去處理退費);如果沒有付款成功,序號自然也不會被啟用。這種「所有步驟都完成才算成功,否則一切回到原點」的機制,就是為了保護您資金和帳戶資料的一致性。

    這個看似簡單的生活常識,其實就是理解資料庫運作中一個極其關鍵的概念——「交易 (Transaction)」的鑰匙。

3.2 交易的核心精神:不可分割的承諾

延續 「在便利商店購買點數卡並儲值」的例子,我們可以提煉出「交易」最核心的精神,那就是「全有或全無」。任何一個環節出錯,整個過程就必須回到原點,彷彿什麼事都沒發生過一樣。

同時完成了 付錢 及 交貨 才算是完成了交易,如圖片

只要有一方沒完成,都不算是交易完成,因此交易指的是交易過程的百分百完成度,全部過程皆完成才能算交易結束。

既然我們理解了生活中的交易,那麼這個概念在資料庫這個數位世界中,又是如何對應的呢?

3.3 核心主題:從超商儲值到資料庫:概念連連看

這張圖表的目的在於讓初學者透過熟悉的生活場景,理解資料庫如何確保資料的準確性與安全性。其核心邏輯在於「不可分割性」:所有步驟必須像一個整體一樣,要嘛全部成功,要嘛完全不發生。

  1. 交易的開始與準備

    • 超商儲值動作: 結帳完成,準備儲值卡與序號。
      • 這代表你已經與店員達成初步共識,準備進入「變動資料」的階段。
    • 資料庫術語: Begin Transaction
      • 說明: 這是發給資料庫的訊號,告訴系統:「接下來的一連串動作(如扣款、加點、紀錄)必須被視為一個不可分割的整體,請先暫存這些變動。」
  2. 執行具體操作

    • 超商儲值動作: 付款完成、刮開序號、在遊戲中輸入序號與儲值金額。
      • 這些是實際產生影響的動作,但此時點數還沒正式進入你的帳戶「永久保存」。
    • 資料庫術語: INSERT, UPDATE, DELETE
      • 說明: 這是具體的 SQL 指令。例如: UPDATE 玩家餘額、INSERT 一筆交易紀錄。系統會模擬執行這些動作,並檢查是否合法。
  3. 成功提交:錢貨兩訖

    • 超商儲值動作: 序號儲值成功,遊戲幣更新完畢。
      • 這是一切順利的理想狀況,交易圓滿結束。
    • 資料庫術語: Commit Transaction
      • 說明: 當所有指令都正確無誤時,執行此指令。它會告訴資料庫:「確認沒問題,請將所有變動永久寫入磁碟!」一旦執行 Commit,資料就無法再輕易反悔。
  4. 失敗還原:一切回到原點

    • 超商儲值動作: 序號無效或儲值失敗,款項退回、遊戲幣未變動。
      • 如果在輸入序號時斷網,或是序號已被使用,這筆交易就不能只做一半(不能錢付了但沒點數)。
    • 資料庫術語: Rollback Transaction
      • 說明: 只要其中一個環節出錯,系統會自動或手動執行「回滾」。這會撤銷所有已做的暫存操作,讓資料庫狀態退回到 Begin Transaction 之前的樣子,確保不會出現「付了錢卻沒拿到點數」的錯誤狀態。

💡 重點提示(結語)
付款完成 + 儲值成功 = 完整的交易

這就是資料庫中的「原子性(Atomicity)」。任何一環未完成,整個交易皆無效。這種機制確保了數位世界中,資金與帳戶資料永遠保持一致性。

資料庫備份

1. 資料庫備份實戰

這張圖表為「資料庫備份最佳實務指南」,詳細說明了管理大型資料庫時的備份策略、工具應用及工作流程。以下是具體的文字說明:。

  1. 關鍵備份建議:完整備份與差異備份

    • 核心策略: 針對大型資料庫,建議採用「完整備份」搭配「差異備份」的組合。
    • 運作方式:
      • 完整備份: 複製整個資料庫的所有資料。
      • 差異備份: 僅備份自上一次「完整備份」以來有變動的部分。
    • 優點: 這種做法能大幅節省備份所需的時間與儲存空間,同時確保在需要還原時能有效率地恢復資料。
  2. 進階管理工具:預估空間與監控

    • 預估工具: 介紹了使用 sp_spaceused 等系統指令來管理資料庫空間。
    • 功能說明: 在執行備份計畫前,透過工具預估備份檔的大小以及磁碟剩餘的可用空間。
    • 目的: 幫助管理者提前規劃儲存資源,避免因磁碟空間不足導致備份失敗。
  3. 備份策略與工作流優化

    • 離線與線上備份:

      • 離線備份: 安全性高但執行期間使用者無法存取資料。
      • 線上備份: 備份期間資料庫仍可正常運作,對業務影響最小。
      離線備份(Offline Backup)線上備份(Online Backup)
      開啟/關閉服務手動備份/還原資料庫
      卸離/附加資料庫執行備份計劃-自動備份資料庫工作
      將資料庫設為離線/線上狀態執行備份計劃-TSQL 工作

      透過以上的比較,我們可以看到兩種備份方式在執行條件與具體操作上有著根本的不同。

    • 日誌簡化(追蹤旗標 3226): 提到使用特定參數(如 3226)來簡化備份日誌,隱藏成功備份的重複訊息。

    • 目的: 保持日誌環境整潔,讓管理者能更輕鬆地從龐雜的訊息中發現真正的錯誤警示。

  4. 自動化與手動操作流程

    • 流程階段: 備份工作分為「備份準備」、「備份執行」與「日誌優化」三個階段。
    • 執行方式: 支持手動備份/還原,也支持透過 T-SQL 撰寫腳本或設定「自動執行備份計畫」,以達到無人值守的自動化維運。

💡 總結提示:
這份指南強調了「效率」與「預判」的重要性。透過合理的備份組合(完整+差異)減少負擔,並利用管理指令與自動化流程,確保資料在發生意外時能迅速且完整地找回。

2. 執行備份前的三大實用考量

核心分類:離線備份 vs. 線上備份

執行方式的差異

學習重點總結

https://hackmd.io/@johnsonnote/learning_cross_platform/https%3A%2F%2Fhackmd.io%2F%40johnsonnote%2FSQLMG06