第 4 章 DB2 運用の基本 本書に含まれている情報は 正式な IBM のテストを受けていません また 明記にしろ 暗黙的にしろ なんらの保証もなしに配布されるものです この情報の使用またはこれらの技術の実施は いずれも 使用先の責任において行われるべきものであり それらを評価し 実際に使用する環境に統合する使用先の判断に依存しています それぞれの項目は ある特定の状態において正確であることが IBM によって調べられていますが 他のところで同じまたは同様の結果が得られる保証はありません これらの技術を自身の環境に適用することを試みる使用先は 自己の責任において行う必要があります Copyright IBM Japan Co., Ltd. 2011
内容 データベースの運用管理とは 表のメンテナンス データの投入 抽出 移動 統計情報の収集 表の再編成 DB2 のセキュリティ機能概要 2
データベースの運用管理に伴う主なタスク RUNSTATS REORG 表のメンテナンス統計情報や再編成の実施 モニタリングアクセス状況やリソースの状態の把握と問題判別 DBADM SYSADM SYSCTRL SYSMAINT ------------------ -------- ----------- ------------- --------- ----------------- 権限 特権適切なアクセス権限 実行権限の付与 監査活動履歴の取得 解析 回復管理定期的なバックアップの取得と障害復旧の計画 データ移動データの抽出 投入 移動 3
DB2 の主な運用管理項目 設計 構築 第 5 章 モデリング 論理設計物理設計高可用性設計 第 6 章パラメータ設計 定例運用 起動 / 停止 - インスタンス -DB データベースメンテナンス -REORGCHK -REORG -RUNSTATS 稼動管理 - db2プロセス - ログ管理 - 障害モニタリング 第 4 章 第 7 章 第 7 章 パフォーマンス管理 - パフォーマンスモニタリング 回復管理 -BACKUP - 回復履歴ファイル セキュリティ管理 - 認証 - 許可 - 監査 ワークロード管理 -WLM データ移動ユーティリティ -LOAD -IMPORT -EXPORT 第 6 章 第 4 章 第 4 章 非定例運用 回復管理 -RESTORE 第 6 章 変更管理 - レジストリー変数変更 - パラメーター変更 - バッファープール変更 - コンテナー追加 - コンテナーサイズ拡張 - フィックスパック適用等 4
表のメンテナンス データの抽出 投入 移動 統計情報の収集 表の再編成 5
データの抽出 投入 移動のためのユーティリティ DB2の世界ではDEL 形式 (CSV) のファイルを経由することが一般的 データ抽出用のユーティリティ :EXPORT データベースからフラット ファイルへデータを抽出 EXPORTコマンドで記述されたSELECT 文の結果のデータを抽出 データ投入用のユーティリティ :IMPORT/LOAD フラットファイルからデータベースへデータを投入 IMPORTは内部的にSQLを利用する LOADはデータページを生成して直接表スペースへ書き込む データベース EXPORT DEL 形式 id name tel 001 nm1 12 IXF 形式 002 nm2 34 003 nm3 56 ASC 形式 IMPORT/ LOAD データベース id name tel 001 nm1 12 002 nm2 34 003 nm3 56 6
データ移動ユーティリティ Oracle SQL*Loader の移行 ダイレクトパス ロード データベース バッファーをバイパスし データベースに直接フォーマット済みページを書き込む 高速なデータ投入が可能 DB2 LOAD utility 従来型パス ロード SQL*LoaderがINSERTを生成して データベースに対してデータを投入する ダイレクトパスと比較して遅い DB2 IMPORT utility 参照制約やチェック制約の制約で従来型パスを使用している場合 DB2 では LOAD が使用可能 (LOAD 完了後に SET INTEGRITY コマンドを実行する ) 7
データ移動ユーティリティ SQL*Loader のコントロール ファイル 固定長フォーマットをロードするコントロールファイルの例 固定長フォーマットの場合 POSITION() 指定を METHOD L を用いた指定に変更する Oracle SQL*Loader control file LOAD DATA INFILE '/home/ora_usr/accounts.dat' INTO TABLE accounts ( acct_id POSITION(0001:0003) NUMBER,dept_code POSITION(0004:0006) CHAR,acct_desc POSITION(0009:0100) VARCHAR2,max_employees POSITION(0101:0103) NUMBER,current_employees POSITION(0104:0106) NUMBER,num_projects POSITION(0107:0107) NUMBER ) DB2 Load command LOAD FROM '/home/ora_usr/accounts.dat' of ASC METHOD L ( 0001 0003,0004 0006,0009 0100,0101 0103,0104 0106 ) INSERT INTO accounts ( acct_id,dept_code,acct_desc,max_employees,current_employees ); 8
データ移動ユーティリティ 可変長データの場合のコントロールファイル 9 可変長データの場合のコマンド比較 シンプルなコントロールファイルについては 下記の IBM Redbook で変換用の Perl スクリプトが使用可能 Redbook "Oracle to DB2 Conversion Guide for LUW", Appendix E, Converter for SQL*Loader on page 673. http://www.redbooks.ibm.com/abstracts/sg247048.html Data file to load 101,"ACT","Major Bank Co.",30,11,4 301,"ACT","Large Telco Inc.",30,0,4 101,"IT","Huge Software Co.",50,0,4 203,"MKT","Basic Insurance Co.",15,0,3 Oracle SQL*Loader control file INFILE '/home/ora_usr/accounts.dat' INTO TABLE accounts FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY '"' ( acct_id,dept_code,acct_desc,max_employees,current_employees,num_projects ) DB2 Load command LOAD FROM '/home/ora_usr/accounts.dat' of ASC MODIFIED BY CHARDEL COLDEL, METHOD P (1, 2, 3, 4, 5 ) INSERT INTO accounts ( acct_id,dept_code,acct_desc,max_employees,current_employees );
データ移動ユーティリティ db2move Oracle の imp/exp と同様 スキーマを指定したデータの抽出 / 投入 / 移動が可能 指定可能なアクション EXPORT 指定した条件に一致するテーブルを抽出する 条件指定がない場合は全てのテーブルが対象 抽出したテーブルの情報は db2move.lst ファイルに記録される IMPORT db2move.lst ファイルの情報を元に IMPORT によるデータの投入を行う LOAD db2move.lst ファイルの情報を元に LOAD によるデータの投入を行う COPY テーブルのコピーを行うオプション 同じデータベース内だけでなく 複数のデータベースをまたがったコピーが可能 SRCDB Schema: SANTA Table Table Sequence Views Index Index Trigger Routine DB2MOVE Table Table TESTDB Schema TEST View Index Index Trigger db2move SRCDB COPY sn SANTA -co target_db TESTDB u db2admin p password 10 Sequence Routine
データ移動ユーティリティ カーソルからの LOAD 実行 通常 LOAD はフラットファイルを入力データとするが カーソルを使用して SELECT 結果を直接ロードすることも可能 移動するデータを一旦ファイルへ蓄積する必要がない DECLARE C1 CURSOR FOR SELECT * FROM SOURCE_TABLE; LOAD FROM C1 OF CURSOR REPLACE INTO TARGET_TABLE; 複数のデータベース間でカーソルを使用した LOAD も可能 カーソル宣言の中で ターゲットとなるデータベース接続情報を指定 DECLARE C1 CURSOR DATABASE SRCDB USER user1 USING password FOR SELECT * FROM SOURCE_TABLE; LOAD FROM C1 OF CURSOR REPLACE INTO TARGET_TABLE; カーソルからのロード リモート データベースからのロード ソース データベース ターゲット データベース 1. ソース DB へ接続 SELECT 結果をターゲット表に直接 LOAD する 2. 結果セットをカーソルから取得し ターゲット データベースに直接投入 11
ブランク ページ 12
統計情報の収集 統計情報を最新の状態に更新する 現時点の統計情報に更新することで 最新の統計情報によるアクセス パスが選択される 静的 SQL の場合 BIND 時に既にアクセス パスが決まっており RUNSTATS 後に REBIND しない限り アクセス パスへの影響は受けない 動的 SQL の場合 実行時に BIND が行われアクセス パスが決まるので RUNSTATS 後のパフォーマンスは変化する可能性有り RUNSTATS を取得すべきタイミング 索引が作成された時 表のデータが REORG された時 表および索引のデータの 10-20% が UPDATE/DELETE/INSERT された時 アプリケーションを BIND する前 RUNSTATS 実行中には表への書き込み 読み込みアクセスが共に可能 SQL ステートメント システム カタログ表 表統計 列統計 列分布統計 索引統計 13 統計情報 オプティマイザー 最適なアクセス プラン
統計情報の収集 基本的な RUNSTATS コマンド 表及び索引の統計情報を収集する ターゲットとなる表にはスキーマ名の指定が必要 db2 RUNSTATS ON TABLE FOR DB2INST1.TABLE1 AND INDEXES ALL 分散統計を収集する RUNSTATS コマンド 表及び索引の統計情報に加え 列ごとの値の分布を収集する パラメータマーカーを使用しない SQL の効率的なアクセスプラン決定に効果的 db2 RUNSTATS ON TABLE FOR DB2INST1.TABLE1 WITH DISTRIBUTION AND INDEXES ALL サンプリングを使用した RUNSTATS コマンド 巨大な表の統計情報を収集する際に 全てのデータを評価するのではなく 一部のデータのみサンプリングを行う SYSTEM サンプリングを使用した場合 指定された比率のページだけを読み込むため 実行時間の短縮に効果的 db2 RUNSTATS ON TABLE DB2INST1.TABLE1 AND INDEXES ALL TABLESAMPLE SYSTEM (10) 14
統計情報の自動的な収集 DB2 のオートノミック機能の一環として 統計情報を自動的に収集する機能が強化されている 自動 RUNSTATS とリアルタイム RUNSTATS 統計情報の自動収集を有効にした場合の流れ 1 非同期統計情報収集 できる限り バックグラウンドで実行される統計情報収集を利用 2 リアルタイム統計情報収集 ( 同期統計情報収集 ) 統計情報が正確でないと判断した場合 SQL ステートメントが最適化される前に統計情報を取得 3 ファブリケート統計情報の利用 なんらかの理由で リアルタイム統計取得ができなかった場合 索引マネージャからのメタ データを使用して統計情報を作成 ( ファブリケート ) する 4 上記 2 3 により統計情報が利用された場合 非同期統計情報の取得を要求する 1 非同期統計情報収集. 2 リアルタイム統計情報収集 3 ファブリケート統計の利用 大量更新 RUNSTATS 時間の超過 より実情に即したアクセスプラン 15 4 非同期統計取得要求
参考 : リアルタイム統計情報収集機能の設定方法 DB CFG AUTO_STMT_STATS を ON に設定する 同期統計収集の ON/OFF を設定するパラメーター 動的に変更可能 DB2 V9.7 からデフォルトで ON となっている 階層構造となっている点に注意 AUTO_MAINT, AUTO_TBL_MAINT, AUTO_RUNSTATS が全て ON になっている必要がある データベースがアクティブにされてから最低 5 分間は リアルタイム統計収集アクティビティーは行われない Automatic maintenance (AUTO_MAINT) = ON Automatic database backup (AUTO_DB_BACKUP) = OFF Automatic table maintenance (AUTO_TBL_MAINT) = ON リアルタイム統計情報収集機能 Automatic runstats (AUTO_RUNSTATS) = ON Automatic statement statistics (AUTO_STMT_STATS) = ON Automatic statistics profiling (AUTO_STATS_PROF) = OFF Automatic profile updates (AUTO_PROF_UPD) = OFF Automatic reorganization (AUTO_REORG) = OFF 16
表の再編成 表データのフラグメンテーションの解消 指定した索引順にデータを並び替えるためのユーティリティー 目的 フラグメンテーションの解消による ディスク容量の削減 データ読み取りの処理効率向上 指定した索引順のデータの並び替えによる 索引スキャンのパフォーマンス向上 順次先読みの効率向上 再編成が必要なケース SQL による更新 (UPDATE/DELETE/INSERT) により フラグメンテーションが発生した場合 クラスター率が低下し 索引スキャン 順次先読みの効率が悪化した場合 再編成が必要でないケース SQL による更新処理のない 読み取りのみの表 ユニーク索引の列を条件とした 1 件検索の場合には クラスター率が低くても問題なし 17
REORG TABLE コマンドの実行 REORG TABLE コマンドは表 索引を対象として実行可能 表の再編成 ( 索引は強制的に再作成される ) db2 REORG TABLE TUKIV97.TABLE1 INDEX TUKIV97.INDEX_TS1 USE TEMPSPACE1 索引の再編成 db2 REORG INDEXES ALL FOR TABLE TABLE1 テーブル再編成の基本的な流れ TS1 Tempspace1 1. REORG 対象の表から全レコードを取得し 一時表スペースでソート Table1 temp1 2. ソートが完了したデータを元の表スペースに書き戻し INDEX_TS1 drop & create 3. 既存の索引を削除し 新たに索引を作成 18
DB2 の提供するセキュリティ機能の概要 アクセス権ありますか? 私は XX です USER user1 PASSWORD a@x?s 認証 OK! アクセス権はありません DBADM SYSADM 1. 認証本人確認成りすましの防止 SYSCTRL 2. 権限 特権適切なアクセス権限 実行権限の付与 SYSMAINT 5. 暗号化ネットワーク トラフィック上のデータ暗号化 ACCESS OK ------------------ -------- ----------- ------------- --------- ----------------- 3. 監査活動履歴の取得 解析 ACCESS OK password ;@[- ^*;:@_?>;sfd -032;l/mg,fdsl; 6. トラスティッド接続 3 層アプリケーションでのセキュリティー強化 (9.5-) 4. LBAC 行単位 列単位のアクセス制御 (9.1-) アクセスできるのはここまでです Fdsa;;lkb[ - :o;/.; 5. 暗号化格納データの暗号化ファイルの暗号化 19
セキュリティ設計参考資料 DB2 セキュリティ デザインガイド DB2 の提供するセキュリティ機能をシステム構築時に使用する際のデザインガイド 目次 1. 概要 認証権限および特権 2. 監査機能編 3. LBAC 編 4. 暗号化編 IBM Web Site にて入手可能 http://www-06.ibm.com/jp/domino01/mkt/dminfo.nsf/doc/00299afe 20