IBM Cloud Docs
SQL Server

SQL Server

本節逐步執行建立 SQL Server 所需的建置作業。 在 VPC 中訂購虛擬伺服器實例之後,客戶可以選擇使用具有預先配置安裝的組合供應項目,或使用「自帶授權 (BYOL)」及「自行執行 (DIY)」建置程序。 客戶應該判斷哪一種方法符合他們的需求,並相應地繼續進行。 下列資訊說明如何挑選伺服器設定檔來符合您的需求。

訂購虛擬伺服器

已針對這些部署型樣中的 SQL Server 主機選取下列規格的虛擬伺服器。 若要訂購,請遵循 使用使用者介面建立虛擬伺服器實例中的指示。

  • 設定檔: mx2d-4x32
  • 類型: 公用
  • OS: Windows 2019
  • NIC 數量: 1
  • 實例儲存體: 150GB
  • 資料磁區:
    • sqldb01-data: 1024 GB、 Tiered-5IOPS/GB、Provider Managed Encryption
    • sqldb01-log: 1024 GB、 Tiered-5IOPS/GB、Provider Managed Encryption

運算

當您為 VPC 佈建 IBM Cloud 虛擬伺服器時,您可以從三個設定檔系列中選取一個 實例設定檔 : 平衡、運算及記憶體。

  • 平衡-對於計算的每 1 個 vCPU ,平衡設定檔的記憶體比例為 4 GiB。
  • 計算-計算設定檔對於計算的每 1 個 vCPU 具有 2 GiB 記憶體比例。
  • 記憶體-記憶體設定檔最適用於記憶體密集工作負載 (例如資料庫應用程式) ,且每 1 顆計算 vCPU 有 8 GiB 記憶體比例。

「線上交易式處理 (OLTP)」通常涉及大量使用者在資料庫中大量插入、更新、刪除少量資料。 對於正式作業 MS SQL OLTP 環境,建議的下限為 4 個 vCore ,以及來自記憶體設定檔系列 mx2-4x32的 32 GB 記憶體。 如需更大的需求, 記憶體設定檔 會延伸至 mx2-128x1024 ,其具有 128vCPU、1024 GiB RAM 及 80 Gbps 網路頻寬上限。

SQL Server 資料倉儲環境通常需要比 8:1 更高的記憶體至 vCPU 需求,因此您可能必須在 vCPU 上過度佈建才能滿足記憶體需求。

記憶體設定檔系列包括隨實例儲存空間佈建的設定檔。 佈建實例時, 實例儲存空間 會提供直接連接至虛擬伺服器實例的固態硬碟。 實例儲存體磁碟提供快速的暫時儲存體,以改善許多工作負載的效能,包括交易式處理。

儲存體

在 IBM Cloud VPC上規劃 SQL Server 時,需要考量三個儲存空間元件: 啟動磁區、資料磁區及實例儲存空間。

  • 開機磁區-建立虛擬伺服器時,會從區塊儲存空間建立 100 GB、3 IOPS/GB 開機磁區,並連接至實例。 依預設,開機磁區由 IBM管理的加密進行加密,不過,客戶管理的加密是一個選項。 無法分離、刪除或增加或減少開機磁區大小。 當刪除虛擬伺服器時,一律會刪除開機磁區。 開機磁區包含作業系統檔案。

  • 資料磁區-資料磁區會運用 VPC 的區塊儲存體,並提供 Hypervisor 裝載的高效能資料儲存體,以備援方式儲存在「可用性區域 (AZ)」中的多個實體磁碟上,以防止因任何單一元件故障而導致資料流失。 資料磁區範圍從 10 GB 到 2000 GB ,且 IOPS 上限會根據磁區大小及選取的 IOPS 層級設定檔而有所不同。 例如, 5 IOPS/GB 磁區 2000 GB 的最大 IOPS 是 10,000 IOPS。 您可以選取最符合您需求的磁區設定檔,因為磁區設定檔是以三個預先定義的 IOPS 層級或自訂 IOPS 設定檔來提供:

    • 3 IOPS/GB-一般用途層級設定檔提供適用於虛擬伺服器實例「平衡」設定檔的 IOPS/GB 效能。
    • 5 IOPS/GB-此設定檔提供適用於虛擬伺服器實例 Compute 設定檔的 IOPS/GB 效能。
    • 10 IOPS/GB-通常用於虛擬伺服器實例記憶體設定檔。

    如需相關資訊,請參閱 IOP 層級。 可連接至虛擬伺服器的磁區數目取決於虛擬伺服器包含的 vCPU 數目。 如需相關資訊,請參閱磁區連接限制。 可以視需要分離資料磁區並將其連接至虛擬伺服器。 依預設,資料磁區會使用 IBM 管理的加密進行加密。 您也可以使用自己的根金鑰來加密資料磁區。 請參閱 區塊儲存空間容量及效能 建議,以選擇最佳區塊儲存空間磁區大小及效能層次。

  • 實例儲存體-虛擬伺服器可以選擇性地包括 實例儲存體 ,該儲存體提供在佈建實例時直接連接至虛擬伺服器實例的固態硬碟。 實例儲存體磁碟提供快速的暫時儲存體,以改善許多工作負載的效能,包括交易式處理。 儲存在實例儲存空間上的資料是暫時的,表示它直接關聯於實例的生命週期。 實例儲存空間磁碟會隨實例自動建立及毀損。 不過,當實例重新開機時,實例儲存體資料不會遺失。 如果擔心效能,則 MS SQL Server tempdb 可以放置在實例儲存體上

如需相關資訊,請參閱 關於 Block Storage for VPC

在極少的維護作業下,可能需要將虛擬伺服器即時移轉至新的主機。 虛擬伺服器將經歷大約 10 秒的短暫暫停,在某些情況下最多 30 秒。 在此處理程序中,虛擬伺服器實例不會重新開機。 不過,對於具有「實例儲存體」的虛擬伺服器,則會重新啟動伺服器。 如需進一步資訊,請參閱 瞭解雲端維護作業

連接至伺服器

Refer to 連接至 Windows 實例 to access the Windows Administrator's password, however, in short the following commands are used from your laptop, where the instances command returns the <INSTANCE_ID> of the virtual server:

ibmcloud is instances
ibmcloud is instance-initialization-values <INSTANCE_ID> --private-key @~/.ssh/id_rsa

結合網域

在安裝 AD 伺服器之前,不應該啟動此作業。

在 SQL Server 上的 Powershell 提示中,輸入下列指令,讓伺服器加入網域:

  • Get-DnsClientServerAddress 會擷取 IPv4 乙太網路介面的介面索引,以便可以將 DNS 從 IBM Cloud DNS 伺服器變更為 ADDNS 伺服器。 如果遺漏此步驟,則 Add-Computer 指令會失敗,因為伺服器將無法找到網域控制站。 Add-Computer -Server 僅接受 FQDN。
  • Add-Computer 指令會 <domain> 使用 ADDNS 伺服器 <ad_server_fqdn> 將伺服器新增至網域,然後重新啟動伺服器以使變更生效。
$dns = "<ADDNS_IP_Address>"
$adserver = "<ad_server_fqdn>"
$domain = "<domain>"
$user = $domain + "\Administrator"
$password = "<password>"
$out=Get-DnsClientServerAddress -InterfaceAlias Ethernet -AddressFamily IPv4 | Select-Object -Property InterfaceIndex
Set-DnsClientServerAddress -InterfaceIndex $out.InterfaceIndex -ServerAddresses ($dns)
$password = ConvertTo-SecureString $password -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential ($user, $password)
Add-Computer -DomainName $domain -Server $adserver -Restart -Credential $credential

連接至防禦主機 SMB 共用

下列 PowerShell 指令可用來達成下列:

  • 檢查以查看 SMB2的狀態,通常在虛擬伺服器映像檔中停用此通訊協定。 如果已停用,則可以使用 Set-SmbServerConfiguration 來啟用它,因為 SMB 需要它才能運作。
  • 使用使用者 <smbuser> 及密碼 <share_password> ,以 Z: 磁碟機身分連接至 <bastion_hostname>\Downloads上的共用。
$bastion = "<bastion_hostname>"
$user = "<smbuser>"
$shareuser = $bastion + '\' + $user
$sharepassword = "<share_password>"
$path = '\\' + $bastion + '\' + 'Downloads'
Get-SmbServerConfiguration | Select EnableSMB2Protocol
Set-SmbServerConfiguration -EnableSMB2Protocol $true -Force
New-SmbMapping -LocalPath 'Z:' -RemotePath $path -UserName $shareuser -Password $sharepassword -Persistent $true

配置儲存體

Microsoft SQL on VPC 部署型樣利用 Microsoft Storage Spaces。 「儲存體空間」是 Windows Server 中的一種技術,概念上類似於 RAID ,並在作業系統中實作。 儲存體空間可以用來將資料磁區分組到儲存區中,然後使用儲存區中的容量來建立儲存體空間 (虛擬磁碟)。 儲存體空間在 Windows 作業系統中顯示為一般磁碟機,您可以從中建立格式化磁區。

配置儲存體空間

從 IBM Cloud 主控台中,擷取 SQL Server 的儲存磁區資訊。 例如:

sqldb01-data: 0787-ff88b86a-1e29-4f0d-8a69-67b4deda3d5c-lpcn2
sqldb01-log: 0787-1d41b85e-4e8a-499e-b889-13b96db5251c-2w2n2

下列 PowerShell 指令用來擷取 SerialNumber 的 Windows OS 視圖,以在後續的 PowerShell 指令中使用; Get-StoragePool -IsPrimordial $true | Get-PhysicalDisk -CanPool $True。 如下列範例所示,可以擷取 SerialNumbers:

Number FriendlyName       SerialNumber                         MediaType   CanPool OperationalStatus HealthStatus Usage           Size
------ ------------       ------------                         ---------   ------- ----------------- ------------ -----           ----
1      QEMU QEMU HARDDISK cloud-init-0787_1c6e0975-a584-43ca-b Unspecified True    OK                Healthy      Auto-Select   378 KB
5      Red Hat VirtIO     cloud-init-                          Unspecified True    OK                Healthy      Auto-Select    44 KB
3      Red Hat VirtIO     0787-ff88b86a-1e29-4                 Unspecified True    OK                Healthy      Auto-Select     1 TB
4      Red Hat VirtIO     0787-1d41b85e-4e8a-4                 Unspecified True    OK                Healthy      Auto-Select     1 TB
2      Red Hat VirtIO     70ab84c0-0e12-4fc2-a                 Unspecified True    OK                Healthy      Auto-Select 139.7 GB

建立 sqldatapool 儲存區

下列 PowerShell 指令可用來配置 sqldatapool 儲存區,請將 <SerialNumber> 取代為 sqldb01-data 磁區的序號。 此指令可達成下列各項:

  • 建立稱為 sqldatapool 的儲存區。
  • 在此儲存區中建立稱為 sqldata 的虛擬磁碟,以進行分段 (-ResiliencySettingName simple)。
  • 虛擬磁碟以 GPT 分割區起始設定,並獲指派磁碟機代號 D。
  • 虛擬磁碟會使用區塊大小為 64KB 的 NTFS 檔案系統來格式化,並指派 SQLDATA 標籤。
$dataserial = "<SerialNumber>"
New-StoragePool -FriendlyName "sqldatapool" -StorageSubsystemFriendlyName "Windows Storage*" -PhysicalDisks (Get-PhysicalDisk -SerialNumber $dataserial) | New-VirtualDisk -FriendlyName "sqldata" -Interleave 65536 -NumberOfColumns 1 -ResiliencySettingName simple –UseMaximumSize | Initialize-Disk -PartitionStyle GPT -PassThru | New-Partition -DriveLetter "D" -UseMaximumSize | Format-Volume -FileSystem NTFS -NewFileSystemLabel "SQLDATA" -AllocationUnitSize 65536 -Confirm:$false -UseLargeFRS

如果您使用多個資料磁區以提高效能,則必須修改此 PowerShell 指令。 2 個磁碟的範例:

New-StoragePool -FriendlyName "sqldatapool" -StorageSubsystemFriendlyName "Windows Storage*" -PhysicalDisks (Get-PhysicalDisk | where {($_.SerialNumber -eq "<Disk1_SerialNumber>") -or ($_.SerialNumber -eq "<Disk2_SerialNumber>")}) | New-VirtualDisk -FriendlyName "sqldata" -Interleave 65536 -NumberOfColumns 2 -ResiliencySettingName simple –UseMaximumSize | Initialize-Disk -PartitionStyle GPT -PassThru | New-Partition -DriveLetter "D" -UseMaximumSize | Format-Volume -FileSystem NTFS -NewFileSystemLabel "SQLDATA" -AllocationUnitSize 65536 -Confirm:$false -UseLargeFRS

-NumberOfColumns 符合要分段資料的磁碟數目。

建立 sqllogpool 儲存區

下列 PowerShell 指令可用來配置 sqllogpool 儲存區,請將 <SerialNumber> 取代為 sqldb01-log 磁區的序號。 此指令可達成下列各項:

  • 建立稱為 sqllogpool 的儲存區。
  • 在此儲存區中建立稱為 sqllog 的虛擬磁碟以進行分段 (-ResiliencySettingName simple)。
  • 虛擬磁碟以 GPT 分割區起始設定,並獲指派磁碟機代號 E。
  • 虛擬磁碟會以區塊大小為 64KB 的 NTFS 檔案系統來格式化,並指派 SQLLOG 標籤。
$logserial = "<SerialNumber>"
New-StoragePool -FriendlyName "sqllogpool" -StorageSubsystemFriendlyName "Windows Storage*" -PhysicalDisks (Get-PhysicalDisk -SerialNumber $logserial) | New-VirtualDisk -FriendlyName "sqllog" -Interleave 65536 -NumberOfColumns 1 -ResiliencySettingName simple –UseMaximumSize | Initialize-Disk -PartitionStyle GPT -PassThru | New-Partition -DriveLetter "E" -UseMaximumSize | Format-Volume -FileSystem NTFS -NewFileSystemLabel "SQLLOG" -AllocationUnitSize 65536 -Confirm:$false -UseLargeFRS

起始設定 tempdb 的實例儲存體

tempdb 的磁碟機不使用「儲存體空間」,因為實例儲存體僅包含單一磁區。 下列 PowerShell 指令可用來配置磁區,請將 <SerialNumber> 取代為實例儲存磁區的序號。 此指令可達成下列各項:

  • 建立以 GPT 分割區起始設定的磁碟機,並指派磁碟機代號 F。
  • 磁碟機使用 NTFS 檔案系統格式化,區塊大小為 64KB ,並指派 TEMPDB 標籤。
$tempdbserial = "<SerialNumber>"
Get-Disk | Where SerialNumber -eq $tempdbserial | Initialize-Disk -PartitionStyle GPT -PassThru | New-Partition -DriveLetter "F" -UseMaximumSize | Format-Volume -FileSystem NTFS -NewFileSystemLabel "TEMPDB" -AllocationUnitSize 65536 -Confirm:$false -UseLargeFRS

安裝 SQL Server

SQL Server 安裝程式已用來下載媒體,並將檔案解壓縮至防禦主機。 使用下列 PowerShell 指令 Copy-Item "Z:\SQL2019\Extracted" -Destination "C:\Users\Administrator\Downloads\SQL2019\Extracted\" -Recurse ,將必要的檔案從共用的 SMB 複製到 SQL Server 的本端磁碟,以便從本端磁碟執行安裝。

在此階段有三個選項:

  1. 以互動方式執行安裝程式,以安裝 SQL Server。
  2. 以互動方式執行安裝程式,以擷取後者安裝的 ConfigurationFile.ini。
  3. 使用現有的 ConfigurationFile.ini ,即這組文件的其中一個表單,並安裝 SQL Server。

本文件假設您使用選項 3 ,已建立 ConfigurationFile.ini ,並使用下列指令來安裝 SQL Server:

C:\Users\Administrator\Downloads\SQL2019\Extracted\SETUP.exe /ConfigurationFile=C:\Users\Administrator\Downloads\ConfigurationFile.ini /TCPENABLED="1" /SQLSVCPASSWORD="<svc_password>" /AGTSVCPASSWORD="<agt_password>"

<svc_password> 是用於 SQL Server 服務之網域服務帳戶的密碼, <agt_password> 是用於 SQL Agent 之網域服務帳戶的密碼。

依預設,安裝 SQL Server 時會停用 TCP 通訊協定,且 /TCPENABLED="1" 會啟用 TCP。

驗證已在伺服器介面及迴圈位址 (127.0.0.1) 上啟用 TCP/IP:

  1. 在 SQL Server 上,開啟 SQL Server Configuration Manager。
  2. 展開 SQL Server 網路配置節點,以檢視 MSSQLSERVER 的通訊協定。
  3. 在詳細資料區域中,用滑鼠右鍵按一下 TCP/IP 通訊協定,然後選擇內容。
  4. 從「TCP/IP 內容」視窗中,選擇 IP 位址標籤。
  5. 尋找具有伺服器的 IPv4 IP 位址及迴圈位址 (127.0.0.1) 的介面。
  6. 驗證「已啟用」是否設為「是」。 如果設為「否」,請選取「是」。
  7. 再按一下確定,然後再按一下確定。
  8. 必須重新啟動服務,變更才會生效。
  9. 選取 SQL Server 服務,然後重新啟動 SQL Server 服務。

配置 Windows 防火牆

使用下列指令,以容許 TCP 1433 通過 Windows 防火牆 New-NetFirewallRule -DisplayName 'SQL-Inbound' -Profile Domain -Direction Inbound -Action Allow -Protocol TCP -LocalPort 1433

如果您要配置可用性群組,請使用下列指令來容許 TCP 5022 通過 Windows 防火牆 New-NetFirewallRule -DisplayName 'SQL-AG-Inbound' -Profile Domain -Direction Inbound -Action Allow -Protocol TCP -LocalPort 5022

配置 NTP 伺服器

若要從 AD 網域階層自動同步化時間,請執行下列指令:

w32tm /config /syncfromflags:domhier /update
net stop w32time
net start w32time
w32tm /query /status

安裝 Powershell SQL Server 模組

由於 SQL Server 未連接網際網路,因此需要將模組下載至防禦主機,並複製到 SQL Server 的 C:\Program Files\WindowsPowerShell \ Modules 目錄,然後安裝。 下列 PowerShell 指令假設您已將模組下載至防禦主機,並已配置連接至 Z 的共用: 磁碟機

Copy-Item "Z:\SqlServer" -Destination "C:\Program Files\WindowsPowerShell\Modules" -Recurse
Import-Module SQLServer