DB, DB2の記事一覧: Javaってまだいけますか
いっぱいいっぱいで無理なので学んだ事をいちいちメモっていくブログです。
[PR]
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
DB2のシステムカタログ
システムカタログ参照方法をメモ。
・テーブル一覧
・ビュー一覧
・インデックス一覧
・ファンクション一覧
・テーブル一覧
SELECT TABSCHEMA, TABNAME, DEFINER, TYPE, STATUS, CREATE_TIME
FROM SYSCAT.TABLES
WHERE
TABSCHEMA = '[スキーマ名]' AND
TYPE = 'T'
ORDER BY TABNAME
・ビュー一覧
SELECT TABSCHEMA, TABNAME, DEFINER, TYPE, STATUS, CREATE_TIME
FROM SYSCAT.TABLES
WHERE
TABSCHEMA = '[スキーマ名]' AND
TYPE = 'V'
ORDER BY TABNAME
・インデックス一覧
SELECT INDSCHEMA, INDNAME, DEFINER, TABNAME, COLNAMES, UNIQUERULE, CREATE_TIME
FROM SYSCAT.INDEXES
WHERE
TABSCHEMA = '[スキーマ名]' AND
UNIQUERULE != 'P'
ORDER BY
TABNAME, INDNAME
・ファンクション一覧
SELECT FUNCSCHEMA, FUNCNAME, DEFINER, CREATE_TIME
FROM SYSCAT.FUNCTIONS
WHERE
FUNCSCHEMA = '[スキーマ名]'
ORDER BY
FUNCNAME
PR
DB2のGRANTメモ
ロールを以下の3つに分けたと想定します。
すると、各DBオブジェクトへのGRANTは以下のようになります。
・テーブルへのGRANT
・ビューへのGRANT(全部SELECT権限を付与)
・ファンクションへのGRANT(全部EXECUTE権限を付与)
・プロシージャ(全部EXECUTE権限を付与)
参考
DB_MANAGER : DB管理者(全権限)
SYSTEM_OPERATOR : システム運用保守担当者(更新可)
PUBLIC_USER : 参照専用ユーザ(参照のみ)
すると、各DBオブジェクトへのGRANTは以下のようになります。
・テーブルへのGRANT
GRANT CONTROL ON [スキーマ名].[テーブル名] TO GROUP DB_MANAGER
GRANT SELECT,INSERT,UPDATE,DELETE,REFERENCES ON [スキーマ名].[テーブル名] TO GROUP SYSTEM_OPERATOR
GRANT SELECT ON [スキーマ名].[テーブル名] TO GROUP PUBLIC_USER
・ビューへのGRANT(全部SELECT権限を付与)
GRANT SELECT ON [スキーマ名].[ビュー名] TO GROUP DB_MANAGER
GRANT SELECT ON [スキーマ名].[ビュー名] TO GROUP SYSTEM_OPERATOR
GRANT SELECT ON [スキーマ名].[ビュー名] TO GROUP PUBLIC_USER
・ファンクションへのGRANT(全部EXECUTE権限を付与)
GRANT EXECUTE ON FUNCTION [スキーマ名].[ファンクション名] TO GROUP DB_MANAGER
GRANT EXECUTE ON FUNCTION [スキーマ名].[ファンクション名] TO GROUP SYSTEM_OPERATOR
GRANT EXECUTE ON FUNCTION [スキーマ名].[ファンクション名] TO GROUP PUBLIC_USER
・プロシージャ(全部EXECUTE権限を付与)
GRANT EXECUTE ON PROCEDURE [スキーマ名].[プロシージャ名] TO GROUP DB_MANAGER
GRANT EXECUTE ON PROCEDURE [スキーマ名].[プロシージャ名] TO GROUP SYSTEM_OPERATOR
GRANT EXECUTE ON PROCEDURE [スキーマ名].[プロシージャ名] TO GROUP PUBLIC_USER
参考
DB2で制約/Identity有りのテーブルのエクスポート/インポート
外部キー制約やIdentity列がある場合にいろいろ面倒だったのでメモ。
◆エクスポート
◆インポート
◆インポート(Identity列がある場合)
[最大値+1]は事前に
ちなにみシーケンスオブジェクトを使ってPKを採番している場合は、
また、制約オフ、オンは外部キー制約の親テーブルから実行する必要があります。
あと、ロードコマンドの“copy yes to nul”をしないと、ロード完了後にテーブルがバックアップペンディング状態になります。
実際の仕事では親表から順にリストして各コマンドを生成するExcelを作って対応しました。
結構面倒ですよねぇ。
追記:
最初に制約をDROPしてインポート後に制約CREATEという方法もあるみたいです。
ERDツールでFKのDROPを生成するものもあるようですね。
こちらのブログ記事が参考になりました。
◆エクスポート
db2 connect to [インスタンス名]
db2 export to [エクスポートファイル名] of IXF select * from [スキーマ名].[テーブル名]
db2 terminate
◆インポート
db2 connect to [インスタンス名]
rem 制約オフ
db2 set integrity for [スキーマ名].[テーブル名] off
rem ロード
db2 load client from [エクスポートファイル名] of ixf REPLACE INTO [スキーマ名].[テーブル名] copy yes to nul
rem 制約オン
db2 set integrity for [スキーマ名].[テーブル名] immediate checked
db2 terminate
◆インポート(Identity列がある場合)
db2 connect to [インスタンス名]
rem 制約オフ
db2 set integrity for [スキーマ名].[テーブル名] off
rem ロード
db2 load client from [エクスポートファイル名] of ixf MODIFIED BY identityoverride REPLACE INTO [スキーマ名].[テーブル名] copy yes to nul
rem 制約オン
db2 set integrity for [スキーマ名].[テーブル名] immediate checked
rem シーケンス開始値設定
db2 ALTER TABLE [スキーマ名].[テーブル名] ALTER COLUMN [Identity列名] RESTART WITH [最大値+1]
db2 terminate
[最大値+1]は事前に
SELECT MAX(Identity列名) + 1 FROM [スキーマ名].[テーブル名]で取得しておきます。
ちなにみシーケンスオブジェクトを使ってPKを採番している場合は、
alter sequence [スキーマ名].[シーケンスオブジェクト名] restart with [最大値+1]となります。
また、制約オフ、オンは外部キー制約の親テーブルから実行する必要があります。
あと、ロードコマンドの“copy yes to nul”をしないと、ロード完了後にテーブルがバックアップペンディング状態になります。
実際の仕事では親表から順にリストして各コマンドを生成するExcelを作って対応しました。
結構面倒ですよねぇ。
追記:
最初に制約をDROPしてインポート後に制約CREATEという方法もあるみたいです。
ERDツールでFKのDROPを生成するものもあるようですね。
こちらのブログ記事が参考になりました。
[DB2]SQL0912N データベースに対するロック要求の最大数に達しました。
次のコマンドでlocklistを増やすといいようです。
privacy_manager_db
Tivoli Privacy Manager が使用する DB2 インスタンスの名前
new_value
パラメーターに割り当てる値。 LOCKLIST のデフォルト値は 100。
参考にしたサイト
db2 update db cfg for privacy_manager_db using LOCKLIST new_value
privacy_manager_db
Tivoli Privacy Manager が使用する DB2 インスタンスの名前
new_value
パラメーターに割り当てる値。 LOCKLIST のデフォルト値は 100。
参考にしたサイト
[DB2]接続中のセッションの確認
DB2が稼動しているサーバ上のDB2 CLP上で、以下のコマンドを実行することで確認できました。
set DB2INSTANCE=対象インスタンス名
db2 list application show detail
DB2でLPAD
DB2だとLAPD関数が無いのでFUNCTIONとして自作しました。
・指定文字で埋めるバージョン
・半角空白で埋めるバージョン
ちなみに同じ名前で引数違いのFUNCTIONを作ったら、DROPのときはシグネチャを指定します。
残念ながら、使うときは
のようにスキーマ名の修飾が必要です。
・指定文字で埋めるバージョン
CREATE FUNCTION LPAD (STR VARCHAR(128), LEN INTEGER, PAD VARCHAR(1))
RETURNS VARCHAR(128)
LANGUAGE SQL CONTAINS SQL
RETURN (
CASE WHEN LENGTH(RTRIM(STR)) < LEN THEN
REPEAT(PAD, LEN - LENGTH(RTRIM(STR))) || STR
ELSE
STR
END
);
・半角空白で埋めるバージョン
CREATE FUNCTION LPAD (STR VARCHAR(128), LEN INTEGER)
RETURNS VARCHAR(128)
LANGUAGE SQL CONTAINS SQL
RETURN (
CASE WHEN LENGTH(RTRIM(STR)) < LEN THEN
REPEAT(' ', LEN - LENGTH(RTRIM(STR))) || STR
ELSE
STR
END
);
ちなみに同じ名前で引数違いのFUNCTIONを作ったら、DROPのときはシグネチャを指定します。
DROP FUNCTION LPAD (VARCHAR(128), INTEGER, VARCHAR(1));
DROP FUNCTION LPAD (VARCHAR(128), INTEGER);
残念ながら、使うときは
スキーマ名.LPAD(カラム名, 桁数, '0')
のようにスキーマ名の修飾が必要です。
[DB2]テーブル/インデックスのメンテナンス
DB2の定期的なメンテナンスについてのメモ。
下記4つの手順をバッチファイルにしといて定期的に実行すると良いようです。
1.テーブルを再編成する
2.インデックスを再編成する
3.統計情報再収集
4.すべてのデータベース・パッケージを再バインド
※4はDBサーバ上で実行する必要があるっぽい。
再編成とはデフラグみたいなものっぽいです。
パッケージの再バインドというのがよく分からないんですが。。。
参考にしたサイト
下記4つの手順をバッチファイルにしといて定期的に実行すると良いようです。
1.テーブルを再編成する
db2 REORG TABLE [スキーマ名].[テーブル名]
2.インデックスを再編成する
db2 REORG INDEXES ALL FOR TABLE [スキーマ名].[テーブル名] ALLOW NO ACCESS
3.統計情報再収集
RUNSTATS ON TABLE [スキーマ名].[テーブル名] AND INDEXES ALL
4.すべてのデータベース・パッケージを再バインド
set DB2INSTANCE=[データベース名]
db2rbind [データベース名] -l logfile.out ALL
※4はDBサーバ上で実行する必要があるっぽい。
再編成とはデフラグみたいなものっぽいです。
パッケージの再バインドというのがよく分からないんですが。。。
参考にしたサイト
Navigation
menu
ブログ内検索
カテゴリー
カウンター
忍者アド
リンク
最新CM
[07/17 セバ]
[12/27 NONAME]
最新記事
(10/15)
(10/01)
(08/12)
(08/12)
(08/11)
プロフィール
HN:
takacy.k
年齢:
45
性別:
男性
誕生日:
1979/08/13
趣味:
酒
自己紹介:
個人的なメモですので、投稿内容について真偽を保証するものではありません。また、当ブログの内容をご利用になったことによる(以下略)