やる気駆動型エンジニアの備忘録

WPF(XAML+C#)の話題を中心に.NET/Android/CI やたまに趣味に関するブログです

Team Foundation Serverデータベースの復元方法メモ

新年早々にサーバー機の新調に伴い、Team Foundation Serverのバックアップと復元を行ったのですが、かなり手こずったので手順をメモメモ
オチ的には、「TFS 管理コンソールのバックアップ・復元機能は使用しないほうがいい」ということでした。


使用する環境はこんな感じです。

バックアップサーバーを"サーバー A"、復元サーバーを"サーバー B"とします。
どちらも以下の環境を使用しています。

・OS:Windows Server 2012 R2
Team Foundation Server 2012 Update4
SQL Server 2012 Standard SP3

1. TFS 復元手順

  1. Team Foundation Server 管理コンソールから"サーバー A" の全てのプロジェクトコレクションを[停止]→[デタッチ]する。
  2. SQL Server Management Studio から上記のプロジェクトコレクションに該当するDBをバックアップする。(※1)
  3. "サーバー B"のTeam Foundation Server 管理コンソールから[インストール構成]-[詳細]を選択する。
  4. 構成(Tfs_Configuration)のみ作成し、"レポート"、"Share Point"、"デフォルトコレクション"は作成しない。
  5. "サーバー B"からSQL Server Management Studio を使用してバックアップしたDBを復元する。
  6. Team Foundation Server 管理コンソールの[チーム プロジェクト コレクション]-[コレクションのアタッチ]を選択して復元したDBへアタッチする。

この手順を実行してVS上でプロジェクトが表示されない場合は、【セキュリティの管理設定】でユーザーorグループを追加する。

※1.プロジェクトコレクションのDBは、"Tfs_プロジェクトコレクション名"という形式で作成されている。

2. セキュリティの管理設定

Team Foundation Server 管理コンソールからTFSのコレクション操作権限を設定するための機能です。
コレクション全体の設定は、[アプリケーション層]-[セキュリティの管理]から追加します。
コレクションごとの設定は、[チーム プロジェクト コレクション]-[コレクションを選択]-[セキュリティの管理]から追加します。

3. TFSの復元でうまく行かなかったこと

TFS 管理コンソールのバックアップ・復元機能を使用して復元を行う。

[現象]
まず、TFS 管理コンソールからバックアップすることは可能だった。
しかし、バックアップしたデータ(DB)を復元することができなかった。
復元を実行してもTFS 管理コンソールの[チーム プロジェクト コレクション]にはコレクションが表示されないが、SQL ServerにはDBが復元されているという現象が発生した。

[原因]
現時点では不明。
ログを見たりエラー番号で検索する限り、"DBの接続文字列が異なっている"や"SQL Serverインスタンス バージョンとDBバージョンが一致していないため"などが挙げられていた。
TFS のDBを見る限り、SQL Serverの接続文字列やTFSの構成情報を持っているので環境が変わるとそのあたりの情報が整合性が取れなくなっているのでは???

[対策]
上記の【復元手順】の通りに実行するとエラーが発生することなく実行できた。
TFS 管理コンソールのバックアップ・復元機能は使用せず、バッチでコレクションの停止、デタッチ、バックアップ、アタッチ、開始を行う必要がある。
このあたりはJenkinsなどのCIツールを使いたい。