松本美穂と松本崇博が執筆した SQL Server 2016 実践シリーズの「SQL Server 2016 への移行とアップグレードの実践」の HTML 版です。 日本マイクロソフトさんの Web サイトで Word または PDF 形式でダウンロードできますが、今回、HTML 版として公開する許可をいただきましたので、ここに掲載いたします。なお、記載している内容は、2016年 12月時点での情報になります。[2018年12月29日]
現在のマスター環境を丸ごと新規サーバーへ複製する(ハードウェア リプレースを行う)具体的な手順は、次のとおりです。
現在のマスターの SQL Server サービスを停止する(∵オフライン バックアップのため)
現在のマスターでオフライン バックアップ(全データベース)を取得する(ユーザー データベースに関しては、オンライン バックアップでも可)
現在のマスターを停止して、ネットワークから切り離す(旧マスターとなる)
新規サーバーに OS をインストールし、マシン名を旧マスターと同じ名前へ変更する(インストールする OS は、旧マスターと異なるものでも可)
新規サーバーを Active Directoryドメインへ参加させる
新規サーバーへ旧マスターと同じバージョンの SQL Server をインストールする
旧マスターの SQL Server にインストール済みの修正プログラムを、新規サーバーにもインストールする
新規サーバーの SQL Server を停止する
旧マスターで取得したオフライン バックアップを上書きコピーする(復元する)ユーザー データベースをオンライン バックアップで取得している場合は、SQL Server の起動後に、該当データベースを復元する
新規サーバーの SQL Server を起動する
レジストリに格納されている情報を再設定する
OS の設定で、旧マスターで変更しているものがある場合は、それらを再設定する
以降では、これらの手順を詳しく説明します。
まずは、現在のマスターでオフライン バックアップを取得するために SQL Server サービスを停止します。SQL Server サービスは、構成マネージャー ツールを利用して、次のように停止します(SQL Server Agent サービスも停止します)。
フルテキスト検索機能を利用している場合は、SQL Full-text Filter Daemon Launcher サービスも停止します。
Reporting Services を利用している場合は、次のように Reporting Services サービスも停止します(Analysis Services に関しては停止しなくても大丈夫です)。
Reporting Services や Analysis Services の場合の丸ごと複製を行う手順については、この章の後半でまとめて説明します。ここでは、まず SQL Server のデータベース エンジンを丸ごと複製する方法について説明します。
SQL Server サービスの停止が完了したら、すべてのデータベース(システム データベースとユーザー データベースをすべて)のデータ ファイル(.mdf)とトランザクション ログ ファイル(.ldf)を、Windows エクスプローラーからファイル コピーで取得します。
SQL Server 2008 の場合は、既定ではシステム データベースは、次のフォルダーに格納されています。
C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA
SQL Server 2008 R2/2012/2014 の場合は、既定では次のフォルダーになります。
SQL Server 2008 R2 の場合C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA
SQL Server 2012 の場合C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA
SQL Server 2014 の場合C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA
システム データベースを含めた、ユーザー データベースが格納されているフォルダーは、次のように sysdatabases 互換ビューの filename 列を参照することで確認することができます。
ここにリストされるデータベースのファイル(.mdf)とそれに対応したログ ファイル(.ldf)をすべてコピーするようにします。このビューでは、.ldf ファイルの場所が分からないので、これを確認したい場合は、次のように sys.database_files システム ビューの physical_name 列を参照するようにします。
ファイルのコピー先には、ファイル サーバー(新規サーバーからもアクセス可能なマシン)や、クラウド上のストレージ(新規サーバーからもアクセス可能なストレージ)、USB 接続の HDD など持ち運びが可能なメディアを利用します(∵現在のマスターはこの後ネットワークから切り離すため)。ただし、USB 接続の場合は、データベース サイズが大きい場合には、転送スピードが遅いので(特に USB 2.0 の場合)、アップグレード時のダウンタイムの増加に繋がることになります(これについては非常に重要なので後述します)。
なお、ユーザー データベースに関しては、オンライン バックアップ(BACKUP ステートメント)で取得することも可能ですが、これもダウンタイムとの兼ね合いがあるので、詳しくは後述します。
次に、現在のマスター(OS)をシャットダウンして、ネットワークから切り離します。これにより、現在のマスターを完全停止状態にし、万が一のアップグレード失敗時まで寝かせておきます(以降の手順では、現在のマスターを旧マスターと呼びます)。なお、アップグレードの成功後は、OS を再インストールすることで、新しいマシン(完全な別マシン)として利用することもできます。
次に、旧マスターを Active Directory ドメインのコンピュータ アカウントから削除します。これは、ドメイン コントローラーで「Active Directory ユーザーとコンピューター」ツールを利用して行います。
次に、新規サーバーへ OS をインストールして、マシン名を旧マスターと同じ名前にします。OS をインストールするときは、同じドライブ構成(旧マスターが C: ドライブへインストールしているなら、新規サーバーも C: ドライブへインストール)になるようにします。
マシン名の変更は、コンピューター(PC)を右クリックして、[プロパティ]から[システムの詳細設定]をクリックし、[システムのプロパティ]ダイアログから、次のように行います。
旧マスターと同じ名前に変更することは、一連の作業(丸ごと複製作業)の中で最も重要になります。また、名前の変更は、SQL Server をインストールする前に行っておくことも非常に重要になります。もし、SQL Server をインストールした後に、名前を変更した場合には、いくつかの機能で正しく動作しない場合があるので、必ず SQL Server をインストールをする前にマシン名を同じにしておくようにします。
インストールする OS は、旧マスターと同じ OS でも、異なる OS でもかまいません。SQL Server 2016 は Windows Server 2012(X64)以降の OS でのみサポートされるので、このタイミングで、OS を Windows Server 2012 以上に入れ替えてしまうというのも 1つの方法です(∵OS のアップグレードには 30分以上の時間がかかるため)。
SQL Server 2008 や 2008 R2/2012/2014 を Windows Server 2008/2008 R2 上で動作させている場合は、新規サーバーの OS を旧マスターと同じにすると、そのままでは SQL Server 2016 にアップグレードすることができません。SQL Server 2016 へアップグレードする前に、OS のアップグレード(Windows Server 2012 以上へのアップグレード)をしなければなりません。OS のアップグレードには 30分以上かかってしまうので(Windows Server 2012 R2 の場合は、Update パッケージも適用する必要があります)、最初から、新規サーバーに Windows Server 2012 以上をインストールしてしまうも 1つの方法になります。
OS が変わることに不安を持つ方もいらっしゃると思いますが、SQL Server は、「SQL Server だけで完結した製品」なので、OS の影響をほとんど受けません(OS が変わったとしても、SQL Server の動作にはほとんど影響ありません)。
ただし、OS を変更する場合は、SQL Server を動作させるための Service Pack 要件に注意する必要があります(以下)。
Windows Server 2012 を利用する場合には、SQL Server 2008 なら SP3 以上(SQL Server 2016 にアップグレードするためには SP4 以上)、SQL Server 2008 R2 なら SP1 以上(SQL Server 2016 にアップグレードするためには SP3 以上)を適用しておく必要があります。
したがって、この Service Pack は、旧マスター上で適用しておく必要があります(∵丸ごと複製作業には、旧マスターと新規サーバーで同じ Service Pack を適用しておくことが重要になるため)。
なお、新規サーバーへの OS のインストールは、一番最初の作業(手順1 の旧マスターでのオフライン バックアップよりも前)として行っておくこともできます。この場合は、任意のマシン名を設定してインストールしておき、この手順のタイミング(現在のマスターをネットワークから切り離したタイミング)でマシン名を旧マスターと同じ名前へ変更します。あるいは、新規サーバーをネットワークから切り離しておいて、OS をインストールし、マシン名を旧マスターと同じ名前にしておきます(この場合は、旧マスターが起動している間は、新規サーバーをネットワークへ接続しないように注意します)。
次に、新規サーバーを Active Directory ドメインへ参加させます。
次に、新規サーバーへ旧マスターと同じバージョンの SQL Server をインストールします(SQL Server 2016 をインストールするわけではないことに注意してください)。旧マスターが SQL Server 2008 の場合には、次のようにインストールします。
SQL Server をインストールする際の注意点は、インストール先のフォルダーを、旧マスターをインストールしたときのパスとまったく同じにするという点です。SQL Server 2008 であれば、インストール先のフォルダーは、以下の[機能の選択]と[インスタンスの構成]、[データベース エンジンの構成]ページで設定しています。
もし、インストール先のフォルダーを旧マスターと違うものにしてしまうと、後述の手順でオフライン バックアップを復元した後に、SQL Server サービスが正しく起動しなくなるので、注意してください(∵master データベース内には、msdb や tempdb、ユーザー データベースへのファイル パスが格納されているので、インストール先のフォルダーが異なるとデータベースを認識することができなくなります)。
また、インストール時は、インスタンス名やサービス アカウント、認証モード、照合順序なども旧マスターと同じ設定にする必要があります。サービス アカウントは、ドメイン ユーザーである必要があり、旧マスターで設定しているドメイン ユーザーと同じにする必要もあります。
完全複製(後述のオフライン バックアップからの復元)をするには、旧マスターと全く同じように SQL Server をインストールすることが非常に重要になります。
SQL Server のインストールが完了した後は、旧マスターへインストール済みの SQL Server の修正プログラム(Service Pack や CU など)を、新規サーバーにもインストールします。
このときにインストールする修正プログラムは、旧マスターへインストールしているものとまったく同じもののみをインストールすることに注意してください。例えば、旧マスターが SQL Server 2008 の SP3 である場合は、SP3 をインストールします。
もし、旧マスターよりも最新版の修正プログラムをインストールした場合には、オフライン バックアップからの復元後に、SQL Server サービスが正しく起動しない場合があるので、必ず同じものをインストールするようにします(∵システム データベースは、修正プログラムの影響を受けるため、修正プログラムのバージョンが異なると SQL Server サービスが起動しなかったり、バックアップからの復元で失敗する可能性があります)。
次に、旧マスターで取得したオフライン バックアップを新規サーバーへ適用するために、SQL Server サービスを停止します。SQL Server サービスは、構成マネージャー ツールを利用して、次のように停止します(SQL Server Agent サービスも停止します)。
フルテキスト検索機能を利用している場合は、SQL Full-text Filter Daemon Launcher サービスも停止します。
この作業は、万が一、次の手順が失敗したときのために、念のため実施します。SQL Server のインストールおよび修正プログラムを適用した後の、現在のシステム データベースをオフライン バックアップしておき、いつでもこの状態へ戻せるようにしておきます。
次に、旧マスターで取得したすべてのデータベース(システム データベースとユーザー データベース)のオフライン バックアップ(.mdf と .ldf)を、Windows エクスプローラーから新規サーバー上にすべてコピー(上書きコピー)します。
システム データベースは同じファイルが存在しますが、前の手順で念のためバックアップをしているので、安心して上書きコピーしてください。
なお、ユーザー データベースをオンライン バックアップで取得している場合は、次の手順で SQL Server を起動した後に、RESTORE ステートメントでバックアップから復元します。
上書きコピーが完了したら、新規サーバーの SQL Server サービスを起動します。
もし、SQL Server サービスが起動しない場合は、OS のフォルダー構成やドライブ構成が、旧マスターと同じになっていない場合(tempdb データベースを別ドライブへ移動しているなど)に起こり得ます(OS のフォルダー構成やドライブ構成は、旧マスターと全く同じにしておく必要があります)。
SQL Server サービスが起動した後は、SQL Server Agent サービスも起動します。
以上で、(これだけで)旧マスターとほぼ同じ状態の SQL Server として動作させることができます。データベースを以前と変わらずに利用できることはもちろん、ログイン アカウントやオブジェクト権限、データ パーティション、ジョブ、警告、暗号化、リンク サーバー、メンテナンス プラン(保守計画)、リソース ガバナー、監査(SQL Server Audit)、データベース メール、サーバーの構成オプション、パフォーマンス データ コレクション、TDE(透過的なデータ暗号化)など、旧マスターで設定/利用していた機能を、そのまま新マスター上でも利用することができます。
SQL Server は、起動時に master データベースから各種の動作情報を取得するので、システム データベースを上書きするだけで、環境をガラリと変更することができます(システム データベースに含まれているものに関しては、第5章でも詳しく説明しています)。
もし、SQL Server サービスや SQL Server Agent サービスが起動しない場合には、手順7 でのインストール パスが正しいこと(旧マスターと同じパスであること)などを確認してみてください。また、旧マスターで tempdb データベースを別ドライブへ移動している場合には、そのドライブと同じドライブ文字のドライブを新規サーバー上でも作成しておく必要があります。
サービス アカウントに NTFS アクセス許可があることの確認
SQL Server サービスおよび SQL Server Agent サービスを開始した後に、次のようにデータベースが開けない場合は、SQL Server サービスのサービス アカウントに対する NTFS アクセス許可があるかどうかを確認してみてください。
ユーザー データベースを同じドライブへ配置できない場合(アタッチで認識することも可能)
もし、新規サーバー上で同じドライブを作成できない場合には、前述と同様の「ファイルにアクセスできない」エラーが表示されて、ユーザー データベースを開くことができません。この場合は、データベース(.mdf/.ldf ファイル)を認識させられる代替案があります。例えば、旧マスターで F: ドライブに作成していたユーザー データベースが、新規サーバーでは M: ドライブになっているような場合には、次のように「アタッチ]操作をすることで、新しい場所にある .mdf/.ldf ファイルをデータベースとして認識させることができます(アタッチ前に、開けなかったデータベースを削除してから、アタッチ操作を実行します)。
以上で、ほとんどの機能をそのまま動作させることができますが、次の 2つの作業を追加で行っておく必要があります。
OS を変更したことによって、レジストリに格納される設定や、OS の設定に関しては、再設定が必要になります(どういったものに再設定が必要になるかは、後述します)。
旧マスター環境で、次のように Windows のローカル ユーザーを利用している場合には、注意点があります。
Windows のローカル ユーザーは、OS が変わると別のユーザーになるため(内部的な Security ID が異なるため)、こういったことが起こりますが、これらの対処方法については、後述します。
第60回:SQL Server 2017 自習書 No.3「SQL Server 2017 Machine Learning Services」のご案内
第59回:SQL Server 2017 自習書 No.2「SQL Server 2017 on Linux」のご案内
第58回:SQL Server 2017 自習書 No.1「SQL Server 2017 新機能の概要」のご案内
第57回:SQL Server 2017 RC 版とこれまでのドキュメントのまとめ
第56回:「SQL Server 2016 への移行とアップグレードの実践」完成&公開!
第55回:書籍「SQL Server 2016の教科書 開発編」(ソシム)が発刊されました
第54回:「SQL Server 2016 プレビュー版 Reporting Services の新機能」自習書のお知らせ
第 53 回:SQL Server 2016 Reporting Services の新しくなったレポート マネージャーとモバイル レポート機能
第 52 回:SQL Server 2016 の自習書を作成しました!
第 51 回:PASS Summit と MVP Summit で進化を確信!
第 50 回:新しくなった Power BI(2.0)の自習書を作成しました!
第49 回:Excel 2016 の Power Query を使う
第 48 回:新しくなった Microsoft Power BI ! 無料版がある!!
第 47 回:「Microsoft Azure SQL Database 入門」 完成&公開!
第 46 回:Microsoft Power BI for Windows app からの Power BI サイト アクセス
第 45 回:Power Query で取得したデータを PowerPivot へ読み込む方法と PowerPivot for Excel 自習書のご紹介
第44回:「SQL Server 2014 への移行とアップグレードの実践」ドキュメントを作成しました
第43回:SQL Server 2014 インメモリ OLTP 機能の上級者向けドキュメントを作成しました
第42回:Power Query プレビュー版 と Power BI for Office 365 へのクエリ保存(共有クエリ)
第41回:「SQL Server 2014 CTP2 インメモリ OLTP 機能の概要」自習書のお知らせです
第40回: SQL Server 2012 自習書(HTML版)を掲載しました
第39回: Power BI for Office 365 プレビュー版は試されましたか?
第38回: SQL Server 2014 CTP2 の公開
第37回: SQL Server 2014 CTP1 の自習書をご覧ください
第36回: SQL Server 2014 CTP1 のクラスター化列ストア インデックスを試す
第35回: SQL Server 2014 CTP1 のインメモリ OLTP の基本操作を試す
第34回: GeoFlow for Excel 2013 のプレビュー版を試す
第33回: iPad と iPhone からの SQL Server 2012 Reporting Servicesのレポート閲覧
第32回: PASS Summit 2012 参加レポート
第31回: SQL Server 2012 Reporting Services 自習書のお知らせ
第30回: SQL Server 2012(RTM 版)の新機能 自習書をご覧ください
第29回: 書籍「SQL Server 2012の教科書 開発編」のお知らせ
第26回: SQL Server 2012 の Power View 機能のご紹介
第25回: SQL Server 2012 の Data Quality Services
第24回: SQL Server 2012 自習書のご案内と初セミナー報告
第23回: Denali CTP1 が公開されました
第22回 チューニングに王道あらず
第21回 Microsoft TechEd 2010 終了しました
第20回 Microsoft TechEd Japan 2010 今年も登壇します
第19回 SQL Server 2008 R2 RTM の 日本語版が公開されました
第18回 「SQL Azure 入門」自習書のご案内
第17回 SQL Server 2008 自習書の追加ドキュメントのお知らせ
第16回 SQL Server 2008 R2 自習書とプレビュー セミナーのお知らせ
第15回 SQL Server 2008 R2 Reporting Services と新刊のお知らせ
第14回 TechEd 2009 のご報告と SQL Server 2008 R2 について
第13回 SQL Server 2008 R2 の CTP 版が公開されました
第12回 MVP Summit 2009 in Seattle へ参加