# オンプレミス版 サーバーストレージ容量の削減方法

## **各データーの格納場所**

i-Reporterの各データーは、以下のフォルダーに格納されています。

<div align="left"><figure><img src="https://content.gitbook.com/content/9GB3gcd9HVYUxfpndv5d/blobs/nNnNz2cAE2IjJjQk3P7F/image.png" alt=""><figcaption></figcaption></figure></div>

## **アプリケーションログ出力フォルダー**

ConMasサーバーサイドプログラムのログ出力フォルダーです。\
ログファイルのためフォルダーから直接削除が可能です。

**容量の削除方法**

* 過去のログファイルは、削除します。
* ログローテート設定を利用し、一定の容量以上になると、 過去のログファイルから順に削除するように設定します。

{% hint style="info" %}
「[ログローテート設定手順](#rogurtto)」をご参照ください。
{% endhint %}

## **自動出力先フォルダー**

データ自動出力機能によって出力されるファイルの格納フォルダーです。\
出力後は、フォルダーから各ファイルを移動、削除することが可能です。

**容量の削除方法**

* **自動出力機能を利用しない場合：**\
  自動出力機能をOFFにします。\
  すでに、出力されたファイルが存在する場合は、すべて削除します。\ <br>
* **自動出力機能を利用している場合：**
  * 連携目的で使用している場合は、連携済みファイルは削除します。
  * 参照目的で使用している場合は、定期的に別の場所に移動します。

## **図書データー格納フォルダー**

図書データーのファイルが格納されているフォルダーです。

{% hint style="warning" %}
図書データーは、直接フォルダーから削除はできません。
{% endhint %}

**容量の削除方法**

不要な図書がある場合は、ConMas Manager の「図書管理」より削除します。

{% hint style="info" %}
「サ－バー上」の別ディスクに移動させることで削減が可能です。

詳細は、「i-Reporterでドキュメントを参照する ＞ [ConMas Managerでの設定（図書管理機能）](https://manuals.i-reporter.jp/basicoperation/ios-app-basicoperation/viewing-documentation/library-operation) ＞ドキュメントの保存場所の変更 」 をご参照ください。
{% endhint %}

## **PostgreSQLデーター格納フォルダー**

PostgreSQLデーターベースの全データーが格納されているフォルダーです。\
図書ファイルを除く全てのデーターが格納されています。

{% hint style="warning" %}
PostgreSQLは追記型アーキテクチャのDBであることから、レコードの物理削除のみでは利用容量は削減されません。
{% endhint %}

**容量の削除方法**

容量を削除するには**システム停止を伴う作業が必要**となります。

### **PostgreSQLデーター格納フォルダーの容量削減手順**

【手順】

1. i-Reporter帳票&#x3092;**”物理”削除**します。\
   \
   **物理削除の方法**\
   ①ConMasManagerの画面から帳票を選択して物理削除します。\
   ②外部連携APIオプションを使用して物理削除します。

   <div data-gb-custom-block data-tag="hint" data-style="success" class="hint hint-success"><p>削減できる容量は、上記において「物理削除」したデーター量となります。</p></div>

   <br>
2. 下記の2つの方法のどちらかで、DBの容量を削減します。\
   運用やデーターの容量など状況にあった方のみ、どちらか一つ実施します。\
   \
   A）PostgreSQLのメンテナンスツールVacuumFullを実行する手順\
   B）バックアップ、リストアにてDBを再構築する手順

#### **A）VacuumFullを実行する手順**

PostgreSQLのメンテナンスツールVacuumFullを利用して容量を削減する方法です。<br>

**特徴**

* Vacuum.exeをFullオプション指定して実行するのみで、メンテナンス作業がシンプル。
* 実行検証ができないため、実行にかかる時間が事前に確認できない。

  <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p>「<a href="#vacuumfull-shi-xing-shi-jian-mu-an">VacuumFull 実行時間目安</a>」をご参照ください。</p></div>
* 実行するには以下条件を満たしている必要がある。\
  条件：データー格納フォルダーの同一ディスク（パーティション）上にDB使用量の倍の“空き容量”が存在していること。

　　

**操作手順**

1. IISを停止します。<br>

2. VacuumFullを実行します。

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p>「<a href="#vacuumfullbatchisanpuru">VacuumFullバッチサンプル</a>」をご参照ください。</p></div>

3. IISを開始します。

**B）バックアップ、リストアにてDBを再構築する手順**

バックアップ、リストアにてデーターベースを再構築して容量を削減する方法です。

**特徴**

* バックアップ、リストアは事前に確認ができるため、メンテナンスに必要な時間を計測することが可能。
* ディスクサイズが一杯になっている場合でも、バックアップダンプを別ディスク、または外部ストレージへ出力することで作業が行える。
* データーベースを一度抹消するため、作業ミスがあるとデーター復元ができなくなる。

**操作手順**

1. IISを停止します。<br>
2. データーベースを“irepodb”をバックアップします。<br>
3. データーベース”irepodb”を削除（抹消）します。<br>
4. データーベース”irepodb”を作成します。<br>
5. ２.で取得したバックアップダンプを４．のデーターベースにリストアします。<br>
6. IISを開始します。

{% hint style="info" %}
バッチの詳細は、「[参考資料](#can-kao-zi-liao)」 ＞ 各バッチサンプル をご参照ください。
{% endhint %}

## **参考資料**

### **ログローテート設定**

設定は、ConMasManager、ConMasWeb（外部連携オプションをご購入いただいているお客様はConMasAPIも）配下のweb.configにて行います。

【手順】

1. web.configをメモ帳で開きます。
2. "◆◇◆　Log4net設定　◆◇◆" を検索し移動します。
3. log4netエレメント→appenderエレメント配下に以下を差し込みます。\
   appenderエレメントは1つのweb.config上に複数箇所あるため、すべてに差し込んでください。

＊＊＊＊＊＊＊ 差込 ＊＊＊＊＊＊＊\
&#x20;     \<!-- ファイルサイズで Rollong -->\
&#x20;     \<rollingStyle value="Size" />\
&#x20;     \<!-- 最大バックアップファイル数 -->\
&#x20;     \<maxSizeRollBackups value="10" />\
&#x20;     \<!-- ファイルサイズの上限 -->\
&#x20;     \<maximumFileSize value="10MB" />\
＊＊＊＊＊＊＊ 差込 ＊＊＊＊＊＊＊

{% hint style="success" %}
上記は、１つのログファイルの最大容量を10MBとして、最大で10ファイルバックアップと して過去ログファイルを残す設定となります。\
この設定は、変更が可能です。
{% endhint %}

### **VacuumFullバッチサンプル**

```
chcp 65001
SET PGPASSWORD=[PostgreSQLパスワード]
SET VACUUMPGPATH=[vacuumdb.exeのフルパス]
SET DBNAME=[Vacuum対象のデータベース　※既定はirepodb]
SET LOGPATH=[Vacuumログファイルのフルパス]
SET PORT=[PostgreSQLのポート番号 ※既定では5432]

"%VACUUMPGPATH%" -h localhost -U postgres -p %PORT% -f %DBNAME% > %LOGPATH% 2>&1
echo Vacuum ErrorLevel=%ERRORLEVEL% >> %LOGPATH%
```

{% hint style="warning" %}
【注意点】

* 事前にVacuumFull実行条件を確認してください。
* 実行キャンセルは”Ctrl+C”にて行えます。
* 実行後、Vacuumログファイルをメモ帳で開き”errorlevel=0”であることを確認します。
  {% endhint %}

### **VacuumFull 実行時間目安**

**実行環境情報**

* PostgreSQL11
* ストレージ：SSD（IOPS上限＝500, スループット上限（MB/秒）＝60
* メモリー：７G
* CPU:２コア

自動帳票作成でDB容量分の帳票を作成し、約5G分の帳票を物理削除して実行

{% hint style="success" %}
VacuumFull実行条件を満たした環境にて実行しています。
{% endhint %}

<table><thead><tr><th width="138">DB容量(G)</th><th>VacuumFull所要時間(分)</th></tr></thead><tbody><tr><td>10</td><td>11</td></tr><tr><td>50</td><td>106</td></tr><tr><td>100</td><td>296</td></tr><tr><td>200</td><td>615</td></tr></tbody></table>

{% hint style="warning" %}
上記は参考値となります。\
サーバースペック（特にストレージ速度）によって異なります。
{% endhint %}

### **DBバックアップバッチサンプル**

```
chcp 65001
SET PGPASSWORD=[PostgreSQLパスワード]
SET PGPATH=[pg_dump.exeまでのフルパス]
SET DUMPDB=[ダンプ出力するデーターベース名 ※既定ではirepodb]
SET DUMPPATH=[ダンプ出力ファイル名のフルパス]
SET LOGPATH=[ダンプ出力ログファイルのフルパス]
SET PORT=[PostgreSQLのポート番号 ※既定では5432]

"%PGPATH%" -Fc -Z5 -c -h localhost -p %PORT% -U postgres -d %DUMPDB% -f %DUMPPATH% > %LOGPATH%
echo errorlevel=%ERRORLEVEL% >> %LOGPATH%
```

{% hint style="warning" %}
【注意点】\
実行後、ダンプ出力ログファイルをメモ帳で開き”errorlevel=0”であることを確認します。
{% endhint %}

### **DB削除（抹消）バッチサンプル**

```
chcp 65001
SET PGPASSWORD=[PostgreSQLパスワード]
SET DROPPGPATH=[dropdb.exeまでのフルパス]
SET DBNAME=[削除（抹消）するデーターベース名 ※既定ではirepodb]
SET LOGPATH=[削除（抹消）ログファイルのフルパス]
SET PORT=[PostgreSQLのポート番号 ※既定では5432]

"%DROPPGPATH%" -h localhost -U postgres -p %PORT% %DBNAME% > %LOGPATH% 2>&1
echo DropDB ErrorLevel=%ERRORLEVEL% >> %LOGPATH%
```

{% hint style="warning" %}
【注意点】

* データーベースの削除（抹消）であるため実行すると、復元ができません。\
  **バックアップが必ず取得できていることを確認してから実行してください**。
* 実行後、削除（抹消）ログファイルに”There is 1 other session using the database.”の記載がある場合は、アプリケーションまたはDB管理ツールが接続状態であることが原因です。\
  IISアプリケーションの場合は、アプリケーションプールのリサイクル、DB管理ツールの場合は切断してから再度実行します。
* 実行後、削除（抹消）ログファイルをメモ帳で開き”errorlevel=0”であることを確認します。
  {% endhint %}

### **DB生成バッチサンプル**

```
chcp 65001
SET PGPASSWORD=[PostgreSQLパスワード]
SET PGCREATEPATH=[createdb.exeまでのフルパス]
SET DBNAME=[生成するデーターベース名 ※既定ではirepodb]
SET LOGPATH=[DB生成ログファイルのフルパス]
SET PORT=[PostgreSQLのポート番号 ※既定では5432]

"%PGCREATEPATH%" -h localhost -U postgres -p %port% %DBNAME% >> %LOGPATH% 2>&1
echo Create ErrorLevel=%ERRORLEVEL% >> %LOGPATH%
```

{% hint style="warning" %}
【注意点】\
実行後、DB生成ログファイルをメモ帳で開き”errorlevel=0”であることを確認します。
{% endhint %}

### **DBリストアバッチサンプル**

```
chcp 65001
SET PGPASSWORD=[PostgreSQLパスワード]
SET PGPATH=[pg_restore.exeまでのフルパス]
SET RESTOREDB=[リストア先のデータベース　※既定はirepodb]
SET DUMPPATH=[リストアするダンプファイルフルパス]
SET LOGPATH=[リストアログファイルのフルパス]
SET PORT=[PostgreSQLのポート番号 ※既定では5432]

"%PGPATH%" -h localhost -U postgres -p %port% -d %RESTOREDB% %DUMPPATH% > %LOGPATH% 2>&1
echo Restore ErrorLevel=%ERRORLEVEL% >> %LOGPATH%
```

{% hint style="warning" %}
【注意点】

* リストア先のデーターベースが空であることを確認して実行してください。\
  もしミスなどで再度リストアする場合は、DB削除（抹消)→生成を行った後に実施します。
* 実行後、リストアログファイルをメモ帳で開き”errorlevel=0”であることを確認します。
  {% endhint %}
