就地升級資料庫主要版本

本頁說明如何升級 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_2022_STANDARD"
      name: "SQLSERVER_2022_STANDARD"
      display_name: "SQL Server 2022 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_2022_STANDARD"
      name: "SQLSERVER_2022_STANDARD"
      display_name: "SQL Server 2022 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 執行個體

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

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

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. 開始直接升級。

    使用 PATCH 要求和 instances: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. 取得升級作業名稱。

    使用 GET 要求和 operations.list 方法,並將 PROJECT_ID 替換為專案 ID。

    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 Cloud的 Terraform 供應商,版本為 4.34.0 以上

resource "google_sql_database_instance" "instance" {
  name             = "sqlserver-instance"
  region           = "us-central1"
  database_version = "SQLSERVER_2019_STANDARD"
  root_password    = "INSERT-PASSWORD-HERE"
  settings {
    tier = "db-custom-2-7680"
  }
  # set `deletion_protection` to true, will ensure that one cannot accidentally delete this instance by
  # use of Terraform whereas `deletion_protection_enabled` flag protects this instance at the GCP level.
  deletion_protection = false
}

套用變更

如要在 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 控制台中,前往 UI 中的資源,確認 Terraform 已建立或更新這些資源。

刪除變更

如要刪除變更,請按照下列步驟操作:

  1. 如要停用防刪除功能,請在 Terraform 設定檔中將 deletion_protection 引數設為 false
    deletion_protection =  "false"
  2. 執行下列指令,並在提示中輸入 yes,套用更新的 Terraform 設定:
    terraform apply
  1. 執行下列指令,並在提示中輸入 yes,移除先前透過 Terraform 設定套用的資源:

    terraform destroy

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

自動升級備份

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

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

查看備份清單時,升級備份會列出類型 On-demand。升級備份會加上標籤,方便您快速識別。 舉例來說,如果您要從 SQL Server Enterprise 2017 升級至 SQL Server Enterprise 2019 或 SQL Server Enterprise 2022,升級前的備份會標示為 Pre-upgrade backup, SQLSERVER_2017_ENTERPRISE to SQLSERVER_2019_ENTERPRISE or SQLSERVER_2022_ENTERPRISE.,升級後的備份則會標示為 Post-upgrade backup, SQLSERVER_2019_ENTERPRISE or SQLSERVER_2022_ENTERPRISE from SQLSERVER_2017_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 2022 的預設相容性層級為 160。請參閱這份表格,瞭解新版 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. 解決回歸查詢。

    在大多數情況下,升級相容性層級後,查詢最佳化工具的變更會提升效能。不過,某些查詢的效能有時可能會下降。查詢存放區的「回歸查詢」功能可協助您找出回歸的查詢,並強制執行最後已知的良好查詢計畫。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 執行個體

  2. 如要開啟執行個體的「總覽」頁面,請按一下執行個體名稱。
  3. 在執行個體「總覽」頁面的「作業和記錄」窗格中,按一下「查看 SQL Server 錯誤記錄」連結。

    「Logs Explorer」(記錄檔探索工具) 頁面隨即開啟。

  4. 查看記錄的方式如下:

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

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

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

    專案 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. 連結應用程式。

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

限制

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

常見問題

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

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

升級單一執行個體通常不到 10 分鐘。 如果執行個體設定的 vCPU 或記憶體數量較少,升級作業可能需要較長時間。

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

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

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

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

後續步驟