Edited at

MariaDBからSQL Serverを直接参照するテーブルを作成

More than 1 year has passed since last update.


概要

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




手順


  1. 管理ツールの「データソース(ODBC)」にて、SQL ServerへのDSNを登録(DSN名を「SQLSVR」とする)


  2. MariaDBにmysqlクライアントで接続し、以下のコマンドでConnect Storage Engineを有効化する。

    INSTALL SONAME 'ha_connect'
    



  3. 以下のコマンドで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として各テーブルを見に行くような運用も考えたが、本格的な運用に採用するのは厳しいかもしれない。