本教學課程將說明兩種複製在 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 資料庫。
費用
In this document, you use the following billable components of Google Cloud:
- Compute Engine
- Cloud Storage
- Microsoft Windows and SQL server licenses
To generate a cost estimate based on your projected usage,
use the pricing calculator.
When you finish the tasks that are described in this document, you can avoid continued billing by deleting the resources that you created. For more information, see Clean up.
事前準備
- 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.
-
Make sure 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.
-
Make sure 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-test
的 SQL Server 執行個體,用來代表測試資料庫伺服器。將資料庫複製到這個伺服器。
下圖說明這個架構。
建立實際工作環境 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 伺服器上的 SQL Server)。
在「Version」下拉式選單中,選取「SQL Server 2022 Standard on Windows Server 2022 Datacenter」。
請確認已設定下列值:
- 「Boot disk type」已設為「Standard persistent disk」。
- 將「Size (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
替換為 Google Cloud 專案的 ID。設定預設區域:
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 中查看其序列埠輸出內容:
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 執行個體詳細資料」頁面。在「遠端存取」下方,按一下「設定 Windows 密碼」,然後按一下「設定」,在遠端機器上建立帳戶。
系統會在這個步驟產生密碼,記下密碼或將密碼複製到安全的暫時性檔案中。
在 Google Cloud 控制台的「Compute Engine」部分,按一下「RDP」下拉式選單,然後選取「Download the RDP file」選項,即可下載執行個體的 RDP 檔案。
使用此檔案即可透過遠端桌面協定用戶端連線至執行個體。詳情請參閱 Microsoft 遠端桌面用戶端。
出現提示時,請輸入剛才產生的密碼,然後按一下「OK」。
如要接受伺服器憑證並登入遠端 Windows 執行個體,請按一下「Continue」。
當系統詢問您是否要讓網路上的其他電腦和裝置偵測到您的電腦時,請按一下「No」。
設定其他磁碟
連接至實際工作環境執行個體的第二個磁碟則用於儲存實際工作環境資料庫。這個磁碟是空白的,因此您需要分割、格式化及掛接磁碟。
- 在已連線至
sql-server-prod
執行個體的 RDP 工作階段中,按一下 Windows 工作列上的「Start」按鈕,輸入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 範例資料庫 的完整備份檔案。這個資料庫會模擬您要複製的實際工作環境資料庫。
如要建立目錄並下載備份檔案,請按照下列步驟操作:
在 RDP 工作階段中,按一下 Windows 工作列的「Start」按鈕,輸入
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
還原範例資料庫
您需要使用 Microsoft SQL Server Management Studio (SSMS) 互動式精靈,或直接執行 Transact-SQL 指令,將範例資料庫還原至磁碟 D (data
)。
SSMS 精靈
- 在 RDP 工作階段中,按一下 Windows 工作列的「Start」按鈕,輸入
ssms
,然後選取「Microsoft SQL Server Management Studio (Run as Administrator)」。 - 應用程式啟動後,請按一下「連線」,使用 Windows 驗證功能連線至
sql-server-prod
資料庫引擎。 - 在「物件總管」中,以滑鼠右鍵按一下「資料庫」,然後選取「還原資料庫」。
- 在「來源」下方,選取「裝置」,然後按一下裝置名稱旁邊的「[...]」按鈕。
- 在「Select backup devices」對話方塊中,確認「Backup media type」已選取「File」,然後按一下「Add」。
- 在檔案選取器中瀏覽至
D:\sql-server-data
,按一下WideWorldImporters-Full.bak
檔案,然後按一下「確定」。 按一下「OK」關閉「Select backup devices」對話方塊。
「Restore Database」對話方塊現在會填入 Wide World Importers 資料庫備份的資料。
在「選取頁面」下方,按一下「檔案」。
勾選「將所有檔案重新放置至資料夾」核取方塊。
在「資料檔案資料夾」和「記錄檔案資料夾」欄位中輸入
D:\sql-server-data\wideworldimporters
。按一下「OK」即可開始還原作業。
幾分鐘後,系統會通知您資料庫已還原。
Transact-SQL
- 在 RDP 工作階段中,按一下 Windows 工作列的「Start」按鈕,輸入
ssms
,然後選取「Microsoft SQL Server Management Studio (Run as Administrator)」。 - 應用程式啟動後,請按一下「連線」,使用 Windows 驗證功能連線至
sql-server-prod
資料庫引擎。 - 依序選取「File」 >「New」 >「Query with Current Connection」,開啟新的查詢視窗。
從下載的備份檔案啟動還原作業:
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
目錄。在查詢程式碼上按一下滑鼠右鍵,然後點選「執行」。
請等候幾分鐘,讓資料庫還原作業完成。您可以按一下「Object Explorer」中的「Refresh」refresh,查看資料庫是否列在「Databases」樹狀結構中。資料庫還原作業完成後,您可以關閉查詢視窗,而無需儲存。
如要驗證範例資料庫是否正常運作,您可以執行查詢。
在 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 筆已提交的月結單中擷取摘要資訊。
在查詢視窗中按一下滑鼠右鍵,然後點選「執行」。
「Results」窗格會顯示摘要資訊。
建立測試 VM 執行個體
在本節中,您將建立名為 sql-server-test
的 SQL Server 執行個體,做為複製資料庫的目的地。這個執行個體的設定與實際工作環境執行個體相同。不過,您不需要建立第二個資料磁碟,而是在本教學課程稍後的部分連接資料磁碟。
主控台
前往「VM instances」(VM 執行個體) 頁面。
按一下 [建立]。
在「Name」(名稱) 欄位中輸入
sql-server-test
。在「地區」部分,請選擇「us-east1」。
在「Zone」 中選取 us-east1-b。
在「Machine configuration」(機器設定) 下方,將「Machine Type」(機器類型) 變更為 n1-standard-2 (2 vCPU)。
按一下「Book disk」圖片旁的「Change」。
在「Boot disk」面板中,按一下「Public images」分頁。
在「Operating System」(作業系統) 下拉式選單中,選取「SQL Server on Windows Server」(Windows 伺服器上的 SQL Server)。
在「Version」下拉式選單中,選取「SQL Server 2022 Standard on Windows Server 2022 Datacenter」。
請確認已設定下列值:
- 「Boot disk type」已設為「Standard persistent disk」。
- 將「Size (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 中查看其序列埠輸出內容:
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 執行個體詳細資料」頁面。在「遠端存取」下方,按一下「設定 Windows 密碼」,然後按一下「設定」,在遠端機器上建立帳戶。
系統會在這個步驟產生密碼,記下密碼或將密碼複製到安全的暫存檔案中。
在 Google Cloud 控制台的「Compute Engine」部分,按一下「RDP」下拉式選單,然後選取「Download the RDP file」選項,即可下載執行個體的 RDP 檔案。
使用此檔案即可透過遠端桌面協定用戶端連線至執行個體。詳情請參閱 Microsoft 遠端桌面用戶端。
出現提示時,請輸入剛才產生的密碼,然後按一下「確定」。
如要接受伺服器憑證並登入遠端 Windows 執行個體,請按一下「Continue」。
當系統詢問您是否要讓電腦可供偵測時,請按一下「否」。
使用 Compute Engine 磁碟快照複製資料庫
在 Compute Engine 上執行的 SQL Server 資料庫,可透過以下方式複製:將資料庫儲存在其他資料磁碟上,然後使用永久磁碟快照建立該磁碟的複本。
永久磁碟快照可讓您取得磁碟上資料的時間點副本。排定磁碟快照作業時間,是自動備份資料的一種方式。
在本教學課程的這個部分,您將執行以下操作:
- 為正式版伺服器的資料磁碟建立快照。
- 使用快照建立新磁碟。
- 將新磁碟掛接至測試伺服器。
- 將此磁碟上的資料庫連結至測試執行個體上的 SQL Server。
下圖說明如何使用磁碟快照複製資料庫。
建立磁碟快照
主控台
前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面。
按一下
sql-server-prod
執行個體的名稱。在「VM 執行個體詳細資料」頁面上,按一下磁碟
sql-server-prod-data
。按一下「Create Snapshot」。
並將快照命名為
sql-server-prod-data-snapshot
。在「位置」部分,選取「區域」。
確認區域已設為
us-east1
(與 VM 執行個體相同)。選取「Enable 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
執行個體,選取「Source snapshot」(來源快照)。確認「Mode」已設為「Read/Write」。
按一下 [完成]。
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 執行個體,但處於離線狀態,而且已將磁區設為唯讀。如要將磁碟區設為可讀寫及可掛載,請執行下列步驟:
- 在與
sql-server-test
執行個體連線的 RDP 用戶端視窗中,按一下 Windows 工作列上的「開始」按鈕,輸入diskpart
,然後按一下「diskpart」開啟 DiskPart。 - 當系統提示您允許應用程式進行變更時,請按一下「是」。
顯示已連接至執行個體的磁碟清單:
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
執行個體的 RDP 用戶端視窗中,按一下 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-test
執行個體上的 SQL Server 執行個體和本機使用者現在可以存取資料庫檔案。
附加複製的資料庫
您現在可以將 D 磁碟機 (data
) 上的複製資料庫附加至測試 SQL Server 例項。您可以使用 Microsoft SQL Server Management Studio 精靈以互動方式附加資料庫,也可以直接執行 Transact-SQL 指令。
SSMS 精靈
- 在連線至
sql-server-test
執行個體的 RDP 工作階段中,按一下 Windows 工作列上的「Start」按鈕,輸入ssms
,然後選取「Microsoft SQL Server Management Studio (Run as Administrator)」。 - 按一下「連線」,使用 Windows 驗證連線至
sql-server-test
資料庫引擎。 - 在「物件總管」中,以滑鼠右鍵按一下「資料庫」,然後選取「附加」。
- 在「Attach Databases」精靈中,按一下「Add」。
- 瀏覽至目錄
D:\sql-server-data\wideworldimporters
,按一下WideWorldImporters.mdf
檔案,然後按一下「OK」。 按一下「OK」,附加資料庫。
幾分鐘後,系統就會附加複製的資料庫。您可以按一下物件探索工具中的「Refresh」refresh,查看資料庫是否列在「Databases」樹狀結構中。
Transact-SQL
- 在已連線至
sql-server-test
執行個體的 RDP 工作階段中,按一下 Windows 工作列上的「Start」按鈕,輸入ssms
,然後選取「Microsoft SQL Server Management Studio (Run as Administrator)」。 - 按一下「連線」,使用 Windows 驗證連線至
sql-server-prod
資料庫引擎。 - 依序選取「File」 >「New」 >「Query with Current Connection」,開啟新的查詢視窗。
附加
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
在查詢程式碼上按一下滑鼠右鍵,然後點選「執行」。
幾分鐘後,系統就會附加複製的資料庫。您可以按一下「Object Explorer」中的「Refresh」 refresh,查看資料庫是否列在「Databases」樹狀結構中。資料庫連結後,您可以關閉查詢視窗,不必儲存。
如要驗證範例資料庫是否正常運作,您可以執行查詢。
在 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 筆已提交的月結單中擷取摘要資訊。
如要執行查詢,請在查詢視窗上按一下滑鼠右鍵,然後選取「執行」。
「Results」窗格會顯示摘要資訊。
您現在已瞭解如何使用永久磁碟快照複製資料庫,接下來可以嘗試使用備份和還原功能複製資料庫。如要完成這第二種方法的教學課程,您必須刪除從 sql-server-test
執行個體複製的資料庫。
刪除複製的資料庫
如要刪除使用磁碟快照建立的複製資料庫,請執行下列步驟。
SSMS 精靈
- 在連線至
sql-server-test
執行個體的 RDP 工作階段中,開啟 Microsoft SQL Server Management Studio,然後連線至sql-server-test
資料庫引擎。 - 在「Object Explorer」中展開「Databases」,然後以滑鼠右鍵按一下
WorldWideImporters
資料庫,並選取「Delete」。 - 在「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
資料庫刪除後,您可以關閉查詢視窗,不必儲存。您可以按一下 Object Explorer 中的「Refresh」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 值區,用於儲存從 sql-server-prod
執行個體轉移至 sql-server-test
執行個體的備份檔案。
主控台
前往 Google Cloud 控制台中的 Cloud Storage「Browser」(瀏覽器) 頁面。
點選「建立值區」。
將值區命名為
project-name
-bucket。更改下列內容:
project-name
: Google Cloud專案的 ID。
展開「Choose a default storage class」(選擇預設儲存空間級別),然後選取「Regional」。
在「Location」(位置) 中,選取 us-east1。
按一下 [建立]。
Cloud Shell
開啟 Cloud Shell。
在 VM 執行個體所在的區域建立 Cloud Storage 值區:
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
。選取「Media Options」頁面,然後選取「Overwrite all existing backup sets」。
選取「備份選項」頁面,然後將「設定備份壓縮」變更為「壓縮備份」。
如要建立備份,請按一下「OK」。
備份作業需要幾分鐘才能完成。
Transact-SQL
- 在連線至
sql-server-prod
執行個體的 RDP 工作階段中,開啟 Microsoft SQL Server Management Studio,然後連線至sql-server-prod
資料庫引擎。 如要將
WideWorldImporters
database的副本壓縮備份,並複製到檔案
d:\sql-server-data\WideWorldImporters-copy.bak
,請將下列指令碼複製到新的查詢視窗中,然後按一下程式碼的滑鼠右鍵,再點選「Execute」。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
執行個體的 RDP 工作階段中,開啟 Windows PowerShell 視窗。 將備份檔案複製到先前建立的 Cloud Storage 值區:
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
執行個體的 RDP 工作階段中,開啟 Windows PowerShell 視窗。 將備份檔案複製到先前建立的 Cloud Storage 值區:
gcloud storage cp "gs://$(gcloud config get-value project)-bucket/WideWorldImporters-copy.bak" d:\sql-server-data\
退出 PowerShell。
exit
您的測試執行個體現在已在本機磁碟上備份資料庫的完整副本。
還原備份
您現在可以將完整備份還原至 sql-server-test
執行個體的磁碟機 D (data
)。
SSMS 精靈
- 在連線至
sql-server-test
執行個體的 RDP 工作階段中,開啟 Microsoft SQL Server Management Studio,然後連線至sql-server-test
資料庫引擎。 - 在「物件總管」中,以滑鼠右鍵按一下「資料庫」,然後選取「還原資料庫」。
- 針對「Source」,選取「Device」,然後點選裝置名稱旁的「[...]」按鈕。
- 在「Select backup devices」對話方塊的「Backup media type」清單中選取「File」,然後按一下「Add」。
- 在檔案選取器中瀏覽至
D:\sql-server-data
,按一下WideWorldImporters-copy.bak
檔案,然後按一下「確定」。 按一下「OK」關閉「Select backup devices」對話方塊。
「Restore Database」對話方塊現在會填入
WideWorldImporters
資料庫備份的相關資料。在「選取頁面」下方,按一下「檔案」。
選取「將所有檔案重新定位至資料夾」。
在「Data file folder」(資料檔案資料夾) 和「Log file folder」(記錄檔案資料夾) 欄位中輸入
D:\sql-server-data\wideworldimporters
。如要開始還原作業,請按一下「OK」。
程序完成後,您會看到
Database 'WideWorldImporters' restored successfully
訊息。
Transact-SQL
- 在連線至
sql-server-test
執行個體的 RDP 工作階段中,開啟 Microsoft SQL Server Management Studio,然後連線至sql-server-test
資料庫引擎。 - 依序選取「File」 >「New」 >「Query with Current Connection」,開啟新的查詢視窗。
複製下列 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
在程式碼上按一下滑鼠右鍵,然後點選「執行」。
資料庫還原作業會在幾分鐘後完成。您可以按一下「Object Explorer」中的「Refresh」 refresh,查看資料庫是否列在「Databases」樹狀結構中。資料庫還原作業完成後,您可以關閉查詢視窗,而無需儲存。
如要證明資料庫可正常運作,您可以執行查詢。
在 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 筆已提交的月結單中擷取摘要資訊。
在查詢視窗上按一下滑鼠右鍵,然後點選「執行」。
「Results」窗格會顯示摘要資訊。
使用 Cloud SQL 做為複製目的地
如果目標資料庫託管在 Cloud SQL,而來源資料庫則位於 Compute Engine,則唯一支援的複製機制是將資料庫備份至 Cloud Storage,然後將資料庫還原至 Cloud SQL。
在本教學課程中,您將重複使用先前建立的備份。
建立 SQL Server 適用的 Cloud SQL 執行個體
開啟 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}
這會建立一個執行個體,其中的 root 使用者為
sqlserver
,密碼為sqlserver12@
。
更新物件權限
您必須在 Cloud Storage 值區和備份物件上設定正確的權限,才能讓 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;'
系統提示時,請輸入
sqlserver-cloudsql
資料庫伺服器 (sqlserver12@
) 的sqlserver
使用者密碼。這項查詢會從最近 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 的參考架構、圖表和最佳做法。歡迎瀏覽我們的雲端架構中心。