本教學課程說明如何透過兩種方式,複製在 Compute Engine 上執行的 Microsoft SQL Server 資料庫。其中一種方法是使用永久磁碟快照。另一種方法是使用原生 SQL Server 備份和還原功能,並透過 Cloud Storage 傳輸備份。Cloud Storage 是 Google Cloud的物件儲存服務。這項服務提供簡單、安全、耐用且高可用性的檔案儲存方式。
複製是將線上資料庫複製到其他伺服器的程序。副本與現有資料庫無關,且會保留為時間點快照。您可以將複製的資料庫用於各種用途,不必對實際工作環境伺服器造成負擔,也不會影響實際工作環境資料的完整性。包括:
- 執行分析查詢
- 對應用程式執行負載測試或整合測試
- 擷取資料以填入資料倉儲
- 對資料執行實驗
本教學課程介紹的每種複製方法各有優缺點。最適合你的方法取決於你的情況。下表重點列出一些主要問題。
問題 | 方法 1:磁碟快照 | 方法 2:使用 Cloud Storage 備份及還原 |
---|---|---|
SQL Server 執行個體需要額外的磁碟空間 | 不需要額外磁碟空間 | 建立及還原備份檔案時所需的額外空間 |
複製期間,來源 SQL Server 執行個體會增加負載 | 無額外負載 | 建立及上傳備份檔案時,CPU 和 I/O 的額外負載 |
複製時間 | 處理大型資料庫的速度相對較快 | 處理大型資料庫時速度較��� |
可���Google Cloud外部的 SQL Server 執行個體複製 | 否 | 是 |
複雜度 | 用於連結複製磁碟的複雜指令序列 | 相對簡單的複製指令集 |
可運用現有的備份系統 | 可以,前提是備份系統使用 Google Cloud 磁碟快照 | 可以,前提是備份系統會將原生 SQL Server 備份檔案寫入 Cloud Storage |
複製精細程度 | 只能複製整個磁碟 | 只能複製指定的資料庫 |
資料一致性 | 快照時間點的一致性 | 備份時保持一致 |
本教學課程假設您熟悉 Microsoft Windows 系統管理、PowerShell,以及使用 Microsoft SQL Server Management Studio 管理 Microsoft SQL Server。
目標
- 瞭解如何在 Google Cloud上執行 SQL Server 執行個體。
- 瞭解如何在次要磁碟上建立示範資料庫。
- 瞭解如何使用 Compute Engine 磁碟快照複製 SQL Server 資料庫。
- 瞭解如何使用 Cloud Storage 轉移備份,藉此複製 SQL Server 資料庫。
費用
在本文件中,您會使用 Google Cloud的下列計費元件:
- Compute Engine
- Cloud Storage
- Microsoft Windows and SQL server licenses
如要根據預測用量估算費用,請使用 Pricing Calculator。
完成本文所述工作後,您可以刪除已建立的資源,避免繼續計費。詳情請參閱清除所用資源一節。
事前準備
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project.
- 啟用 Compute Engine API。 啟用 API
- 使用 Google Chrome 瀏覽器。
- 安裝您選擇的遠端桌面通訊協定 (RDP) 用戶端。詳情請參閱「Microsoft 遠端桌面用戶端」。如果您已安裝遠端桌面協定用戶端,則可略過這項工作。
請確認符合下列額外先決條件:
設定環境
如要完成本教學課程,您需要使用下列項目設定運算環境:
- Compute Engine 上的 SQL Server 執行個體 (命名為
sql-server-prod
),代表您的正式版資料庫伺服器。 - 附加至實際工作環境伺服器的額外磁碟 (名為
sql-server-prod-data
),用於儲存實際工作環境資料庫。 - Wide World Importers SQL Server 範例資料庫副本,用於模擬要複製的正式版資料庫。
- Compute Engine 上的 SQL Server 執行個體,名為
sql-server-test
,代表您的測試資料庫伺服器。您會將資料庫複製到這個伺服器。
下圖說明這個架構。
建立正式環境 VM 執行個體
如要模擬實際工作環境,請設定在 Windows Server 上執行 SQL Server 的 Compute Engine VM 執行個體。
本教學課程的 VM 執行個體使用兩個磁碟:一個 50 GB 的磁碟用於作業系統和使用者帳戶,另一個 100 GB 的磁碟用於資料庫儲存空間。
在 Compute Engine 中,使用個別磁碟不會帶來任何效能優勢。磁碟效能取決於附加至執行個體的所有磁碟總儲存空間容量,以及 VM 執行個體的 vCPU 總數。因此資料庫和記錄檔可以位於同一個磁碟。
主控台
前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面。
點選「建立」。
在「Name」(名稱) 欄位中輸入
sql-server-prod
。在「地區」部分,請選擇「us-east1」。
在「Zone」(區域) 中選取「us-east1-b」。
在「Machine configuration」(機器設定) 下方,將「Machine type」(機器類型) 變更為 n1-standard-2 (2 個 vCPU)。
在「開機磁碟」說明旁邊,按一下「變更」。
在「Boot disk」(開機磁碟) 面板中,按一下「Public images」(公開映像檔) 分頁標籤。
在「Operating System」(作業系統) 下拉式清單中,選取「SQL Server on Windows Server」(Windows Server 上的 SQL Server)。
在「版本」下拉式選單中,選取「SQL Server 2022 Standard on Windows Server 2022 Datacenter」。
確認已設定下列值:
- 「開機磁碟類型」設為「標準永久磁碟」。
- 「Size (GB)」(大小 (GB)) 設為 50。
按一下 [選取]。
在「Identity and API access」(身分及 API 存取權) 下方,將「Access scopes」(存取權範圍) 設為「Allow full access to all Cloud APIs」(允許所有 Cloud API 的完整存取權)。
按一下 [Management, security, disks, networking, sole tenancy] (管理、安全性、磁碟、網路、單獨租用)。
按一下 [Disks] (磁碟) 分頁標籤。
按一下「新增磁碟」圖示 add。
在「Name」(名稱) 欄位中輸入
sql-server-prod-data
。在「Size (GB)」(大小 (GB)) 欄位中輸入
100
。按一下 [完成]。
點選「建立」。
Cloud Shell
開啟 Cloud Shell。
初始化下列變數:
VPC_NAME=
VPC_NAME
SUBNET_NAME=SUBNET_NAME
其中:
VPC_NAME
:虛擬私有雲名稱SUBNET_NAME
:子網路名稱
設定預設的專案 ID:
gcloud config set project
PROJECT_ID
將
PROJECT_ID
替換為專案 ID。 Google Cloud設定預設區域:
gcloud config set compute/region
REGION
將
REGION
替換為要部署的區域 ID。設定預設區域:
gcloud config set compute/zone
ZONE
將
ZONE
替換為要部署的區域 ID。使用 Windows Server 2022 Datacenter 上的 SQL Server 2022 Standard 應用程式映像檔,建立 Compute Engine 執行個體:
REGION=$(gcloud config get-value compute/region) ZONE=$(gcloud config get-value compute/zone) gcloud compute instances create sql-server-prod \ --machine-type=n1-standard-2 \ --scopes=cloud-platform \ --image-family=sql-std-2022-win-2022 \ --image-project=windows-sql-cloud \ --boot-disk-size=50GB \ --boot-disk-device-name=sql-server-prod \ --create-disk="mode=rw,size=100,type=pd-standard,name=sql-server-prod-data,device-name=sql-server-prod-data" \ --subnet=$SUBNET_NAME
這個指令會授予執行個體 Google Cloud API 的完整存取權、建立 100 GB 的次要磁碟,並將磁碟附加至執行個體。忽略磁碟效能警告,因為本教學課程不需要高效能。
連線至 VM 執行個體
前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面。
等待約 5 分鐘,讓 VM 執行個體準備就緒。
如要監控 VM 的初始化程序,請在 Cloud Shell 中查看 VM 的序列埠輸出內容:
gcloud compute instances tail-serial-port-output sql-server-prod
看到下列訊息時,表示初始化完成。
Instance setup finished. sql-server-prod is ready to use.
按下 Control+C 即可停止監控序列埠。
按一下執行個體名稱
sql-server-prod
,開啟「VM instance details」(VM 執行個體詳細資料) 頁面。在「遠端存取」下方,按一下「設定 Windows 密碼」,然後按一下「設定」,在遠端電腦上建立帳戶。
系統會為您產生密碼。記下密碼或複製到安全的暫時性檔案。
在 Google Cloud 控制台的「Compute Engine」部分,按一下「RDP」下拉式選單,然後選取「Download the RDP file」選項,下載執行個體的 RDP 檔案。
使用此檔案即可利用遠端桌面通訊協定用戶端連線至執行個體。詳情請參閱 Microsoft 遠端桌面用戶端。
系統提示時,請輸入剛才產生的密碼,然後按一下「確定」。
如要接受伺服器憑證並登入遠端 Windows 執行個體,請按一下「繼續」。
當系統詢問您是否要讓網路上的其他電腦和裝置偵測到您的電腦時,請按一下「否」。
設定其他磁碟
連結至實際工作環境執行個體的第二個磁碟,是用來儲存實際工作環境資料庫。這個磁碟是空白的,因此您需要進行分割、格式化和掛接。
- 在連線至
sql-server-prod
執行個體的遠端桌面協定工作階段中,按一下 Windows 工作列上的「開始」按鈕,輸入diskpart
,然後按一下「diskpart」開啟 DiskPart。 - 系統提示是否允許應用程式變更時,請按一下「是」。
顯示附加至執行個體的磁碟清單:
list disk
輸出內容如下:
Disk ### Status Size Free Dyn Gpt -------- ------------- ------- ------- --- --- Disk 0 Online 50 GB 0 B Disk 1 Online 100 GB 100 GB
磁碟 1 (100 GB) 是資料磁碟。
選取資料磁碟:
select disk 1
初始化磁碟:
clean
建立 GUID 分區表:
convert gpt
使用整個磁碟建立資料分割區:
create partition primary
列出可用的卷:
list volume
輸出內容如下:
Volume ### Ltr Label Fs Type Size Status Info ---------- --- ----------- ----- ---------- ------- --------- -------- Volume 0 C NTFS Partition 49 GB Healthy Boot Volume 1 FAT32 Partition 100 MB Healthy System Volume 2 RAW Partition 99 GB Healthy
磁碟區 2 (99 GB) 是您的資料磁碟。
選取音量:
select volume 2
以 NTFS 檔案系統格式化分區,並標示為
data
:format quick fs=ntfs label=data
將磁碟掛接為 D 磁碟機:
assign letter=d
結束 DiskPart:
exit
下載範例資料庫
如要為這項複製練習設定環境,請執行下列操作:
- 在 D 磁碟 (
data
) 上建立目錄結構,用來儲存資料庫。 - 下載「Wide World Importers SQL Server 範例資料庫」完整備份檔案。這個資料庫會模擬您要複製的實際工作環境資料庫。
如要建立目錄並下載備份檔案,請按照下列步驟操作:
在遠端桌面協定工作階段中,按一下 Windows 工作列上的「開始」按鈕,輸入
PowerShell
,然後選取 Windows PowerShell 應用程式。在 PowerShell 提示中,建立資料庫儲存空間的目錄結構:
mkdir D:\sql-server-data\wideworldimporters
將備份檔案下載到 D 磁碟機:
bitsadmin /transfer sampledb /dynamic /download /priority FOREGROUND ` https://github.com/Microsoft/sql-server-samples/releases/download/wide-world-importers-v1.0/WideWorldImporters-Full.bak ` D:\sql-server-data\WideWorldImporters-Full.bak
還原範例資料庫
您需要將範例資料庫還原至 D 磁碟機 (data
),方法是透過 Microsoft SQL Server Management Studio (SSMS) 精靈以互動方式還原,或是直接執行 Transact-SQL 指令。
SSMS 精靈
- 在遠端桌面協定工作階段中,按一下 Windows 工作列上的「開始」按鈕,輸入
ssms
,然後選取「Microsoft SQL Server Management Studio (以系統管理員身分執行)」。 - 應用程式啟動後,請按一下「Connect」(連線),使用 Windows 驗證連線至
sql-server-prod
資料庫引擎。 - 在物件總管中,以滑鼠右鍵按一下「資料庫」,然後選取「還原資料庫」。
- 在「來源」下方選取「裝置」,然後按一下裝置名稱旁邊的「[...]」按鈕。
- 在「選取備份裝置」對話方塊中,確認已為「備份媒體類型」選取「檔案」,然後按一下「新增」。
- 在檔案選取器中瀏覽至
D:\sql-server-data
,按一下WideWorldImporters-Full.bak
檔案,然後按一下「確定」。 按一下「確定」關閉「選取備份裝置」對話方塊。
「Restore Database」(還原資料庫) 對話方塊現在會填入 Wide World Importers 資料庫備份的相關資料。
在「選取頁面」下方,按一下「檔案」。
勾選「將所有檔案重新放置到資料夾」核取方塊。
在「資料檔案資料夾」和「記錄檔資料夾」欄位中,輸入
D:\sql-server-data\wideworldimporters
。按一下「確定」即可開始還原作業。
幾分鐘後,您會收到資料庫已還原的通知。
Transact-SQL
- 在遠端桌面協定工作階段中,按一下 Windows 工作列上的「開始」按鈕,輸入
ssms
,然後選取「Microsoft SQL Server Management Studio (以系統管理員身分執行)」。 - 應用程式啟動後,請按一下「Connect」(連線),使用 Windows 驗證連線至
sql-server-prod
資料庫引擎。 - 依序選取「檔案」>「新增」>「使用目前連線查詢」,開啟新的查詢視窗。
從下載的備份檔啟動還原程序:
USE [master] GO RESTORE DATABASE [WideWorldImporters] FROM DISK = N'D:\SQL-SERVER-DATA\WideWorldImporters-Full.bak' WITH FILE = 1, MOVE N'WWI_Primary' TO N'D:\SQL-SERVER-DATA\WideWorldImporters\WideWorldImporters.mdf', MOVE N'WWI_UserData' TO N'D:\SQL-SERVER-DATA\WideWorldImporters\WideWorldImporters_UserData.ndf', MOVE N'WWI_Log' TO N'D:\SQL-SERVER-DATA\WideWorldImporters\WideWorldImporters.ldf', MOVE N'WWI_InMemory_Data_1' TO N'D:\SQL-SERVER-DATA\WideWorldImporters\WideWorldImporters_InMemory_Data_1', NOUNLOAD, STATS = 5 GO
這項指令會將資料庫和記錄檔還原至
D:\sql-server-data\wideworldimporters
目錄。在查詢程式碼上按一下滑鼠右鍵,然後點選「執行」。
資料庫還原作業需要幾分鐘才能完成。您可以按一下「物件總管」中的「重新整理」refresh,查看資料庫是否列在「資料庫」樹狀結構中。資料庫還原完成後,即可關閉查詢視窗,不必儲存。
如要驗證範例資料庫是否正常運作,可以執行查詢。
在 Microsoft SQL Server Management Studio 中,依序選取「File」 >「New」 >「Query with Current Connection」,開啟新的查詢視窗,然後複製下列程式碼:
SELECT top(100) i.InvoiceDate, i.InvoiceID, i.CustomerID, c.CustomerName, i.ConfirmedDeliveryTime, i.ConfirmedReceivedBy FROM WideWorldImporters.Sales.Invoices i JOIN WideWorldImporters.Sales.Customers c ON i.CustomerID=c.CustomerID WHERE i.ConfirmedDeliveryTime IS NOT NULL ORDER BY i.InvoiceDate desc;
這項查詢會從最近 100 份已送達的月結單中擷取摘要資訊。
在查詢視窗上按一下滑鼠右鍵,然後點選「Execute」(執行)。
「結果」窗格會顯示摘要資訊。
建立測試 VM 執行個體
在本節中,您將建立名為 sql-server-test
的 SQL Server 執行個體,做為複製資料庫的目的地。這個執行個體的設定與正式版執行個體相同。不過,您不會建立第二個資料磁碟,而是會在稍後的教學課程中附加資料磁碟。
主控台
前往「VM instances」(VM 執行個體) 頁面。
點選「建立」。
在「Name」(名稱) 欄位中輸入
sql-server-test
。在「地區」部分,請選擇「us-east1」。
在「Zone」(區域) 中選取「us-east1-b」。
在「機器設定」下方,將「機器類型」變更為 n1-standard-2 (2 個 vCPU)。
在「開機磁碟」圖片旁邊,按一下「變更」。
在「Boot disk」(開機磁碟) 面板中,按一下「Public images」(公開映像檔) 分頁標籤。
在「Operating System」(作業系統) 下拉式清單中,選取「SQL Server on Windows Server」(Windows Server 上的 SQL Server)。
在「版本」下拉式選單中,選取「SQL Server 2022 Standard on Windows Server 2022 Datacenter」。
確認已設定下列值:
- 「開機磁碟類型」設為「標準永久磁碟」。
- 「Size (GB)」(大小 (GB)) 設為 50。
按一下 [選取]。
在「Identity and API access」(身分及 API 存取權) 下,將「Access scopes」(存取權範圍) 設為「Allow full access to all Cloud APIs」(允許所有 Cloud API 的完整存取權)。
點選「建立」。
Cloud Shell
開啟 Cloud Shell。
建立測試用 SQL Server 執行個體:
gcloud compute instances create sql-server-test \ --machine-type=n1-standard-2 \ --scopes=cloud-platform \ --image-family=sql-std-2022-win-2022 \ --image-project=windows-sql-cloud \ --boot-disk-size=50GB \ --boot-disk-device-name=sql-server-test \ --subnet=$SUBNET_NAME
您可以忽略磁碟效能警告,因為本教學課程不需要高效能。
連線至 VM 執行個體
前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面。
等待約 5 分鐘,讓 VM 執行個體準備就緒。
如要監控 VM 的初始化程序,請在 Cloud Shell 中查看 VM 的序列埠輸出內容:
gcloud compute instances tail-serial-port-output sql-server-prod
看到下列訊息時,表示初始化完成。
Instance setup finished. sql-server-test is ready to use.
按下 Control+C 即可停止監控序列埠。
按一下執行個體名稱
sql-server-test
,顯示「VM instance details」(VM 執行個體詳細資料) 頁面。在「遠端存取」下方,按一下「設定 Windows 密碼」,然後按一下「設定」,在遠端電腦上建立帳戶。
系統會為您產生密碼。記下密碼,或複製到安全的暫存檔案。
在 Google Cloud 控制台的「Compute Engine」部分,按一下「RDP」下拉式選單,然後選取「Download the RDP file」選項,下載執行個體的 RDP 檔案。
使用此檔案即可利用遠端桌面通訊協定用戶端連線至執行個體。詳情請參閱 Microsoft 遠端桌面用戶端。
系統提示時,請輸入剛才產生的密碼,然後按一下「確定」。
如要接受伺服器憑證並登入遠端 Windows 執行個體,請按一下「繼續」。
當系統詢問您是否要讓電腦可供探索時,請按一下「否」。
使用 Compute Engine 磁碟快照複製資料庫
如要在 Compute Engine 上複製 SQL Server 資料庫,其中一種方法是將資料庫儲存在獨立的資料磁碟上,並使用永久磁碟快照建立該磁碟的副本。
永久磁碟快照可讓您取得磁碟資料的時間點副本。排定磁碟快照時間,是自動備份資料的方法之一。
在本教學課程的這個部分,您將執行以下操作:
- 為生產伺服器的資料磁碟建立快照。
- 使用快照建立新磁碟。
- 將新磁碟掛接到測試伺服器。
- 將這個磁碟上的資料庫附加至測試執行個體上的 SQL Server。
下圖顯示如何使用磁碟快照複製資料庫。
建立磁碟快照
主控台
前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面。
按一下
sql-server-prod
執行個體的名稱。在「VM instance details」(VM 執行個體詳細資料) 頁面上,按一下磁碟圖示
sql-server-prod-data
。按一下「建立快照」。
並將快照命名為
sql-server-prod-data-snapshot
。在「位置」部分,選取「區域」。
確認區域已設為
us-east1
(與 VM 執行個體相同)。選取「Enable VSS」(啟用 VSS) 選項。
這個選項會使用 Microsoft Windows 中的磁碟區陰影複製服務,建立一致的快照。
點選「建立」。
幾分鐘後,快照就會建立完成。
Cloud Shell
開啟 Cloud Shell。
在與 VM 執行個體相同的區域中,建立資料磁碟的快照:
gcloud compute disks snapshot sql-server-prod-data \ --snapshot-names=sql-server-prod-data-snapshot \ --guest-flush \ --zone="${ZONE}"
--guest-flush
選項會使用 Microsoft Windows 中的磁碟區陰影複製服務建立一致的快照。幾分鐘後,快照就會建立完成。
將磁碟快照附加至測試執行個體
您需要從建立的快照建立新的資料磁碟,然後將其附加至 sql-server-test
執行個體。
主控台
在後續步驟中,您將建立新的永久磁碟,並使用生產環境磁碟的快照做為內容,然後將磁碟附加至測試執行個體。
前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面。
按一下執行個體名稱
sql-server-test
。在「VM instance details」(VM 執行個體詳細資料) 頁面上,按一下 [Edit] (編輯)。
按一下「新增磁碟」圖示 add。
將新磁碟命名為
sql-server-test-data
。在「Source Type」(來源類型) 部分,選取「Snapshot」(快照)。
針對您建立的
sql-server-prod-data-snapshot
執行個體,選取「來源快照」。確認「模式」已設為「讀取/寫入」。
按一下 [完成]。
Cloud Shell
開啟 Cloud Shell。
使用生產環境磁碟的快照建立新的永久磁碟,做為磁碟內容:
gcloud beta compute disks create sql-server-test-data \ --size=100GB \ --source-snapshot=sql-server-prod-data-snapshot \ --zone="${ZONE}"
將新磁碟連結至
sql-server-test
執行個體,並授予讀寫權限:gcloud compute instances attach-disk sql-server-test \ --disk=sql-server-test-data --mode=rw
在 Windows 中掛接新資料磁碟
您建立的磁碟已附加至 VM 執行個體,但處於離線狀態,且磁碟區設為唯讀。如要將磁碟區設為可讀寫及可掛接,請執行下列步驟:
- 在連線至執行個體的遠端桌面協定 (RDP) 用戶端視窗中,按一下 Windows 工作列上的「開始」按鈕,輸入
diskpart
,然後按一下「diskpart」開啟 DiskPart。sql-server-test
- 系統提示是否允許應用程式變更時,請按一下「是」。
顯示附加至執行個體的磁碟清單:
list disk
輸出內容如下:
Disk ### Status Size Free Dyn Gpt -------- ------------- ------- ------- --- --- Disk 0 Online 50 GB 0 B Disk 1 Offline 100 GB 0 B *
您的資料磁碟 (磁碟 1,100 GB) 處於離線狀態。
選取資料磁碟:
select disk 1
將磁碟重新連線:
online disk
列出可用的卷:
list volume
輸出內容如下:
Volume ### Ltr Label Fs Type Size Status Info ---------- --- ----------- ----- ---------- ------- --------- -------- Volume 0 C NTFS Partition 49 GB Healthy Boot Volume 1 FAT32 Partition 100 MB Healthy System Volume 2 RAW Partition 99 GB Healthy
第 2 卷 (99 GB) 是您的資料量。系統會將其列為「隱藏」,且不會指派磁碟機代號。
選取音量:
select volume 2
清除從快照建立磁碟區時設定的屬��:
attr volume clear readonly hidden nodefaultdriveletter shadowcopy
這個指令會讓磁碟區可掛接。
將磁碟區掛接為 D 磁碟機:
assign letter=d
結束 DiskPart:
exit
重設檔案擁有權和權限
您是透過在sql-server-prod
執行個體上建立快照來建立資料磁碟,因此檔案擁有權和權限的使用者 ID 與sql-server-test
執行個體上的不同。您必須將檔案擁有權轉移給 sql-server-test
執行個體的使用者,並更新權限,讓本機使用者和 MSSQLSERVER
使用者都能讀取檔案。
- 在連線至
sql-server-test
執行個體的遠端桌面協定用戶端視窗中,按一下 Windows 工作列上的「開始」按鈕,然後輸入cmd
。 - 以管理員身分開啟「命令提示字元」應用程式。
將
sql-server-data
資料夾中的檔案擁有者設為MSSQLSERVER
服務使用者:icacls d:\sql-server-data /setowner "nt service\mssqlserver" /t
重設頂層
sql-server-data
資料夾中所有檔案的權限:icacls d:\sql-server-data /reset /t
更新
sql-server-data
資料夾的存取控制清單 (ACL):icacls d:\sql-server-data /grant Administrators:(oi)(ci)f "nt service\mssqlserver":(oi)(ci)f "owner rights":(oi)(ci)f %USERNAME%:(oi)(ci)f
停用從雲端硬碟根資料夾的權限繼承,這樣系統就只會套用上述權限:
icacls d:\sql-server-data /inheritancelevel:r
結束命令提示字元應用程式:
exit
SQL Server 執行個體和 sql-server-test
執行個體上的本機使用者現在可以存取資料庫檔案。
附加複製的資料庫
現在,請將 D 磁碟機 (data
) 上的複製資料庫附加至測試 SQL Server 執行個體。您可以透過 Microsoft SQL Server Management Studio 精靈以互動方式附加資料庫,也可以直接執行 Transact-SQL 命令。
SSMS 精靈
- 在連線至
sql-server-test
執行個體的 RDP 工作階段中,按一下 Windows 工作列上的「開始」按鈕,輸入ssms
,然後選取「Microsoft SQL Server Management Studio (以��統管理員身分執行)」。 - 按一下「連線」,使用 Windows 驗證連線至
sql-server-test
資料庫引擎。 - 在「物件總管」中,以滑鼠右鍵按一下「資料庫」,然後選取「附加」。
- 在「Attach Databases」(附加資料庫) 精靈中,按一下「Add」(新增)。
- 瀏覽至
D:\sql-server-data\wideworldimporters
目錄,按一下WideWorldImporters.mdf
檔案,然後按一下「確定」。 按一下「確定」附加資料庫。
稍待片刻,複製的資料庫就會附加完成。您可以按一下「物件總管」中的「重新整理」refresh,查看資料庫是否列在「資料庫」樹狀結構中。
Transact-SQL
- 在連線至
sql-server-test
執行個體的遠端桌面協定工作階段中,按一下 Windows 工作列上的「開始」按鈕,輸入ssms
,然後選取「Microsoft SQL Server Management Studio (以系統管理員身分執行)」。 - 按一下「連線」,使用 Windows 驗證連線至
sql-server-prod
資料庫引擎。 - 依序選取「檔案」>「新增」>「使用目前連線查詢」,開啟新的查詢視窗。
附加
D:\sql-server-data\wideworldimporters
目錄中的資料和記錄檔:USE [master] GO CREATE DATABASE [WideWorldImporters] ON ( FILENAME = N'D:\sql-server-data\wideworldimporters\WideWorldImporters.mdf' ), ( FILENAME = N'D:\sql-server-data\wideworldimporters\WideWorldImporters.ldf' ), ( FILENAME = N'D:\sql-server-data\wideworldimporters\WideWorldImporters_UserData.ndf' ) FOR ATTACH GO
在查詢程式碼上按一下滑鼠右鍵,然後點選「執行」。
稍待片刻,複製的資料庫就會附加完成。您可以按一下「物件總管」中的「重新整理」refresh,查看資料庫是否列在「資料庫」樹狀結構中。資料庫附加完成後,您可以關閉查詢視窗,不必儲存。
如要確認範例資料庫是否正常運作,可以執行查詢。
在 SQL Server Management Studio 中,依序選取「File」 >「New」 >「Query with Current Connection」,開啟新的查詢視窗,然後複製下列程式碼:
SELECT top(100) i.InvoiceDate, i.InvoiceID, i.CustomerID, c.CustomerName, i.ConfirmedDeliveryTime, i.ConfirmedReceivedBy FROM WideWorldImporters.Sales.Invoices i JOIN WideWorldImporters.Sales.Customers c ON i.CustomerID=c.CustomerID WHERE i.ConfirmedDeliveryTime IS NOT NULL ORDER BY i.InvoiceDate desc;
這項查詢會從最近 100 份已送達的月結單中擷取摘要資訊。
如要執行查詢,請在查詢視窗中按一下滑鼠右鍵,然後選取「Execute」(執行)。
「結果」窗格會顯示摘要資訊。
您已瞭解如何使用永久磁碟快照複製資料庫,現在不妨試試使用備份和還原功能複製資料庫。如要完成第二種做法的教學課程,請務必刪除從 sql-server-test
執行個體複製的資料庫。
刪除複製的資料庫
如要刪除使用磁碟快照建立的複製資料庫,請按照下列步驟操作。
SSMS 精靈
- 在連線至
sql-server-test
執行個體的 RDP 工作階段中,開啟 Microsoft SQL Server Management Studio,然後連線至sql-server-test
資料庫引擎。 - 在物件總管中展開「資料庫」,以滑鼠右鍵按一下
WorldWideImporters
資料庫,然後選取「刪除」。 - 在「Delete Object」(刪除物件) 精靈中,確認已選取「Close existing connections」(關閉現有連線) 核取方塊。
- 按一下 [確定]。
Transact-SQL
- 在連線至
sql-server-test
執行個體的 RDP 工作階段中,開啟 Microsoft SQL Server Management Studio,然後連線至sql-server-test
資料庫引擎。 如要關閉與
WideWorldImporters
資料庫的所有連線並刪除該資料庫,請將下列指令碼複製到新的查詢視窗中,對程式碼按一下滑鼠右鍵,然後點選「執行」:USE [master] GO ALTER DATABASE [WideWorldImporters] SET SINGLE_USER WITH ROLLBACK IMMEDIATE GO DROP DATABASE [WideWorldImporters] GO
資料庫刪除後,您可以關閉查詢視窗,不必儲存。您可以在物件總管中按一下「重新整理」refresh,確認資料庫已刪除。
使用備份與還原功能複製
複製在 Compute Engine 上執行的 SQL Server 資料庫的第二種方法,是使用原生 SQL Server 備份和還原功能。使用這種方法時,您會透過 Cloud Storage 轉移備份。
本教學課程的這一節會使用您在「使用 Compute Engine 磁碟快照複製資料庫」一節中建立的資源。如未完成該節內容,請務必先完成再繼續。
在本教學課程的這個部分,您將執行以下操作:
- 建立 Cloud Storage bucket。
- 備份實際工作環境伺服器上的資料庫。
- 將備份檔案從正式伺服器複製到 Cloud Storage。
- 將備份檔案從 Cloud Storage 複製到測試伺服器。
- 將備份還原至測試執行個體。
下圖顯示如何使用 Cloud Storage 轉移備份資料,藉此複製資料庫。
由於 Google Cloud 外部系統可以存取 Cloud Storage,因此您可以使用這種方法,從外部 SQL Server 執行個體複製資料庫。
建立 Cloud Storage 值區
您需要建立 Cloud Storage bucket,在將備份檔案從 sql-server-prod
執行個體移轉至 sql-server-test
執行個體時,儲存這些檔案。
主控台
前往 Google Cloud 控制台的 Cloud Storage「瀏覽器」頁面。
點選「建立值區」。
將 bucket 命名為
project-name
-bucket。更改下列內容:
project-name
:專案的 ID。 Google Cloud
展開「選擇預設儲存空間級別」,然後選取「區域」。
在「Location」(位置) 中,選取「us-east1」。
點選「建立」。
Cloud Shell
開啟 Cloud Shell。
在與 VM 執行個體相同的區域中建立 Cloud Storage bucket:
gcloud storage buckets create "gs://$(gcloud config get-value project)-bucket" --location="${REGION}"
對資料庫進行完整時間點備份
在實際工作環境中,您可能已進行備份。您可以將這些備份檔做為複製資料庫的基礎。在本教學課程中,您將進行僅複製備份,以免影響任何現有的完整或增量備份排程。
SSMS 精靈
- 在連線至
sql-server-prod
執行個體的 RDP 工作階段中,開啟 Microsoft SQL Server Management Studio,然後連線至sql-server-prod
資料庫引擎。 - 在「物件總管」中展開「資料庫」,以滑鼠右鍵按一下
WorldWideImporters
資料庫,然後依序選取「工作」 >「備份」。 - 在「Back Up Database」(備份資料庫) 精靈中,確認已設定下列值:
- 「備份類型」設為「完整」。
- 選取「僅複製備份」。
- 「備份到」設為「磁碟」。
- 如要新增備份檔案,請按一下「新增」。
在「Destination」(目的���) 欄位中,輸入
D:\sql-server-data\WideWorldImporters-copy.bak
。選取「媒體選項」頁面,然後選取「覆寫所有現有備份集」。
選取「備份選項」頁面,然後將「設定備份壓縮」變更為「壓縮備份」。
按一下「確定」即可建立備份。
備份作業需要幾分鐘才能完成。
Transact-SQL
- 在連線至
sql-server-prod
執行個體的 RDP 工作階段中,開啟 Microsoft SQL Server Management Studio,然後連線至sql-server-prod
資料庫引擎。 如要對
WideWorldImporters
資料庫執行僅複製的壓縮備份,並儲存到
d:\sql-server-data\WideWorldImporters-copy.bak
檔案,請將下列指令碼複製到新的查詢視窗,然後在程式碼上按一下滑鼠右鍵,並點選「執行」。BACKUP DATABASE [WideWorldImporters] TO DISK = N'd:\sql-server-data\WideWorldImporters-copy.bak' WITH COPY_ONLY, NOFORMAT, INIT, NAME = N'WideWorldImporters-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, COMPRESSION, STATS = 10 GO
伺服器需要幾分鐘才能建立備份。 資料庫備份完成後,您可以關閉查詢視窗,不必儲存。
將備份檔案複製到 Cloud Storage
- 在連線至
sql-server-prod
執行個體的遠端桌面協定工作階段中,開啟 Windows PowerShell 視窗。 將備份檔案複製到先前建立的 Cloud Storage bucket:
gcloud storage cp d:\sql-server-data\WideWorldImporters-copy.bak "gs://$(gcloud config get-value project)-bucket/" --no-clobber
結束 PowerShell。
exit
將備份檔案從 Cloud Storage 複製到 sql-server-test
- 在連線至
sql-server-test
執行個體的遠端桌面協定工作階段中,開啟 Windows PowerShell 視窗。 將備份檔案複製到先前建立的 Cloud Storage bucket:
gcloud storage cp "gs://$(gcloud config get-value project)-bucket/WideWorldImporters-copy.bak" d:\sql-server-data\
結束 PowerShell。
exit
測試執行個體現在的本機磁碟上,已有資料庫的完整副本備份。
還原備份
現在您可以將完整副本備份還原至執行個體的 D 磁碟機 (data
)。sql-server-test
SSMS 精靈
- 在連線至
sql-server-test
執行個體的 RDP 工作階段中,開啟 Microsoft SQL Server Management Studio,然後連線至sql-server-test
資料庫引擎。 - 在物件總管中,以滑鼠右鍵按一下「資料庫」,然後選取「還原資料庫」。
- 針對「來源」選取「裝置」,然後按一下裝置名稱旁邊的「[...]」按鈕。
- 在「選取備份裝置」對話方塊中,選取「備份媒體類型」清單中的「檔案」,然後按一下「新增」。
- 在檔案選取器中瀏覽至
D:\sql-server-data
,按一下WideWorldImporters-copy.bak
檔案,然後按一下「確定」。 按一下「確定」關閉「選取備份裝置」對話方塊。
「Restore Database」(還原資料庫) 對話方塊現在會填入
WideWorldImporters
資料庫備份的相關資料。在「選取頁面」下方,按一下「檔案」。
選取「將所有檔案重新放置到資料夾」。
在「資料檔案資料夾」和「記錄檔資料夾」欄位中,輸入
D:\sql-server-data\wideworldimporters
。如要開始還原作業,請按一下「確定」。
程序完成後,畫面上會顯示「
Database 'WideWorldImporters' restored successfully
」訊息。
Transact-SQL
- 在連線至
sql-server-test
執行個體的 RDP 工作階段中,開啟 Microsoft SQL Server Management Studio,然後連線至sql-server-test
資料庫引擎。 - 依序選取「檔案」>「新增」>「使用目前連線查詢」,開啟新的查詢視窗。
複製下列 T-SQL 指令,從您從 Cloud Storage 複製的備份檔案啟動還原作業,將資料庫和記錄檔還原到
D:\sql-server-data\wideworldimporters
目錄:USE [master] GO RESTORE DATABASE [WideWorldImporters] FROM DISK = N'D:\SQL-SERVER-DATA\WideWorldImporters-copy.bak' WITH FILE = 1, MOVE N'WWI_Primary' TO N'D:\SQL-SERVER-DATA\WideWorldImporters\WideWorldImporters.mdf', MOVE N'WWI_UserData' TO N'D:\SQL-SERVER-DATA\WideWorldImporters\WideWorldImporters_UserData.ndf', MOVE N'WWI_Log' TO N'D:\SQL-SERVER-DATA\WideWorldImporters\WideWorldImporters.ldf', MOVE N'WWI_InMemory_Data_1' TO N'D:\SQL-SERVER-DATA\WideWorldImporters\WideWorldImporters_InMemory_Data_1', NOUNLOAD, STATS = 5 GO
在程式碼上按一下滑鼠右鍵,然後點選「執行」。
資料庫還原作業會在幾分鐘內完成。您可以按一下「物件總管」中的「重新整理」refresh,查看資料庫是否列在「資料庫」樹狀結構中。資料庫還原完成後,您可以關閉查詢視窗,不必儲存。
如要證明資料庫可正常運作,可以執行查詢。
在 Microsoft SQL Management Studio 中,依序選取「File」 >「New」 >「Query with Current Connection」,開啟新的查詢視窗,然後複製下列程式碼:
SELECT top(100) i.InvoiceDate, i.InvoiceID, i.CustomerID, c.CustomerName, i.ConfirmedDeliveryTime, i.ConfirmedReceivedBy FROM WideWorldImporters.Sales.Invoices i JOIN WideWorldImporters.Sales.Customers c ON i.CustomerID=c.CustomerID WHERE i.ConfirmedDeliveryTime IS NOT NULL ORDER BY i.InvoiceDate desc;
這項查詢會從最近 100 份已送達的月結單中擷取摘要資訊。
在查詢視窗上按一下滑鼠右鍵,然後點選「執行」。
「結果」窗格會顯示摘要資訊。
將 Cloud SQL 做為複製目的地
如果目標資料庫是託管在 Cloud SQL 上,而來源資料庫位於 Compute Engine,則唯一支援的複製機制是將資料庫備份至 Cloud Storage,然後將資料庫還原至 Cloud SQL。
在本教學課程中,您會重複使用上一節建立的備份。
建立 Cloud SQL for SQL Server 執行個體
開啟 Cloud Shell。
建立 Cloud SQL for SQL Server 執行個體,並執行與
sql-server-prod
執行個體相同的資料庫版本:gcloud sql instances create sqlserver-cloudsql \ --database-version=SQLSERVER_2022_STANDARD \ --cpu=2 \ --memory=5GB \ --root-password=sqlserver12@ \ --region=${REGION}
這會建立執行個體,並將
sqlserver
設為超級使用者,密碼為sqlserver12@
。
更新物件權限
您必須在 Cloud Storage bucket 和備份物件上設定正確的權限,Cloud SQL 服務帳戶才能讀取這些項目。使用 Google Cloud 控制台匯入物件時,系統會自動設定這些權限,您也可以使用 gcloud
指令設定權限。
開啟 Cloud Shell。
設定環境變數,其中包含 Cloud SQL 執行個體服務帳戶的位址:
CLOUDSQL_SA="$(gcloud sql instances describe sqlserver-cloudsql --format='get(serviceAccountEmailAddress)')"
將服務帳戶新增至 bucket IAM 政策,做為讀取者和寫入者:
gcloud storage buckets add-iam-policy-binding "gs://$(gcloud config get-value project)-bucket/" \ --member=user:"${CLOUDSQL_SA}" --role=roles/storage.objectUser
匯入匯出的資料庫
開啟 Cloud Shell。
將匯出的檔案匯入 Cloud SQL 執行個體:
gcloud sql import bak sqlserver-cloudsql \ "gs://$(gcloud config get-value project)-bucket/WideWorldImporters-copy.bak" \ --database WideWorldImporters
系統顯示提示訊息時,請輸入
y
。安裝 SQL Server 工具套件:
sudo apt install -y mssql-tools
如果您接受授權條款,請在系統提示時輸入
yes
。您可以使用這些工具從 Cloud Shell 連線至 Cloud SQL,以便在 Cloud SQL 執行個體上執行查詢。
將 Cloud SQL Proxy 連線至 SQL Server 執行個體:
CONNECTION_NAME=$(gcloud sql instances describe sqlserver-cloudsql --format='value(connectionName)') cloud_sql_proxy -instances=${CONNECTION_NAME}=tcp:1433 &
如要確認複製的資料庫是否正常運作,請執行查詢:
/opt/mssql-tools/bin/sqlcmd -U sqlserver -S 127.0.0.1 -Q \ 'SELECT top(100) i.InvoiceDate, i.InvoiceID, i.CustomerID, LEFT(c.CustomerName,20) CustomerName, i.ConfirmedDeliveryTime, LEFT(i.ConfirmedReceivedBy,20) ConfirmedReceivedBy FROM WideWorldImporters.Sales.Invoices i JOIN WideWorldImporters.Sales.Customers c ON i.CustomerID=c.CustomerID WHERE i.ConfirmedDeliveryTime IS NOT NULL ORDER BY i.InvoiceDate desc;'
系統提示時,請輸入資料庫伺服器 (
sqlserver12@
) 的sqlserver
使用者密碼。sqlserver
sqlserver-cloudsql
這項查詢會從最近 100 份已送達的月結單中擷取摘要資訊。
輸出內容如下:
InvoiceDate InvoiceID CustomerID CustomerName ConfirmedDeliveryTime ConfirmedReceivedBy ---------------- ----------- ----------- -------------------- -------------------------------------- -------------------- 2016-05-30 70349 581 Wingtip Toys (Munich 2016-05-31 07:05:00.0000000 Youssef Eriksson 2016-05-30 70350 123 Tailspin Toys (Roe P 2016-05-31 07:10:00.0000000 Ella Zvirbule 2016-05-30 70351 175 Tailspin Toys (San A 2016-05-31 07:15:00.0000000 Julio Correa 2016-05-30 70352 1029 Veronika Necesana 2016-05-31 07:20:00.0000000 Veronika Necesana 2016-05-30 70353 1014 Narendra Tickoo 2016-05-31 07:25:00.0000000 Narendra Tickoo 2016-05-30 70354 930 Shantanu Huq 2016-05-31 07:30:00.0000000 Shantanu Huq 2016-05-30 70355 963 Be Trang 2016-05-31 07:35:00.0000000 Be Trang 2016-05-30 70356 567 Wingtip Toys (Jerome 2016-05-31 07:40:00.0000000 Severins Polis 2016-05-30 70357 510 Wingtip Toys (Grabil 2016-05-31 07:45:00.0000000 Manish Ghosh ...
清除所用資源
如要避免系統向您的 Google Cloud 帳戶收取本教學課程中所用資源的相關費用,請刪除您為本教學課程建立的 Google Cloud 專案。
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
後續步驟
- 瞭解在 Compute Engine 上執行 SQL Server 執行個體的最佳做法。
- 探索 Google Cloud 的參考架構、圖表和最佳做法。 歡迎瀏覽我們的雲端架構中心。