More Related Content Similar to [db tech showcase Tokyo 2016] B24: そのデータベース 5年後大丈夫ですか ~ 本気で標準化とサービスレベルの確保を手に入れるNonStop SQL ~by日本ヒューレット・パッカード株式会社 後藤 宏 (20) More from Insight Technology, Inc. (20) [db tech showcase Tokyo 2016] B24: そのデータベース 5年後大丈夫ですか ~ 本気で標準化とサービスレベルの確保を手に入れるNonStop SQL ~by日本ヒューレット・パッカード株式会社 後藤 宏15. NonStop SQL とOracleのJava 用語
Oracle RDBMS NonStop SQL IBM DB2
Java メソッド起動 PL/SQL ラッパー 機能あり(名称なし) SQL PL ラッパー
JNI 機能あり(名称なし) JNI
JDBC JDBC JDBC
SQLJ (組み込み静的SQL) SQLJ (組み込み静的SQL) SQLJ (組み込み静的SQL)
Pure Query
ドライバー JDBC Thin ドライバー JDBC Type4 ドライバー JDBC Thin ドライバー
JDBC OCI ドライバー JDBC Type2 ドライバー JDBC DB2 OCI ドライバー
サーバーJDBC ドライバー JDBC Type2 ドライバー
15
16. Oracle からの移行に際して注意点 (項目)
– データ型(データタイプ)
– データ・ディクショナリー
– SQL
– 基本的なDDL
– データベース・リンク
– マテリアライズド・ビュー
– 分離レベル
– 同時実行制御
– PL/SQL言語
– JDBC
– Pro*C
– OCI
– C言語のAPI
16
17. データ型 (データタイプ)
Oracle
– 文字データ型
– 数値データ型
– DATEデータ型
– LOBデータ型
– RAWおよびLONG RAWデータ型
– ROWIDおよびUROWIDデータ型
NonStop SQL
– 文字データタイプ
– 数値データタイプ
– インターバルデータタイプ
– 日付時刻データタイプ
17
20. SQL
基本的なDDL
Oracle
– ALTER
– ANALYZE
– ASSOCIATE STATISTICS
– AUDIT
– COMMENT
– CREATE (CREATEで始まるすべての文)
– DISASSOCIATE STATISTICS
– DROP (DROPで始まるすべての文)
– FLASHBACK (FLASHBACKで始まるすべての文)
– GRANT
– NOAUDIT
– PURGE
– RENAME
– REVOKE
– TRUNCATE
NonStop SQL
– ALTER
– QUERYCACHEENTRIES
– AUDIT
– COMMENT
– CREATE (CREATEで始まるすべての文)
– DISASSOCIATE STATISTICS
– DROP (DROPで始まるすべての文)
– GRANT
– PURGE
– RENAME
– REVOKE
– TRUNCATE
20
21. SQL
データベースリンク (Oracle)
概要 オプション
パラメータ 説明
PUBLIC
パブリックデータベースリンクを
作成する場合に指定する。
(パブリックデータベースリンクは
全てのユーザがアクセス可能な
データベースリンクの事です。)
CONNECT TO ~
データベースリンクを張りたい
データベースのユーザIDとパス
ワードを指定します。
USING ~
データベースリンクを張りたい
データベースの接続名(ネット
サービス名)を指定します。
21
db01 db02
Table_A
CREATE [PUBLIC] DATABASE LINK <データベースリンク名>
CONNECT TO <ユーザ名> IDENTIFIED BY <パスワード>
USING '<DB接続名>'
;
SELECT * FROM Table_A@linkdb;
23. 分離レベル
ANSI/ISO SQL標準
分離レベル Oracle NonStop SQL
SERIALIZABLE
( 直列化可能 )
○ ○
REPEATABLE READ
( 読み取り対象のデータを常に読み取る )
× ○
READ COMMITTED
( 確定した最新データを常に読み取る )
○ ○
READ UNCOMMITTED
( 確定していないデータまで読み取る )
× ○
23
24. READ COMMITTED 時の挙動
Oracle NonStop SQL
ノン・リピータブル・リード (ファジーリード) 発生する 発生する
ファントムリード 発生する 発生する
マテリアライズドビューの読み取り ステートメント N/A
トランザクションにおける読み取り一貫性 ステートメント単位 ステートメント単位
問い合わせ時に行をロックするか しない しない
先行している競合しているトランザクションがコミット後にエラーが発生するか 発生しない 発生しない
先行している競合しているトランザクションのコミット後に後続のトランザクション
にエラーが発生するか
発生しない 発生しない
24
26. NonStop SQL: ロックの範囲
分離レベルとの関連
– 分離レベルによってロックに関する振る舞いが変わる
– SQL/MXにおいては以下の分離レベルとなる
– デフォルトはREAD COMMITTEDとなる
# 分離レベル ロック範囲 説明
1 READ UNCOMMITTED
(ANSI)
ロックしない いわゆるダーティーリード。
更新中のデータも読み込めるため、一貫性保障されない場合がある。
ロック待ちを行わず、ロックの生成・保持も行わない。同時実行性・パフォーマンス有利
2 READ COMMITTED
(ANSI、デフォルト)
ロックのチェックのみ、
ロックしない
コミット済みのデータのみ読むモード。
SQL/MXにおいては、更新中・排他ロック中のデータは読み込めない(ロック待ちとなる)。内部的にはロックメカ
ニズムを使用し、ロックをチェックしながら読み取る形となる。実際のロックは発生しない。
3 STABLE
(SQLMX拡張)
Fetch中のデータのみ
ロック
SQL/MX拡張の分離レベル。
更新中・排他ロック中のデータは読み込めない(ロック待ちとなる)。
アクセス中のデータに対してのみ順次ロックを保持する形となり、アクセス終了時点でロックを開放する。(トラン
ザクション終了までは保持しない)
4 REPEATABLE READ
SERIALIZABLE
(ANSI)
スキャンしたデータ全
てロック
データの繰り返し読み込み保障(REPEATABLE READ)、データの直列化可能性を保障(SERIALIZABLE)
アクセスしたデータ全てにロックを行う。トランザクション終了まで保持。
SQL/MXにおいては、REPEATABLE READとSERIALIZABLEは同じ実装となる。
27. NonStop SQL: ロックの範囲
実行プランとの関連
– 実行プランによってロック範囲(オブジェクト・scan範囲)が決定
– 実行プランに出てくるアクセス(scan)対象がロックされうる対象となる
– 分離レベルでscan対象の中のロック対象は変化
– トリガーや参照整合性など他テーブルと関連付けられているものについては、これらの情報も加味されて実行プランが決定さ
れる
– 実行プランは統計情報によって変わることがあるため、実行プランが変わることによってロック範囲も変わる
– ロック範囲の見極めにおいては、実行プランの確認で可能
– DMLの種類(SELECT, INSERT, UPDATE, DELETE)に関わらず実行プランで確認可能
28. NonStop SQL: ロックの範囲
ロック粒度
– ロック粒度はレコード単位となる
– 範囲指定においては、その範囲内のレコードが全てロックされる形
– テーブルロックについては、テーブル単位となる
– ロックエスカレーションがありうる
– エスカレーション単位は行ロック→パーティションロック(1パーティションの場合はテーブルロック)
– 1トランザクションが同一パーティションに対するロックを閾値以上保持する場合、そのパーティションに対するロックエスカ
レーションが発生する。エスカレーション閾値は論理ディスクの設定(MAXLOCKSPERTCB)に依存
– 設定でOFFにすることも可能だが、論理ディスクの合計ロック保持上限に達した場合、それ以上のロック確保が出来ずエラー
となる
29. Multi Version Concurrency Control (MVCC)
– 複数のユーザから同時に処理要求が行われた場合でも同時並行性を失わずに処理し、かつ情報の一貫性を保
証する仕組み
– 書き込み中も読み取りができ、読み取り中でも書き込みができる
– 分離レベルの「READ COMMITTED」に相当
– ファジーリード、ファントムリードが発生する
29
32. Oracle との注意したい差異
1. SQLコンパイル(パース) 関連
2. ステートメントキャッシュ共有範囲
3. プライマリーキー
4. パーティションキー
5. 一貫性保障方式
6. 文レベルの一貫性 (大量アクセス時)
7. ロック制御による動作での同時実行における注意点
8. NULL と空文字列の扱い
9. ロックエスカレーション
10. 暗黙型変換 (CAST)
11. 会話型インターフェースのcommitモード
12. SELECT文でのロック取得方式
13. 日本語使用 (NonStop SQL に改善要求)
14. LOB型
15. ROWNUM, ROWID
16. 代表的な非互換関数など
17. パフォーマンス確保のためのSQL文記載注意点例
18. 予約語
19. ANSI非互換JDBCパラメータ (バインド変数) ハンドリング
20. レコードサイズ・ブロックサイズ
21. 関数等でのマルチバイト文字ハンドリング
22. UNIQUE制約
32
34. 8-1. NVL, NVL2関数
Null Value Logic
• 空文字をNULL等価としたい場合、NVL/NVL2の第一引数に
CASE文で空文字→NULLとする条件を挿入する
変換方法
制約
• NVLはSQL/MXでもサポートされているが、NULLと空文字列が別として扱
われるため、空文字はNVLでの変換対象とならない
•NVL2もSQL/MXでサポートされているが、空文字は第二引数が返却コメント
変換例(NVL):
変換前:NVL(COL1, {値/式})
変換後:NVL((CASE WHEN COL1 = '' THEN NULL ELSE COL1 END), {値/式})
またはNVL((CASE WHEN char_length(COL1) = 0 THEN NULL ELSE COL1 END), {値/式})
変換例 (NVL2):
変換前:NVL2(COL1, {値1}, {値2})
変換後:NVL2((CASE WHEN COL1 = '' THEN NULL ELSE COL1 END), {値1}, {値2})
またはNVL2((CASE WHEN char_length(COL1) = 0 THEN NULL ELSE COL1 END), {値1}, {値2})
39. 8-6. is NULL, is not NULL
•Is NULL, is not NULLに空文字も該当させたい場合は空文字に対
する条件を追加する。
変換方法
制約
•CASE文を項目に対して適用することも出来るが、is NULLの場合、該当項
目がindex項目やkey項目の場合に値検索ではなくscan検索となりパフォー
マンスが悪くなるケースもありうるコメント
変換例(is NULL):
変換前:WHERE COL1 is NULL
変換後:WHERE (COL1 is NULL or COL1 = '')
またはWHERE (COL1 is NULL or char_length(COL1) = 0)
変換例(is not NULL):
変換前:WHERE COL1 is not NULL
変換後:WHERE (COL1 is not NULL and COL1 <> '')
またはWHERE (COL1 is not NULL and char_length(COL1) <> 0)
41. 8-8. ORDER BY
•ORDER BYにおいて空文字とNULLを分けない場合はCASEを入
れる
変換方法
制約
• SQL/MXでは文字列項目においては空文字が一番小さなものとして評価
される。NULLは一番大きなものとして評価される
•Oracleでは空文字とNULLはNULLとして評価
コメント
変換例:
変換前:SELECT COL1 from TBL1 ORDER BY COL1
変換後:SELECT (CASE WHEN COL1 = '' THEN NULL ELSE COL1 END) ORD_COL
ORDER BY ORD_COL
またはSELECT (CASE WHEN char_length(COL1) = 0 THEN NULL ELSE COL1 END) ORD_COL
ORDER BY ORD_COL
42. 8-9. GROUP BY#1
•GROUP BYにおいて空文字とNULLを分けない場合はCASEを入
れる
変換方法
制約
• SQL/MXでは文字列項目においては空文字とNULLは別のグループとな
る
•Oracleは空文字とNULLは等価なため1つのグループとなる
コメント
変換例:
変換前:SELECT COL1 from TBL1 GROUP BY COL1
変換後:SELECT (CASE WHEN COL1 = '' THEN NULL ELSE COL1 END) GRP_COL
GROUP BY GRP_COL
またはSELECT (CASE WHEN char_length(COL1) = 0 THEN NULL ELSE COL1 END) GRP_COL
GROUP BY GRP_COL
43. 8-9. GROUP BY#2
•CASE文を入れたGROUP BY項目の別名を項目名と同一にした
場合はGROUP BY後の別名ではなく項目名でGROUP BYされる
ため、表示名を変えたくない場合は一旦別名を項目名と違う名称に
し、サブクエリ化して再度名称を戻す形とするか、GROUP BY指定
にCASE文をそのまま記載する
注意
事項
NG例:
SELECT
(CASE WHEN COL1 = '' THEN NULL ELSE COL1 END) COL1
GROUP BY COL1
※例は空文字比較のケースのみ記載(char_length() = 0もあり)
OK例1:
SELECT COL1_GRP as COL1
FROM
(SELECT
(CASE WHEN COL1 = '' THEN NULL ELSE COL1 END) COL1_GRP
GROUP BY COL1_GRP
) sub1
OK例2:
SELECT
(CASE WHEN COL1 = '' THEN NULL ELSE COL1 END) COL1
GROUP BY (CASE WHEN COL1 = '' THEN NULL ELSE COL1 END)
44. 10. 暗黙型変換について
全般的な注意事項
– 日付型の参照更新について
– Oracleにおいては日付型に対する参照更新においては文字列の暗黙的変換が行われるが、SQL/MXにおいては日付型へ
のCASTが必要となる。
– CASTする際の文字列フォーマットは以下の通りで、フォーマット変更は不可。(NLS_DATE_FORMATのようなものは無い)
– TIMESTAMP型は’YYYY-MM-DD hh:mm:ss[.f(6桁まで)]’
– DATE型は’YYYY-MM-DD’
– 変数においては、上記フォーマットであればCAST不要
– 今回Seasar2/DomaのSQL表記となっておりSQL変換では固定値側を使用したため全てCAST
– Oracleにおいては、日付型項目に対する加減算が数値型で行うことが出来るのに対し、SQL/MXにおいては
INTERVAL型での加減算もしくはDATEADD等の日付関数を使用する。
– SQL/MXにおいては日付時刻型と数値の加減算はINTERVAL型に暗黙変換されるが、DATE型(日単位)と
TIMESTAMP型(秒単位)で単位が変わるため注意必要。DATEADDにて明示的に単位を指定することを推奨
– Oracleにおいては、数値型と文字型の暗黙的変換が行われるが、SQL/MXにおいては明示的なCASTが必要と
なる
– 暗黙型変換についてはANSI規定はなく、DBMS固有の仕様差分によるもの
47. 10-1. 日付指定#3
•年月日時分秒が区切りなし繋がりの場合、同一パラメタを複数回
定義し、各々をsubstringで分割して繋げる
変換
パターン
変換例(変数にYYYYMMDDhhmmssで入ってくる場合):
以下すべての変数に同一の値を入れる
CAST(SUBSTRING(?,1,4) || '‐' || SUBSTRING(?,5,2) || '‐' SUBSTRING(?,7,2)
|| ' ' || SUBSTRING(?,9,2) || ':' || SUBSTRING(?,11,2) || ':' || SUBSTRING(?,13,2)
as TIMESTAMP(0))
50. NonStop SQL の特徴
– HP Integrity NonStop サーバーの性能を最大限引き出すように設計
– 性能の直線的拡張性
– 混合ワークロード優先度管理機能
– 多量のオンライン更新、オンライン・データロードのサポート
– 高信頼性・高可用性
– HP NonStop RDF
50
52. ビジネス継続を保証する圧倒的な優位性 1
100% 完全に統合されたフォールトトレラントシステム。 他のx86製品では
真似の出来ない100%のアプリケーションレベルでの可用性を実現
卓越した拡張性とキャパシティでビジネスパフォーマンスを
加速 2
2x 大量のトランザクション処理を可能とする、従来製品比 2倍のシステムパ
フォーマンス
x86がミッションクリティカル基盤にもたらす優れた経済性 3
低TCO 価格性能比が大幅に向上、メインフレームやHAクラスタを上回る投資対効
果を実現
HPE Integrity NonStop X - 無停止サーバーの新たな領域へ
x86ソリューションによりミッションクリティカルビジネスに更なる価値を提供
1 HPE NonStop はIDCの規定する最高レベルの可用性 Availability Level 4にランキング -IDC Worldwide and U.S. High-Availability Server 2014-2018 Forecast and Analysis - Doc
#250565, September 2014.
2 HPE Integrity NonStop NB54000c 4-coreシステムと比較して、エンクロージャ当たり2倍のCPU密度により設置面積とコストを削減、さらに2倍のメモリ容量によりアプリケーション性能を向上。
3 “NonStop はミッションクリティカルアプリケーションに同クラスにおける最も優れたTCOを提供。” - Pyalla Technologies, Research Note, November 2014
インテル® Xeon®
プロセッサー
58. SQL Ways
SQLWays Wizard ―オンライン変換ツール SQLWays Studio ―対話型変換ツール
58
変換元コード
(Oracle PL/SQL)
変換後コード
(SQL Server T-SQL)