はじめに
Uipathで社内のBCP(Business Continuity Plan)対応によって日時でデータバックアップを行う事になったのでメモとして記します。
主要システムが止まった時のためにデータのバックアップを行うものになります。
ちなみにUipathは今回始めて触りました。
想定読者
UipathでOracleDBやDB2に接続してクエリ発行する方(マニアック)
同じようなBCP対応をやることになった方(マニアック)
実装
内容としては下記になります。
主に使った機能を紹介していきます。
1.対象DBに接続
2.クエリを実行
3.ローカルに保存
4.Zip化(パスワード生成処理は省きます)
5.予め用意していたファイルサーバー上の各フォルダに格納
1.対象DBに接続
今回接続したDBは、DB2とOracleDBです。
多分ここが一番苦戦したと思います...
使ったものはこちらのUiPath.Database.Activities
https://docs.uipath.com/releasenotes/docs/uipath-database-activities
OracleDBはこちらのインストーラをダウンロードしました。
https://www.oracle.com/database/technologies/instant-client/downloads.html
Use user or systemdata source name
こちらに事前に作成したdata sourceが表示されるため選択
この後のクエリに接続情報を利用するため変数にOutputパラメータはセットしておきます。
OracleDBのデータソースを作成する際はこちらのtnsを参照する必要があります。
oracleインストールのときのtnsnames.oraってなんだよ
WindowsでOracleDBにOracle Instant ClientでODBC接続する
NLS_LANG に JAPANESE_JAPAN.JA16EUC を設定
特にこちらを未設定だと後のクエリの文字列が化けます・・・
2.クエリを実行
クエリの実行系に関してはこちらを参考にしてください。
【UiPath】SQLServerからデータを抽出して、CSVファイルに出力してみる
今回のクエリではwhere句にバインド変数を利用します。
そのまま書いてしまうとエスケープされてしまうので下記のように対応しました。
WHERE Hoge BETWEEN "+バインド変数A+" And "+バインド変数B+" Order By
WHERE Hoge IN("+バインド変数A+","+バインド変数B+") ORDER BY
あとはASでダブルクォートの文字列もエスケープされてしまうのでこんな感じに書くとうまくいきます。
AS ""ホゲホゲ""
3.ローカルにCSV保存
実行したクエリのデータテーブルの内容をCSVに出力します。
各支店分のCSVを出力するので、出力したデータテーブルに条件を付け加え支店毎に分割してCSV出力しました。
格納先は起動ロボットに依存してしまうため特殊フォルダのパスを取得します。
デスクトップやマイドキュメントなど特殊なフォルダパスを取得する
4.ZIP化
最初はこちらでzipしておりましたが、7zipに変更することになりました。
ちなみにこちらのzipのフォルダ指定は配列指定でした・・・
https://marketplace.uipath.com/ja/listings/zip-unzip-activities
結局この形でzipすることになりました。
最初は「プロセスを開始」で引数にコマンドをいれていたのですが、デプロイ後に実行してみるとロボットの処理スピードの関係でうまくいかなかったためこうなりました。
わざわざ「待機」を挟んでいるのもこれが理由です。
5.予め用意していたファイルサーバー上の各フォルダに格納
ローカルのzipファイルをファイルサーバ上の各フォルダに格納します。
各フォルダに格納する際は、ローカルのzipファイル名とファイルサーバ上のフォルダ名で突合ループさせてそれぞれ格納。
https://docs.uipath.com/activities/lang-ja/docs/move-file
.Netを使ってももちろんできます。
【UiPath】フォルダの移動をするアクティビティがない? コードの呼び出しアクティビティで対応してみた。
最後に
Uipathを初めて触ってみたので何が正しいのかわからないですが、DB2やOracleDBについての記事が少なかったのできつかったです。笑
でもそれ以外は先人の知恵がたくさんあり非常に助かりました..