業務でdb2を久々に触りました。
何年か前にプロジェクトで使ったことはあったのですが、打つコマンドがほぼ限られていたのとDB設計や構築を自分で行なってないことから、ほとんど訳わからんままでした。
今回はお客様環境でDb2を使うのですが、その際に使用するシェルのテストをしたく、ローカルでDb2を構築することにしたのでした。
【重要】Db2 CLIはApple Silliconに対応していない
当方Mac M1端末を使用していますが、まず衝撃だったのが、Db2のCLIはApple Sillicon端末に対応していないことでした。Db2自体はDb2 on cloud等で使うことができますが、私の用途(シェルでテーブルいじりたい)をテストするのはcloud版ではできなかったので、Db2 Cliを使えるようにする必要がありました。
コミュニティの質問では結局、colimaを使用してDb2コンテナを動かして使用する例がありました。
DB2 LUW. 11.5.xx - Mac M1 ready
こちらの記事もcolimaで成功しています。
M1 Macでcolimaを使ってDb2コンテナの稼働に成功(厄介な制約付き)
ちなみに自分はその時間はなかったので、眠らせていたintel Mac端末を引っ張り出してきてDb2コンテナを構築しました。CLI使いたかっただけなのになんで?
intel端末のMacにおけるDb2コンテナの動かし方
ではintel端末でどう動かしたかを自分向けにメモ。この点においては、公式のドキュメントがわかりやすかったです。なお、Docker HubのDb2ページはサンセットするみたいで、どのみち以下に誘導されるはずです。
macOS システムへの Db2 Community Edition Docker イメージのインストール
フォルダには気をつけつつ、dockerコマンドはほぼdocs通りに打っていくだけでした。"su"の部分だけエラーが出ましたが、ハイフンを打ち直すことで解決。なんで?
本当はこれくらい簡単なはずだったのに…
Db2コマンド使用の際に遭遇したエラー
M1 macじゃないのにDb2クライアント入れてもエラーが出る…
Db2: command not found
そんなときは「.bash_profile」とか「.bashrc」とかにこちらを追加してください。
if [ -f /db2home/db2inst1/sqllib/db2profile ]; then
. /db2home/db2inst1/sqllib/db2profile
fi
使った・使っているDb2コマンド
※自分用チートシートとして。
- Db2インスタンス起動
db2start
- データベースに接続
db2 connect to (DB名) user (username) using (password)
個人的SQLチートシート
*ドキュメントはこちら。
db2 + "SQLコマンド"で使う。
- 現在のスキーマを確認する
values current schema
- スキーマを作る
create schema (スキーマ名)
- デフォルトスキーマを変更する
set current schema ${スキーマ名}
- スキーマ一覧を表示する
select schemaname from SYSCAT.SCHEMATA
- テーブル一覧を確認する
list tables
- テーブル項目を調べる
describe table (テーブル名)
- テーブル名を追加する
create table (テーブル名) (
(カラム名)(データタイプ)(オプション/NOT NULLとか)
)
- PKを追加する
alter talbe (テーブル名) add constraint (主キー制約名) primary key (主キー対象項目 [,主キー対象項目...])
- テーブルのデータをコピーする
insert into コピー先テーブル名 select * from コピー元テーブル名
あるいは
insert into スキーマ名.コピー先テーブル名 select * from スキーマ名.コピー元テーブル名
- ある条件下で出力する
case when (条件) then (出力)
※whenは色々な使い方があるので公式ドキュメントを参考ください。
- 削除する
drop from (テーブル名)
でも良いけど、トランザクションログが作られるので、
truncate table (テーブル名) immediate
がお勧め。ログが作られずに一括削除ができます。
【参考】DB2 10.5 表データの一括削除(TRUNCATE TABLE)
- CSVをIMPORTするとき
How to import data from a DB2 database table (from a CSV file) を参照。
おわり
実際にローカルでdb2コンテナを起動させて、自分で一からスキーマやテーブルをcreateし、データを入れてと行うことで色々な勉強になりました。業務でDB設計したことない〜とは言ってたけど、実際にこうやってちょっと作るだけで「こういうことしなきゃいけないんだな」とか「こういうことに注意が必要だな」と多くの気づきがありました。
このページは本当に自分のためのブックマークみたいなところがありますので、読みにくくてもご愛嬌でお願いします。
早くApple Silliconに対応されますように★