SSブログ

SQL Server 2019 Developer Edition が Docker コンテナで提供されていた [RDBMS]

以前 Ubuntu 16.04 にSQL Server 2017 をインストールしたが、
https://nakagami.blog.ss-blog.jp/2018-06-11

気がついたら Docker で動かせるようになっていた
https://docs.microsoft.com/ja-jp/sql/linux/quickstart-install-connect-docker?view=sql-server-ver15&pivots=cs1-bash

SQLServer の python のデータベースドライバー minitds の
テストコード https://github.com/nakagami/minitds/blob/master/test_minitds.py が動く環境を作ってみる。

docker pull
$ docker pull mcr.microsoft.com/mssql/server:2019-CU3-ubuntu-18.04

コンテナ作成
$ docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=Secret123" \
-p 1433:1433 --name sql1 \
-d mcr.microsoft.com/mssql/server:2019-CU3-ubuntu-18.04

コンテナの shell に入って sqlcmd でデータベース test を作る
$ docker exec -it sql1 bash
mssql@bde80da56096:/$ /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "Secret123"
1> create database test;
2> go
1> select name from sys.databases;
2> go
name
---------------------------------------
master
tempdb
model
msdb
test

(5 rows affected)

ここまでで test_minitds.py を実行してパスした。

Docker イメージを DockerHub に置いてる Microsoft すごい
コメント(0) 
共通テーマ:日記・雑感

IBM Cloud で Db2 のインスタンス作成 [RDBMS]

以前 db2 Express をUbuntu16.04 や Windows にインストールしてみた
https://nakagami.blog.so-net.ne.jp/2016-07-21
https://nakagami.blog.so-net.ne.jp/2017-04-01-1

なんか Db2 用のユーザーを用意しないといけなくて
そのパスワードが db2 のインスタンスにログインするときに
必要とか、そのほかにサービス名とかインスタンス名とかいうのがあって、
癖があってわかりずらいなーという印象だった。
そのうち、その時のアカウントがわからなくなってしまっていた。

久しぶりに、 Db2 をさわってみたいと思ったのだが、
気が付くと、 (Bluemix 改め)IBM Cloud の無料枠で
Db2 インスタンスが使えるようになっているらしい。
https://qiita.com/azzeten/items/5d06afc6b5df352410a2

自分もやってみた

1. https://cloud.ibm.com/ ここからアカウントの作成
自分は、 db2 Express をインストールしたときに IBMid を作っていたらしく
E メールを入力したらconfirm メールが送られてきてボタンを押したら完了だった

2.「リソースの作成」→「データーベース」→「Db2」を選択して「作成」

3.「サービス資格情報」→「新規資格情報」→名前をあとでわかりやすいように変更して「追加」

4. 「資格情報の表示」を見ると、接続に必要な情報が見れる


クレジットカードの入力の必要がなく、Db2 インスタンスの使用期限のない
IBM Cloud ありがたい。
無料枠の Db2 は、
- 1インスタンスしか作れない
- 200MB Storage
- 5 コネクション
- シェアードマルチテナント
- 非アクティブで 30日経過すると削除される
とのことだが、ちょっとテスト的に使うには十分だ。

Open Console から、左上のメニューをクリックすると Explore とか Run SQL とかある

python でアクセスしている例を発見した。
https://gist.github.com/rquintel/b63b67bb2c537ba85c72e84adb7a6c2f

APIが特殊だ・・・
https://github.com/ibmdb/python-ibmdb/wiki/APIs

自分なりにサンプルコード書いた
https://gist.github.com/nakagami/016601a1fe7d5ca6e436bf8c466c66a5
コメント(0) 
共通テーマ:日記・雑感

PostgreSQL 10 以降 のscram-sha-256 authentication [RDBMS]

最近気づいたが PostgreSQL 10 になってから、 SASL 認証という認証プラグイン機構のひとつとして SCRAM-SHA-256 というチャレンジレスポンス方式の認証方法が実装されたらしい。
http://tatsuo-ishii.github.io/doc-ja/10.0/sasl-authentication.html#sasl-scram-sha256


既存のアカウントを scram-sha-256 で使うためには、サーバーで、以下の2つをオペレーションを実施する

1. パスワードを scram-sha-256 で再設定

https://paquier.xyz/postgresql-2/postgres-10-scram-authentication/
postgres ユーザーで psql コマンドを起動して以下のように入力(下記例ではユーザー scram のパスワードを再設定している)
postgres=# SET password_encryption = 'scram-sha-256';
SET
postgres=# \password scram;
Enter new password:
Enter it again:
postgres=#


2. pg_hba.conf で METHOD にscram-sha-256 を指定する

クラウドの時代で、サーバーとクライアントがインターネットを挟んでいて sniff される可能性があっても、データーのやり取りは TLS で通信すればいいんで、最初の認証を安全にできるようにしようということらしい。

PGCon 2017 の資料
https://www.pgcon.org/2017/schedule/attachments/466_PGCon2017-SCRAM.pdf

ちなみにいつもわすれちゃうけど、PostgreSQL のユーザーの作成、データーベースの作成、権限の付与、パスワードの変更はここらへん
https://medium.com/coding-blocks/creating-user-database-and-adding-access-on-postgresql-8bfcd2f4a91e

(2018-09-22 追記)ドライバーの実装
- C# https://github.com/npgsql/npgsql/pull/1769/files
- erlang https://github.com/epgsql/epgsql/blob/devel/src/epgsql_scram.erl
- python https://github.com/nakagami/minipg/commit/d4ef01ae2867b267c4e4dca8550b9cfce0a61ccc


コメント(0) 
共通テーマ:日記・雑感

SQLServer 2017 を Ubuntu 16.04 にインストールしてみる [RDBMS]

基本的には、この手順に従う
https://docs.microsoft.com/ja-jp/sql/linux/quickstart-install-connect-ubuntu?view=sql-server-linux-2017

ちなみに、 Ubuntu 18.04 にインストール (apt-get install mssql-server)しようとしたら依存関係でエラーになった。

The following packages have unmet dependencies:
 mssql-server : Depends: openssl (<= 1.1.0) but 1.1.0g-2ubuntu4 is to be installed
E: Unable to correct problems, you have held broken packages.

解決法っぽいのは stackoverflow にあった。
https://askubuntu.com/questions/930712/installation-problems-with-ms-sql-server-for-linux
そのうち 18.04 でも簡単にインストールできるようになると思われ、既存のパッケージ依存関係が壊れるといやなので今回は、がんばらず、 Ubuntu 16.04 にインストールしてみることにした。

[SQLServer のインストール]
wget -qO- https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
sudo add-apt-repository "$(wget -qO- https://packages.microsoft.com/config/ubuntu/16.04/mssql-server-2017.list)"

sudo apt-get update
sudo apt-get install -y mssql-server

[コンフィギュレーション]
sudo /opt/mssql/bin/mssql-conf setup
Choose an edition of SQL Server:
と、SQLServer の、どのエディションか聞かれる
https://www.microsoft.com/en-us/sql-server/sql-server-2017-editions
今回は
2) Developer (free, no production use rights)
を選んだ

このあとで sa のパスワードを聞かれるので入力する。

サーバーが起動しているか確認
systemctl status mssql-server
active(running) と出てれば OK

[コマンドラインツールのインストール]
curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list | sudo tee /etc/apt/sources.list.d/msprod.list
sudo apt-get update
sudo apt-get install -y mssql-tools unixodbc-dev

以下のような感じで /opt/mssql-tools/bin/ を環境変数 PATH に加えてログインしなおすなどする
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile

コマンドとして以下のように入力すると、パスワードが聞かれ、パスワードが合っているとログインできる
sqlcmd -S localhost -U sa


コメント(0) 
共通テーマ:日記・雑感

MySQL のタイムゾーンサポート [RDBMS]

MySQL は、タイムゾーン付きの日付時刻のデータを持ってない
日付時刻をあるタイムゾーンから別のタイムゾーンの値に変換する CONVERT_TZ() 関数は持っている
mysql タイムゾーンのデータを読み込んでおく必要がある

http://d.hatena.ne.jp/Craftworks/20110507/1304762654

mysql_tzinfo_to_sql /usr/share/zoneinfo/ | mysql -u root mysql

コメント(0) 
共通テーマ:日記・雑感

Oracle Database Express Edition 11.02 を Windows 10 にインストール [RDBMS]

以前に Oracle Database Express Edition をインストールした記憶があったのだが
http://nakagami.blog.so-net.ne.jp/2006-02-17
めっちゃ昔だった。

諸般の事情により Windows 10 に、最近の Express Edition を入れることにした。
↓から 11.2 の Windows 版 zip アーカイブ OracleXE112_Win64.zip をダウンロード
http://www.oracle.com/technetwork/database/database-technologies/express-edition/downloads/index.html

アーカイブを解いて Disk1/setup.exe を実行
途中で system のパスワードを聞かれるのでパスワードを入力

これだけで、インストールは終わるが、system のユーザーアカウントができているだけで、ほかのユーザーやデーターベースインスタンスはできてない状態

デスクトップ の「Oracle Database 11g Express Edition」というアイコン
もしくは
メニューの「 Oracle Database 11g Express」 → 「スタートガイド」
でブラウザが起動して、管理ツール的な画面が出る。
デフォルトでは 8080 ポートが使われるが、
https://stackoverflow.com/questions/142868/change-oracle-port-from-port-8080
でポート番号は変えられるらしい

とりあえず見るドキュメントは、ここらへん↓が役に立ちそうな予感
https://docs.oracle.com/cd/E36055_01/admin.112/b66465/toc.htm

(追記)

結局 sqlplus でユーザー(=スキーマー)を作成した

create user scott identified by "tiger" default tablespace users;
grant connect, resouce to scott;

これで
sqlplus scott/tiger@localhost
で、スキーマ scott にログインできるようだ

Django の NAME には sid を入れるらしい。
https://stackoverflow.com/questions/14342317/how-to-solve-ora-12505-without-sid
これ↓でとってこれるらしく、 インストールした Express Edition だと xe みたいだ。
select sys_context('userenv','instance_name') from dual;
さっぱりわからん
コメント(0) 
共通テーマ:日記・雑感

今度は DB2 Express-C を Windows 10 にインストールしてみる [RDBMS]

この時 Ubuntu 16.04 に DB2 Express-C 11.1 をインストールしてみた
http://nakagami.blog.so-net.ne.jp/2016-07-21
残念ながら、その Ubuntu16.04 のイメージを無くしてしまって
代わりに Windows 10 を入手したので、今度は Windows10にインストールしてみることにした。

ここらへんの「free download」から v11.1_win64_expc.zip をダウンロード
https://www.ibm.com/analytics/us/en/technology/db2/db2-trials.html
unzip して setup.exe を実行して「製品のインストール」から「新規インストール」でインストールを開始。
ユーザーを登録するところでデフォルトで入っているユーザー db2admin のパスワードを入れたが、それ以外はデフォルトのチェックボックスの状態のままインストールした。
これで

- ユーザー db2admin
- パスワード→入力したもの
- DB2インスタンス→DB2
- ポート → 50000

となって、サービスは自動で起動される。
Ubuntu 16.04 のときのほうがいろいろ手動で作業しなくちゃいけなくて、それに比べて Wizard 形式で簡単にインストールできたように思う。
ただ、Ubuntu のときに手動でやったのと同じように db2admin が Windows のローカルユーザーとして
登録されていて、実際に Wizard で登録したユーザー、パスワードでサインインできてしまう。
こういうの雑だなぁって思う。

(おまけ)DB2 コマンドでほかのサーバー、ポート、データーベースに接続する設定
- 別サーバーや別ポートに接続する場合→その別サーバーのホスト、ポート、データベース名をノードとして登録
- そのリモートデーターベースのノードの情報をカタログする
- そのカタログを指定して接続
というようになっているらしい
http://db2.jugem.cc/?eid=111
ほかのデーターベースと比べるといろいろと様子が違うなぁ

(追記)古いけど、これが参考になる
https://www.ibm.com/developerworks/jp/offers/db2express-c/installwin_v95/

ノードを設定して別サーバーに接続する
http://qiita.com/hit/items/55e696a844a0c17fd30d
コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

SQLServer 2016 にSQLServer認証で接続 [RDBMS]

久しぶりに SQL Server (今回は 2016)とSQL Server Management Studio を
インストールしたが、やっぱり(自分が今回目標にしていた) SQLServer 認証で接続できない。ググって試行錯誤したらなんとかなったが、いつも、なんだかんだで苦労してできるようになるのでメモっておく

(SQLServer Management Studio から)
- サーバーのプロパティーのサーバー認証モードを「Windows 認証モード」→ 「SQL Server 認証モードと Windows 認証モード」に変更
- 外部からの接続を受け付ける
- sa のログインを有効化(sa じゃなくていいので SQLServer認証のログイン追加でもよし)

(SQL Server 構成マネージャから)
- TCP/IP プロトコルの有効化
- TCP Dynamic port をやめて 固定IP 1433 に設定

と思ったらここ↓ に一通り書いてるひとがいた。
https://creativeweb.jp/fc/remote/

歴史的経緯により、Windows 統合認証がデフォルトで TCP/IP 接続であっても Dynamic にポートを割り当てるのがデフォルトになっているのがはまる理由なんだよなぁ・・・
いまだと、Azure SQL もあるから、SQLServer認証で固定ポートも普通になっているというのに。
コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

DB2 Express-C 11.1 を Ubuntu16.04 にインストール [RDBMS]

唐突に DB2 を手元の Ubuntu 16.04にインストールしようと試みる。

サイトは、URL が変わると困るので、ぐぐって DB2 Express-C 11.1 のダウンロードサイトを探してもらうとして、IBM ID というのを登録(メールアドレスとパスワードと国を入れるだけ)するとDB Express-C 11.1 というのがダウンロードできるようになる。

Linux 版と Windows 10版があって、v11.1_linuxx64_expc.tar.gz をダウンロードした

インストール手順は
- http://www.infoscoop.org/blogjp/2014/04/30/install-or-upgrade-db2-on-linux/
- http://dbtk.jp/2016/06/05/db2-express-c-on-ubuntu/
あたりを参考にした(主に下のやつ)

なんか、64bit 版だし、インストールしなくていいものもあるような気がするけど、
試行錯誤している余裕もないので、参考情報をもとに、
以下のようなパッケージをインストール(とユーザーを2つ追加)した

sudo apt-get install libpam0g:i386
sudo apt-get install build-essential
sudo apt-get install libaio1
sudo apt-get install ksh

sudo groupadd db2iadm1
sudo useradd -g db2iadm1 -m -d /home/db2inst1 db2inst1
sudo passwd db2inst1

sudo groupadd db2fadm1
sudo useradd -g db2fadm1 -m -d /home/db2fenc1 db2fenc1
sudo passwd db2fenc1

インスタンスユーザー(今回は db2inst1)というインスタンスの所有者のユーザーと
fencedユーザー(今回は db2fenc1)というユーザー定義関数やストアード・プロシージャーを実行するユーザーが必要らしい。

次にB2 のインストール

tar zvf v11.1_linuxx64_expc.tar.gz
cd expc
sudo ./db2_install

インスタンスの作成
sudo /opt/ibm/db2/V11.1/instance/db2icrt -u db2fenc1 db2inst1

ポートの設定
/etc/services に
db2c_db2inst1 50000/tcp
が追加されているはず(されてなかったら追加)

以下、
$ su - db2inst1
として
db2inst1 ユーザーで実行

サービスの登録?
$ db2set DB2COMM=tcpip
$ db2 update dbm cfg using SVCENAME db2c_db2inst1

サンプルデーターベースの作成
$ /opt/ibm/db2/V11.1/bin/db2sampl

必要なインストールはここまで


サービスの起動
$ db2start


コマンドラインプロセッサーを起動して接続&SQL実行
db2inst1@ubuntu1604:~$ db2
(c) Copyright IBM Corporation 1993,2007
Command Line Processor for DB2 Client 11.1.0

You can issue database manager commands and SQL statements from the command
prompt. For example:
    db2 => connect to sample
    db2 => bind sample.bnd

For general help, type: ?.
For command help, type: ? command, where command can be
the first few keywords of a database manager command. For example:
 ? CATALOG DATABASE for help on the CATALOG DATABASE command
 ? CATALOG          for help on all of the CATALOG commands.

To exit db2 interactive mode, type QUIT at the command prompt. Outside
interactive mode, all commands must be prefixed with 'db2'.
To list the current command option settings, type LIST COMMAND OPTIONS.

For more detailed help, refer to the Online Reference Manual.

db2 => connect to sample

   Database Connection Information

 Database server        = DB2/LINUXX8664 11.1.0
 SQL authorization ID   = DB2INST1
 Local database alias   = SAMPLE

db2 => select * from staff where dept = 20

ID     NAME      DEPT   JOB   YEARS  SALARY    COMM
------ --------- ------ ----- ------ --------- ---------
    10 Sanders       20 Mgr        7  98357.50         -
    20 Pernal        20 Sales      8  78171.25    612.45
    80 James         20 Clerk      -  43504.60    128.20
   190 Sneider       20 Clerk      8  34252.75    126.50

  4 record(s) selected.

コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

Apache Derby をソースからコンパイルしてネットワークサーバーとして動かしてみる [RDBMS]

Apache Derby というのは Java で書かれた RDBMSだそうで。
http://db.apache.org/derby/

手元の環境は、Mac OS X 上の JDK 1.8.0_60

最近では、その Apache Derby が javadb http://www.oracle.com/technetwork/jp/java/javadb/overview/index.html という名前で JDK に組み込まれていて
/Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home/db/bin
に $PATH を通して環境変数 $DERBY_HOME を設定すれば使えそうだが、今回 trunk のソースからコンパイルして動かしてみた。


【環境設定の設定】
たとえば $HOME/derby に環境を作るとすると・・・

.profile などに、以下の環境変数の設定

export DERBY_HOME=$HOME/derby
export PATH=$PATH:$DERBY_HOME/generated/bin

環境変数 $JAVA_HOME も必要になるので $JAVA_HOME が設定されてなかったら

export JAVA_HOME="$(/usr/libexec/java_home -v 1.8)"

も必要(だった)

【リポジトリの trunk から取ってきたソースからコンパイル】

$ cd $HOME
$ svn co https://svn.apache.org/repos/asf/db/derby/code/trunk/ derby
$ cd derby
$ ant all
$ ant buildjars
$ ln -s $DERBY_HOME/jars/sane $DERBY_HOME/lib


【ネットワークサーバーとして起動】

$ startNetworkServer
Sun May 29 19:14:33 JST 2016 : セキュリティ・マネージャがBasicサーバー・セキュリティ・ポリシーを使用してインストールされました。
Sun May 29 19:14:34 JST 2016 : Apache Derby Network Server - 10.13.0.0 alpha - (1745974)が起動し、ポート1527で接続の受入れ準備が完了しました

【クライアントから接続】

$ ij
ijバージョン10.13
ij> connect 'jdbc:derby://localhost/testDB;create=true';
ij> show tables;
TABLE_SCHEM |TABLE_NAME |REMARKS
------------------------------------------------------------------------
SYS |SYSALIASES |
SYS |SYSCHECKS |
...(略)
SYSIBM |SYSDUMMY1 |

23行が選択されました
ij>


2019-04-28追記 Github に git のミラーがあった
https://github.com/apache/derby
コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感