TFSのメンテナンス【ver.12】

# はじめに
(ver.12)
　TFSでもBugspots試せそうなのでやってみたい...
(ver.11)
　作業項目の追加/変更/削除
(ver.10)
　TFS 2015のデータベースファイル(mdf)を減少させたい...
(ver.9)
　TFS 2015にSonarQubeをお試し導入
　　※導入はせずに参考サイトを調べるまで...
(ver.8)
　ver.4の問題が発生して、今回実際に対応が必要になった...
　　※このタイミングで再度サイトも確認したので追記
(ver.7)
　TFS 2015をデタッチ/再アタッチした後、SonarQubeが動かない
(ver.6)
　TFS 2015をデタッチ/再アタッチした後、コレクション管理ページにアクセスない
(ver.5)
　サーバ名やIPアドレス変更に伴って、TFSが動かない...
(ver.4)
　急にデータベースファイル(mdf,ldf)サイズの日次増加が数十GB単位になる...
　またしても枯渇の危機(ToT)
(ver.3)
　ついに別ドライブデータ移動が待ったなしとなる...
　事前準備をきちんとした結果、無事別ドライブデータ移動に成功!!
(ver.2)
　HDD容量を日次監視していて、まだ大丈夫だろうと油断していたら
　いきなり０に(ToT)
　※原因分析これからだけど、今は対策考えないと
(ver.1)
　ずっと動かしていると、Cドライブの容量がやばくなってきた...
　動かなくなる前に対策取っておかないと(ToT)

---
## ver.12
```bat:bugspot.bat
sqlcmd -S WS12R2ja-TFS\TFS -E -i bugspot.sql -o result.log
```
```sql:bugspot.sql
DECLARE @T_FILE table (
    ID int identity(1, 1),
    ItemId int,
    [PATH] nvarchar(4000),
    [FILENAME] nvarchar(4000),
    COUNT_CHECKIN int,
    DATE_CREATE] datetime,
    DATE_LAST_UPDATE datetime,
    ALIVE_MINUTES money
)

DECLARE @T_CHECKIN table (
    ID int identity(1, 1),
    FileId int,
    ItemId int,
    DATE_CHECKIN datetime,
    DATE_CREATE_AS_SAMEFILE datetime,
    TIMING float(53)
)

INSERT INTO @T_FILE
SELECT
    tbl_VersionedItem.ItemId,
    REPLACE(REPLACE(tbl_VersionedItem.ParentPath, '>', '_'), '\', '/') AS [PATH],
    REPLACE(REPLACE(tbl_VersionedItem.ChildItem, '>', '_'), '\', '') AS [FILENAME],
    T_FILE.[COUNT] AS COUNT_CHECKIN,
    T_FILE.MIN_DATE_UPDATE,
    T_FILE.MAX_DATE_UPDATE,
    DATEDIFF(D, T_FILE.MIN_DATE_UPDATE, T_FILE.MAX_DATE_UPDATE)
FROM
    tbl_VersionedItem
    INNER JOIN (
        SELECT
            tbl_File.ItemId,
            COUNT(*) AS [COUNT],
            MIN(tbl_File.CreationDate) AS MIN_DATE_UPDATE,
            MAX(tbl_File.CreationDate) AS MAX_DATE_UPDATE
        FROM
            tbl_File
        GROUP BY
            tbl_File.ItemId
    ) AS T_FILE ON tbl_VersionedItem.ItemId = T_FILE.ItemId

INSERT INTO @T_CHECKIN
SELECT
    tbl_File.FileId,
    tbl_File.ItemId,
    tbl_File.CreationDate,
    A_FILE.DATE_CREATE] AS DATE_CREATE_AS_SAMEFILE,
    null
FROM
    tbl_File
    LEFT OUTER JOIN @T_FILE AS A_FILE ON tbl_File.ItemId = A_FILE.ItemId

UPDATE @T_CHECKIN
SET DATE_CREATE_AS_SAMEFILE = ISNULL(MIN_CHECKIN.MIN_DATE, NULL)
FROM
    @T_CHECKIN AS A_CHECKIN
    LEFT OUTER JOIN (
        SELECT
            tbl_File.ItemId,
            MIN(tbl_File.CreationDate) AS MIN_DATE
        FROM
            tbl_File
        GROUP BY
            tbl_File.ItemId
    ) AS MIN_CHECKIN ON A_CHECKIN.ItemId = MIN_CHECKIN.ItemId

UPDATE @T_CHECKIN
SET TIMING = CONVERT(float(53), DATEDIFF(D, DATE_CREATE_AS_SAMEFILE, DATE_CHECKIN)) / CONVERT(float(53), DATEDIFF(D, DATE_CREATE_AS_SAMEFILE, GETDATE()))
WHERE
    DATEDIFF(D, DATE_CREATE_AS_SAMEFILE, GETDATE()) <> 0

SELECT
    A_FILE.[PATH],
    A_FILE.[FILENAME],
    T_SCORE.SCORE
FROM
    @T_FILE AS A_FILE
    INNER JOIN (
        SELECT
            A_CHECKIN.ItemId AS ItemId,
            SUM(1/(1+EXP(-12*TIMING+12))) AS SCORE
        FROM
            @T_CHECKIN AS A_CHECKIN
        GROUP BY
            A_CHECKIN.ItemId
    ) AS T_SCORE ON A_FILE.ItemId = T_SCORE.ItemId
ORDER BY
    T_SCORE.SCORE desc
```
### 参考サイト
◆グーグルのバグ予測アルゴリズムを実装したツール「bugspots」について
　https://qiita.com/okappy/items/e5fc62f9026e0d73c3e9
◆TFS版バグ予測ツール
　https://qiita.com/1987yama3/items/5d72114e3061cbda1239
◆bugspots3 0.1
　https://pypi.org/project/bugspots3/0.1/

## ver.11
やりたいこと
　・作業項目の追加/編集/削除
　・
```bat:analyze.bat
> cd "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer"

REM 実行できるコマンド(機能)を把握　※下記のexportができる＝編集可能
> witadmin /?
exportagileprocessconfig
exportcategories
exportcommonprocessconfig
exportgloballist
exportglobalworkflow
exportlinktype
exportprocessconfig
exportwitd

REM 作業項目のリストを取得
> witadmin listwitd /collection:http://localhost:8080/tfs/Development /p:ScrumProject
タスク
バグ
コード レビュー要求
コード レビュー応答
エピック
機能
フィードバック要求
フィードバック応答
懸案事項
プロダクト バックログ項目
共有ステップ
共有パラメーター
テスト ケース
テスト計画
テスト スイート

REM 編集したい作業項目をエクスポート
> witadmin exportwitd /collection:http://localhost:8080/tfs/Development /p:ScrumProject /n:"プロダクト バックログ項目" /e:utf-8 > C:\work\Backlog.xml

REM ～何らかの編集～

REM 作業項目のインポート(/vオプションで検査⇒成功すると下記の実行結果になる)
> witadmin importwitd /collection:http://localhost:8080/tfs/Development /p:ScrumProject /f:C:\work\Backlog.xml /e:utf-8 /v
作業項目の種類は有効です。

REM 作業項目のインポート
> witadmin importwitd /collection:http://localhost:8080/tfs/Development /p:ScrumProject /f:C:\work\Backlog.xml /e:utf-8
作業項目の種類のインポートが完了しました。
```
### 参考サイト
◆TFSの作業項目をプロジェクトに合わせてカスタマイズする（前編）
　https://codezine.jp/article/detail/3965?mode=print
◆TFSの作業項目をプロジェクトに合わせてカスタマイズする（後編）
　https://codezine.jp/article/detail/4092?mode=print
◆フィールドの規則を使ってTFSの作業項目を高度に作りこむ
　https://codezine.jp/article/detail/4346?mode=print
　　※作業項目をカスタマイズする際に必要な情報がたくさん...貴重！！
◆Team Foundation Server(TFS) で管理しているファイルの検索方法
　https://qiita.com/mgotodev/items/4e46af37c41173f36fae
◆Team Foundation Server で作業項目(WIT)の新規追加
　https://qiita.com/ruirui1968/items/1cd9728b51f2c6eee187
　　※/v オプションを指定することで、インポートはせず検査だけ実施⇒「作業項目の種類は有効です」
◆TFSで作業項目タイプ（WIT）を削除する
　https://qiita.com/ash2z/items/5d3da4a0185d6e437e0d
◆TFSの作業項目のカスタマイズは簡単にできます
　https://matsukawar.hatenablog.com/entry/20151219/1450537700

◆Azure Boards と Azure DevOps の数値フィールドでクエリを実行する
　https://learn.microsoft.com/ja-jp/azure/devops/boards/queries/query-numeric?view=azure-devops
◆作業項目の種類をバックログとボードに追加する
　https://learn.microsoft.com/ja-jp/azure/devops/reference/add-wits-to-backlogs-and-boards?view=azure-devops
◆ポートフォリオ バックログ レベルを追加する
　https://learn.microsoft.com/ja-jp/azure/devops/reference/add-portfolio-backlogs?view=azure-devops
◆プロセス構成 XML 要素のリファレンス
　https://learn.microsoft.com/ja-jp/azure/devops/reference/xml/process-configuration-xml-element?view=azure-devops-2022


## ver.10
```bat:analyze.bat
REM Test Attachment Cleanerコマンド操作(プレビュー)
"C:\Program Files (x86)\Microsoft Team Foundation Server 2015 Power Tools\tcmpt.exe" attachmentCleanup /collection:http://localhost:8080/tfs/Development /teamProject:ScrumProject /settingsFile:largeAttachment.xml /mode:preview

"C:\Program Files (x86)\Microsoft Team Foundation Server 2015 Power Tools\tcmpt.exe" attachmentCleanup /collection:http://localhost:8080/tfs/Development /teamProject:ScrumProject /settingsFile:deleteSettings.xml /mode:preview

REM TFSで管理しているファイル検索
"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer\TF.exe" vc dir /recursive /collection:http://localhost:8080/tfs/Development $/*
```
```xml:largeAttachment.xml
<!-- Scenario : Remove large files -->
<DeletionCriteria>
    <TestRun />
    <Attachment>
        <SizeInMB GreaterThan="10" />
    </Attachment>
</DeletionCriteria>
```
```xml:deleteSettings.xml
<!-- Scenario : Remove specific files early -->
<DeletionCriteria>
    <TestRun >
        <AgeInDays OlderThan="30" />
    </TestRun>
    <Attachment>
        <SizeInMB GreaterThan="10" />
        <Extensions>
            <Include value="iTrace"/>
            <Include value="dll"/>
            <Include value="pdb"/>
            <Include value="wmv"/>
        </Extensions>
    </Attachment>
    <LinkedBugs>
        <Exclude state="Active" />
        <Exclude state="Resolved" />
    </LinkedBugs>
</DeletionCriteria>
```
```sql:analyze.sql
-- tbl_Contentの増加量確認
select DATEPART(yyyy, CreationDate) as [year],
  DATEPART(mm, CreationDate) as [month],
  count(*) as [count],
  SUM(DATALENGTH(Content)) / 1048576.0 as [Size in Mb],
  (SUM(DATALENGTH(Content)) / 1048576.0) / count(*) as [Average Size]
from tbl_Content
group by DATEPART(yyyy, CreationDate),
    DATEPART(mm, CreationDate)
order by DATEPART(yyyy, CreationDate),
    DATEPART(mm, CreationDate)

-- DB別のファイルサイズ容量
SELECT DB_NAME(database_id) AS DBName, (size/128) SizeInMB
  FROM sys.master_files 
  WHERE type=0  AND substring(db_name(database_id),1,4)='Tfs_' AND DB_NAME(database_id)<>'Tfs_Configuration'
  ORDER BY size desc

-- ファイルサイズが大きいTOP1000
select top 1000 
  a.ResourceId
  ,a.FileLength
  ,a.CompressedLength
  ,b.FileName
  ,b.FileId
  ,c.ChildItem
  ,c.FullPath
   from [dbo].[tbl_FileMetadata] as a
   left join [dbo].[tbl_FileReference] as b on a.ResourceId=b.ResourceId
   left join [dbo].[tbl_Version] as c on b.FileId=c.FileId
   order by a.CompressedLength desc

-- テーブル別の利用容量
USE Tfs_Development
CREATE TABLE #t 
( [name] NVARCHAR(128), [rows] CHAR(11), reserved VARCHAR(18), 
data VARCHAR(18), index_size VARCHAR(18), unused VARCHAR(18))
GO
INSERT #t
EXEC [sys].[sp_MSforeachtable] 'EXEC sp_spaceused "?"'
GO
SELECT
name as TableName,
Rows,
ROUND(CAST(REPLACE(reserved, ' KB', '') as float) / 1024,2) as ReservedMB,
ROUND(CAST(REPLACE(data, ' KB', '') as float) / 1024,2) as DataMB,
ROUND(CAST(REPLACE(index_size, ' KB', '') as float) / 1024,2) as IndexMB,
ROUND(CAST(REPLACE(unused, ' KB', '') as float) / 1024,2) as UnusedMB
FROM #t
ORDER BY CAST(REPLACE(reserved, ' KB','') as float) DESC
GO
Drop table #t
```
---
### 参考サイト
◆【TFS】 Team Foundation Server に巨大ファイルをチェックインしてしまったときの対処
　https://tech.d-itlab.co.jp/programming/352/
　　※これで一度削除したコレクションをdestroyしてみるか...
◆Microsoft Visual Studio Team Foundation Server 2015 Power Tools
　https://marketplace.visualstudio.com/items?itemName=TFSPowerToolsTeam.MicrosoftVisualStudioTeamFoundationServer2015Power
　　※後でダウンロード＆お試し導入
◆Attempting to Reduce size of TFS database using Test Attachment Cleaner
　https://tatvog.wordpress.com/2015/11/06/116/
　　※後でこのコマンドを実施してデータ圧縮できることを...
◆Guide to reduce TFS database growth using the Test Attachment Cleaner
　https://hermit.no/guide-to-reduce-tfs-database-growth-using-the-test-attachment-cleaner/
　　★ここの調査用コマンドをTFS2015用に...

◆TFS2015 tbl_Content increase
　https://stackoverflow.com/questions/44158019/tfs2015-tbl-content-increase

---
◆SQL Serverのデータファイルを圧縮する
　https://sql-oracle.com/sqlserver/?p=481
◆【SQL Server】データベースの容量を圧縮する
　https://sql-oracle.com/sqlserver/?p=476
◆SQLサーバー　データベースの圧縮
　http://momochiro11.blog111.fc2.com/blog-entry-88.html
◆これでスッキリ！！　SQLServerダイエット！
　https://tech.sanwasystem.com/entry/2015/08/31/225815
　　※DBに負荷をかけているクエリを探す方法が書かれている
◆え！？86億行がここまで！SQLServerデータ圧縮の実力
　https://tech.sanwasystem.com/entry/2015/06/26/112456
◆SQL Server で tempdb データベースを圧縮する方法
　https://support.microsoft.com/ja-jp/topic/sql-server-%E3%81%A7-tempdb-%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%82%92%E5%9C%A7%E7%B8%AE%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95-ea0a95c2-eff8-7075-9ee2-2ee42226ca1c
◆ファイルを圧縮する方法 (SQL Server Management Studio)
　https://learn.microsoft.com/ja-jp/previous-versions/sql/sql-server-2008-r2/ms190757(v=sql.105)
◆データベースの圧縮
　https://learn.microsoft.com/ja-jp/sql/relational-databases/databases/shrink-a-database?view=sql-server-2016
◆SUSDB.mdf が肥大化したときの対処方法について
　https://social.msdn.microsoft.com/Forums/sqlserver/en-US/046985af-ee5a-47f3-a642-ac3e41f30608/susdbmdf?forum=jpsccmwsus


## ver.09
### 参考サイト
★SonarQube導入(6.7.2)調査
◆Releases ? SonarSource/sonarqube ? GitHub
　https://github.com/SonarSource/sonarqube/releases
①SonarQubeインストール
　□JREインストール
　　※jre-8u151-windows-x64.exe
　□SonarQubeインストール
　　https://www.sonarqube.org/downloads/
　　※sonarqube-6.7.2.zip
◆Installing SonarQUBE on windows and SQL Server
　https://www.codewrecks.com/post/old/2015/10/installing-sonarqube-on-windows-and-sql-server/
◆WindowsにPostgreSQL対応のSonarQubeをインストールする方法
　https://qiita.com/5zm/items/c8b0119348803812462f
◆SonarQube のセットアップ手順
　http://mtomtankfeint.blogspot.com/2016/08/sonarqube.html
◆TFS2015のビルドでSonarQube分析を実行：その１
　https://black-techmemo.net/tfs/tfs2015/1313/
◆TFS2015のビルドでSonarQube分析を実行：その２
　https://black-techmemo.net/tfs/tfs2015/1314/
　　①SQL Server 2014 構成マネージャー(Sql Server Configuration Manager)設定
　　　▽[SQL Server ネットワークの構成]-[TFS のプロトコル]を選択
　　　　[TCP/IP]のプロパティを開く
　　　▽[IPアドレス]タブを選択して下記を設定
　　　　・IPAⅡの設定
　　　　　TCP ポート    ：1433
　　　　　TCP 動的ポート：空
　　②SQL Serverへログインするユーザー作成（SQLServer認証ユーザー）
　　　▽SQL Server 2014 Management Studioを起動
　　　▽[サーバーへの接続]ウィンドウで[接続]を押下
　　　▽左メニューのオブジェクトエクスプローラーの[セキュリティ]-[ログイン]を右クリックして[新しいログイン]を押下
　　　　▽[ログイン - 新規作成]ウィンドウで下記を設定
　　　　　・[ページの選択]-[全般]
　　　　　　ログイン名：sonar
　　　　　　※SQL Server認証を選択
　　　　　　※パスワード：Admin1234
　　　　　　※下記設定
　　　　　　　パスワード ポリシーを適用する：チェック
　　　　　　　パスワードの期限を適用する   ：チェック外す
　　③SQL Serverのデータベース生成
　　　▽SQL Server 2014 Management Studioを起動
　　　▽[サーバーへの接続]ウィンドウで[接続]を押下
　　　▽左メニューのオブジェクトエクスプローラーの[データベース]を右クリックして[新しいデータベース]を押下
　　　　▽[新しいデータベース]ウィンドウで下記を設定
　　　　　・[ページの選択]-[全般]
　　　　　　データベース名：Sonar
　　　　　　所有者        ：sonar
　　　　　・[ページの選択]-[オプション]
　　　　　　照合順序：SQL_Latin1_General_CP1_CS_AS
　　　　▽[OK]を押下
　　④SQL Serverの認証方式変更
　　　▽SQL Server 2014 Management Studioを起動
　　　▽[サーバーへの接続]ウィンドウで[接続]を押下
　　　▽左メニューのオブジェクトエクスプローラーのトップアイコンを右クリックして[プロパティ]を押下
　　　　▽[サーバーのプロパティ - ***]ウィンドウで下記を設定
　　　　　・[ページの選択]-[セキュリティ]
　　　　　　サーバー認証：SQL Server 認証モードとWindows 認証モード
　　　　▽[OK]を押下
　　⑤SQL Serverの再起動
　　　▽Sql Server Configuration Managerを起動
　　　▽左メニューの[SQL Server のサービス]を選択
　　　▽右プロパティの[SQL Server (TFS)]を右クリックして[再起動]を選択
　　　※参考サイト
　　　　◆SQL Server > エラー:18456 でログインできない場合
　　　　　https://qiita.com/sugasaki/items/a95c2495085e32851707
　　⑥コマンド プロンプトでの各種確認
　　　・データベース接続
　　　　sqlcmd -S WS12R2ja-TFS -U sonar -P Admin1234
　　　　※参考サイト
　　　　　◆コマンドプロンプトでSQL Serverを使う
　　　　　　https://qiita.com/chihiro/items/75b12aca631f79be28b2
　　　・データベース情報確認
　　　　1> SELECT name, collation_name FROM sys.databases WHERE name = N'Sonar';
　　　　2> GO
　　⑦JREインストール
　　⑧

## ver.08
### 参考サイト
◆HowTo: Management Studio を使ってトランザクションログファイル (ldf) のサイズを小さくする方法
　https://social.technet.microsoft.com/Forums/ja-JP/e3696294-cbb4-430a-88dd-6a2ec02fc213/howto-management-studio
　　※今回はここにあるサイトの対応を実施して、トランザクションログファイルのサイズを小さくすることで対応!!
　　　TFSの定期バックアップ(この場合、バックアップ先はmdfサイズ分のHDD容量が必要。最初、トランザクションログファイルもいるかと思って手詰りになりそうだった...)を実施しておくことは必要だと感じた。

◆SQL Server データベースのバックアップと復元 - SQL Server 2014 | Microsoft Docs
　https://docs.microsoft.com/ja-jp/previous-versions/sql/2014/relational-databases/backup-restore/back-up-and-restore-of-sql-server-databases?view=sql-server-2014
　　※msdnのドキュメントはここから対象箇所に参照

◆SQLServer: ◆オンラインバックアップ
　http://mtgsqlserver.blogspot.com/2013/02/blog-post_20.html#39

## ver.07
### 参考サイト
◆Installing SonarQUBE on windows and SQL Server
　https://www.codewrecks.com/post/old/2015/10/installing-sonarqube-on-windows-and-sql-server/
◆SonarQube: Installation Walkthrough for Windows and SQL Server Express
　https://improveandrepeat.com/2017/11/sonarqube-installation-walkthrough-for-windows-and-sql-server-express/
　※新規構築だからこの辺の設定は必要そうだ...試してみよう。

◆SQL Serverに外部から接続する備忘録
　https://sara.jiin.com/other/sql.html
◆SQL Server 構成マネージャーで表示される IP アドレスの追加方法
　https://blog.engineer-memo.com/2012/04/21/sql-server-%e6%a7%8b%e6%88%90%e3%83%9e%e3%83%8d%e3%83%bc%e3%82%b8%e3%83%a3%e3%83%bc%e3%81%a7%e8%a1%a8%e7%a4%ba%e3%81%95%e3%82%8c%e3%82%8b-ip-%e3%82%a2%e3%83%89%e3%83%ac%e3%82%b9%e3%81%ae%e8%bf%bd/
　　※ここをベースに設定値に違いがないかを確認!!

◆SQL Server の名前付きインスタンスのポート解決について
　https://blog.engineer-memo.com/2010/02/21/sql-server-%E3%81%AE%E5%90%8D%E5%89%8D%E4%BB%98%E3%81%8D%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B9%E3%81%AE%E3%83%9D%E3%83%BC%E3%83%88%E8%A7%A3%E6%B1%BA%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/
　※これはこれで内容を理解しておかないと...

◆Microsoft Azure - SonarQube と TFS による技術的負債の管理
　https://docs.microsoft.com/ja-jp/archive/msdn-magazine/2015/november/microsoft-azure-manage-technical-debt-with-sonarqube-and-tfs
◆Continuous Delivery with TFS: Track Technical Debt with SonarQube
　https://pleasereleaseme.net/continuous-delivery-with-tfs-track-technical-debt-with-sonarqube/

## ver.06
### 参考サイト
◆TFS 2015をデタッチ/再アタッチした後、コレクション管理ページにアクセスできません
　https://bugfix.plus/info-323222.htm
◆Can't access collection admin page after detach / reattach
　https://social.msdn.microsoft.com/Forums/silverlight/en-US/a31160d4-0bca-4d94-8444-6cd0f4f01da4/cant-access-collection-admin-page-after-detach-reattach?forum=tfsgeneral
　※ここで解説されているように、SQL Serverのデータを更新する必要がありそう...

◆VS402375: Can't find the process associated with team project
　https://social.msdn.microsoft.com/Forums/en-US/27675214-5212-460d-8789-f732255e6e54/vs402375-cant-find-the-process-associated-with-team-project?forum=tfsprocess
◆コマンドラインでSQL Serverを使う最低限のメモ
　https://qiita.com/zaburo/items/6edf7c05c5d4f5e039eb
◆コマンドラインから SQL Server を制御
　https://fyts.hatenadiary.org/entry/20070706/sql
◆【初級編④】SQL Server Management Studio の基本的な操作方法(2/2)
　https://kaya-soft.com/sqlserver2008-toranomaki/beginner/query-editor/
　　※多分SQL Server Management Studioで操作した方が良さげ...

◆TFS Power Toolsに含まれるPowerShellコマンドレット
　https://kkamegawa.hatenablog.jp/category/TFS?page=1326034800
　　※全然関係ないが、見つけたのでリマインダー

## ver.05
### 参考サイト
◆TFS/VSTSのビルドタスク作成：拡張機能インストーラーの作成／展開
　https://black-techmemo.net/tfs/tfs2017/1353/
◆DB のアタッチ
　http://surferonwww.info/BlogEngine/post/2010/09/13/ACL-setting-and-database-attaching-in-SQL-Server.aspx
◆SQL Server アンインストールの手順（SSS for Windows）
　https://www.yukisoft.co.jp/faq/sqlserver_uninstall_sss.pdf
◆SQLServerを完全アンインストールする手順
　https://www.hiskip.com/pg-notes/database/sqlserver/1601.html
◆SQLServerを完全アンインストールする
　https://qiita.com/sakkuntyo/items/96fd79ff5102aa3439f9


## ver.04
一旦、やることを整理
※作業に影響が出ないよう、深夜にオンラインでコマンド実行できないと厳しい...

①下記サイトを査読
　◆【SQLServer】知ってた？トランザクションログバックアップが、ログ削除の方法です。
　　http://plus-sys.jugem.jp/?eid=391
　　　※仕組みの解説がされている...まずはここから

　◆SQL Server データベースのバックアップと復元
　　https://docs.microsoft.com/ja-jp/sql/relational-databases/backup-restore/back-up-and-restore-of-sql-server-databases?view=sql-server-2014
　　　★☆★ここのサイトを一通り読んでポイントやキーワードを理解
　　　　※復旧モデル(単純/完全)、

　◆SQL Server のログが小さくならない場合の対処法
　　https://fyts.hatenadiary.org/entry/20080318/log
　　　★☆★以下、ポイント
　　　　※方法1: 復旧モデル「単純」を利用
　　　　※方法2: ログのバックアップを利用して圧縮
　　　　※下記サイトを理解してコマンド発行して状況を把握
　　　　　◆トランザクション ログ (SQL Server)
　　　　　　https://docs.microsoft.com/ja-jp/sql/relational-databases/logs/the-transaction-log-sql-server?view=sql-server-2014

②下記を把握した上で、スクリプトを実施する/しない判断
　◆PowerShellでSQL Serverの古いログ関係を削除する
　　https://kkamegawa.hatenablog.jp/entry/2014/12/25/053334
　　　※コマンドチェック＆お試し

③①で仕組みを把握した上で、下記を実施
　◆HowTo: Management Studio を使ってトランザクションログファイル (ldf) のサイズを小さくする方法
　　https://blogs.msdn.microsoft.com/jpsql/2017/09/29/howto-management-studio-ldf/
　　　※サイズの圧縮系（試す価値はあるかもだが、きちんと読まないと...）
　以下、トラブルシューティングねた
　◆1日に1回再起動するシステムでトランザクションログファイルが肥大化した（ファイル管理トラブル） (1/2)
　　https://www.atmarkit.co.jp/ait/articles/1709/19/news001.html
　◆数年間安定稼働しているシステムで、システムデータベースが肥大化した（ファイル管理トラブル） (1/2)
　　https://www.atmarkit.co.jp/ait/articles/1709/11/news002.html

## ver.03
■TFSファイル キャッシュ フォルダーのパス変更
　⇒　Cドライブにフォルダー(C:\TfsData\ApplicationTier\_fileCache)を残しておかないとTFSのサイトにアクセスできない問題があったのですが、下記の対応をすることで容量が増えないようにうまく対応できた。

```shell:symboliclink.bat
MKLINK /D C:\TfsData\ApplicationTier\_fileCache E:\TfsData\ApplicationTier\_fileCache
```

■SQL Server のデータベースファイル(mdf,ldf)を別ドライブに移動
　※最終的に、下記操作手順でうまくいった!!HDD枯渇でコレクションが停止できず肝を冷やしましたが...やっぱり、ギリギリまで不要ファイルを削除するのはこういう時に怖い。
　▽操作手順めも
　　▽IIS＠TFSのアプリケーションプール停止
　　　※Microsoft Team Foundation Server Appication Pool
　　　※Microsoft Team Foundation Server Message Queue Appication
　　▽TFS＠コレクション停止
　　▽TFS＠コレクションデタッチ　★要時間計測(mdf,ldfサイズ／経過時間)
　　▽Microsoft SQL Server Management Studio
　　　＠対象DBを右クリック－[タスク]－[デタッチ]
　　　　※データベースのデタッチ　★要時間計測(mdf,ldfサイズ／経過時間)
　　▽ファイル移動(ロールバックを想定してファイルコピー)
　　　<C:\Program Files\Microsoft SQL Server\MSSQL12.TFS\MSSQL\DATA>
　　▽Microsoft SQL Server Management Studio
　　　＠データベースを右クリック－[アタッチ]
　　　　※データベースのインポート
　　▽TFS＠コレクションアタッチ
　　　※[コレクションのアタッチ]を選択すると自動的に対象データベースが表示される
　　　※[検証]ボタンを押下してチェック
　　　※[アタッチ]を実行　★要時間計測(mdf,ldfサイズ／経過時間)
　　▽IIS＠TFSのアプリケーションプール開始
　　▽接続確認　★表示まで時間かかりそう...
　　　・バックログ関連操作
　　　・Git関連操作
　▽各種コマンド調査

```shell:tfsDataMove.bat
REM TFS＠サービス停止
REM  ※IISのアプリケーションプール/Windowsサービス(は停止対象ない模様)
"C:\Program Files\Microsoft Team Foundation Server 14.0\Tools\TfsServiceControl.exe" quiesce

REM TFS＠コレクション停止
REM  ※UIでの操作のみの模様...(ToT)

REM TFS＠コレクションデタッチ
"C:\Program Files\Microsoft Team Foundation Server 14.0\Tools\TfsConfig.exe" Collection /detach /CollectionName:Development

REM TFS＠コレクション削除
"C:\Program Files\Microsoft Team Foundation Server 14.0\Tools\TfsConfig.exe" Collection /delete /CollectionName:Development

REM TFSのサービス起動
"C:\Program Files\Microsoft Team Foundation Server 14.0\Tools\TfsServiceControl.exe" unquiesce

REM ★未検証
REM SQL Serverの停止
net stop MSSQLSERVER

REM robocopyによるバックアップ
robocopy "C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA" "E:\TFS_BACKUP" /MIR

REM SQL Serverの開始
net start MSSQLSERVER

```

## ver.02
■ファイル キャッシュ フォルダーのパス変更
　※参考サイト①を見るとわかるが、デフォルトがCドライブなので、
　　[Team Foundation Server 管理コンソール]で別ドライブに設定
　　（ただ、一部はCドライブ上に存在し続ける模様...git系な気がする）
■使っていないデータ/不要データを探す
　※未稼働のシステムデータベースや復旧時に利用したデータベースがあったため、
　　参考サイト②を参考に以下を実施（これでしばらくはver.3が不要になりそう）
　　・未稼働のシステムデータベースは、構成マネージャツールを利用して、SQL Serverサービスを全停止＆サービス無効化してから、ファイルを移動
　　・復旧時に利用したデータベースは、Microsoft SQL Server Management Studio経由でデタッチを実施してから、ファイルを移動

## ver.01
■SQL Server関連でやれることはないか...
　※なぜなら、ほとんどSQL Server内のデータで容量が圧迫している
　　(gitの不要ブランチ等を削除すると減ったりしないかなぁ...)
　　⇒　一旦、SQL Server関連はざっと調べた。後はTFS/git関連で何かヒットしないかなぁ～
■ページファイルのサイズ変更
　⇒　実施済、既に限界が来ている...

# 参考サイト
## バックアップ/リストア関連
◆TFSサーバー移設の失敗談
　https://qiita.com/naojin/items/96e4a8a9cd36a5d9a491

◆Team Foundation Serverデータベースの復元方法メモ
　https://iyemon018.hatenablog.com/entry/2017/01/10/164548
◆TFSのコレクションのマシンを移動する
　https://rksoftware.wordpress.com/2013/06/17/tfsのコレクションのマシンを移動する/
◆TFSコレクションの移動
　http://www.meeks.jp/archives/5471
　　※「TFS 管理コンソールのバックアップ・復元機能は使用せず、バッチでコレクションの停止、デタッチ、バックアップ、アタッチ、開始を行う必要がある。」の記載ばかりだが、TFSのバージョンによらないのかなぁ...

◆SQL Server のデータベースファイル移動(mdf,ldf)と圧縮
　https://tksm.org/wp/archives/3455
　　※きっとこれだ。。。

◆満杯になったトランザクション ログのトラブルシューティング (SQL Server エラー 9002)
　https://docs.microsoft.com/ja-jp/sql/relational-databases/logs/troubleshoot-a-full-transaction-log-sql-server-error-9002?view=sql-server-2014
　　※別のディスクへのログ ファイルの移動系(経験上、最終的にはこれか...)

◆TFS2010から2018への移設
　http://sabotenbros.blogspot.com/2019/11/tfs20102018.html?m=0
　　※デタッチの必要性が書かれているので、失敗したらここにある通りやろう...

◆TFS2013でのバックアップサービスについて
　https://social.msdn.microsoft.com/Forums/ja-JP/6e3cc3b5-eef4-408b-b51f-7d5553bcb05c/tfs20131239112398124961248312463124501248312503124691254012499124?forum=vstsja
　※「TF401009: TFS サービス アカウント NT AUTHORITY\LOCAL SERVICE はネットワーク共有にアクセスできません。
バックアップ パスにアクセスできるアカウントに変更してください。」
　　というエラーが出たため、サービス アカウントの変更を実施して対応

◆TFSのスケジュールされたバックアップ/復元を使用してTFS 2015データベースをTFS 2018に復元できませんでした
　https://ja.programqa.com/question/50475408/
　　※TFSConfig.exeを利用して変更している

## インストール関連
①Team Foundation Server 2015 Update1 のインストール
　https://www.ipentec.com/document/team-foundation-server-2015-update-tfs-2015-update1
◆Team Foundation Server 2015 Update 3 インストール 手順書 ～ SQL Server インストールから チームプロジェクトの作成まで ～
　https://www.slideshare.net/masakit/team-foundation-server-2015-update-3-sql-server
◆TFS 2015とTFS 2015 Expressの機能比較
　https://kkamegawa.hatenablog.jp/entry/2015/11/24/065902

## SQL Server関連
②SQL Server 実践「SQL Server 2016 への移行とアップグレードの実践」
　http://www.sqlquality.com/ex2016/UpgradeTo2016_ex/Text/Step04-02.html
◆SQL Server関連、インフラ管理者のためのSQL Server知識
　http://www.putise.com/server/sql-server
　　※一旦見直して勉強
◆TFSにおけるSQL Serverの扱い
　https://kkamegawa.hatenablog.jp/entry/20111213/p1
◆SQL Serverトラブルシューティング
　https://www.atmarkit.co.jp/ait/series/3394/index.html
　　※ここのファイル管理トラブル

## 詳細未確認...必要時に見るためのリマインダー
◆Team Foundation Server(TFS)のデータ保存場所（オフラインバックアップ）
　https://tekk.hatenadiary.org/entry/20120401/1333260009
◆SQL Serverの構造を理解する
　https://enterprisezine.jp/dbonline/detail/8016
◆SQL Server のログが小さくならない場合の対処法
　https://fyts.hatenadiary.org/entry/20080318/log
◆Custom report in TFS Regarding Source Control
　https://social.msdn.microsoft.com/Forums/en-US/d02c6fd3-a762-4830-8ec2-63671ed7c9ae/custom-report-in-tfs-regarding-source-control?forum=tfsreporting

# TODO＆Reminder
◆Delete Files task
　https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/utility/delete-files?view=tfs-2015
◆TFS拡張機能(VSTS Variable Tasks)
　https://marketplace.visualstudio.com/_apis/gallery/publishers/jessehouwing/extensions/jessehouwing-vsts-variable-tasks/1.2.8/package?noPrompt=true