第35回:SQL Server 2016 EEから2019 SEの移行をやってみた

技術者向け・データベースの技術情報発信

今回のブログでは、オンプレミスのMicrosoft SQL Server 2016 Enterprise EditionからMicrosoft SQL Server 2019 Standard Editionへの移行案件について、ポイントを整理してご紹介します。

1.移行概要

  • サーバ上のデータベースオブジェクトは外付けUSBディスクに出力し、移行先のサーバへ復元する。
  • 移行先のサーバは移行元と同様のホスト名/IPアドレスを設定することにより、バッチ/アプリケーション/外部連携先の改修を最小限にとどめる。
  • ユーザーデータベース本体の移行は、完全バックアップを取得し、新サーバへリストアする方式とする。
  • データベースの互換性レベルは現行設定を維持し、アプリケーションへの影響を最小限にとどめる。

2.非互換情報

今回の移行はバージョン/エディション共に異なることから、以下の情報を参考にして移行に支障がないことを確認しました。

<参考情報>(Microsoft社の資料引用)
SQL Server 2019(15.x)の各エディションとサポートされている機能
SQL Server 2019(15.x)の新機能
SQL Server 2017の新機能
SQL Serverで廃止されたデータベースエンジンの機能
ALTER DATABASE(Transact-SQL)互換性レベル

3.インスタンスオブジェクトと移行方式

今回は利用が確認された以下のインスタンスオブジェクトを移行しました。

インスタンスオブジェクト 移行方式 備考
ユーザーデータベース 完全バックアップ/リカバリ サイズ/移行時間の圧縮を目的にバックアップは圧縮を併用
ログイン スクリプト出力/実行
リンクサーバー スクリプト出力/実行
データベースメール 移行先で再設定 メンテナンスプラン、SQL Serverエージェントジョブのメール通知で、データベースメール、オペレーターが利用されている可能性があるので、事前に設定を推奨
オペレーター 移行先で再設定 メンテナンスプラン、SQL Serverエージェントジョブのメール通知で、データベースメール、オペレーターが利用されている可能性があるので、事前に設定を推奨
メンテナンスプラン 移行先で再設定
SQL Serverエージェントジョブ スクリプト出力/実行 ジョブが利用しているOS上のバッチファイル、SQL Server Integration Servicesパッケージ(dtsxファイル)等は別途移行先で再設定

※各種オブジェクトの移行詳細は以下資料を参照

<参考情報>(Microsoft社の資料引用)
データベースを別のサーバーで使用できるようにするときのメタデータの管理

4.ユーザーデータベースの移行

4-1 移行元

①SQL Server Management Studioを右クリックして「管理者ユーザーとして実行」で起動し、ログインの管理者ユーザーで接続します。

②ユーザーデータベースのバックアップは「データベース」→「タスク」→「バックアップ」を選択します。

dbexpt35_01.png

③「バックアップの種類」で「完全」を選択し、バックアップの出力場所は「バックアップ先」にて指定します。
(NTFSでフォーマットされたローカルディスクのみ指定できます。NAS等の直接出力は不可)

dbexpt35_02.png

④必要に応じて「バックアップオプション」で「バックアップを圧縮する」を選択します。
(ご参考:圧縮サイズは1/10程度に縮小、バックアップ時間は1/5程度に短縮、CPU使用率は10%程度増加が目安)

※バックアップの圧縮はEnterprise Edition/Standard Editionのどちらでも利用できます。

dbexpt35_03.png

4-2 移行先

①SQL Server Management Studioを右クリックして「管理者ユーザーとして実行」で起動し、ログインの管理者ユーザーで接続します。

②ユーザーデータベースのリストアは「データベース」→「データベースの復元」を選択します。
(同名のデータベースが存在する場合は事前に削除が必要です)

dbexpt35_04.png

③バックアップファイルは「デバイス」→「…」→「バックアップデバイスの選択」で移行用ディスク等を指定します。

dbexpt35_05.png

④「OK」で復元します。

dbexpt35_06.png

※移行元でデータベースパラメータのTRUSTWORTHYを有効にしている場合は、以下に従い、移行先で明示的に再設定が必要です。

<参考情報>(Microsoft社の資料引用)
TRUSTWORTHY データベース プロパティ

5.ログインの移行

5-1 移行元

①SQL Server Management Studioを右クリックして「管理者ユーザーとして実行」で起動し、ログインの管理者ユーザーで接続します。

②ログインのバックアップは、「セキュリティ」→「ログイン」→右クリック「ログインをスクリプト化」→「新規作成」→「ファイル…」を選択し、移行用ディスク等に出力します。

dbexpt35_07.png

※SQL Server認証のログインの場合、出力したスクリプトにパスワード情報が含まれないため、内容を確認し修正する必要があります。

5-2 移行先

①SQL Server Management Studioを右クリックして「管理者ユーザーとして実行」で起動し、ログインの管理者ユーザーで接続します。

②バックアップしたログインのスクリプトを「ファイル」→「開く」→「ファイル」で開きます。

dbexpt35_08.png

③「実行」ボタンを押下するとログインが作成されます。

dbexpt35_09.png

※Windows認証ユーザーの場合はあらかじめ、OSユーザー/ドメインユーザーが構成されている必要があります。

④今回の移行案件ではデータベース/ログイン移行後、以下のようにユーザーマッピングを行う必要がありました。

<Windows認証ユーザー>
下記SQL Server Management Studioの画面からデータベースユーザーとログインをマッピングしました。

・「セキュリティ」→「ログイン」→「プロパティ」

dbexpt35_10.png

・「ユーザーマッピング」→「このログインにマップされたユーザー」にて確認し、移行元と移行先が異なっている場合は同様に設定し、「OK」を押下。
(今回の移行では設定が維持されていました)

dbexpt35_11.png

<SQL Server認証ユーザー>
手順は「Windows認証ユーザー」と同様ですが、画面からだとエラーになるため、以下のSQLコマンドで設定しました。
(今回の移行では明示的に設定が必要でした)

use [DbName]		
go		
alter user [DbUserName] with login = [LoginName]		
go		

6.リンクサーバーの移行

6-1 移行元

①SQL Server Management Studioを右クリックして「管理者ユーザーとして実行」で起動し、ログインの管理者ユーザーで接続します。

②リンクサーバーのバックアップは、「サーバオブジェクト」→「リンクサーバー」→右クリック「リンクサーバーをスクリプト化」→「新規作成」→「ファイル…」を選択し、移行用ディスク等に出力します。

dbexpt35_12.png

※SQL Server認証を利用したリンクサーバーの場合、出力したスクリプトにパスワード情報が含まれないため、内容を確認し修正する必要があります。

6-2 移行先

①SQL Server Management Studioを右クリックして「管理者ユーザーとして実行」で起動し、ログインの管理者ユーザーで接続します。

②バックアップしたリンクサーバーのスクリプトを「ファイル」→「開く」→「ファイル」で開きます。

dbexpt35_13.png

③「実行」ボタンを押下するとリンクサーバーが作成されます。

dbexpt35_14.png

※リンクサーバーを用いたDMLの動作確認については以下の情報を参考にしました。

<参考情報>(Microsoft社の資料引用)
OPENQUERY(Transact-SQL)

7.データベースメールの移行

移行先

①SQL Server Management Studioを右クリックして「管理者ユーザーとして実行」で起動し、ログインの管理者ユーザーで接続します。

②「管理」→「データベースメール」→「データベースメールの構成」を実行します。

dbexpt35_15.png

※移行元の設定を確認し、同様に移行先で設定します。
また、SQL Server Agentジョブでデータベースメールを利用している場合は以下の設定が必要です。
[SQL Server Agent]→右クリック[プロパティ]→[警告システム]→[メールプロファイルを有効にする]

8.オペレーターの移行

移行先

①SQL Server Management Studioを右クリックして「管理者ユーザーとして実行」で起動し、ログインの管理者ユーザーで接続します。

②「SQL Serverエージェント」→「オペレーター」→「新しいオペレーター」を実行します。

dbexpt35_16.png

※移行元の設定を確認し、同様に移行先で設定します。

9.メンテナンスプランの移行

移行先

①SQL Server Management Studioを右クリックして「管理者ユーザーとして実行」で起動し、ログインの管理者ユーザーで接続します。

②「管理」→「メンテナンスプラン」→「メンテナンスプランウィザード」を実行します。

dbexpt35_17.png

※移行元の設定を確認し、同様に移行先で設定します。
ホスト名の変更を行う場合は、ホスト名変更後にメンテナンスタスクの設定が必要です。
(SQL Serverエージェントジョブのスクリプト移行、SQL Server Integration Servicesのパッケージ移行を実施しても、スケジュールなど一部移行できない情報があったため、基本的に移行先での再設定を推奨)

10.SQL Serverエージェントジョブの移行

10-1 移行元

①SQL Server Management Studioを右クリックして「管理者ユーザーとして実行」で起動し、ログインの管理者ユーザーで接続します。

②SQL Serverエージェントジョブのバックアップは「SQL Serverエージェント」→「ジョブ」→右クリック「ジョブをスクリプト化」→「新規作成」→「ファイル…」を選択し、移行用ディスク等に出力します。

dbexpt35_18.png

※ジョブが利用しているOS上のバッチファイル、SQL Server Integration Servicesパッケージ(dtsxファイル)等は別途移行先で再設定します。

10-2 移行先

①SQL Server Management Studioを右クリックして「管理者ユーザーとして実行」で起動し、ログインの管理者ユーザーで接続します。

②バックアップしたSQL Serverエージェントジョブのスクリプトを「ファイル」→「開く」→「ファイル」で開きます。

dbexpt35_19.png

③「実行」ボタンを押下するとSQL Serverエージェントジョブが作成されます。

dbexpt35_20.png

11.おわりに

移行手順は移行要件や移行方式、データベース構成等によって変わってくると思いますが、今回ご紹介した情報がお役に立てば幸いです。