以前にも似たような投稿をしているが、現時点で最新の環境であることと、以前とは少し設定が異なるので再度投稿。
LinuxはCentOS 7.3。
1. 各種RPMパッケージインストール
$ sudo yum install unixODBC*
$ sudo yum install freetds*
$ sudo yum install perl-DBI
$ sudo yum install perl-DBIx-Connector --enablerepo=epel
$ sudo yum install perl-DBD-ODBC
2. 設定ファイル編集、作成
$ sudo vi /etc/odbcinst.ini
末尾につぎの行を追加(odbc.iniで指定するドライバの設定)
----- ここから -----
[FreeTDS]
Description=FreeTDS ODBC
Driver=/usr/lib64/libtdsodbc.so
Setup=/usr/lib64/libtdsS.so
UsageCount=1
----- ここまで -----
$ sudo touch /etc/odbc.ini
$ sudo vi /etc/odbc.ini
つぎの行を追加(ホスト名でDSNの設定をする)
----- ここから -----
[db1]
Description=SQL Server 2012
Driver=FreeTDS
Trace=No
Server=192.168.10.1
Database=master
Port=1433
TDS_Version=8.0
ClientCharset=UTF-8
----- ここまで -----
3. 接続テスト
$ isql -v db1 db_user_name db_user_passwd
4. Perlサンプル
データベースsampleにカラム[group_id][user_id]を持つテーブルtest_tblがある前提。
----- ここから -----
#!/usr/bin/env perl
use strict;
use warnings;
use DBIx::Connector;
my $db_host = 'db1';
my $dsn = 'dbi:ODBC:' . $db_host;
my $db_name = 'sample';
my $db_user = 'db_user_name';
my $db_passwd = 'db_user_passwd';
my $test_user = 'connect_test_user';
my $test_group = 'connect_test_group';
my $conn = DBIx::Connector->new($dsn, $db_user, $db_passwd) or die $!;
my $dbh = $conn->dbh;
# test_tblに対象レコードがないことの確認(何も出力されない)
my $stmt = "SELECT * FROM $db_name.$db_user.test_tbl WHERE user_id = ?";
my $sth = $dbh->prepare($stmt) or die $dbh->errstr;
$sth->{LongTruncOk}=1;
$sth->{LongReadLen}=2000000;
$sth->execute($test_user) or die $dbh->errstr;
while (my @row = $sth->fetchrow_array) {
print "select1:@row\n";
}
$sth->finish;
# test_tblにレコード作成
$stmt = "INSERT INTO $db_name.$db_user.test_tbl ([group_id], [user_id]) VALUES (?, ?)";
$sth = $dbh->prepare($stmt) or die $dbh->errstr;
my $rc = $sth->execute($test_group, $test_user) or die $dbh->errstr;
print "insert:$rc\n";
$sth->finish;
# test_tblに対象レコードがあることの確認
$stmt = "SELECT * FROM $db_name.$db_user.test_tbl WHERE user_id = ?";
$sth = $dbh->prepare($stmt) or die $dbh->errstr;
$sth->{LongTruncOk}=1;
$sth->{LongReadLen}=2000000;
$sth->execute($test_user) or die $dbh->errstr;
while (my @row = $sth->fetchrow_array) {
print "select2:@row\n";
}
$sth->finish;
# test_tblからレコード削除
$stmt = "DELETE FROM $db_name.$db_user.test_tbl WHERE user_id = ?";
$sth = $dbh->prepare($stmt) or die $dbh->errstr;
$rc = $sth->execute($test_user) or die $dbh->errstr;
print "delete:$rc\n";
$sth->finish;
# test_tblに対象レコードがないことの確認(何も出力されない)
$stmt = "SELECT * FROM $db_name.$db_user.test_tbl WHERE user_id = ?";
$sth = $dbh->prepare($stmt) or die $dbh->errstr;
$sth->{LongTruncOk}=1;
$sth->{LongReadLen}=2000000;
$sth->execute($test_user) or die $dbh->errstr;
while (my @row = $sth->fetchrow_array) {
print "select3:@row\n";
}
$sth->finish;
$conn->disconnect;
exit;
----- ここまで -----
土曜日, 1月 07, 2017
火曜日, 12月 13, 2016
火曜日, 7月 19, 2016
CentOS7のDBD::Sybaseでレコードの更新に失敗する場合
insert文やdelete文を実行する前に
$dbh->do('SET ANSI_NULL_DFLT_ON, ANSI_NULLS, ANSI_PADDING, ANSI_WARNINGS, ARITHABORT, CONCAT_NULL_YIELDS_NULL, QUOTED_IDENTIFIER ON SET ANSI_NULL_DFLT_OFF, ARITHIGNORE, CURSOR_CLOSE_ON_COMMIT, IMPLICIT_TRANSACTIONS, NOCOUNT, XACT_ABORT , NUMERIC_ROUNDABORT OFF');
のようなクエリを実行する。
なお、確認したDBD::Sybaseのバージョンは、1.14。
$dbh->do('SET ANSI_NULL_DFLT_ON, ANSI_NULLS, ANSI_PADDING, ANSI_WARNINGS, ARITHABORT, CONCAT_NULL_YIELDS_NULL, QUOTED_IDENTIFIER ON SET ANSI_NULL_DFLT_OFF, ARITHIGNORE, CURSOR_CLOSE_ON_COMMIT, IMPLICIT_TRANSACTIONS, NOCOUNT, XACT_ABORT , NUMERIC_ROUNDABORT OFF');
のようなクエリを実行する。
なお、確認したDBD::Sybaseのバージョンは、1.14。
月曜日, 6月 20, 2016
木曜日, 3月 24, 2016
Ubuntu 15.10にDockerをインストール
プロキシ経由でインターネットにアクセスする環境用。
CentOSのイメージを入れて起動するまで。
(参照)
https://docs.docker.com/engine/installation/linux/ubuntulinux/
https://github.com/docker/compose/releases
$ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
$
$ cd /etc/apt/sources.list.d/
$
$ sudo touch docker.list
$
$ sudo vi docker.list
(つぎの行を追加)
deb https://apt.dockerproject.org/repo ubuntu-wily main
$
$ sudo apt-get update
$ sudo apt-cache policy docker-engine
$
$ sudo apt-get install docker-engine
$
$ sudo gpasswd -a ${USER} docker
$
$ cd /etc/systemd/system
$
$ sudo mkdir docker.service.d
$
$ cd docker.service.d
$
$ sudo touch http-proxy.conf
$
$ sudo vi http-proxy.conf
(つぎの行を追加)
[Service]
Environment="HTTP_PROXY=http://172.16.10.11:3128/"
$
$ sudo service docker start
$
$ sudo bash -c 'curl -L https://github.com/docker/compose/releases/download/1.6.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose'
$
$ sudo chmod +x /usr/local/bin/docker-compose
$
$ docker run hello-world
$
$ docker pull centos
$
$ docker images
$
$ docker run -it centos:latest
$
CentOSのイメージを入れて起動するまで。
(参照)
https://docs.docker.com/engine/installation/linux/ubuntulinux/
https://github.com/docker/compose/releases
$ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
$
$ cd /etc/apt/sources.list.d/
$
$ sudo touch docker.list
$
$ sudo vi docker.list
(つぎの行を追加)
deb https://apt.dockerproject.org/repo ubuntu-wily main
$
$ sudo apt-get update
$ sudo apt-cache policy docker-engine
$
$ sudo apt-get install docker-engine
$
$ sudo gpasswd -a ${USER} docker
$
$ cd /etc/systemd/system
$
$ sudo mkdir docker.service.d
$
$ cd docker.service.d
$
$ sudo touch http-proxy.conf
$
$ sudo vi http-proxy.conf
(つぎの行を追加)
[Service]
Environment="HTTP_PROXY=http://172.16.10.11:3128/"
$
$ sudo service docker start
$
$ sudo bash -c 'curl -L https://github.com/docker/compose/releases/download/1.6.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose'
$
$ sudo chmod +x /usr/local/bin/docker-compose
$
$ docker run hello-world
$
$ docker pull centos
$
$ docker images
$
$ docker run -it centos:latest
$
月曜日, 2月 29, 2016
水曜日, 7月 22, 2015
水曜日, 4月 22, 2015
テキストエディタGitHub Atomのバージョンは当面0.188.0で固定がよろしいようで(Windows版) (解決)
Windowsのシステム環境変数に
変数名:ATOM_NODE_URL
変数値:http://gh-contractor-zcbenz.s3.amazonaws.com/atom-shell/dist
を追加することで問題解消。
---------------------------------------------------------------------------------
GitHubのAtomというテキストエディタがかなり良さ気だが、バージョン0.189.0から機能を追加する各種パッケージがインストールできなくなった。
Windows7 pro sp1 (64bit) のproxy経由。
https://github.com/atom/atom/releases
から0.188.0のZIP版をダウンロードし、解凍したものを使えば自動updateされないので、このバグが解消されるまでは当面このバージョンで。
パッケージがインストールできない状態では流石に使いにくい。
変数名:ATOM_NODE_URL
変数値:http://gh-contractor-zcbenz.s3.amazonaws.com/atom-shell/dist
を追加することで問題解消。
---------------------------------------------------------------------------------
GitHubのAtomというテキストエディタがかなり良さ気だが、バージョン0.189.0から機能を追加する各種パッケージがインストールできなくなった。
Windows7 pro sp1 (64bit) のproxy経由。
https://github.com/atom/atom/releases
から0.188.0のZIP版をダウンロードし、解凍したものを使えば自動updateされないので、このバグが解消されるまでは当面このバージョンで。
パッケージがインストールできない状態では流石に使いにくい。
木曜日, 2月 05, 2015
MS SQL Serverで復旧モデルが「完全」の場合はトランザクションログをバックアップ
MS SQL Serverでミラーリングの構成にする場合、データベースの復旧モデルは「完全」でなくてはならない。
その場合、トランザクションログのバックアップを定期的にとらないと、ログファイルの肥大化を止められない。
データベースのバックアップをとるだけではトランザクションログのバックアップはとられないので、メンテナンスプランでデータベースのバックアップをとるのと同時に別途トランザクションログのバックアップもとるように設定する必要がある。
土曜日, 1月 10, 2015
AzureでクラウドサービスのDNS逆引き設定
mail.hoge.comがDNSでhogemail.cloudapp.netのCNAMEで登録されている前提。
PowerShell を起動し、つぎのコマンドを実行し、一応クラウドサービスのサービス名を確認する。
PS C:\> Get-AzureService | fl ServiceName
つぎのようにコマンドを実行し、クラウドサービスのパブリック仮想 IP (VIP) アドレスの逆引き設定をする。
PS C:\> Set-AzureService -ServiceName "hogemail" -Description "Reverse DNS" -ReverseDnsFqdn "mail.hoge.com."
PowerShell を起動し、つぎのコマンドを実行し、一応クラウドサービスのサービス名を確認する。
PS C:\> Get-AzureService | fl ServiceName
つぎのようにコマンドを実行し、クラウドサービスのパブリック仮想 IP (VIP) アドレスの逆引き設定をする。
PS C:\> Set-AzureService -ServiceName "hogemail" -Description "Reverse DNS" -ReverseDnsFqdn "mail.hoge.com."
金曜日, 12月 12, 2014
SQL Serverでミラーリング状態の確認
Management Studioで
SELECT DB_NAME(database_id) [DBName],mirroring_role_desc,mirroring_state_desc,mirroring_witness_state_desc FROM sys.database_mirroring WHERE mirroring_guid IS NOT NULL ORDER BY DBName
を実行する。
コマンドプロンプトなら
sqlcmd -S localhost -U sa -P パスワード -d master -Q "SELECT DB_NAME(database_id) [DBName],mirroring_role_desc,mirroring_state_desc,mirroring_witness_state_desc FROM sys.database_mirroring WHERE mirroring_guid IS NOT NULL ORDER BY DBName"
を実行する。
SELECT DB_NAME(database_id) [DBName],mirroring_role_desc,mirroring_state_desc,mirroring_witness_state_desc FROM sys.database_mirroring WHERE mirroring_guid IS NOT NULL ORDER BY DBName
を実行する。
コマンドプロンプトなら
sqlcmd -S localhost -U sa -P パスワード -d master -Q "SELECT DB_NAME(database_id) [DBName],mirroring_role_desc,mirroring_state_desc,mirroring_witness_state_desc FROM sys.database_mirroring WHERE mirroring_guid IS NOT NULL ORDER BY DBName"
を実行する。
火曜日, 11月 04, 2014
木曜日, 10月 02, 2014
AzureのCentOSにはswapがない!
Azureの仮想マシンのCentOSにはswapがない。
そこでswapを非永続ディスク上に作成する。
/etc/waagent.conf を編集する。
変更箇所は
ResourceDisk.EnableSwap=y
ResourceDisk.SwapSizeMB=5120
の2行。
/etc/fstab に
/mnt/resource/swapfile swap swap defaults 0 0
を追記する。
これでOSを再起動すると、/mnt/resource に swapfile が作成される。
そこでswapを非永続ディスク上に作成する。
/etc/waagent.conf を編集する。
変更箇所は
ResourceDisk.EnableSwap=y
ResourceDisk.SwapSizeMB=5120
の2行。
/etc/fstab に
/mnt/resource/swapfile swap swap defaults 0 0
を追記する。
これでOSを再起動すると、/mnt/resource に swapfile が作成される。
火曜日, 9月 30, 2014
Tomcat8.0でシンボリックリンクを有効にする
$CATALINA_HOME/conf/context.xml の <Context> のすぐ後に
<Resources className="org.apache.catalina.webresources.StandardRoot" allowLinking="true"/>
を追記する。
バージョン8.0からこうなったみたい。
<Resources className="org.apache.catalina.webresources.StandardRoot" allowLinking="true"/>
を追記する。
バージョン8.0からこうなったみたい。
Tomcat8.0のRequestDumperFilterでServletの文字化け解消
$CATALINA_HOME/webapps/アプリ名/WEB-INF/web.xml の先頭部分につぎのように<filter>を追記する。
------------------------------------------------------------------------------
<web-app>
<filter>
<filter-name>requestdumper</filter-name>
<filter-class>
org.apache.catalina.filters.RequestDumperFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>requestdumper</filter-name>
<url-pattern>/target_path/*</url-pattern>
</filter-mapping>
(以下省略)
------------------------------------------------------------------------------
$CATALINA_HOME/conf/logging.properties を編集。
handlers = 1catalina.org.apache.juli.AsyncFileHandler, 2localhost.org.apache.juli.AsyncFileHandler, 3manager.org.apache.juli.AsyncFileHandler, 4host-manager.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler
に
handlers = 1catalina.org.apache.juli.AsyncFileHandler, 2localhost.org.apache.juli.AsyncFileHandler, 3manager.org.apache.juli.AsyncFileHandler, 4host-manager.org.apache.juli.AsyncFileHandler, 5request-dumper.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler
のように 5request-dumper.org.apache.juli.FileHandler, を追記し、
4host-manager.org.apache.juli.AsyncFileHandler.prefix = host-manager.
の下あたりに
# request dumper configuration
5request-dumper.org.apache.juli.FileHandler.level = INFO
5request-dumper.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
5request-dumper.org.apache.juli.FileHandler.prefix = request-dumper.
5request-dumper.org.apache.juli.FileHandler.formatter = org.apache.juli.VerbatimFormatter
org.apache.catalina.filters.RequestDumperFilter.level = INFO
org.apache.catalina.filters.RequestDumperFilter.handlers = 5request-dumper.org.apache.juli.FileHandler
を追記する。
アプリをデプロイし直し、Tomcatを再起動。
これで
$CATALINA_HOME/logs/
に
request-dumper.2014-09-30.log
のようなログファイルが生成される。
理由はわからないが、POSTリクエストで送信されたUTF-8の2バイト文字が、それを受け取ったフィルターのurl-patternに含まれるServletで文字化けしなくなった。
ちなみにJavaのソースコードはシフトJIS。
------------------------------------------------------------------------------
<web-app>
<filter>
<filter-name>requestdumper</filter-name>
<filter-class>
org.apache.catalina.filters.RequestDumperFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>requestdumper</filter-name>
<url-pattern>/target_path/*</url-pattern>
</filter-mapping>
(以下省略)
------------------------------------------------------------------------------
$CATALINA_HOME/conf/logging.properties を編集。
handlers = 1catalina.org.apache.juli.AsyncFileHandler, 2localhost.org.apache.juli.AsyncFileHandler, 3manager.org.apache.juli.AsyncFileHandler, 4host-manager.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler
に
handlers = 1catalina.org.apache.juli.AsyncFileHandler, 2localhost.org.apache.juli.AsyncFileHandler, 3manager.org.apache.juli.AsyncFileHandler, 4host-manager.org.apache.juli.AsyncFileHandler, 5request-dumper.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler
のように 5request-dumper.org.apache.juli.FileHandler, を追記し、
4host-manager.org.apache.juli.AsyncFileHandler.prefix = host-manager.
の下あたりに
# request dumper configuration
5request-dumper.org.apache.juli.FileHandler.level = INFO
5request-dumper.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
5request-dumper.org.apache.juli.FileHandler.prefix = request-dumper.
5request-dumper.org.apache.juli.FileHandler.formatter = org.apache.juli.VerbatimFormatter
org.apache.catalina.filters.RequestDumperFilter.level = INFO
org.apache.catalina.filters.RequestDumperFilter.handlers = 5request-dumper.org.apache.juli.FileHandler
を追記する。
アプリをデプロイし直し、Tomcatを再起動。
これで
$CATALINA_HOME/logs/
に
request-dumper.2014-09-30.log
のようなログファイルが生成される。
理由はわからないが、POSTリクエストで送信されたUTF-8の2バイト文字が、それを受け取ったフィルターのurl-patternに含まれるServletで文字化けしなくなった。
ちなみにJavaのソースコードはシフトJIS。
木曜日, 9月 11, 2014
Azureで仮想ネットワーク内仮想マシンのDNS名
仮想マシンOSがWindowsの場合、コマンドプロンプトで
C:\Users\Administrator>ipconfig
Windows IP 構成
イーサネット アダプター Ethernet 21:
接続固有の DNS サフィックス . . . . .: eldb.m2.internal.cloudapp.net
リンクローカル IPv6 アドレス. . . . .: fe80::7de3:9900:a6a0:eda1%34
IPv4 アドレス . . . . . . . . . . . .: 192.168.91.4
サブネット マスク . . . . . . . . . .: 255.255.255.128
デフォルト ゲートウェイ . . . . . . .: 192.168.91.1
Tunnel adapter isatap.eldb.m2.internal.cloudapp.net:
メディアの状態. . . . . . . . . . . .: メディアは接続されていません
接続固有の DNS サフィックス . . . . .: eldb.m2.internal.cloudapp.net
Tunnel adapter Teredo Tunneling Pseudo-Interface:
接続固有の DNS サフィックス . . . . .:
IPv6 アドレス . . . . . . . . . . . .: 2001:0:9d38:6abd:2cf8:151e:3f57:a4fb
リンクローカル IPv6 アドレス. . . . .: fe80::2cf8:151e:3f57:a4fb%14
デフォルト ゲートウェイ . . . . . . .: ::
C:\Users\Administrator>
この中の「接続固有の DNS サフィックス . . . . .: eldb.m2.internal.cloudapp.net」を確認。
例えばそのマシンのホスト名が hoge だったら
hoge.eldb.m2.internal.cloudapp.net
がその仮想ネットワーク内で使えるそのマシンのDNS名。
OSがLinuxの場合、
$ cat /etc/resolv.conf
; generated by /sbin/dhclient-script
search elweb.m5.internal.cloudapp.net
nameserver 168.63.129.16
$
この中の「search elweb.m5.internal.cloudapp.net」を確認。
そのマシンのホスト名が hogehoge だったら
hogehoge.elweb.m5.internal.cloudapp.net
がその仮想ネットワーク内で使えるそのマシンのDNS名。
C:\Users\Administrator>ipconfig
Windows IP 構成
イーサネット アダプター Ethernet 21:
接続固有の DNS サフィックス . . . . .: eldb.m2.internal.cloudapp.net
リンクローカル IPv6 アドレス. . . . .: fe80::7de3:9900:a6a0:eda1%34
IPv4 アドレス . . . . . . . . . . . .: 192.168.91.4
サブネット マスク . . . . . . . . . .: 255.255.255.128
デフォルト ゲートウェイ . . . . . . .: 192.168.91.1
Tunnel adapter isatap.eldb.m2.internal.cloudapp.net:
メディアの状態. . . . . . . . . . . .: メディアは接続されていません
接続固有の DNS サフィックス . . . . .: eldb.m2.internal.cloudapp.net
Tunnel adapter Teredo Tunneling Pseudo-Interface:
接続固有の DNS サフィックス . . . . .:
IPv6 アドレス . . . . . . . . . . . .: 2001:0:9d38:6abd:2cf8:151e:3f57:a4fb
リンクローカル IPv6 アドレス. . . . .: fe80::2cf8:151e:3f57:a4fb%14
デフォルト ゲートウェイ . . . . . . .: ::
C:\Users\Administrator>
この中の「接続固有の DNS サフィックス . . . . .: eldb.m2.internal.cloudapp.net」を確認。
例えばそのマシンのホスト名が hoge だったら
hoge.eldb.m2.internal.cloudapp.net
がその仮想ネットワーク内で使えるそのマシンのDNS名。
OSがLinuxの場合、
$ cat /etc/resolv.conf
; generated by /sbin/dhclient-script
search elweb.m5.internal.cloudapp.net
nameserver 168.63.129.16
$
この中の「search elweb.m5.internal.cloudapp.net」を確認。
そのマシンのホスト名が hogehoge だったら
hogehoge.elweb.m5.internal.cloudapp.net
がその仮想ネットワーク内で使えるそのマシンのDNS名。
登録:
投稿 (Atom)