LoginSignup
2
0

More than 1 year has passed since last update.

Db2の基本的な使い方と自分用メモ

Last updated at Posted at 2023-03-27

業務で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: command not found"​ error when Db2 commands are run from command-line for Linux or Unix Operating system

使った・使っている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)

おわり

実際にローカルでdb2コンテナを起動させて、自分で一からスキーマやテーブルをcreateし、データを入れてと行うことで色々な勉強になりました。業務でDB設計したことない〜とは言ってたけど、実際にこうやってちょっと作るだけで「こういうことしなきゃいけないんだな」とか「こういうことに注意が必要だな」と多くの気づきがありました。

このページは本当に自分のためのブックマークみたいなところがありますので、読みにくくてもご愛嬌でお願いします。
早くApple Silliconに対応されますように★

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0