就地升級資料庫主要版本

本頁面說明如何就地升級 Cloud SQL 執行個體,而非遷移資料,藉此升級資料庫主要版本。

簡介

資料庫軟體供應商會定期發布新的主要版本,其中包含新功能、效能改善和安全性強化。Cloud SQL 會在新版本發布後採用。Cloud SQL 支援新的主要版本後,您可以升級執行個體,讓資料庫保持最新狀態。

您可以就地升級執行個體的資料庫版本,或遷移資料。就地升級是升級執行個體主要版本的簡便方法。您不必遷移資料或變更應用程式連線字串。就地升級可讓您在升級後,保留目前執行個體的名稱、IP 位址和其他設定。就地升級不需要移動資料檔案,而且可以更快完成。在某些情況下,停機時間會比遷移資料所需的時間短。

SQL Server 適用的 Cloud SQL 就地升級作業會使用 SQL Server 就地升級公用程式。

規劃主要版本升級

  1. 確認您具備執行主要版本升級所需的角色:Cloud SQL 擁有者或 Cloud SQL 管理員。
  2. 選擇目標主要版本。

    gcloud

    如要瞭解如何安裝及開始使用 gcloud CLI,請參閱「安裝 gcloud CLI」。如要瞭解如何啟動 Cloud Shell,請參閱「使用 Cloud Shell」。

    如要查看執行個體可就地升級的資料庫版本,請按照下列步驟操作:

    1. 執行下列指令。
    2. gcloud sql instances describe INSTANCE_NAME
         

      將 INSTANCE_NAME 替換為執行個體名稱。

    3. 在指令輸出內容中,找出標示為 upgradableDatabaseVersions 的部分。
    4. 每個子節都會傳回可升級的資料庫版本。在每個子節中,查看下列欄位。
      • majorVersion:可就地升級的主要版本。
      • name:包含主要版本的資料庫版本字串。
      • displayName:資料庫版本的顯示名稱。

    REST v1

    如要查看哪些目標資料庫版本可用於主要版本就地升級,請使用 Cloud SQL Admin API 的 instances.get 方法。

    使用任何要求資料之前,請先修改下列項目的值:

    • INSTANCE_NAME:執行個體名稱。

    HTTP 方法和網址:

    GET https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME

    請展開以下其中一個選項,以傳送要求:

    您應該會收到如下的 JSON 回覆:

    
    upgradableDatabaseVersions:
    
    {
      major_version: "SQLSERVER_2025_STANDARD"
      name: "SQLSERVER_2025_STANDARD"
      display_name: "SQL Server 2025 Standard"
    }
    
    

    REST v1beta4

    如要查看執行個體的主要版本就地升級有哪些可用的目標資料庫版本,請使用 Cloud SQL Admin API 的 instances.get 方法。

    使用任何要求資料之前,請先修改下列項目的值:

    • INSTANCE_NAME:執行個體名稱。

    HTTP 方法和網址:

    GET https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME

    請展開以下其中一個選項,以傳送要求:

    您應該會收到如下的 JSON 回覆:

    
    upgradableDatabaseVersions:
    
    {
      major_version: "SQLSERVER_2025_STANDARD"
      name: "SQLSERVER_2025_STANDARD"
      display_name: "SQL Server 2025 Standard"
    }
    
    

    如需 Cloud SQL 支援的資料庫版本完整清單,請參閱「資料庫版本和版本政策」。

  3. 請考量各資料庫主要版本提供的功能,並解決不相容問題。

    請參閱 SQL Server 已停用的功能和破壞性變更。

    新的主要版本會導入不相容的變更,您可能需要修改應用程式程式碼、結構定義或資料庫設定。升級資料庫執行個體前,請先查看目標主要版本的版本資訊,判斷必須解決的不相容問題。

  4. 透過模擬測試來測試升級作業。

    在升級正式資料庫之前,請先在測試環境中模擬測試端對端升級程序。您可以複製執行個體,建立完全相同的資料副本,用來測試升級程序。

    除了驗證升級是否成功完成,也請執行測試,確保應用程式在升級後的資料庫中運作正常。

  5. 決定升級時間。

    升級期間,執行個體會暫時無法使用。請安排在資料庫活動較少的時段升級。建議您不要在流量偏高或資料庫執行長時間交易時,升級主要版本。

執行主要版本升級

您可以升級單一 Cloud SQL 執行個體的主要版本,也可以升級主要執行個體的主要版本,並將所有副本納入升級範圍,包括串聯副本和跨區域副本。

升級單一執行個體的主要版本

當您為單一執行個體啟動升級作業時,Cloud SQL 會執行下列操作:

  1. 檢查執行個體的設定,確保執行個體與升級作業相容。
  2. Cloud SQL 驗證設定後,會將執行個體設為無法使用。
  3. 建立升級前備份。
  4. 對執行個體執行升級作業。
  5. 讓執行個體可供使用。
  6. 建立升級後備份。

控制台

  1. 前往 Google Cloud 控制台的「Cloud SQL Instances」(Cloud SQL 執行個體) 頁面。

    前往「Cloud SQL Instances」(Cloud SQL 執行個體) 頁面

  2. 點選執行個體名稱,開啟執行個體的「總覽」頁面。
  3. 按一下 [編輯]。
  4. 在「Instance info」(執行個體資訊) 區段中,按一下「Upgrade」(升級) 按鈕,並確認要前往升級頁面。
  5. 在「Choose a database version」(選擇資料庫版本) 頁面中,按一下「Database version for upgrade」(要升級的資料庫版本) 清單,然後選取其中一個可用的資料庫主要版本。
  6. 按一下「繼續」。
  7. 在「Instance ID」(執行個體 ID) 方塊中輸入執行個體名稱,然後按一下「Start upgrade」(開始升級) 按鈕。
這項作業需要幾分鐘才能完成。

在執行個體的「Overview」(總覽) 頁面中,確認執行個體名稱下方顯示升級後的資料庫主要版本。

gcloud

  1. 開始升級。

    使用 gcloud sql instances patch 指令,並加上 --database-version 旗標。

    執行指令前,請先替換下列項目:

    • INSTANCE_NAME:執行個體的名稱。
    • DATABASE_VERSION:資料庫主要版本的列舉,必須晚於目前版本。請指定資料庫版本,做為執行個體可升級的主要版本。您可以在升級計畫的第一個步驟中取得這個列舉。 如需資料庫版本列舉的完整清單,請參閱 SqlDatabaseEnums。
    gcloud sql instances patch INSTANCE_NAME \
    --database-version=DATABASE_VERSION

    主要版本升級作業需要幾分鐘才能完成。您可能會看到一則訊息,指出作業時間比預期長。您可以忽略這則訊息,或執行 gcloud sql operations wait 指令關閉訊息。

  2. 取得升級作業名稱。

    使用 gcloud sql operations list 指令,並加上 --instance 旗標。

    執行指令前,請先替換下列項目: * INSTANCE_NAME:執行個體的名稱。

    gcloud sql operations list --instance=INSTANCE_NAME
  3. 監控升級狀態。

    使用 gcloud sql operations describe 指令。

    執行指令前,請將 OPERATION 變數替換為上一步驟中擷取的升級作業名稱。

    gcloud sql operations describe OPERATION

REST v1

  1. 開始就地升級。

    請使用 instances:patch 方法傳送 PATCH 要求。

    使用任何要求資料之前,請先替換下列變數:

    • PROJECT_ID:專案 ID。
    • INSTANCE_NAME:執行個體的名稱。

    HTTP 方法和網址:

    PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME

    JSON 要求主體:

    {
      "databaseVersion": DATABASE_VERSION
    }

    將 DATABASE_VERSION 替換為資料庫主要版本的列舉,該版本必須晚於目前版本。請指定資料庫版本,做為執行個體可升級的主要版本。您可以在升級計畫的第一個步驟中取得這個列舉。 如需資料庫版本列舉的完整清單,請參閱 SqlDatabaseVersion。

  2. 取得升級作業名稱。

    請將 PROJECT_ID 替換為專案 ID,然後使用 operations.list 方法傳送 GET 要求。

    HTTP 方法和網址:

    GET https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations
  3. 監控升級狀態。

    請使用 GET 要求和 operations.get 方法,並替換下列變數:

    • PROJECT_ID:專案 ID。
    • OPERATION_NAME:在上一個步驟中擷取的升級作業名稱。

    HTTP 方法和網址:

    GET https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operation/OPERATION_NAME

Terraform

如要使用 Terraform 升級資料庫的主要版本,您必須將 google_sql_database_instance 資源定義中的 database_version 引數設為目標主要版本。您必須使用 Google Cloud 4.34.0 以上版本的 Terraform 供應商。

以下範例說明基本的 google_sql_database_instance 設定。如要升級主要版本,請將 database_version 引數設為相關的主要版本。

resource "google_sql_database_instance" "default" {
  name             = "sqlserver-instance"
  region           = "us-central1"
  database_version = "SQLSERVER_2019_STANDARD"
  root_password    = "INSERT-PASSWORD-HERE"
  settings {
    tier = "db-custom-2-7680"
  }
}

對 Terraform 引數進行下列變更:

  • database_version:將此值設為升級的目標主要版本。
  • deletion_protection:定義根層級 Terraform 防護措施,防止執行個體遭到刪除。
    • true:防止 Terraform 刪除執行個體。任何預計刪除這項資源的 Terraform 作業都會遭到封鎖。
    • false:允許 Terraform 刪除執行個體。

查看 Terraform 計畫

套用任何變更前,請務必執行 terraform plan 並仔細檢查輸出內容。資源名稱旁的符號代表 Terraform 套用變更的方式:

  • ~ 就地更新:這個符號表示 Terraform 會修改現有執行個體。變更 database_version 時,這是就地主要版本升級的預期安全結果。
  • +/- 重新建立 (強制替換):這個符號表示 Terraform 打算刪除目前的執行個體,並建立新的執行個體。
    • 如果將 deletion_protection 設為 true,Terraform 會顯示錯誤訊息,並禁止這項危險的替換作業。您必須在設定中明確設定 deletion_protection = false,並再次執行 terraform apply 來更新狀態,後續的 apply 才會允許刪除及重新建立。
    • 如果 deletion_protection 設為 false,terraform apply 會繼續執行,並遺失資料。

    如果設定變更,或就地修改的升級路徑不受支援,系統可能會排定更換 (刪除並重新建立) 執行個體。如果發現執行個體已排定刪除並重新建立,請立即停止並調查排定替換的原因,再繼續操作。

查看 terraform plan 輸出內容,確認只會針對資料庫版本變更執行就地更新 (~),然後套用設定

如要在 Google Cloud 專案中套用 Terraform 設定,請完成下列各節的步驟。

準備 Cloud Shell

  1. 啟動 Cloud Shell。
  2. 設定要套用 Terraform 設定的預設 Google Cloud 專案。

    每個專案只需執行這個指令一次,而且可以在任何目錄中執行。

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    如果您在 Terraform 設定檔中設定明確的值,環境變數就會遭到覆寫。

準備目錄

每個 Terraform 設定檔都必須有自己的目錄 (也稱為「根模組」)。

  1. 在 Cloud Shell 中建立目錄,並在該目錄中建立新檔案。檔案名稱必須有 .tf 副檔名,例如 main.tf。在本教學課程中,這個檔案稱為 main.tf。
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. 如果您正在進行教學課程,可以複製每個章節或步驟中的程式碼範例。

    將程式碼範例複製到新建立的 main.tf。

    您也可以從 GitHub 複製程式碼。如果 Terraform 程式碼片段是端對端解決方案的一部分,建議您採用這種做法。

  3. 請查看並修改範例參數,以便套用至您的環境。
  4. 儲存變更。
  5. 初始化 Terraform。每個目錄只需執行一次這項操作。
    terraform init

    如要使用最新版 Google 供應商,請視需要加入 -upgrade 選項:

    terraform init -upgrade

套用變更

  1. 查看設定,確認 Terraform 要建立或更新的資源符合預期:
    terraform plan

    視需要修正設定。

  2. 執行下列指令,並在提示中輸入 yes,套用 Terraform 設定:
    terraform apply

    等待 Terraform 顯示「Apply complete!」訊息。

  3. 開啟 Google Cloud 專案即可查看結果。在 Google Cloud 控制台的使用者介面中,前往資源頁面,確認 Terraform 已建立或更新資源。

當您提出就地升級要求時,Cloud SQL 會先執行升級前檢查。如果 Cloud SQL 判定執行個體尚未準備好升級,升級要求就會失敗,並顯示訊息,建議您如何解決問題。另請參閱「排解主要版本升級問題」。

自動升級備份

執行主要版本升級時,Cloud SQL 會自動建立兩個隨選備份,稱為升級備份:

  • 第一個升級備份是「升級前備份」,會在升級開始前立即建立。您可以使用這個備份,將資料庫執行個體還原至先前版本的狀態。
  • 第二個升級備份是「升級後備份」,會在升級後的資料庫執行個體允許新寫入作業後立即建立。

查看備份清單時,升級備份會列為 On-demand 類型。升級備份會加上標籤,方便您快速識別。 舉例來說,如果您從 SQL Server Enterprise 2019 升級至 SQL Server Enterprise 2022 或 SQL Server Enterprise 2025,升級前的備份會標示為 Pre-upgrade backup, SQLSERVER_2019_ENTERPRISE to SQLSERVER_2022_ENTERPRISE or SQLSERVER_2025_ENTERPRISE.,升級後的備份則會標示為 Post-upgrade backup, SQLSERVER_2022_ENTERPRISE or SQLSERVER_2025_ENTERPRISE from SQLSERVER_2019_ENTERPRISE.

與其他隨選備份一樣,升級備份會一直保留,直到您刪除備份或執行個體為止。

升級資料庫相容性層級

資料庫相容性層級會決定資料庫在所服務的應用程式中的行為。資料庫相容性層級設定可確保與舊版 SQL Server 回溯相容,並與 Transact-SQL 和查詢最佳化工具變更有關。升級 SQL Server 執行個體資料庫版本時,現有資料庫的相容性層級會保留,讓應用程式能繼續在較新版本的 SQL Server 上運作。升級相容性層級,即可享有新功能、查詢處理改善項目和其他變更。

升級執行個體的資料庫引擎版本後,當資料庫服務的應用程式準備就緒時,請升級執行個體中每個資料庫的資料庫相容性層級。如果將相容性等級設為最新,資料庫就會升級,並提供最新功能和更佳效能。

如要升級資料庫相容性層級,請按照下列步驟操作:

  1. 找出資料庫目前的相容性層級。

    舉例來說,SQL Server 2017 的預設相容性層級為 140。如要查看資料庫目前的相容性層級,請在 Transact-SQL 中執行下列指令,並將 DATABASE_NAME 替換為資料庫名稱:

    替換為 SQL Server 執行個體上的資料庫名稱。

    USE DATABASE_NAME
    GO
    SELECT compatibility_level
    FROM sys.databases WHERE name = 'DATABASE_NAME'
  2. 判斷目標相容性等級。

    找出升級後資料庫版本的預設相容性層級指定,以判斷資料庫的目標相容性層級。舉例來說,SQL Server 2025 的預設相容性等級為 170。請參閱表格,瞭解新版 SQL Server 與相容性層級的對應關係。

  3. 評估目前和目標相容性層級之間的差異。

    升級相容性等級前,請先研究目前相容性等級與目標相容性等級之間的系統行為差異。請參閱相容性等級差異的完整清單。

  4. 收集工作負載資料的基準。

    升級相容性等級前,請先使用 SQL Server 查詢存放區收集工作負載資料的基準,以便日後找出並解決效能退步的查詢。您可以使用查詢存放區擷取一般業務週期的查詢和計畫,建立效能基準。如需引導式工作流程,請使用 SQL Server Management Studio 中的查詢調整助理功能。

  5. 升級相容性層級。

    如要變更資料庫的相容性層級,請在 Transact-SQL 中執行下列指令,並將 DATABASE_NAME

    ,並將 TARGET_COMPATIBILITY_LEVEL 替換為目標相容性層級。

    ALTER DATABASE DATABASE_NAME
    SET COMPATIBILITY_LEVEL = TARGET_COMPATIBILITY_LEVEL;
    GO
  6. 收集升級後的工作負載資料。

    使用查詢存放區收集升級後的工作負載資料,以便進行比較及偵測迴歸。

  7. 解決退步查詢。

    在大多數情況下,升級相容性層級後,查詢最佳化工具的變更會提升效能。不過,不時會有特定查詢的效能可能會退步。Query Store 的迴歸查詢功能可協助您找出迴歸查詢,並強制執行最後一個已知良好的查詢計畫。SQL Server 也提供自動計畫修正功能,可在查詢迴歸時自動切換至最後一個已知良好的計畫。

完成主要版本升級

升級主要執行個體後,請執行驗收測試,確保升級後的系統運作正常。

排解主要版本升級問題

如果您嘗試執行無效的升級指令,例如執行個體包含新版本不適用的資料庫旗標,Cloud SQL 就會傳回錯誤訊息。

如果升級要求失敗,請檢查升級要求的語法。如果要求結構有效,請嘗試查看下列建議。

查看錯誤記錄

如果有效的升級要求發生任何問題,Cloud SQL 會將錯誤記錄發布至 projects/PROJECT_ID/logs/cloudsql.googleapis.com%2Fsqlserver.err。每個記錄項目都包含一個標籤,其中含有執行個體 ID,可協助您找出發生升級錯誤的執行個體。請找出這類升級錯誤並加以解決。

如要查看錯誤記錄,請使用 Google Cloud控制台:

  1. 前往 Google Cloud 控制台的「Cloud SQL Instances」(Cloud SQL 執行個體) 頁面。

    前往「Cloud SQL Instances」(Cloud SQL 執行個體) 頁面

  2. 點選執行個體名稱,開啟執行個體的「總覽」頁面。
  3. 在執行個體「Overview」(總覽) 頁面的「Operations and logs」(作業和記錄) 窗格中,按一下「View SQL Server 伺服器錯誤記錄」 連結。

    「Logs Explorer」頁面隨即開啟。

  4. 查看記錄檔,步驟如下:

    • 如要列出專案中的所有錯誤記錄,請在「Log name」(記錄檔名稱) 記錄檔篩選器中選取記錄檔名稱。

    如要進一步瞭解查詢篩選器,請參閱「進階查詢」。

    • 如要篩選單一執行個體的升級錯誤記錄,請在「Search all fields」(搜尋所有欄位) 方塊中輸入下列查詢,並將 DATABASE_ID

    格式如下:project_id:instance_name。

    resource.type="cloudsql_database"
    resource.labels.database_id="DATABASE_ID"
    logName : "projects/PROJECT_ID/logs/cloudsql.googleapis.com%2Fsqlserver.err"

    舉例來說,如要依據在 buylots 專案中執行的 shopping-db 執行個體篩選升級錯誤記錄,請使用下列查詢篩選器:

     resource.type="cloudsql_database"
     resource.labels.database_id="buylots:shopping-db"
     logName : "projects/buylots/logs/cloudsql.googleapis.com%2Fsqlserver.err"

    您可以查看指定時間範圍內回報的所有記錄,也可以依嚴重性篩選記錄。排解問題時,常見的做法是選取下列篩選條件:

    • 緊急
    • 快訊
    • 重大
    • 錯誤

將主要執行個體還原至先前的主要版本

如果升級後的資料庫系統效能不如預期,您可能需要將主要執行個體還原至先前的版本。方法是將升級前的備份還原至 Cloud SQL 復原執行個體,也就是執行升級前版本的新執行個體。

如要將主要執行個體還原至先前的版本,請按照下列步驟操作:

  1. 找出升級前的備份。

    請參閱「自動升級備份」。

  2. 建立復原執行個體。

    使用 Cloud SQL 在建立升級前備份時執行的主要版本,建立新的 Cloud SQL 執行個體。設定與原始執行個體相同的旗標和執行個體設定。

  3. 還原升級前的備份。

    將升級前的備份還原至復原執行個體。這項作業可能需要幾分鐘才能完成。

  4. 新增唯讀副本。

    如果使用唯讀副本,請個別新增。

  5. 連結應用程式。

    復原資料庫系統後,請更新應用程式,加入復原執行個體及其唯讀副本的詳細資料。您可以繼續在升級前的資料庫版本上提供流量。

限制

本節列出就地升級主要版本的限制。

  • 您無法對外部副本執行就地主要版本升級。
  • 升級至 SQL Server 2025 期間,如果執行個體的 RAM 為 4 GB 以下,可能會變慢或沒有回應,導致作業失敗。為避免這個問題,請先確認執行個體至少有 8 GB 的 RAM,再進行升級。升級完成後,即可縮減執行個體。

常見問題

升級資料庫主要版本時,可能會遇到下列問題。

升級期間是否無法使用執行個體?
可以。Cloud SQL 執行升級作業期間,執行個體會暫時無法使用。
升級需要多久時間?

升級單一執行個體通常會在 10 分鐘內完成。 如果執行個體設定的 vCPU 或記憶體數量較少,升級可能需要較多時間。

如果執行個體託管過多資料庫或資料表,或是資料庫非常龐大,升級作業可能需要數小時,甚至逾時,因為總升級時間與資料庫中的物件數量相對應。如果您有多個執行個體需要升級,升級時間會按比例增加。

我可以監控升級程序的每個步驟嗎?
雖然 Cloud SQL 可讓您監控升級作業是否仍在進行中,但您無法追蹤各項升級作業的個別步驟。
升級後可以取消嗎?
不行,升級作業一旦開始就無法取消。如果升級失敗,Cloud SQL 會自動將執行個體復原至先前的版本。
升級期間,我的設定會受到什麼影響?

執行就地主要版本升級時,Cloud SQL 會保留資料庫設定,包括執行個體名稱、IP 位址、明確設定的旗標值和使用者資料。不過,系統變數的預設值可能會變更。

詳情請參閱「設定資料庫旗標」。如果目標版本不再支援特定旗標或值,Cloud SQL 會在升級期間自動移除該旗標。

後續步驟