Ubuntu 17.10 + VsCode + Perl で Windows10 + SQL Server 2017 Express にアクセスする

Ubuntu 17.10 + VsCode + Perl で Windows10 + SQL Server 2017 Express にアクセスする
 
探し物をしていた時に、MS純正(?)のLinux用のSQLServerのドライバ+unixODBCの設定のドキュメントを見つけたので試してみる
Ubuntu 17.10 + Perl + DBI::DBD + unixODBC + msodbcsql17
<-> Windows10 + SQL Server 2017 Express
になるのかな?
※目的は?と聞かれても、そこに設定ドキュメントがあったから、としか言いようがないのだが(笑
CPANベースのモジュールを少し触ってみたかったからもある
Strawberry Perl では cpanm だって気が付いて、テストモジュールが入ってないけど、仕様が変わったのかな?
というのを確認したかったから、というのもある(変わったようですね)
※ただ UbuntuCPANモジュールをインストールした後のレイアウトが、まだ良くわからん
※出力パネルへのエラーメッセージの文字化けは、調査中かなぁ・・
 
参考にしたのは以下のサイト
ドライバー マネージャーのインストール
接続するODBCLinux と Mac Linux および macOS に Microsoft ODBC Driver for SQL Server をインストールする
SQL Server への接続
Can not connect to MS SQL from Ubuntu sqlcmd client
LinuxからSQL ServerにODBCで接続する
Ubuntu 17.10にmonoとVsCodeとGitをインストールしてみる
Windows 10 Pro + VsCode で Strawberry Perl を少し試してみる
cpanm - CPANからモジュールを取得、アンパック、インストールする
UTF-8を使用する
 
$ perl -v

This is perl 5, version 26, subversion 0 (v5.26.0) built for x86_64-linux-gnu-thread-multi
(with 62 registered patches, see perl -V for more detail)

 
Ubuntuパッケージの追加(MSのドキュメントより)
# apt-get install unixodbc
# curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
 
#Ubuntu 14.04(バージョンに対応したもの のみ)
# curl https://packages.microsoft.com/config/ubuntu/14.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
 
#Ubuntu 16.04(バージョンに対応したもの のみ)
# curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
 
#Ubuntu 17.10(今回はこちら)
# curl https://packages.microsoft.com/config/ubuntu/17.10/prod.list > /etc/apt/sources.list.d/mssql-release.list
 
# apt-get update
# ACCEPT_EULA=Y apt-get install msodbcsql17

取得:1 https://packages.microsoft.com/ubuntu/17.10/prod artful/main amd64 msodbcsql17 amd64 17.1.0.1-1 [4,100 kB]

 
# optional: for bcp and sqlcmd (あったほうが便利)
# ACCEPT_EULA=Y apt-get install mssql-tools
 

                                                                                                                                          • -

echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc

                                                                                                                                          • -

とあるけど .profile に適当な場所(最下行)に /opt/mssql-tools/bin を追加する
PATH=/opt/mono/bin:/usr/bin:/opt/mssql-tools/bin:$PATH
source ~/.bashrc
 
# optional: for unixODBC development headers
# apt-get install unixodbc-dev

取得:1 http://jp.archive.ubuntu.com/ubuntu artful/main amd64 autotools-dev all 20161112.1 [39.5 kB]
取得:2 http://jp.archive.ubuntu.com/ubuntu artful/main amd64 libltdl-dev amd64 2.4.6-2 [162 kB]
取得:3 http://jp.archive.ubuntu.com/ubuntu artful/main amd64 libtool all 2.4.6-2 [194 kB]
取得:4 http://jp.archive.ubuntu.com/ubuntu artful/main amd64 unixodbc-dev amd64 2.3.4-1 [215 kB]

・インストール先の確認
# ls /opt/microsoft/msodbcsql17/lib64/
libmsodbcsql-17.1.so.0.1
 
$ which sqlcmd
/opt/mssql-tools/bin/sqlcmd
 
SQL Server との接続を確認
対象データはこちらで作成したもの
 Excel VBA での Transaction について
Windows 10 のファイアウォールの確認
 windows10 + SQL Server2017 Expressでファイアウォールを設定する
SQL Serverのポートの確認
 Windows 10 Pro + JDK10 + LibreOffice 6.0.3.2 Base から SQL Server 2017 Express へ接続してみる
 
以下で接続可能であることを確認する
$ sqlcmd -S xxx.xxx.xxx.xx\SQLEXPRESS,1433 -U demo
 
・DSNの設定
/etc/odbc.ini
cat /etc/odbc.ini
[MSSQLTest]
Driver = /opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.1.so.0.1
Server = tcp:xxx.xxx.xxx.xxx\SQLEXPRESS
Trace = No
Database = DEMO
Port = 1433
ClientCharset = UTF-8

                                                                                                                                          • -

・項目の説明
[MSSQLTest]
#ドライバーの説明
Description = SQL Server2017Express
#ドライバーの場所 
# ドライバーのフルパスか
Driver = /opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.1.so.0.1
#トレースするかの有無
Trace = No
#データベースのIPアドレス
Server = tcp:xxx.xxx.xxx.xxx\SQLEXPRESS
#データベース名
Database = DEMO
#ポート番号 SQL Serverは通常 1433
Port = 1433
#クライアント(Linux側)の文字コードセット
ClientCharset = UTF-8

                                                                                                                                          • -

# odbcinst -i -d -f /etc/odbc.ini
odbcinst: Driver installed. Usage count increased to 1.
Target directory is /etc
  -i インストール
  -d ドライバー
  -f テンプレートファイル名
  
# odbcinst -q -d
[ODBC Driver 17 for SQL Server]
[MSSQLTest]
  -q 検索
  -d ドライバー
 
# odbcinst -u -d -n MSSQLTest
MSSQLTest has been deleted (if it existed at all) because its usage count became zero
  -u アンインストール
  -n ドライバー又はDSN名
 
DBI::DBDのインストール
コンソールより、以下を実行する
# apt-get install perl-doc
# apt install cpanminus
# cpanm install DBD::ODBC
# cpanm install DDP
# cpanm install DBI


# Windwows版よりドライバーの定義のみ変更
use strict;
use utf8;
use DBI;

my $dbh=DBI->connect('dbi:ODBC:MSSQLTest','demo','demo') or die $!;
my $sth=$dbh->prepare("select * from POSTAL") or die $dbh->errstr;

# 出力エラー対策
$sth->{LongTruncOk}=1;
$sth->{LongReadLen}=2000000;

$sth->execute or die $dbh->errstr;

while(my $arrayref = $sth->fetchrow_arrayref){
use DDP;
p $arrayref;
}

$sth->finish;
$dbh->disconnect;

[Running] perl "/home/tabizou/dev/perl/0002.pl"
\ [
[0] "9200000 ",
[1] undef,
[2] "金沢市 \0",
[3] "以下に掲載がない場合 \0",
[4] undef,
[5] undef
]