概要
Windows上のMariaDBからSQL Serverを直接参照するテーブルを作成します。Accessのリンクテーブル。 Connect Storageという機能を利用します。
経緯
社内データの保管に、以下の理由でSQL Serverを利用していました。
- ODBCを設定せずにExcelから参照できる。
- Windows認証を利用できるので、アプリで認証を考慮する必要がない。
後者に関しては、エラー時の対応等、逆にややこしくなりそうでメリットにならないと判断。ただ、前者を利用した、簡易BIとしてのExcelピボットテーブルファイルが利用されているため、うまく対応する必要がありました。
将来性を考えると、10GBに制限されるSQL Server Express Editionは避けたいところ。そこで、まずMariaDBサーバを立ててSQL Serverのデータを参照する形で運用を開始することにしました。
MariaDBには、異種データベースを参照するConnect Storage Engineという機能があることが分かり、これを利用して実装しました。
前提
- OS: Windows Server 2008 R2
- Maria DB: 10.2.9
- SQL Server: SQL Server 2008 R2 Express Edition
- データベース名: DBTEST
- DBユーザー名: USERTEST, パスワード: PASSTEST
- テーブル名: TABLETEST
手順
管理ツールの「データソース(ODBC)」にて、SQL ServerへのDSNを登録(DSN名を「SQLSVR」とする)
MariaDBにmysqlクライアントで接続し、以下のコマンドでConnect Storage Engineを有効化する。
INSTALL SONAME 'ha_connect'
以下のコマンドでConnect Storage Engine経由での参照を利用したテーブルエントリを作成する。
CREATE TABLE TABLETEST ENGINE=CONNECT DEFAULT CHARSET=cp932 TABLE_TYPE=ODBC CONNECTION='DSN=SQLSVR;UID=USERTEST;PWD=PASSTEST';
問題点
上記手順だと、該当のデータベースの一覧(show tables)まではできるが、内容を取得(select * from …)できない。 SELECTしか必要ない場合においても、全データベースに対する全操作の権限(grant all on .)を与えないと値を取得できない。 MariaDBをHubとして各テーブルを見に行くような運用も考えたが、本格的な運用に採用するのは厳しいかもしれない。