前回の記事ではMariaDBから同一ネットワーク上にあるOracleにCONNECTストレージエンジンを使って接続してみた。
今回はその続きで、MariaDBからSQL Serverにリンクしてみた。
参考記事
今回はこちらの記事を参考にした。
【MySQL】MariaDB使用connect引擎直接访问SQLServer数据库 - abce - 博客园
使用するODBC Driver for SQL Serverのバージョンが違うことを除けば、ほぼこの手順のとおりで完了する。
その他の細かい設定などは前の記事で実施済みなので割愛する。
SQL ServerのODBCドライバーをインストール
ODBCドライバーのインストール方法はこちら。
Microsoft ODBC Driver forSQL Serverをインストールする (Linux) - ODBC Driver for SQL Server | Microsoft Learn
#RHEL 9
curl https://packages.microsoft.com/config/rhel/9/prod.repo | sudo tee /etc/yum.repos.d/mssql-release.repo
sudo yum remove unixODBC-utf16 unixODBC-utf16-devel #to avoid conflicts
sudo ACCEPT_EULA=Y yum install -y msodbcsql18
# optional: for bcp and sqlcmd
sudo ACCEPT_EULA=Y yum install -y mssql-tools18
echo 'export PATH="$PATH:/opt/mssql-tools18/bin"' >> ~/.bashrc
source ~/.bashrc
# optional: for unixODBC development headers
sudo yum install -y unixODBC-devel
unixODBCのインストールは前回の記事で実施済みなのでパス。実質初めの一行と、msodbcsql18、mssql-tools18のインストールだけ。
/etc/odbcinst.ini にODBC設定を書き込む
前回の記事ではファイルを直接編集したが、今回は参考記事のやり方で試してみる。
# sudo odbcinst -q -d -n "ODBC Driver 18 for SQL Server"
[ODBC Driver 18 for SQL Server]
Description=Microsoft ODBC Driver 18 for SQL Server
Driver=/opt/microsoft/msodbcsql18/lib64/libmsodbcsql-18.3.so.3.1
UsageCount=1
このコマンドを叩くだけで /etc/ddbcinst.iniに書き込まれるらしい。便利。
ドライバーの接続テスト
# sudo /opt/mssql-tools18/bin/sqlcmd -S xxx.xxx.xxx.xxx -U user -P pass -d TestDB -Q 'select "Hello World"' -C
-----------
Hello World
(1 rows affected)
SQL ServerのODBCで無事接続できた。SQL ServerがTrusted_Connection=yesを必要とする場合は -C オプションを忘れずに。
/etc/odbc.ini にDNS設定を書き込む
こちらも前回の記事ではファイルを直接編集したが、今回は参考記事のやり方で試してみる。
# sudo vim /etc/MariaDB_odbc_data_source_for_MSSQL_template.ini
下記内容でテンプレートファイルを新規作成する。
[SQLServerDSN]
Driver=ODBC Driver 18 for SQL Server
Server=xxx.xxx.xxx.xxx
Port=1433
UID=user
PWD=pass
Database=TestDB
TrustServerCertificate=yes
Trace=Yes
TraceFile=/var/log/odbc_MSSQL.log
下記コマンドでテンプレートファイルの内容をodbc.iniに書き込む
# sudo odbcinst -i -s -l -f MariaDB_odbc_data_source_for_MSSQL_template.ini
odbc.iniの接続テスト
odbc.iniに設定した内容で接続テストをしてみる。
# sudo isql -v SQLServerDSN user pass
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL> select name from sys.databases;
+---------------------------------------------------------------------------------------------------------------------------------+
| name |
+---------------------------------------------------------------------------------------------------------------------------------+
| master |
| tempdb |
| model |
| msdb |
+---------------------------------------------------------------------------------------------------------------------------------+
SQLRowCount returns 0
4 rows fetched
ログインもSQLの発行も問題なく実行できた。
CREATE TABLEしてみる
試しに下記内容でCREATE TABLEしてみた。
CREATE TABLE Test_Table (
id int not null,
remark nvarchar(255) not null
) ENGINE=CONNECT
DEFAULT CHARSET=utf8mb4
CONNECTION='DSN=SQLServerDSN;Database=TestDB;UID=user;PWD=pass'
TABLE_TYPE='ODBC'
CREATE TABLEは無条件で成功するのは同じとして、 SELECT * FROM Test_Table; で無事データを取得できた。
文字化けもなくいい感じ。
カラム名に予約語が使われているとダメ
一点だけ問題点があるとすれば、カラム名に「KEY」のような予約語が使われているとSELECT時にエラーになる。
予約語であったとしても、SQL Serverでは[KEY]、MariaDBは`KEY`と囲めば使用できるのだが、CONNECTエンジンはこういった記法を解釈できないらしい。SQL Server側で別名でビューを定義してそっちをCONNECTして回避するしかなさそう。
とりあえず設定完了
前回の記事でOracleが大変だっただけに、思ったよりはサクサク進んでよかった。
実はもう一つだけ問題が残っているので、次の記事で解決する予定・・・。
コメントする