2010年5月
日本アイ・ビー・エム株式会社
システム製品テクニカル・セールス
Power Systems テクニカル・セールス
DB2 for i 7.1
IBM DB2 Web Query for i
最新情報
Agenda
DB2 for i 7.1 最新情報
– 概要
– DB2 for i 7.1の新機能、機能拡張
IBM DB2 Web Query for i 最新情報
– 最新 HotFix 情報
– 各種情報
更新情報 2010年5月17日 rev.1.1 公開 2010年5月24日 rev.1.2 公開 2010年6月25日 rev.1.3DB2 for i 7.1
最新情報
DB2 for i フォーカスエリア
自己管理データベース – 自動化によるTCOの削減 – セキュリティ機能と監査機能の実装 信頼性とスケーラビリティ – 簡単で最高のスケーラビリティ – 統合されたトランザクション管理 – 高度で柔軟なログ機能 オープン化・業界標準のサポート – 戦略的なインターフェースであるSQL対応 – 最新の業界標準機能の実装 – ポータビリティ、互換性 アプリケーションの柔軟性 – SQL、RPG、COBOL・・・ – SOA対応 ビジネス・インテリジェンス – データの保管、管理、分析 – 大規模データウェアハウスに対するエンドユーザーへ のデータ照会、レポーティングIBM SOA Foundation
Skills & Support Software 0 10 20 30 40 50 60 70 80 90 100 DB2 for i Microsoft SQL Server 2000 Oracle 10g
XMLは業界標準としてデータ交換に利用
DB2 for i 7.1 でより容易なXML 操作を実現
1. XMLデータタイプのカラムにXMLデータを格納
2. XMLドキュメントを分解(DECOMPOSE)し、リレー
ショナルなカラムに格納
3. 既存のリレーショナル・データからXMLドキュメント
を生成
OmniFindテキスト・サーチ・サーバーのXMLドキュメ
ントサポート
– XML ドキュメントのエレメント検索
– SQL文を使用したOmniFindでのXMLドキュメント
検索
XML エクステンダーの後継機能
456 1357 6/10/09 5/27/09 2468 123 Purchase Order Date CustomerNO ORDERNO ~ XML ~ ~ XMLデータタイプ フィールド(カラム)DB2 for i 7.1 概要:XMLサポート
RPGでのSQL拡張
– カラム・レベル暗号化フィールド・プロシジャー
• データベース内の特定のカラムに対するSQLまたはネイティブDBアクセスによる暗号化・復号化機能の提供 • アプリケーションの改修なしに利用可能
• Patrick Townsend社, Linoma Software社, Protegrity社の暗号化ソリューション,アルゴリズムを拡張
– 組み込みSQLでのリザルト・セット • RPGアプリケーションでのSQL利用がより柔軟に 区分化表(パーティション・テーブル)のサポート拡張 – パーティション・テーブルを使用することで非常に大きなデータベーステーブルのパフォーマンス向上や管理 の容易化が可能 – アイデンティティ・カラム、参照制約のパーティション・テーブルでのサポート MQとの統合 – SQLコマンドからMQ機能を起動 • プログラミングのシンプル化 • 可搬性(ポータビリティ)の向上 DB2ファミリー, Oracleとの互換性向上、アプリケーション開発の生産性向上 – Oracle, DB2 LUWと同じSQL構文のサポート追加
• MERGE, Array, グローバル変数のサポート, CREATE OR REPLACE
– DB2 LUW 9.7と同じ新しいトランザクションロッキングオプション
• 読み取り一貫性 Currently Committed – ロック回避と最新コミットデータの読取を両立
高性能なSQL実行エンジン SQE
– SQEはDB2/400 V5R3以降にビルトイン
• OSリリース毎にSQLパフォーマンス、機能が向上
– DB2 for i パフォーマンスの向上
– SQLパフォーマンス分析・管理機能を提供
• EVI(Encoded Vector Indexes), • MQT(Materialized Query Tables)
• SQLプラン・キャッシュ (IBM i ナビゲーターから分析)
DB2 for i 7.1 での機能拡張
– Adaptive Query Processing (AQP)
• クエリー実行中にクエリー・プランを最適化してパフォー マンスを向上 – SQEでの論理ファイル(LF)サポート
IBM i 7.1 でのCQE(クラッシック・クエリー・エンジン)
– CQEも従来どおり提供。以下のようなSQL業界標準で はないインターフェースの処理時に使用 • Query/400 • 一部のベンダー製アプリケーションDB2 for i 7.1 概要: SQL Queryエンジン(SQE)の拡張
DB2 for i 7.1 最新情報
1. XML サポート
2. DB2 ファミリー、他のDBMSとの互換性向上
1. MERGE 2. CREATE時のREPLACE オプション 3. ロック待機の回避による並行性の改善 4. グローバル変数 5. CALLステートメント中の表現の拡張 6. パラメータマーカーの拡張 7. ルーチンの中で配列のサポート3. アプリケーション開発の強化
1. フィールドプロシジャ (FIELDPROCS) 2. 組込みSQLでの結果セット受取りのサポート 3. QSYS2.SQL_CANCEL プロシジャー 4. 三部構成名称 5. BIT スカラー関数 6. 区分化表の拡張 7. SQL中でMQ Series 関数の呼出し4. パフォーマンス強化
1. SQE機能拡張5. データベース管理
1. DB2 for i でのXMLサポート
DB2 for i 7.1では、リレーショナル・データだけでなくXMLデータも利用可能
– XMLデータタイプのサポート • Native XMLストア – アクセスの言語としてSQLが利用可能 (XQueryは未サポート) DB2 XML Support XML開発者からは… “XML レポジトリで既存の リレーショナルデータも使える"XML の DB2への統合
SQL利用者からは… “SQLを使用して既存のデータに 加えXMLデータも参照できる"XML
参考)XMLとは
XML1.0はW3Cにより1998/10に勧告
データ構造を自由なタグの組み合わせで表現するマークアップ言語
SGML
– ISO標準の文書構造および内容の定義方法を定めるマークアップ言語 HTML
– インターネット上で公開するWebページに特化したマークアップ言語 XML
– HTMLとの相性がよく、HTMLと比較し柔軟な拡張が可能 – SGMLのサブセットであり、不必要な機能を削除 • インターネットスキーマを自由に定義可能 HTML XML SGML 不要な機能の削除 柔軟性・拡張性参考)データフォーマットとしてのXML
0011101111111100011100……….
001hakozaki320050707420……….
001,hakozaki,3,20050707,4,20……….
<受注番号>001 </受注番号>
<営業所>hakozaki</営業所>
<営業所コード>3</営業所コード>
<日付>20050707</日付>
<商品コード>4</商品コード>…..
バイナリ
固定長
文字列
CSV
XML
人は見てもわからない 切り出すポイントを 理解する必要あり デリミタの導入。個々のデー タの意味は定義できない。 自己記述型 (人間が理解可能) 型・構造・制約の導入 開発効率の向上 汎用化 XSD,DTD サイズの巨大化 サンプルデータの準備
– IBM i 7.1 では 下記2つサンプルデータが用意されています。 • STRSQLから下記のコマンドを実行
– サンプルテーブル:データベース SQL プログラミング p.468 • CALL QSYS.CREATE_SQL_SAMPLE ('SAMPLE')
– QSYS内に'SAMPLE'スキーマ(*LIB)が作成される – サンプルXMLテーブル:データベース SQL プログラミングp.488
• CALL QSYS.CREATE_XML_SAMPLE ('SAMPLEXML')
検証時の考慮点
– STRSQLでの実行の場合、ライブラリーモードで実行しないように注意 – iNaviからの方が一度にサンプルコードが入力できるため便利 (対話型SQLではペースト領 域に上限あり) – 検証には IBM i ナビゲーターの「SQL スクリプトの実行」を利用 • 対話型SQLでは、XMLの結果が表示できない参考)DB2 for i 7.1でのXMLサンプルデータ
サンプル①②
サンプル①:XMLデータを格納可能なテーブルの作成
– CREATE SCHEMA POSAMPLE;– SET CURRENT SCHEMA POSAMPLE;
– CREATE TABLE Customer (Cid BIGINT NOT NULL PRIMARY KEY, Info XML);
サンプル②: XMLカラムへのXMLデータの挿入
– INSERT INTO Customer (Cid, Info) VALUES (1000,
'<customerinfo xmlns="http://posample.org" Cid="1000"> <name>Kathy Smith</name> <addr country="Canada"> <street>5 Rosewood</street> <city>Toronto</city> <prov-state>Ontario</prov-state> <pcode-zip>M6W 1E6</pcode-zip> </addr> <phone type="work">416-555-1358</phone> </customerinfo>');
5250からXMLの内容を確認した場合
– SELECT * from Customer;• デフォルトの設定ではXMLフィールドは*POINTERとして表示される
サンプル②: XMLカラムへのXMLデータの挿入(結果)
iNavi 7.1 から表示
注意:XMLフィールドを含むテーブル操作にはiNaviは7.1が必要
– iNavi 6.1以下ではXMLフィールドを持つテーブルの操作は下記のようなエラーとなる – a) テーブルの表示を実行した場合 – b) SQLからSELECTしようとした場合サンプル②: XMLカラムへのXMLデータの挿入(結果)
サンプル③: XMLカラムへのXMLドキュメントの更新
– UPDATE customer SET info =
'<customerinfo xmlns="http://posample.org" Cid="1002"> <name>Jim Noodle</name>
<addr country="Canada">
<street>1150 Maple Drive</street> <city>Newtown</city> <prov-state>Ontario</prov-state> <pcode-zip>Z9Z 2P2</pcode-zip> </addr> <phone type="work">905-555-7258</phone> </customerinfo>' WHERE Cid = 1002;
結果表示
– SELECT * from Customer;
サポート内容
– XML データタイプ • テーブルカラム, ルーチンパラメータ, 変数, etc. – XML ドキュメントのdecomposition(分解)/annotation(注釈) 各XML要素のDBカラムへの分解 – Decomposition(分解)せずに文書内を検索 • Omnifind によるサポート – XML クライアント/言語 APIサポート • CLI, ODBC, JDBC, etc. 使用方法①
– XMLタイプのカラムを持つテーブルの作成
CREATE TABLE newtable (c1 INTEGER, c2 XML )
– テーブルにXMLタイプのカラムを追加
ALTER TABLE newtable ADD COLUMN c3 XML
– SQLプロシジャにXML変数を追加
CREATE PROCEDURE xyz (IN p1 XML) BEGIN
DECLARE xmlv1 XML;
使用方法②
– XMLデータをパース(分解)する際に空白をどう扱うかを指定
• SET CURRENT IMPLICIT XMLPARSE OPTION = ‘PRESERVE WHITESPACE’
– XML値を他のタイプに変換
• XMLCAST (NULL AS XML )
– 組込みSQLでXML変数を指定
• SQL TYPE IS XML AS CLOB (10K) xmlhv
…
INSERT INTO newtable VALUES(1, :xmlhv)
XMLサポート
XML スキーマ・レポジトリー(XSR)
1つのXML列に複数のXML Schemaを使用できる
– XML文書ごと(行ごと)のValidate
– XML Schema同士に互換性がある必要はない
– “IS VALIDATED”でValidateしたXML文書か特定可能
Validateはオプション
– 整形式(well-formed)XML文書と妥当(Valid)なXML文書が混在できる
DB2
システム・カタログ XSR XML 文書 Validate XML Schema Validな INSERTSELECT XMLCOL FROM TEST WHERE XMLCOL IS VALIDATED
XML
参考)整形式XMLと妥当検証されたXML
整形式XML文書 妥当な 整形式XML文書 <well-formed XML Document>
– XML仕様のフォーマットに従ったテキスト文書 妥当なXML文書 <valid XML Document>
– スキーマ言語によって定義された構造・データ型・制約に適合する整形式文書 <?xml version="1.0" encoding="Shift_JIS" ?> <cars><car id=“1” type=“SUV”>
<name>ランドクルーザー</name> </car> </cars> 1つ以上の要素を含む。 root要素を持つ それぞれの要素が 適切にネスト 開始タグと終了タグ、 空要素で構成 XML宣言 <?xml version="1.0" encoding="Shift_JIS" ?> <cars>
<car id=“1” type=“SUV”>
<name>ランドクルーザー</name> </car>
XML スキーマ
サンプル④:XMLスキーマの妥当性検証(Validate)
CREATE PROCEDURE SAMPLE_REGISTERLANGUAGE SQL BEGIN
DECLARE CONTENT BLOB(1M); VALUES BLOB('<?xml version="1.0"?>
<xs:schema targetNamespace="http://posample.org"
xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <xs:element name="customerinfo">
<xs:complexType> <xs:sequence>
<xs:element name="name" type="xs:string" minOccurs="1" />
<xs:element name="addr" minOccurs="1" maxOccurs="unbounded"> <xs:complexType>
<xs:sequence>
<xs:element name="street" type="xs:string" minOccurs="1" /> <xs:element name="city" type="xs:string" minOccurs="1" /> <xs:element name="prov-state" type="xs:string" minOccurs="1" /> <xs:element name="pcode-zip" type="xs:string" minOccurs="1" /> </xs:sequence>
<xs:attribute name="country" type="xs:string" /> </xs:complexType>
</xs:element>
<xs:element name="phone" nillable="true" minOccurs="0" maxOccurs="unbounded"> <xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="type" form="unqualified" type="xs:string" />
</xs:extension> </xs:simpleContent> </xs:complexType> </xs:element>
<xs:element name="assistant" minOccurs="0" maxOccurs="unbounded"> <xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string" minOccurs="0" />
<xs:element name="phone" nillable="true" minOccurs="0" maxOccurs="unbounded"> <xs:complexType>
<xs:simpleContent >
<xs:extension base="xs:string">
<xs:attribute name="type" type="xs:string" /> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence>
<xs:attribute name="Cid" type="xs:integer" /> </xs:complexType>
</xs:element>
</xs:schema>') INTO CONTENT;
CALL SYSPROC.XSR_REGISTER('POSAMPLE', 'CUSTOMER', 'http://posample.org', CONTENT, null);
END;
SET PATH POSAMPLE; CALL SAMPLE_REGISTER;
CALL SYSPROC.XSR_COMPLETE('POSAMPLE', 'CUSTOMER', null, 0);
XSRの登録結果
XSR 操作関数一覧
The XSR_REMOVE procedure is used to remove all components of an XML schema XSR_REMOVE
Adds additional XML schema documents (other than the primary) to an XML schema that you are in the process of registering. You can call SYSPROC.XSR_ADDSCHEMADOC only after SYSPROC.XSR_REGISTER and before
SYSPROC.XSR_COMPLETE
XSR_ADDSCHEMADOC
The XSR_COMPLETE procedure is the final stored procedure to be called as part of the XML schema registration process. It completes the registration of an XML schema. You must call SYSPROC.XSR_COMPLETE each time you call
SYSPROC.XSR_REGISTER. During XML schema completion, DB2 resolves references inside XML schema documents to other XML schema documents
XSR_COMPLETE
The XDBDECOMPXML procedure is used to extract values from serialized XML data and populates relational tables with the values
XDBDECOMPXML
Begins registration of an XML schema. You call this stored procedure when you add the first (primary) XML schema document to an XML schema
XSR_REGISTER
説明 プロシジャー
XSR オブジェクトへの権限の認可/剥奪
GRANT USAGE ON XSROBJECT xsr1 TO mja REVOKE USAGE ON XSROBJECT xsr1 FROM mja
XSR オブジェクトへの記述の追加
COMMENT ON XSROBJECT xsr1 IS ‘A long description …’ LABEL ON XSROBJECT xsr1 IS ‘A short description …’
その他考慮事項
XMLを利用したアプリケーション開発
– 複数のプログラミング言語でのアプリケーション開発をサポート • SQL、外部ファンクション、外部プロシジャー – サポートされるプログラミング言語 • ILE RPG • ILE COBOL • C or C++ (組み込みSQL または DB2 CLI) • Java (JDBC または SQLJ) XML データタイプの制限
– XMLデータタイプには最大2GBまでのXMLファイルを格納可能 – XMLデータタイプへのCCSIDの明示指定可能 • 指定しない場合はQAQQINIファイルのSQL_XML_DATA_CCSID の値を使用 – QAQQINIでのデフォルト値は1208(UTF-8) – 65535は選択不可 – XMLデータタイプはシングルバイトおよびユニコードのダブルバイト文字を格納可能 – 単一行には、3.5GB以内ならば複数のXMLやLOBを格納可能 – XMLデータタイプはパーティション・テーブル(区分化表)で利用可能DB2 for i 7.1 最新情報
1. XML サポート 2. DB2 ファミリー、他のDBMSとの互換性向上 1. MERGE 2. CREATE時のREPLACE オプション 3. ロック待機の回避による並行性の改善 4. グローバル変数 5. CALLステートメント中の表現の拡張 6. パラメータマーカーの拡張 7. ルーチンの中で配列のサポート 3. アプリケーション開発の強化 1. フィールドプロシジャ (FIELDPROCS) 2. 組込みSQLでの結果セット受取りのサポート 3. QSYS2.SQL_CANCEL プロシジャー 4. 三部構成名称 5. BIT スカラー関数 6. 区分化表の拡張 7. SQL中でMQ Series 関数の呼出し 4. パフォーマンス強化 1. SQE機能拡張 5. データベース管理 1. IBM i ナビゲーターの機能拡張 UPDATE + INSERT、行の挿入と更新を1ステートメントで実行
– データが存在している場合には既存データを更新(UPDATE)し、データが存在しない場合に はデータを挿入(INSERT)することが1つのSQLで実行できます。これによって、これまでは アプリケーションで分岐処理をしたり、SQLなどで繰り返し実行したりしていた処理が、
MERGE文を1回実行するだけで可能に
Oracle9iや、DB2 for LUW V8.1.2で使用できる機能をDB2 for i 7.1で実装
2-1. MERGEステートメント
2-1. MERGEステートメント
サンプルコード①– MERGE INTO DEPARTMENT USING
– (VALUES ('K22', 'BRANCH OFFICE K2', 'E01')) INSROW (DEPTNO, DEPTNAME, ADMRDEPT) – ON DEPARTMENT.DEPTNO = INSROW.DEPTNO
– WHEN NOT MATCHED THEN
– INSERT (DEPTNO, DEPTNAME, ADMRDEPT) VALUES(INSROW.DEPTNO, INSROW.DEPTNAME, INSROW.ADMRDEPT)
– WHEN MATCHED THEN
– UPDATE SET DEPTNAME = INSROW.DEPTNAME, ADMRDEPT = INSROW.ADMRDEPT
2-1. MERGEステートメント
サンプルコード②– MERGE INTO DEPARTMENT USING
– (VALUES ('K22', 'BRANCH OFFICE K99', 'E01')) INSROW (DEPTNO, DEPTNAME, ADMRDEPT) – ON (DEPARTMENT.DEPTNO = INSROW.DEPTNO)
– WHEN NOT MATCHED THEN
– INSERT (DEPTNO, DEPTNAME, ADMRDEPT) VALUES(INSROW.DEPTNO, INSROW.DEPTNAME, INSROW.ADMRDEPT)
– WHEN MATCHED THEN
– UPDATE SET DEPTNAME = INSROW.DEPTNAME, ADMRDEPT = INSROW.ADMRDEPT;
結果②K22は既に存在するため、
K22のレコードがInsertされるのではなく
K22のレコードがUpdateされる
新機能 – 新規オブジェクト作成時に既に同名のオブジェクトが存在する場合は(削除した後に)置き換えを実施 – オブジェクトの作成もしくは置き換え操作が従来よりも簡単に 従来の対応(IBM i 6.1以前) – 既存のオブジェクトを事前にDropし、新規オブジェクトを作成 – 既存オブジェクトの有無により処理が異なるため制御用のコーディングが必要 利用時の考慮点 – オブジェクトの置き換え時にはユーザーに下記権限が必要 • オブジェクトに対する*OBJEXIST 権限 • ライブラリーに対する*EXECUTE 権限 • オブジェクトの作成権限 – 既存のオブジェクトに設定されている権限は保存される 対応するSQLステートメント
CREATE OR REPLACE ALIAS Alias1 …
CREATE OR REPLACE FUNCTION Function1 … CREATE OR REPLACE PROCEDURE Procedure1 CREATE OR REPLACE SEQUENCE Sequence1 … CREATE OR REPLACE TRIGGER Trigger1 …
CREATE OR REPLACE VARIABLE Variable1 …
CREATE OR REPLACE VIEW View1 … CREATE TABLEには対応なし
CREATE OR REPLACE
の場合
– 新規に追加する場合
• CREATE OR REPLACE SEQUENCE MYSEQUENCE AS BIGINT
Sequence MYSEQUENCE was created in TEST71. – 既にオブジェクトが存在している場合
• CREATE OR REPLACE SEQUENCE MYSEQUENCE AS BIGINT
Sequence MYSEQUENCE was created in TEST71.
CREATE
の場合
– 既にオブジェクトが存在している場合
• CREATE SEQUENCE MYSEQUENCE AS BIGINT
MYSEQUENCE in TEST71 type *DTAARA already exists
ロック待機方法を指定するConcurrent-access-resolution 節(並行アクセス分離度)の拡張
– ロック待機の回避による並行性の改善
処理対象に、現在他のトランザクションでロックされているデータがあった場合
– IBM i 6.1
– SKIP LOCKED DATA
– ロックされているデータは読み飛ばす – 分離レベル NC, UR, CS, RS時のみ有効 – IBM i 7.1
– USE CURRENTLY COMMITTED
– 他のトランザクションが変更中であっても現在コミットされているデータを返す – 分離レベル CS(KEEP LOCKSなし)時のみ有効
– WAIT FOR OUTCOME
– 他のトランザクションがロックを開放するまで待つ – 分離レベル CS, RS時のみ有効
– 何も指定しない場合もこの動きになる(従来からのデフォルト)
同様の機能が以下の設定でサポートされる
– SQLステートメント(SELECT, SELECT INTO, PREPARE ATTRIBUTES, UPDATE, DELETE) – JDBC接続プロパティ concurrentAccessResolution
– CLI接続属性 SQL_ATTR_CONCURRENT_ACCESS_RSOLUTION
DB2 for i とOracleとの分離レベル、動作の違い
同じRead CommitedでもOracleとDB2で動作が異なる点に注意
未コミット・レコード ユーザーA ① Read CommitedでUPDATE ユーザーB ② Read CommitedでSELECT コミットされるまで 待機 未コミット・レコード ユーザーA ① Read CommitedでUPDATE ユーザーB ② Read CommitedでSELECT 更新前レコード UNDO表領域の レコードを参照 Readのみの場合にはURまたはNCを使用することでロック待機を避けることは可能 ただしその場合はコミット前の更新後レコードが参照されるOracle
DB2
サンプル①
1) ジョブAが、テーブル KTEST71.LOCKTEST を作成
• FLD1にAAAAAAAAを挿入 → UPDATE → COMMIT (分離レベルは*CS)
2) ジョブBが、テーブル KTEST71.LOCKTESTを照会
• SELECT * FROM KTEST71.LOCKTEST WITH CS
【結果】 ジョブAにおいてCommitされた正確なデータがジョブBで表示される • FLD1
AAAAAAAAAA
サンプル②
1) ジョブAが、テーブル KTEST71.LOCKTESTをBBBBBBBBに更新 → COMMIT しない
2) ジョブBが、テーブル KTEST71.LOCKTESTを照会
• SELECT * FROM KTEST71.LOCKTEST WITH CS
【結果】 ジョブBがロック待ちとなり停止
一定時間後にタイムアウトし、Record 1 in use by job のメッセージ
2-3. ロック待機の回避による並行性の改善
サンプル③
サンプル② 2)の状況において、
2) ジョブBのSELECT文に USE CURRENTLY COMMITTED を追加
• SELECT * FROM KTEST71.locktest WITH CS USE CURRENTLY COMMITTED
【結果】 ステートメントは待たずに実行され、ジョブBは最後にコミットされたデータが得られる • FLD1
AAAAAAAAAA
2-3. ロック待機の回避による並行性の改善
参考)分離レベル
DB2 for i でサポートする分離レベル(SQLインターフェース)
RR :Repeatable Read [Serializable] - 反復可能読み取り
RS :Read Stability [Repeatable Read] - 読み取り固定
CS :Cursor Stability [Read Committed] - カーソル固定
UR :Uncommitted Read [Read Uncommitted] - 非コミット読み取り
NC :No Commit [NC] - コミットなし (他のDBではなし) *[ ]はISO SQL標準での用語 次の行の読み取り時 N/A × × NC N/A × × UR 次のCOMMIT/ ROLLBACK 実際の更新がなけれ ばREADと同等 次の行の読み取り時 ○ × CS ○ × RS 次のCOMMIT/ ROLLBACK 次のCOMMIT/ ROLLBACK ○ ○ RR 更新行のロック 開放時期 読み取り専用ロックの 開放時期 読み取り専用行の ロック テーブル全体の ロック 分離レベル
参考)DB2 for i における分離レベルとロック動作
非コミット読み取り
– コミット前の行をSELECTできる – 読み取り専用ではロックがかからないUR、NCで発生 反復不能読み取り
– 同一トランザクション内で同じSELECT文を発行しても結果が異なる場合がある – 読み取り専用の場合に次の行の読み取りでロックを開放するCSと、読み取り専用ではロック をかけないUR、NCで発生 幻像読み取り(ファントム)
– 同じトランザクション内で同じSELECT文を実行すれば、前回SELECTできた結果は保証さ れる – ただし、新たに挿入された行が増えている可能性がある – テーブル自体にロックをかけないRS以下のレベルではこれが発生 発生する 発生する 発生する UR 発生する 発生する 発生しない CS 発生する 発生しない 発生しない RS 発生しない 発生しない 発生しない RR 幻像読み取り 反復不能 読み取り 非コミット 読み取り 分離レベル2-4. グローバル変数
機能
– SQLから参照/値の変更ができる名前つき変数 • スキーマを指定して作成(暗黙スキーマも可)するDBオブジェクト 利用方法
– SELECT、CREATE VIEW、INSERT 等のステートメント中で使用可能 • セッション開始後、変数への最初のアクセスでそのセッション用のインスタンスが作成さ れる(作成前はNULL) • グローバル変数の「値」はそのSQLセッションの中で有効 – 作成したグローバル変数はSQLカタログに登録され、全てのユーザーが使用可能 • ユーザーごとに使用権限の設定も可能 サンプルコード
– グローバル変数の作成• CREATE VARIABLE GVTEST.VARC CHAR(10) -- グローバル変数の作成 – グローバル変数に値を代入
• SET GVTEST.VARC = 'ABCDEFGHIJ' --– グローバル変数を使って INSERT
使用例:
SQLカタログの状態:
グローバル変数はIBM i 上はサービスプログラムとして実装
Work with Objects
Type options, press Enter.
2=Edit authority 3=Copy 4=Delete 5=Display authority 7=Rename 8=Display description 13=Change description
Opt Object Type Library Attribute Text
VARC *SRVPGM GVTEST CLE SQL VARIABLE VARC
VARN *SRVPGM GVTEST CLE SQL VARIABLE VARN
TBL1 *FILE GVTEST PF
Bottom Parameters for options 5, 7 and 13 or command
===>
F3=Exit F4=Prompt F5=Refresh F9=Retrieve F11=Display names and types F12=Cancel F16=Repeat position to F17=Position to
2-5. CALLステートメント中の表現の拡張
機能
– CALLステートメント内での変数への処理が可能に • IBM i 6.1以前は、CALLステートメント内での変数代入時には、事前に変数の前処理が 必要 • IBM i 7.1では、CALLステートメント内での変数代入時に、変数の処理が可能 使用方法(サンプル)
– CALL PROC1 ( UPPER(PARAMETER1), PARAMETER2/100 )
• ストアードプロシジャの呼出し時に PARAMETER1 を大文字にし、PARAMETER2 を 100で割った値を渡す
2-6. パラメータマーカーの拡張
機能
– SQL内のパラメーターマーカーの表記法の拡張され、コーディングが容易に – セレクトリストにパラメーターマーカーを使用するステートメントを準備 – 多くの場合、SQLステートメントでパラメタメーカーのCASTを特定のタイプの指定が不要に IBM i 6.1以前のリリースのコーディング例
SET STMT1 = ‘SELECT * FROM T1 WHERE C1 =
CAST(? AS DECFLOAT(34)) + CAST(? AS DECFLOAT(34)) ’;
PREPARE PREPSTMT1 FROM STMT;
IBM i 7.1 でサポートされるコーディング例
SET STMT1 = ‘SELECT * FROM T1 WHERE C1 = ? + ?
’;
2-7. ルーチン内で配列のサポート
配列型の生成CREATE TYPE INTARRAY AS INTEGER ARRAY[20]
配列型を使用するSQLプロシジャーの作成
CREATE PROCEDURE MYPROC (OUT P1 INTARRAY) BEGIN
DECLARE ids intArray;
DECLARE c2 CURSOR FOR SELECT * FROM UNNEST(ids) AS x;
SELECT ARRAY_AGG (name ORDER BY id) INTO ids FROM persons; SET ids = ARRAY[5,6,7] ;
SET ids[4] = 8;
SET (maxcardo, cardo) = (MAX_CARDINALITY(ids), CARDINALITY(ids)); END
参考)業界標準アプリケーションインターフェースの拡張
ADO.NET– ‘Concurrent Access Resolution’ プロパティー – Visual Studio 2008 サポート – Visual Studio とのオンラインヘルプの統合 – 複数行の削除、マージ、更新 ステートメントのサポート ODBC – ConcurrentAccessResolution コネクションキーワード – 複数行の削除、マージ、更新 ステートメントのサポート OLE DB
– ‘Concurrent Access Resolution’ コネクションプロパティ
SQL CLI – TINYINT データタイプのサポート – SQL_ATTR_CONCURRENT_ACCESS_RESOLUTION コネクションサポート – 複数行の削除、マージ、更新 ステートメントのサポート – QSQSRVR ジョブのQIBM_SRVRMODE_SBS 環境変数 (PTFs for 6.1, 5.4) JDBC – SQL ルーチン配列パラメーターのサポート
– “concurrent access resolution” コネクションプロパティ – Native JDBC ドライバー拡張
• QSQSRVR ジョブの制御サブシステム使用のための“サーバーモード・サブシステム” プロパティ • Toolbox JDBC および その他の業界ドライバーとのメタデータの互換性
DB2 for i 7.1 最新情報
1. XML サポート
2. DB2 ファミリー、他のDBMSとの互換性向上
1. MERGE 2. CREATE時のREPLACE オプション 3. ロック待機の回避による並行性の改善 4. グローバル変数 5. CALLステートメント中の表現の拡張 6. パラメータマーカーの拡張 7. ルーチンの中で配列のサポート3. アプリケーション開発の強化
1. フィールドプロシジャ (FIELDPROCS) 2. 組込みSQLでの結果セット受取りのサポート 3. QSYS2.SQL_CANCEL プロシジャー 4. 三部構成名称 5. BIT スカラー関数 6. 区分化表の拡張 7. SQL中でMQ Series 関数の呼出し4. パフォーマンス強化
1. SQE機能拡張5. データベース管理
3-1. フィールド・プロシジャー(暗号化の拡張)
機能
– フィールド単位でトリガーの設定が可能 • 暗号化ロジックと組み合わせることで、フィールド単位での暗号化が可能 • フィールドプロシジャは暗号化専用の機能ではない 利用方法
– CREATE TABLE / ALTER TABLE で宣言する際に、下記の3つの処理を1つのプログラム (フィールド・プロシジャー)に書いておくことが必須
• CREATE TABLE / ALTER TABLE で宣言される際の処理 • エンコーディング(暗号化)の処理
• デコーディング(復号化)の処理
– ILE C/RPG/COBOL 用のインクルードファイルが QSYSINC/H/SQLFP で提供 – トリガーが作動するタイミング
• アプリケーション、SQLからのアクセス • ネイティブレコードレベルアクセス
手順①:フィールド・プロシジャーのコーディング
– パラメータの渡し方やコーディングの作法はマニュアルに記載あり(かなり複雑) – パラメータとして「機能コード」に宣言時には「8」、書込み時には「0」読取り時には「4」が入っ てプログラムが呼出されるので、それぞれに対応したコーディングを行う – エンコードとデコードでデータが確実に元に戻るようにコーディングするのはユーザーの責任 • 誤ったコーディングをするとデータが壊れるため要注意3-1. フィールド・プロシジャー(暗号化の拡張)
*************** Beginning of data ********************************************************* 0001.00 #include "string.h" 100331 0002.00 #include <stdio.h> 100331 0003.00 #include <QSYSINC/H/SQLFP> 100331 0004.00 100331 0005.00 void encode(char *in, char *out, long length); 100331 0006.00 void reverse(char *in, char *out, long length); 100331 0007.00 100331 0008.00 main(int argc, void *argv[]) 100331 0009.00 { 100331 0010.00 short *funccode = argv[1]; 100331 0011.00 sqlfpFieldProcedureParameterList_T *optionalParms = argv[2]; 100331 0012.00 char *sqlstate = argv[7]; 100331 0013.00 struct sqlfpMessageText_t *msgtext = argv[8]; 100331 0014.00 int bytesToProcess; 100331 0015.00 sqlfpOptionalParameterValueDescriptor_T *optionalParmPtr; 100331 0016.00 100331 0017.00 if (optionalParms->sqlfpNumberOfOptionalParms != 1) 100331 0018.00 { 100331 0019.00 memcpy(sqlstate,"38001",5); 100331 0020.00 return; 100331 0021.00 } 100331 0022.00 100331 0023.00 optionalParmPtr = (void *)&(optionalParms->sqlfpParmList); 100331 0024.00 bytesToProcess = *((int *)&optionalParmPtr->sqlfpParmData); 100331 0025.00 100331 0026.00 if (*funccode == 8) /* create time */ 100331 0027.00 { 100331 0028.00 struct sqlfpParameterDescription_t *inDataType = argv[3]; 100331 0029.00 struct sqlfpParameterDescription_t *outDataType = argv[5]; 100331 0030.00 if (inDataType->sqlfpSqlType !=452 && 100331 0031.00 inDataType->sqlfpSqlType !=453 ) /* only support fixed length char */ 100331 0032.00 { 100331 0033.00 memcpy(sqlstate,"38002",5); 100331 0034.00 return; 100331 0035.00 } 100331
フィールド・プロシジャー:サンプルプログラム(ILE C)
0038.00 100331
0039.00 else if (*funccode == 0) /* encode */ 100331 0040.00 { 100331 0041.00 char *decodedData = argv[4]; 100331 0042.00 char *encodedData = argv[6]; 100331 0043.00 encode(decodedData, encodedData, bytesToProcess); 100331 0044.00 } 100331 0045.00 else if (*funccode == 4) /* decode */ 100331 0046.00 { 100331 0047.00 char *decodedData = argv[4]; 100331 0048.00 char *encodedData = argv[6]; 100331 0049.00 reverse(encodedData, decodedData, bytesToProcess); 100331 0050.00 } 100331 0051.00 else /* unsupported option -- error */ 100331 0052.00 memcpy(sqlstate, "38003",5); 100331
0053.00 } 100331 0054.00 100331 0055.00 void encode(char *in, char *out, long length) 100331 0056.00 { 100331 0057.00 int i; 100331 0058.00 for (i=0;i<length; ++i) { 100331 0059.00 out[length - (i+1)] = in[i]; 100331 0061.00 } 100331 0064.00 } 100331 0065.00 void reverse(char *in, char *out, long length) 100331 0066.00 { 100331 0067.00 int i; 100331 0068.00 for (i=0;i<length; ++i) { 100331 0069.00 out[length - (i+1)] = in[i]; 100331 0071.00 } 100331 0074.00 } 100331
手順②:フィールド・プロシジャーのコンパイル
– コンパイル時には、活動化グループACTGRP(*CALLER)を指定
Command Entry
Request level: 6 Previous commands and messages:
> CRTCMOD MODULE(KTEST71/FPROC) SRCFILE(KTEST71/QCSRC)
Module FPROC was created in library KTEST71 on 03/31/10 at 18:49:10.
> CRTPGM PGM(KTEST71/FPROC) ACTGRP(*CALLER)
Program FPROC created in library KTEST71.
手順③:フィールドプロシジャーを指定したテーブルの作成
– KTEST71/FPROCがField Procedure のILE プログラム – (10) はパラメータ 考慮点
– テーブル作成時にフィールド・プロシジャー が実行されるため、事前にフィールド・プロシジャ ーのコンパイルが完了していることが必須 – ストアード・プロシジャー等と異なり、CREATE PROCEDURE等でDBに対して宣言する必要 はない Enter SQL Statements Type SQL statement, press Enter.> create table ktest71.fptest(id char( 2), name char(10)
fieldproc ktest71.fproc(10)) Table FPTEST created in KTEST71.
手順④:作成したテーブルへのデータの更新/表示
– ファイルをREAD/WRITE/UPDATEする度にフィールド・プロシジャーが実行される – ただし、テストした限りは暗号化された値を見る術はなし。ユーザープログラムが読み取る前 にはデコードされるため、暗号化されたデータの確認は不可 – エンコード/デコートが非対称なフィールド・プロシジャーを意図的に作成したところ、正しく暗 号化されていたことは確認 – フィールド・プロシジャーを削除すると、データを読み書きが不可 Enter SQL Statements Type SQL statement, press Enter.> INSERT INTO KTEST71.FPTEST VALUES('01', 'abcdefghij') 1 rows inserted in FPTEST in KTEST71.
> INSERT INTO KTEST71.FPTEST VALUES('02', 'jihgfedcba') 1 rows inserted in FPTEST in KTEST71.
===> select * from ktest71.fptest
Display Data Position to line . . . ....+....1.... ID NAME 01 abcdefghij 02 jihgfedcba ******** End of data ********
3-1. フィールド・プロシジャー(暗号化の拡張)
機能 – 組み込みSQLの結果セット(リザルト・セット)の利用により、柔軟なプログラミングが可能に – C、C++、COBOL、および ILE RPG 利用サンプル – ILE RPGでストアードプロシジャ P1をCALLし、結果セットを受け取り D MYRS1 S SQLTYPE(RESULT_SET_LOCATOR) D MYRS2 S SQLTYPE(RESULT_SET_LOCATOR) …
C/EXEC SQL CALL P1(:parm1, :parm2, ...) C/END-EXEC
…
C/EXEC SQL ALLOCATE DESCRIPTOR ‘SQLDES1’
C/END-EXEC
…
C/EXEC SQL DESCRIBE PROCEDURE P1 USING DESCRIPTOR ‘SQLDES1’
C/END-EXEC
…
C/EXEC SQL ASSOCIATE LOCATORS (:MYRS1,:MYRS2) WITH PROCEDURE P1
C/END-EXEC
C/EXEC SQL ALLOCATE C1 CURSOR FOR RESULT SET :MYRS1
C/END-EXEC
C/EXEC SQL ALLOCATE C2 CURSOR FOR RESULT SET :MYRS2
C/END-EXEC
…
3-3. QSYS2.CANCEL_SQLプロシジャー
機能
– システム提供の QSYS2.CANCEL_SQLプロシジャーで応答のないSQL処理をキャンセル可能 • キャンセルされるのはSQLによるデータベース操作のみ • ジョブは終了しない 利用上の考慮点
– ストアードプロシジャのため、SQL環境からCALLステートメントで実行 – 応答のないジョブとは別のジョブから実行 • 実行するジョブは *JOBCTL特殊権限またはDB2の QIBM_DB_SQLADM権限が必要 実行例
> STRSQL> CALL QSYS2.CANCEL_SQL('015634/USER1/QPADEV000G')
CALL statement complete. (キャンセルする側)
> SELECT * FROM KTEST71.BITFILE WITH RR (キャンセルされる側)
ジョブAがDFUからファイル①を更新
ジョブBがオープンされているファイル①に対して、分離レベル RR でSELECTを実行
⇒ ジョブBはロック待ちで長時間停止 ジョブCが、ジョブBに対してQSYS2.CANCEL_SQLを実行
3-3. QSYS2.CANCEL_SQLプロシジャー
【ジョブA】 DFUからのデータ更新 【ジョブB】 SQLで照会:分離レベルRR 【ジョブC】 キャンセルプロシジャーを実行 SQLをキャンセルされたジョブBには下記のどちらかのメッセージ が送られる
エスケープメッセージ
SQL0952 -Processing of the SQL statement ended. Reason code X. SQL0901 - SQL system error.
3-4. 三部構成名称(Three-part Alias)
他のデータベースにあるテーブルを指す別名を定義可能
– 他のDBを参照する際にCONNECT、SET CONNECTIONのコーディングが不要となる
従来(IBM i 6.1以前)
– CREATE ALIAS MJATST.t1 FOR RDB2.MJATST.T1 CONNECT TO RDB2
SELECT * FROM MJATST.T1
IBM i 7.1
– SELECT * FROM RDB2.MJATST.T1
制限事項:
– 1つのSQL文から参照されるすべてのオブジェクトは1つのRDBになければならない
– 指定する別名はリモートRDBでの名前と同じでなければならない(ただしリモートでの別名を 指定することは可能)
2つの数値をビットデータとしてビット演算を実施
数値データに対するビットテスト/操作関数
– BITAND, BITANDNOT, BITOR, BITXOR, BITNOT
サンプルコーディング
SELECT ITEMID FROM ITEM
WHERE BITAND(PROPERTIES, 4) = 4 SELECT ITEMID FROM ITEM
WHERE BITAND(PROPERTIES, 40) <> 0 UPDATE ITEM
SET PROPERTIES = BITANDNOT(PROPERTIES, 2048)
WHERE ITEM = 3412 UPDATE ITEM
SET PROPERTIES = BITOR(PROPERTIES, 16)
WHERE ITEM = 3412 UPDATE ITEM
SET PROPERTIES = BITXOR(PROPERTIES, 1024)
WHERE ITEM = 3412
VALUES BITNOT(CAST(2) AS SMALLINT))
3-6. 区分化表(パーティションテーブル)の拡張
区分化表とは
– テーブルを複数メンバーに格納し、一つとして扱う – テーブルの制限を超える場合に使用 • テーブルサイズが1.7テラバイト以上、またはレコード数が420億以上 – DB2 マルチシステム(OSオプション)のインストールが必要 DB2 for i 7.1での拡張
– 区分化表で識別列(アイデンティティ・カラム)のサポート – 区分化表で参照制約のサポート 制限事項
– 識別列は区分化キーにはなれない – 親テーブルは次のいずれか: • 区分化されていないテーブル • ユニーク制約に使用されているユニークキーが参照制約に対して区分化されていない、 区分化されたテーブル – 参照制約や識別列のある区分化表は旧リリース用には保管できない指定したMQSeriesロケーションからメッセージを送信する MQSEND されたMQSeriesロケーションからメッセージを(CLOBで)返し、キューからメッセージを除去する MQRECEIVECLOB 指定されたMQSeriesロケーションからのメッセージを(VARCHARで)返し、キューからメッセージを除去する MQRECEIVE キューからメッセージを除去せずに指定されたMQSeriesロケーションからメッセージを(CLOBで)返す MQREADCLOB キューからメッセージを除去せずに指定されたMQSeriesロケーションからのメッセージを(VARCHARで)返す MQREAD 機能 スカラー関数 指定されMQSeriesロケーションからメッセージとメッセージメタデータを含むテーブルをCLOBで返し、キューからメッセ ージを除去する MQRECEIVEALLCLOB 指定されMQSeriesロケーションからメッセージとメッセージメタデータを含むテーブルをVARCHARで返し、キューから メッセージを除去する MQRECEIVEALL キューからメッセージを除去せずに指定されMQSeriesロケーションからメッセージとメッセージメタデータを含むテーブ ルをCLOBで返す MQREADALLCLOB キューからメッセージを除去せずに指定されMQSeriesロケーションからメッセージとメッセージメタデータを含むテーブ ルをVARCHARで返す MQREADALL 機能 テーブル関数 サンプル SQLコマンドから下記のMQ 関数の呼び出しが可能に – プログラミングのシンプル化、可搬性(ポータビリティ)の向上
3-7. SQL中でMQ Series 関数の呼出し
DB2 for i 7.1 最新情報
1. XML サポート
2. DB2 ファミリー、他のDBMSとの互換性向上
1. MERGE 2. CREATE時のREPLACE オプション 3. ロック待機の回避による並行性の改善 4. グローバル変数 5. CALLステートメント中の表現の拡張 6. パラメータマーカーの拡張 7. ルーチンの中で配列のサポート3. アプリケーション開発の強化
1. フィールドプロシジャ (FIELDPROCS) 2. 組込みSQLでの結果セット受取りのサポート 3. QSYS2.SQL_CANCEL プロシジャー 4. 三部構成名称 5. BIT スカラー関数 6. 区分化表の拡張 7. SQL中でMQ Series 関数の呼出し4. パフォーマンス強化
1. SQE機能拡張5. データベース管理
高性能なSQL実行エンジン SQE
– SQEはDB2/400 V5R3以降にビルトイン
• OSリリース毎にSQLパフォーマンス、機能が向上
– DB2 for i パフォーマンスの向上
– SQLパフォーマンス分析・管理機能を提供
• EVI(Encoded Vector Indexes), • MQT(Materialized Query Tables)
• SQLプラン・キャッシュ (IBM i ナビゲーターから分析)
DB2 for i 7.1 での機能拡張
– Adaptive Query Processing (AQP)
• クエリー実行中にクエリー・プランを最適化してパフォー マンスを向上 – SQEでの論理ファイル(LF)の処理をサポート
IBM i 7.1 でのCQE(クラッシック・クエリー・エンジン)
– CQEも従来どおり提供。以下のようなSQL業界標準で はないインターフェースの処理時に使用 • Query/400 • 一部のベンダー製アプリケーション4. SQL Queryエンジン(SQE)の拡張
SQEでの論理ファイル(LF)のサポート
IBM i 7.1で結合論理ファイルを実行した際の Visual Explainの出力
パフォーマンス
SQL実行時パフォーマンスの改良
– SQL 関数の拡張 (インライン関数) – OVRDBFコマンドにREUSEDLTパラメーターが加わり、*NOのみ指定可能 • OVRDBFの際にREUSEDLTを*YESに変更することはできない – コード化ベクトル索引 INCLUDE 集約 • SUM、COUNT、AVG、VARIANCE 値などの集約が利用可能 • サンプルコード– CREATE ENCODED VECTOR INDEX idx2 ON sales (region)INCLUDE
( SUM(sales) )
– SELECT region, SUM(sales) FROM sales GROUP BY region – SQL Select/Omit Index (疎索引)のサポート
• SQL CREATE INDEX の際にWHERE 条件を使用する疎索引の作成が可能
Adaptive Query Processing (適応 QUERY 処理)
– クエリー実行中にダイナミックにクエリー手順を修正
データベースメンテナンスのパフォーマンス改良
可用性/制約緩和 等
SQL アプリケーション実行時の制限
– 128-バイトのスキーマ名 データベース
– *SYSBAS と IASP にまたがるトランザクション • リモート接続を使用せずに 独立 ASP と *SYSBAS にまたがることが可能なコミットメン ト制御トランザクションのサポート – CHGPFCSTコマンド、CHECK(*YES *NO)パラメーターの追加 • 制約が使用可能になっている場合に参照ファイル内のデータを検査するかどうかを指 定可能 – CHGSRCF TEXT(*FROMMBR) SRCTYPE(*FROMMBR) ソース物理ファイルおよびそのすべてのメンバーの属性を変更 – ALTER TABLE時に元テーブルの統計情報を保持 – Unicodeカタログのサポート拡張 – Deflated table のサポート – IASPでCICSのサポート可用性/制約緩和 等
ジャーナル
– ジャーナル・ライブラリーの始動 (STRJRNLIB) コマンドを使用してライブラリーをジャーナル 処理する場合、オブジェクトの名前に基づいて自動的にジャーナル処理を開始するためのフ ィルタリングが可能 – 暗黙的なジャーナルの開始を制御するためのSTRJRNLIB、CHGJRNOBJでの総称名に基 づくフィルタリングのサポートにより、通信回線の送信データ量を減少 – 個々のオブジェクトのジャーナル項目をリモートジャーナルに送信するフィルタの制御オプシ ョン追加– IBM Systems Director Navigator for i での管理機能の拡張
1. ジャーナルに関連したジャーナル・レシーバーと属性を変更する機能 2. ジャーナル・レシーバーに関連したプロパティーを表示する機能 3. 特定のジャーナルに対してジャーナル処理されたオブジェクトを表示する機能 4. 遠隔ジャーナルを追加、除去する機能 5. 特定のジャーナルに関連した遠隔ジャーナルのリストを表示する機能 6. 遠隔ジャーナルを活動化、非活動化する機能 7. 遠隔ジャーナル接続の詳細を表示する機能
DB2 for i 7.1 最新情報
1. XML サポート
2. DB2 ファミリー、他のDBMSとの互換性向上
1. MERGE 2. CREATE時のREPLACE オプション 3. ロック待機の回避による並行性の改善 4. グローバル変数 5. CALLステートメント中の表現の拡張 6. パラメータマーカーの拡張 7. ルーチンの中で配列のサポート3. アプリケーション開発の強化
1. フィールドプロシジャ (FIELDPROCS) 2. 組込みSQLでの結果セット受取りのサポート 3. QSYS2.SQL_CANCEL プロシジャー 4. 三部構成名称 5. BIT スカラー関数 6. 区分化表の拡張 7. SQL中でMQ Series 関数の呼出し4. パフォーマンス強化
1. SQE機能拡張5. データベース管理
データベース管理
• DB新機能のサポート — XML — XML スキーマ・レジストリー (XSR) — グローバル変数 — 配列タイプ — フィールド・プロシージャー — 三部構成名称 • Omnifind でのテキスト検索機能 • テキスト検索サーバーおよび索引の管理のサ ポート • 操作の進行状況のモニターの追加 — 再編成 — 索引の作成状況 — テキスト検索索引の作成状況 — ALTER TABLE の進捗状況 — テーブル再編成の進行状況にヒストリー情報が追加 • オブジェクトリストの強化 — Save フォルダー — フィルタリング機能ヘルス・チェッカー
• 「環境上の制限」タブにカテゴリー SQL0901 が追加 • ランダムおよび順次の入出力カウントの収集オンデマンド・パフォーマンス・センター
• SQLパフォーマンスモニター —開始時のフィルターが追加 —エラーのみ表示のフィルター • 権限の柔軟な設定 • ジョブ単位のSQL詳細画面 —リザルトセット —ジョブリストからSQLパフォーマンスモニターを開始 • 索引アドバイザーの拡張 —初めて索引アドバイスが行われた時刻の欄を追加 —索引リストに、前回の索引作成の情報を追加IBM i ナビゲーター の機能拡張
オンデマンドパフォーマンスセンターの利用権限を柔軟に設定可能 従来(IBM i 6.1以前) – オンデマンドパフォーマンスセンターの利用には*JOBCTL ユーザー特殊権限が必須 ⇒ *JOBCTL 権限はシステムに重要な多数の設定の変更をユーザーに許可するため付与しづらい IBM i 7.1 – 下記の2 つの権限グループが追加され、柔軟な権限設定が可能に QIBM_DB_SQLADM (IBM i データベース管理者タスク) – SQL プラン・キャッシュに入っているステートメントを表示 – SQL パフォーマンス・モニターや SQL プラン・キャッシュ・スナップショットの分析 – 自分のジョブ以外のジョブの SQL 詳細を表示 QIBM_DB_SYSMON (IBM i データベース情報タスク) – SQL プラン・キャッシュ・プロパティーの表示 設定方法
– IBM® Systems Director Navigator for i の System i® ナビゲーター:アプリケーション管理からGUI – 機能使用法変更(CHGFCNUSG) コマンド
- CHGFCNUSG FCNID(QIBM_DB_SQLADM) USER(USRNAME) USAGE(*ALLOWED) - CHGFCNUSG FCNID(QIBM_DB_SYSMON) USER(USRNAME) USAGE(*ALLOWED)
SQLパフォーマンスモニター要約機能のサポート終了
メモリー常駐のSQLパフォーマンスモニター要約機能の後継
– SQLプランキャッシュ・スナップショット – SQLパフォーマンスモニター詳細機能 IBM i 6.1 の画面 IBM i 7.1の画面参考)SQLパフォーマンス・モニターの概要
SQL パフォーマンス・モニター
– SQL ステートメントによって使用されたリソースを記録 SQL パフォーマンス・モニターの種類
– DBパフォーマンス・モニター (詳細モニター) • SQL分析に必要なデータを収集 • 単一のテーブルにデータを出力 • システムのパフォーマンスに影響がある(ディスクおよびCPU) • 短時間のトレース向き • 特定の箇所に焦点を当てた分析が可能 – メモリー・ベースのDBパフォーマンス・モニター(要約モニター) • メモリーにデータを収集(最大サイズ・取得項目を選択) • 取得項目に対してデータを分散して出力 • システムのパフォーマンスへの影響は少ない • 長時間のモニターが可能 • 全体的な状況分析向き(選択できる項目が限られている・ビジュアル・エクスプレーンは使用不可)DB2 Web Query
最新情報
DB2 Web Query 最新情報
DB2 for i 7.1 利用による DB2 Web Query の機能向上
HotFix12での機能拡張
– ログイン画面上でのパスワード変更機能の追加
– WRKWEBQRYコマンド
– Report Broker 不具合解消
HotFix13の提供開始
– HotFix12でのデベロッパーワークベンチ不具合解消
関連情報
– Redbook 第2版 公開
– 日本語マニュアル公開
DB2 Web Query
IBM i 5.4, 6.1, 7.1での機能拡張(最新グループPTFの適用)
– セキュリティの機能拡張 • Web Query画面からのユーザーパスワード変更が可能に • メタ・データ管理の拡張 – 管理機能の拡張 • 変更管理 • WRKWEBQRYコマンドによるシンプルな管理 – パフォーマンスの拡張 • システム内部処理の高速化 • 分析機能の拡張 – 新しい機能 • ダッシュボード機能の拡張 • アクティブ・レポートの操作性向上 IBM i 7.1でのDB2 Web Query サポート
– DB2 Web QueryはIBM i 7.1上のXMLドキュメントをサポート
開発意向表明
DB2 for i 7.1 利用による DB2 Web Query の機能向上
SQE 機能拡張
– 論理ファイルの利用をサポート
• Viewへの置き換えが不要に
– AQP利用によるレポート実行中にクエリの最適化
Encoded Vector Index (EVI) 拡張
– IBM i 7.1では、EVIに格納された追加要約データがパフ ォーマンス向上に寄与
IBM i ナビゲーター 利用によるDB管理の機能強化
– SSDへの最適なデータ配置をサポート – 処理時間が長い操作のステータス確認機能
リアルタイムに近いデータレプリケーション
– フィルタリング機能によるリモートジャーナルのパフォー マンス向上 – Infosphere CDC (Change-Data-Capture) の利用最新グループPTF(HotFix12)情報
2010年3月9日から、DB2 Web Queryの PTF(HotFix12) が利用可能になりました。
DB2 Web Query V1R1M1
– IBM i 5.4用 SF99615-6 • http://www-912.ibm.com/s_dir/sline003.NSF/554c38c4848b77f2862567bd0046e003/958231fe3f5a9d5d86257571006012e1 – IBM i 6.1用 SF99616-6 • http://www-912.ibm.com/s_dir/sline003.NSF/554c38c4848b77f2862567bd0046e003/100870cd709216628625757100601331 – IBM i 7.1用 SF99617-1 • http://www-912.ibm.com/s_dir/sline003.nsf/3a8f58452f9800bc862562900059e09e/a34714f8069ef7348625771100581405?OpenDocument DB2 Web Query V1R1M0
– SI38130およびSI38130の前提PTFを適用ください。参考)最新グループPTF(HotFix12)情報
今までのグループPTFレベルとHotFix
– https://www.ibm.com/developerworks/wikis/display/webquery/DB2+Web+Query+for+i+ PTFs+and+On-going+Service
新機能:パスワード変更機能の紹介
DB2 Web Query のログイン画面からパスワード変更が可能に
– 5250を利用せずに、DB2 Web Query のみ利用するユーザー(ブラウザー接続のみでIBM i を利用するユーザー)がいる場合、パスワード変更方法が課題となっていました。
– このパスワード変更機能により、DB2 Web Query のみ利用するユーザーもパスワード変更 が可能
新機能:パスワード変更機能の紹介
①有効期限が切れていないパスワードから、システム設定の制約を満たすパスワードへ
の変更が可能
②有効期限が切れているパスワードからのパスワードへの変更は不可能
– パスワードの有効期限が一旦切れたユーザーがDB2 Web Queryにログインすると、「パス ワードが変更できませんでした。再び実行してください。」とのメッセージが表示されるだけで、 パスワード変更ができません。そのため、DB2 Web Query のみを利用するユーザー(5250 を利用していないユーザー)の場合、パスワードの変更をシステム管理者に依頼する必要が あります。新機能:パスワード変更機能の紹介
③パスワードの満了期限が通知されない・知る方法がない
– パスワード満了までの期間をユーザーが知ることができない
– 仮に、「CHGUSRPRF USRPRF(ABCDE) PWDEXPITV(1)」 のように、残り一日でパスワードが満了す るように設定した場合 • 5250の場合 – 「パスワードが満了するまでの日数:1」と表示され、その画面から「F9= パスワードの変更」の実 施が可能 • DB2 Web Queryの場合 – このようなパスワード満了までの期間を通知する機能を実装していないため、ユーザーが満了 期限に気が付かない恐れがあり – パスワードが満了した場合、前述の②の制約により、DB2 Web Queryからパスワード変更が 実施できない状態となります。 ④有効期限が切れていないパスワードから、パスワードルールを満たさない変更は不可 – 変更できないことは機能上当然だが、変更できない理由を把握することができない – 例えば、パスワードルールとして、最小長が6文字として設定されていた場合 • 5250からパスワード変更を試みた場合 – 「パスワードが 6 桁より小さい。」などのメッセージが表示され、どのような理由でパスワード変 更ができないかをユーザーが知ることが可能 • DB2 Web Query – 「パスワードが変更できませんでした。再び実行してください。」のメッセージのみ表示され、なぜ
HotFix13の提供開始
2010年5月18日にHotFix13が提供開始されました。
– HotFix12で発生したデベロッパーワークベンチの不具合が解消されています。 – DB2 Web Query PTF(HotFix12)と適用時の注意点 (System i-10-07)
• http://www-06.ibm.com/jp/domino01/mkt/cnpages1.nsf/page/default-00051C24
DB2 Web Query V1R1M1
– For IBM i V5.4 SF99615-7 • http://www-912.ibm.com/s_dir/sline003.NSF/554c38c4848b77f2862567bd0046e003/958231fe3f5a9d5d86257571006012e1?OpenDocument – For IBM i V6.1 SF99616-7 • http://www-912.ibm.com/s_dir/sline003.NSF/554c38c4848b77f2862567bd0046e003/100870cd709216628625757100601331?OpenDocument – For IBM i V7.1 SF99617-2 • http://www-912.ibm.com/s_dir/sline003.NSF/554c38c4848b77f2862567bd0046e003/a34714f8069ef7348625771100581405?OpenDocument DB2 Web Query V1R1R0のHotFix13は出荷予定がありません
– V1R1R0をご利用中のお客様にはV1R1M1へのアップグレードを強く推奨
WRKWEBQRYコマンド
5250画面からDB2 Web Query の管理が可能に
– ドメインの作成 – ユーザーの登録・権限編集 – DB2 Web Query の開始、終了 前提S/W 過去のHotFix情報から最新のHotFix情報まで記載されています。
– http://www-912.ibm.com/s_dir/slkbase.nsf/1ac66549a21402188625680b0002037e/f43c0c73ce927c7b862575dd005a7eea?Ope nDocument&Highlight=2,528185092 下記のWebページには、次期HotFix情報も更新されますので、ご参照ください。
– http://www-912.ibm.com/s_dir/slkbase.NSF/8f924fc5d7eb7fd9862573610070873f/f43c0c73ce927c7b862575dd005a7eea?Ope nDocument – 現在発表中のHotfix13の情報 (2010年5月12日現在)– Hotfix 13 - WQ-04-2010 - Scheduled Availability 04-30-2010 • Content is not allowed in prolog error
• Expose BID Stop Request function for DB2 Web Query • "MAX" in DEFINE expression (Report Assistant)
• Missing summary level info in imported Query/400 report • Report Assistant drill in Firefox 3 inserts ?null?
• Remove Complex Types from WSDL – New Feature
• License check on Server for Product License
• Change management to include .acx and .mas files
参考)Fixリスト
日本語版 RedBook (第2版)発行
自習書(チュートリアル)として利用
できるマニュアル
新機能をカバー
– レポート・ブローカー – SDK – SQL サーバー・アダプター – スプレッドシート・クライアント – 最新Hint & Tips• パフォーマンス
• アプリケーションパスによる開 発者のアクセス管理
2010年5月17日公開開始
DB2 Web Query マニュアル(日本語版)掲載のお知らせ
基本機能
1. DB2 Web Query 新機能ガイド(2009年7月版 Hotfix)
2. DB2 Web Query オンラインヘルプ
3. DB2 Web Qurey 管理コンソール ヘルプ
4. Server Webコンソール ヘルプ
• Microsoft SQL Server 対応 DB2 Web Query アダプタの使用方法を含む
オプション機能
5. Developer Workbench オンラインヘルプ
6. DB2 Web Query Webサービス
7. DB2 Web Query Spreadsheet Client アドインの使用
DB2 Web Query の最新マニュアルが公開されました。全てダウンロード可能ですので、ご活用ください!
2009年10月22日 更新