SQL Server

このセクションでは、SQL Server を作成するために必要なビルド・タスクについて順を追って説明します。 お客様は、事前構成されたインストール済み環境でバンドル・オファリングを使用するか、VPC で仮想サーバー・インスタンスを注文した後に Bring Your Own License (BYOL) および Do It Yourself (DIY) ビルド・プロセスを使用するかを選択できます。 お客様は、どのアプローチがお客様の要件に合致しているかを判断し、それに応じて 以下の情報では、ニーズに合わせてサーバー・プロファイルを選択する方法について説明します。

仮想サーバーの注文

これらのデプロイメント・パターンの SQL サーバー・ホストに対して、以下の仕様の仮想サーバーが選択されました。 注文するには、 UI を使用した仮想サーバー・インスタンスの作成の手順に従ってください。

  • プロファイル: mx2d-4x32
  • タイプ: Public
  • OS: Windows 2019
  • NIC 数量: 1
  • インスタンス・ストレージ: 150GB
  • データ・ボリューム:
    • sqldb01-data: 1024 GB、 Tiered-5IOPS/GB、プロバイダー管理の暗号化
    • sqldb01-log: 1024 GB、 Tiered-5IOPS/GB、プロバイダー管理の暗号化

Compute

VPC 用の IBM Cloud 仮想サーバーをプロビジョンする場合は、3 つのプロファイル・ファミリー (平衡型、コンピュート、メモリー) のいずれかから 「インスタンス・プロファイル」 を選択します。

  • 平衡型プロファイルでは、コンピュートの 1 vCPU ごとに 4 GiB のメモリーの比率があります。
  • コンピュート-コンピュート・プロファイルには、コンピュートの 1 vCPU ごとに 2 GiB のメモリーの比率があります。
  • メモリー-メモリー・プロファイルは、メモリーを集中的に使用するワークロード (データベース・アプリケーションなど) に最適であり、1 vCPU の計算ごとに 8 GiB のメモリーの比率になります。

オンライン・トランザクション処理 (OLTP) には、通常、多数のユーザーによる多数のトランザクションによるデータベース内の少量のデータの挿入、更新、削除が含まれます。 実動 MS SQL OLTP 環境で推奨される最小値は、メモリー・プロファイル・ファミリー mx2-4x32から 32 GB のメモリーを備えた 4 vCore です。 より大規模な要件の場合、 メモリー・プロファイル は、 128vCPU、1024 GiB RAM、および 80 Gbps のネットワーク帯域幅キャップを持つ mx2-128x1024 まで拡張されます。

SQL Server データウェアハウス環境では、多くの場合、8: 1 よりも多くのメモリーから vCPU への所要量を必要とするため、メモリー所要量を満たすために vCPU のオーバープロビジョンが必要になる場合があります。

メモリー・プロファイル・ファミリーには、インスタンス・ストレージでプロビジョンされたプロファイルが含まれます。 インスタンス・ストレージ は、インスタンスのプロビジョン時に仮想サーバー・インスタンスに直接接続されるソリッド・ステート・ドライブを提供します。 インスタンス・ストレージ・ディスクは、トランザクション処理を含む多くのワークロードのパフォーマンスを向上させるための高速一時ストレージを提供します。

ストレージ

IBM Cloud VPC上の SQL Server を計画する場合、考慮すべきストレージ・コンポーネントは、ブート・ボリューム、データ・ボリューム、およびインスタンス・ストレージの 3 つです。

  • ブート・ボリューム-仮想サーバーが作成されると、100 GB、3 IOPS/GB のブート・ボリュームがブロック・ストレージから作成され、インスタンスに接続されます。 デフォルトでは、ブート・ボリュームは IBM管理の暗号化によって暗号化されますが、お客様管理の暗号化はオプションです。 ブート・ボリュームを切り離したり、削除したり、サイズを増減したりすることはできません。 ブート・ボリュームは、仮想サーバーが削除されると常に削除されます。 ブート・ボリュームには、オペレーティング・システム・ファイルが含まれています。

  • データ・ボリューム-データ・ボリュームは、VPC のブロック・ストレージを活用し、ハイパーバイザーにマウントされた高性能データ・ストレージを提供します。これらのデータ・ストレージは、アベイラビリティー・ゾーン (AZ) の複数の物理ディスクに冗長に保管され、単一コンポーネントの障害によるデータ損失を防止します。 データ・ボリュームの範囲は 10 GB から 2000 GB までであり、最大 IOPS は、選択されたボリューム・サイズと IOPS ティア・プロファイルによって異なります。 例えば、2000 GB の 5 IOPS/GB ボリュームの場合、最大 IOPS は 10,000 IOPS です。 ボリューム・プロファイルは 3 つの事前定義 IOPS ティアとして、またはカスタム IOPS プロファイルとして使用できるため、要件に最も適したボリューム・プロファイルを選択できます。

    • 3 IOPS/GB-汎用層プロファイルは、仮想サーバー・インスタンスの平衡型プロファイルに適した IOPS/GB パフォーマンスを提供します。
    • 5 IOPS/GB-このプロファイルは、仮想サーバー・インスタンスのコンピュート・プロファイルに適した IOPS/GB パフォーマンスを提供します。
    • 10 IOPS/GB-通常、仮想サーバー・インスタンスのメモリー・プロファイルに使用されます。

    詳しくは、IOPS ティアを参照してください。 仮想サーバーに接続できるボリュームの数は、仮想サーバーに含まれる vCPU の数によって異なります。 詳しくは、ボリューム接続の制限を参照してください。 必要に応じて、データ・ボリュームを切り離して仮想サーバーに接続することができます。 デフォルトでは、データ・ボリュームは IBM 管理の暗号化を使用して暗号化されます。 お客様所有のルート鍵を使用してデータ・ボリュームを暗号化することもできます。 最適なブロック・ストレージ・ボリュームのサイズとパフォーマンス・レベルの選択については、 ブロック・ストレージの容量とパフォーマンス のアドバイスを参照してください。

  • インスタンス・ストレージ-オプションで、インスタンスのプロビジョン時に仮想サーバー・インスタンスに直接接続されるソリッド・ステート・ドライブを提供する インスタンス・ストレージ を仮想サーバーに組み込むことができます。 インスタンス・ストレージ・ディスクは、トランザクション処理を含む多くのワークロードのパフォーマンスを向上させるための高速一時ストレージを提供します。 インスタンス・ストレージに保管されるデータは一時的なデータです。つまり、インスタンスのライフサイクルと直接結び付いています。 インスタンス・ストレージのディスクはインスタンスとともに自動的に作成されて破棄されます。 ただし、インスタンスのリブート時にインスタンス・ストレージのデータが失われることはありません。 パフォーマンスに問題がある場合は、MS SQL Server tempdb をインスタンス・ストレージに配置できます。

詳しくは、 Block Storage for VPCを参照してください。

まれな保守操作の下で、仮想サーバーの新規ホストへのライブ・マイグレーションが必要になる場合があります。 仮想サーバーでは、約 10 秒、場合によっては最大 30 秒の短い一時停止が発生します。 仮想サーバー・インスタンスは、このプロセスの一部としてリブートされません。 ただし、インスタンス・ストレージを持つ仮想サーバーの場合は、サーバーが再始動されます。 詳しくは、 Cloud Maintenance Operations の理解 を参照してください。

サーバーへの接続

Windows 管理者のパスワードにアクセスするには、 Windows インスタンスへの接続 を参照してください。ただし、要約すると、ラップトップから以下のコマンドが使用されます。ここで、instances コマンドは仮想サーバーの < INSTANCE_ID> を返します。

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の状況を確認します。通常、このプロトコルは仮想サーバー・イメージで無効になっています。 無効にした場合は、SMB の動作に必要なため、 Set-SmbServerConfiguration を使用して有効にすることができます。
  • ユーザー <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 ストレージ・スペースを活用します。 ストレージ・スペースは、概念的に RAID に類似しており、オペレーティング・システムに実装されている、Windows Server のテクノロジーです。 ストレージ・スペースを使用してデータ・ボリュームをストレージ・プールにグループ化してから、プールの容量を使用してストレージ・スペース (仮想ディスク) を作成することができます。 Windows オペレーティング・システムでは、ストレージ・スペースは通常のドライブとして表示され、そこからフォーマット済みボリュームを作成できます。

格納領域の構成

IBM Cloud コンソールから、SQL Server のストレージ・ボリューム情報をキャプチャーします。 以下に例を示します。

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

次の PowerShell コマンドを使用して、後続の PowerShell コマンドで使用する SerialNumber の Windows OS ビューをキャプチャーします。 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 のドライブ文字が割り当てられたドライブを作成します。
  • ドライブは、ブロック・サイズが 64KB の NTFS ファイル・システムでフォーマットされ、ラベル 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 のローカル・ディスクにコピーします。

この段階では、以下の 3 つのオプションがあります。

  1. インストーラーを対話式に実行して、 SQL Serverをインストールします。
  2. インストーラーを対話式に実行して、後者のインストールの ConfigurationFile.ini をキャプチャーします。
  3. 既存の ConfigurationFile.ini、つまりこの資料セットの 1 つを使用して、 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 エージェントに使用されるドメイン・サービス・アカウントのパスワードです。

デフォルトでは、 SQL Server は TCP プロトコルを無効にしてインストールされ、 /TCPENABLED="1" は TCP を有効にします。

サーバーのインターフェースおよびループバック・アドレス (127.0.0.1) で TCP/IP が有効になっていることを確認します。

  1. SQL Server で、 SQL Server 構成マネージャーを開きます。
  2. SQL Server ネットワーク構成ノードを展開して、MSSQLSERVER のプロトコルを表示します。
  3. 詳細領域で、TCP/IP プロトコルを右クリックし、「プロパティー」を選択します。
  4. 「TCP/IP のプロパティー」ウィンドウから、「IP アドレス」タブを選択します。
  5. サーバーの IPv4 IP アドレスとループバック・アドレス (127.0.0.1) を持つインターフェースを探します。
  6. Enabled が Yes に設定されていることを確認します。 「いいえ」に設定した場合は、「はい」を選択します。
  7. 「OK」をクリックして再度「OK」をクリックします。
  8. 変更を有効にするには、サービスを再始動する必要があります。
  9. SQL Server 「サービス」を選択し、 SQL Server サービスを再始動します。

Windows ファイアウォールの構成

Windows ファイアウォールを介して TCP 1433 を許可するには、以下のコマンドを使用します。 New-NetFirewallRule -DisplayName 'SQL-Inbound' -Profile Domain -Direction Inbound -Action Allow -Protocol TCP -LocalPort 1433

可用性グループを構成する場合は、以下のコマンドを使用して、Windows ファイアウォールを介した TCP 5022 を許可します。 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 サーバーがインターネットに接続されていないため、モジュールは、SQL サーバーの C: ¥ Program Files¥ WindowsPowerShell ¥ Modules ディレクトリーにコピーされた要塞ホストにダウンロードしてから、インストールする必要があります。 以下の PowerShell コマンドは、モジュールを要塞ホストにダウンロードし、Z: ドライブに接続された共有を構成したことを前提としています。

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