システム運用や開発現場では、ログ収集やバックアップ作業を「手動で行う」ケースがまだ多く残っています。しかし、PowerShellを使えばこれらを自動化し、毎日の定型作業を一気に効率化できます。
この記事では、**「ログを自動収集してバックアップするPowerShellスクリプト」**を実例付きで紹介します。
スクリプトはWindows環境でそのまま動作し、日次・週次の定期ジョブとしても活用可能です。
⚙️ 実践スクリプト:ログ収集&バックアップ自動化
以下のスクリプトは、
📦 処理の流れ
| 処理 | 内容 |
| ① 初期設定 | ログフォルダ・バックアップフォルダ・保持日数を設定 |
| ② 日付フォルダ作成 | yyyyMMdd形式で新しいバックアップフォルダを作成 |
| ③ ログコピー | 対象フォルダからすべての.logファイルをコピー |
| ④ 古いフォルダ削除 | 30日より古いフォルダを自動削除 |
🕒 定期実行する方法(Windows タスクスケジューラ)
-
Windows検索バーで「タスクスケジューラ」と入力して起動
-
「基本タスクの作成」→ タスク名を「ログバックアップ」とする
-
「毎日」または「毎週」を選択
-
「操作」で「プログラムの開始」を選択し、以下を指定
-
完了後、右クリック → 「プロパティ」 → 「最上位の特権で実行する」を有効にする
💡 応用ポイント
-
ZIP圧縮も追加可能:Compress-Archiveを使ってバックアップサイズを削減
-
ログローテーション:ファイルサイズや日付で自動的にローテーションするよう拡張可能
-
メール通知:バックアップ完了後にSend-MailMessageで報告を送信可能
-
CSVやJSON対応:ログ形式が異なる場合もGet-Content+ConvertFrom-Jsonなどで加工可能
🚀 まとめ
PowerShellを使えば、GUI操作では面倒なログバックアップを簡潔に自動化できます。
1日1回の定期タスクに登録するだけで、手動の手間を大幅削減。
運用の安定化にもつながります。
ポイント:小さなスクリプトでも「業務時間を削減」できるのがPowerShellの強みです。
HULFTには「送受信ジョブを定義して使う方法」以外に、utlsendなどのユーティリティ系コマンドを直接呼び出してファイル転送や加工を行う手段があります。
これらは事前の送受信定義が不要で、コマンド実行時に条件を指定できるため、テスト送信・スポット利用・簡易処理に非常に便利です。
本記事では、JavaでHULFTコマンドを実行する例をご紹介します。
-
utlsend : ファイル送信
-
utlrecv : ファイル受信
-
utlconcat : ファイル連結
-
utlsplit : ファイル分割
Javaから外部コマンドを実行する基本
Javaでは ProcessBuilder を使うことで、外部のHULFTコマンドを呼び出せます。
エラー出力も標準出力にまとめる設定をすれば、ログ管理が容易になります。
共通の呼び出しテンプレートは以下の通りです。
1. ファイル送信(utlsend)
事前の送信定義が不要で、対象ファイルと宛先ノードを直接指定できます。
-
-f : 送信するファイルパス
-
-n : 宛先ノード名(HULFTに登録済み)
2. ファイル受信(utlrecv)
受信ジョブを登録せず、コマンドだけでファイルを取得できます。
-
-f : 保存先のファイル名
-
-n : 送信元ノード名
3. ファイル連結(utlconcat)
複数のファイルを1つにまとめたいときに使います。
|
|
public class ExampleConcat { public static void main(String[] args) { HulftCommandRunner.runCommand( "utlconcat", "-o", "/data/merged.txt", "-f", "/data/file1.txt", "-f", "/data/file2.txt" ); } } |
-
-o : 出力ファイル名
-
-f : 結合対象のファイル(複数指定可)
4. ファイル分割(utlsplit)
大きなファイルを分割して処理したいときに使います。
-
-f : 分割対象ファイル
-
-l : 分割する行数(例:1000行ごと)
運用上の注意点
-
PATHの設定
Javaから呼び出す際は、utlsend.exe などのHULFTバイナリがPATHに通っている必要があります。
通っていない場合はフルパス指定が必須です。
-
終了コードの確認
-
ログ管理
実際の業務バッチでは process.getInputStream() の内容をファイル出力してログ管理することを推奨します。
まとめ
-
utlsend でファイルを即送信できる
-
utlrecv で即時受信が可能
-
utlconcat でファイルを連結
-
utlsplit でファイルを分解
これらをJavaから呼び出すことで、柔軟なファイル連携や加工処理が実現できます。
Oracle PL/SQLを使って大量データを処理する際、1行ずつループして処理を行うとパフォーマンスが低下します。
このようなケースで活躍するのが BULK COLLECT と FORALL です。
これらを活用することで、SQLとPL/SQL間のコンテキスト切り替えを最小限に抑え、大量データを効率的に処理できます。
BULK COLLECTとは?
BULK COLLECTは、複数行のデータを一括でコレクション(配列型変数)に格納する仕組みです。
基本構文
使用例
|
|
DECLARE TYPE t_emp IS TABLE OF employees%ROWTYPE; l_emp t_emp; BEGIN SELECT * BULK COLLECT INTO l_emp FROM employees WHERE department_id = 10; DBMS_OUTPUT.PUT_LINE('取得件数: ' || l_emp.COUNT); END; |
✅ 通常のSELECT INTOでは1行しか取得できませんが、BULK COLLECTを使うと複数行をまとめて変数に格納できます。
FORALLとは?
FORALLは、コレクションに格納されたデータを使って一括処理(INSERT/UPDATE/DELETE)を行う構文です。
基本構文
使用例
BULK COLLECTとFORALLを組み合わせる
実務では、BULK COLLECTで一括取得 → FORALLで一括更新/削除といった流れがよく使われます。
処理フロー例
-
BULK COLLECTで対象データを配列に取得
-
配列の内容をFORALLで一括更新
-
コミット
このように組み合わせることで、バッチ処理や大量データ更新におけるパフォーマンスを劇的に改善できます。
パフォーマンス比較
注意点
-
BULK COLLECTで一度に大量データを取得するとメモリ不足の可能性あり
→ LIMIT句を組み合わせて分割取得が推奨
-
FORALLはDML専用(SELECTでは使えない)
-
例外処理はSAVE EXCEPTIONSを付けて制御することも可能
まとめ
💡 実際のプロジェクトでは「数十万件以上のデータ更新」で特に効果が出やすいため、PL/SQLチューニングの定番として覚えておきましょう。
HULFTを使ったファイル連携では、バッチ処理などで日付が付与されたファイル名を扱うケースが多くあります。
例えば、送信側で以下のように日付が付与されたファイルを生成する場合です。
sales_20250911.csv sales_20250912.csv |
受信側でもこのファイル名をそのまま維持して保存したい、という要件はよくあります。
本記事では、その場合に利用できる HULFTの動的パラメータ $SNDFILE を使った方法を解説します。
$SNDFILEとは?
HULFTには送受信時に利用できる動的パラメータが用意されています。
その中の一つが $SNDFILE で、これは 「送信元ファイル名」 を表します。
つまり $SNDFILE を指定することで、送信側が持つ実際のファイル名を受信側でそのまま利用することが可能です。
設定例
受信側(集信定義)の「受信ファイル名」に $SNDFILE を指定します。
この設定を行うと、送信されたファイル名のまま受信先に保存することが出来ます。
例:送信元のファイルが sales_20250911.csv の場合
利用上の注意点
-
受信先でファイル名を固定して指定すると上書きされる
例えば C:\recv\sales.csv のように固定名を指定した場合、複数ファイルを送信すると最後のファイルで上書きされてしまいます。
→ $SNDFILE を使うことで、送信元ファイルごとに別々のファイルとして受信できます。
-
動的パラメータが有効になっている必要がある
$SNDFILE はHULFTの動的パラメータ機能を利用するため、システム環境設定で動的パラメータが有効化されていることを確認してください。
-
ディレクトリは固定、ファイル名だけ動的
C:\recv\ 部分は固定ですが、ファイル名部分に $SNDFILE を置くことで柔軟に対応可能です。
まとめ
-
$SNDFILE を使うことで、送信元のファイル名をそのまま受信側に引き継げる。
-
日付付きファイルや動的に生成されるファイル名を扱う場合に便利。
-
受信定義に C:\recv\$SNDFILE のように設定するだけで利用可能。
HULFTの運用では「配信元のファイル名をそのまま使いたい」という要件は多いため、覚えておくと便利なテクニックです。
「駑馬十駕」を信念に IT系情報を中心に調べた事をコツコツ綴っています。