Morning Girl

Web API, Windows, C#, .NET, Dynamics 365/CRM etc..

SharePointのデータをPowerShell+ CData ODBC Driverを利用して、Azure SQL Serverにレプリケートしてみる

CData Software User Group Advent Calendar 2017もとうとう22日目となりました。

qiita.com

もう年末まで1週間ほどですね。

さて、今回はCData Driverの中でも、意外と問い合わせがあり、使っている方が多いらしい機能、Replicateについて触れていきたいと思います。

Replicate機能って何?

CData Driverでは、キャッシュ機能と呼ばれる、クエリ結果を対象のDBにキャッシュし、データクエリのパフォーマンスを向上させたり、Offilineで使ったりすることができるキャッシュ機能をサポートしています。

cdn.cdata.com

キャッシュは設定にもよるのですが、基本的にはクエリを実行した時に、そのクエリ結果のみを控えます。

それに対して、Replicate機能は明示的に、対象テーブルを別なDBにまるまるコピーすることが可能で、かつ自動的に新しい行の追加、変更された既存の行の更新、削除された行の削除を行います。

cdn.cdata.com

さて、この機能、私自身結構何が嬉しいの?(中の人が言うことじゃない)って感じの機能だったんですが、思いの他展示会でも、サポートでも問い合わせがあります。

特にお話にあがるのは以下の2点

クラウドデータのバックアップのため]

結局クラウドのデータの管理って、SaaSベンダーさんのコントロール次第なところが、いい意味でも悪い実でも存在してしまうんですよね。そこを完全にデータベースのバックアップ・復元可能とまでは行かないまでも、最悪の手段としてローカルDBに保持しておきたいという要望はままあるようです。

[BIのため]

ポイントは2つで、大量データのアクセススピードの担保と多様のデータ変換方法の確保です。いくらネットワークが高速化しようと、TCP/IPレイヤーはやはりローカルのアクセススピードに叶いません。そこをローカルDBにレプリケートすることで担保しようという方も居ました。

今回試すこと

今回は、以下のようにローカルマシンにCData ODBC SharePoint Driverをインストールし、PowerShellからReplicateを実行してみます。

Raplicaste先はSQL ServerSQLiteMySQLOraclePostgreSQLから選択可能ですが、今回はせっかくなのでCliudベースでAzure SQL Databaseを選んでみました。

f:id:sugimomoto:20171222223356p:plain

事前準備

必要なものは以下のとおりです。

予めSharePoint Onlineを構築しておくのはもちろんのこと

f:id:sugimomoto:20171222223404p:plain

Azure SQL Databaseも構築しておきましょう。

必要な情報はサーバー名とID・PW、それからローカルからアクセスするのでファイアウォールIPアドレスのアクセス制限を解除しておく必要があります。

f:id:sugimomoto:20171222223414p:plain

あとは、CData SharePoint ODBC Driver をインストールすればOKです。

CData SharePoint ODBC Driver は以下から30日無償版が取得ができます。

Microsoft SharePoint Drivers - ダウンロード

インストール後、ODBC DSNの設定画面が表示されるので、ID・PW・URLなどを設定します。

ここでポイントになるのが、Cache ConnectionとCache Providerの値です。

f:id:sugimomoto:20171222223443p:plain

ここの値で、キャッシュを行う対象のデータベースの種類と接続先を設定します。

Cache ProviderにはSQL Sesrver用として、[System.Data.SqlClient]

Cache Connectionには[Server=.database.windows.net;Database=;User=;Password=****;]のような形でAzure SQLの設定値を入力します。

cdn.cdata.com

スクリプトの実行

それでは、Power Shellから実行してみます。

今回は明示的にCacheデータを設定するので、専用のクエリを実行します。

ちなみに、今回はPowerShellでの実行例として記載していますが、普通にDB接続ツールから同じクエリを叩いても実行することができます。(ADO.NETJDBCなどでも実行可能です)

実行すると以下のような形になります。

f:id:sugimomoto:20171222223504p:plain

Azure SQLでも覗いてみると、以下のようにデータが生成されていることがわかります。

f:id:sugimomoto:20171222223513p:plain

おわりに

ちなみに、ScriptもSQLも書きたくないよーという方には以下のSyncサービスがおすすめです。

UIベースで全部同期処理を構成することが可能です。

www.cdata.com

qiita.com

qiita.com