ARK B-STATiON
可能な限り作らない!
バッチフレームワーク ARK B-STATiON
弊社では、OracleやMySQLを利用した、大規模基幹系システムのバッチ処理開発の技術支援を
させていただくことが多く、その際は自社製C言語ライブラリをベースとしたフレームワークを
提供しています。
コンセプトは、「可能な限り作らない」を目指したもので、機能を絞ることによりコーディング
レスを実現しています。項目の編集や演算などの複雑な処理は、SQL文を動的に生成することで
DBMSに任せる仕組みであり、ソースコードを生成するタイプや、多数の機能を実装してある
タイプのフレームワークとは対極にある、信頼性と実績を重視したシンプルな設計です。
また「どこでも動き、無償の環境で開発ができる」のも特徴であり、WindowsPC上でUNIX/Linux
サーバのバッチ処理を実装することができます。
ターゲットとしている処理は、下図の様にロジックは簡単であっても数が多く、項目の追加や
書式変更などの改修の頻度の高いプログラムです。
この様な処理に本フレームワークを用いることで、より複雑な処理に重点的に開発リソースを配分
いただくことができます。
(画像クリックで拡大)
仕様
単一のループ(繰り返し処理)ごとに、入出力ファイルの書式や検索/更新SQL文、項目編集
内容をテキスト形式で定義します。項目の編集や演算にはDUAL表を用いたSQLを利用しますので、
「実績豊富な高級言語」であるSQLが持つ、豊富な関数や演算子をそのままご利用いただくことが
できます。
また下記の機能を実装済である本フレームワークを構成するAPIは、CやCOBOLなどの言語から使用
していただくことも可能です。
- 日本語による項目マッピング
- コミット単位可変などのトランザクション制御
- エラー発生時のログ編集
- エラーリカバリ後の読み飛ばし処理
- 文字コード変換(SJIS,EUC,UTF8)
- 外部関数呼び出し(共有ライブラリ/DLL経由)と外部プログラム呼び出し
- マルチスレッド処理(Oracle版)
構成
XBシリーズはUNIX/Linux/Windows間で、同一の定義体とソースコードが利用できます。
現在OracleやMySQL、Cコンパイラは無償版が提供されておりますので、開発作業はデスクトップ
PCで十分対応が可能です。ディスク容量もコンパイラ含め10MB以下の容量から開発可能です。
(画像クリックで拡大)
事例
大手証券会社顧客管理システム
本フレームワークの利用を前提として、製造スケジュールを30%程度圧縮することができました。また移行作業でも使用し、移行プログラムの開発を抑止することができました。
政令指定都市システム
ファイル抽出系のバッチ処理や、ファイルロードが中心のマスタメンテナンス系の処理で採用いただきました。
また移行作業や、Java化できない既存システムとの連携部分の開発にもご利用いただいています。
大手転職サイトデータ移行
オンプレミス環境のOracleから、クラウド上のMySQLにデータを移行する作業に、APIを利用した移行ツールを提供いたしました。
本フレームワークは、大規模基幹系システムを前提とした設計のため、他の方式では実現が困難な
処理速度を達成することに成功し、サイト停止時間を最小限に済ませることができました。
価格
対応OSや接続先のRDBMSにより異なりますので、詳しくはお問い合わせください。
また、カスタマイズやAPIを利用した開発作業についても承ります。
定義体例
以下は処理定義のサンプルです。SQL定義とファイル書式定義のサンプルは省略しています。
#--------------------------------------------------------------------------------
# FILE2SQL処理テスト定義(FILE -> INSERT)
# ファイル名:FILE2SQL01.conf
#--------------------------------------------------------------------------------
# グローバル定義セクション
global {
method = FILE2SQL # 処理方式
commit_unit = 1000 # コミット単位
log_level = error # ログレベル
max_thread = 8 # 最大スレッド数
bad_file = "D:\bad\FILE2SQL01.bad"
# BADファイル(エラーレコード出力先)
bad_limit = 1000 # エラー最大許容件数
}
# 入力情報セクション
input {
id=CSV0001 # ファイル書式定義 (環境変数使用可)
}
# 出力情報セクション
ファイル書式やSQLの詳細は別ファイルに定義 |
id=SQL0001I # 更新SQL定義1 (環境変数使用可)
id=SQL0002I # 更新SQL定義2 (環境変数使用可)
id=SQL0003I # 更新SQL定義3 (環境変数使用可)
# 例外発生時処理定義セクション
例外発生(異常終了)時の動作をSQL実行や外部関数 /外部プログラム呼び出しで定義可能 |
run="D:\bin\LOGPUT.BAT" argument={"[ERROR] バッチ処理ID :XB_ID"}
}
}
# 開始処理定義セクション
初期処理をSQL実行や外部関数/外部プログラム 呼び出しで定義可能 |
{
TRUNCATE TABLE 一時テーブル
}
# 業務日付検索
{
SELECT
TO_CHAR(SYSDATE, 'YYYYMMDD')
INTO
:バッチ業務日付
FROM
DUAL
}
}
# 終了処理定義セクション
終了処理をSQL実行や外部関数/外部プログラム 呼び出しで定義可能 |
# 一時テーブル初期化
{
TRUNCATE TABLE一時テーブル
}
# 終了通知処理
{
function=終了通知関数 input={:XB_ID :バッチ業務日付}
}
}
# レコード一致条件セクション
ファイル読み込み時に処理対象のレコードを指定可能 |
支店コード={'K01','M02','Y03','S04','O05'}
}
項目編集セクションには、ループ内で実行する処理を SQL実行や外部関数/外部プログラム呼び出しで定義 |
}
edit {
{
SELECT
STN_NAME
INTO
:支店名
FROM
STN_MASTER
WHERE
STN_CD = : 支店コード
SQL文には、エラー時の動作やデフォルト値などを 定義可能 |
}
error=default # SQLエラー時動作オプション abort|next|default
default={'不詳'} # デフォルト値
log=true # エラー時ログ出力オプション true/false
{
SELECT
NAME_KANJI,
CASE SEI_CD
WHEN 1 THEN '男'
WHEN 2 THEN '女'
ELSE '不明'
END,
STOCK_TOTAL + CASH_TOTAL - :当日値洗い
INTO
:氏名漢字,
:性別漢字,
:値洗残高
項目の編集や演算は、SQL文(上)や外部関数 呼び出し(下)で行う |
KOZA_MASTER
WHERE
KOZA_NO = :口座番号
}
{
function=口座番号変換関数 input={:口座番号} output={:グローバル口座番号}
}
}
# 更新項目定義セクション
bind {
# SQL1バインド定義:CSVキー
:支店名
:バッチ業務日付
}
bind {
# SQL2バインド定義
:グローバル口座番号
:氏名漢字
:性別漢字
:値洗残高
:バッチ業務日付
}
bind {
# SQL3バインド定義
:バッチ業務日付
}