Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
そのデータベース 5年後大丈夫ですか
~ 本気で標準化とサービスレベルの確保を手に入れるNonStop SQL ~
日本ヒューレット・パッカード株式会社
プリセールス統括本部
ソリューション技術部
後藤 宏
2016年 7月14日
自己紹介
Jim Gray を見て、これだ、と感じてはや24年。よもやこんなにデータベースにかかわるとは思い
もせず。以前は皆さんと同じどんな障害にも立ち向かうぞと徹夜もいとわずでしたが、今やコン
ピューターシステムを信頼し、「ひと」ではなく「...
データ指向
経営の
推進
関連データを100%活用し、
卓越したビジネス成果をもた
らす実用的な情報を提供。
ハイブリッド・
インフラへの
変革
ワークプレイスの
生産性
向上
デジタル・
エンタープライズの
保護
“アイデアエコノミー”の到来
目的とゴール
目的
• ITの進化は新しい時代を
迎えています。新時代にふ
さわしいデータベースを考
えてみましょう。
• 5年後の姿を想像してみよ
う
ゴール (Call to Action!!)
• アプリケーション透過とは
• データベー...
コンピュータの処理性能向上
ストレージ処理性能が大幅に向上
メモリコントローラ
PCIe 3.0
• クロックの向上は停滞
• 多コア化は継続
• E5 v4 : 22コア
• E7 v4 : 24コア
• 専用プロセッサ
• GPU
• FP...
Special purpose cores
専用コア
Photonics
フォトニクス
Massive memory pool
巨大なメモリー群
The Machine
HPEが目指すコンピュータの将来像
アジェンダ
7
1. 移行への契機
2. Oracleからの移行に関する注意点
3. Oracleからの移行ポイント
4. NonStop SQL の特徴
5. 移行ツール
移行への契機
8
移行への契機
こんな課題からの困った
• DBサーバ乱立でハードやソフトの保守費、光熱費や場所代が増加
• クラスタのスタンバイ機など遊休リソースが多い
コスト削減
• 災害対策を行う場合DBサーバが乱立したままではお金と手間かかる
• セキュ...
データベースに期待すること
「なんか知らんけど動いてくれれば」 経営者、営業
「止まってくれるな」 サーバー管理者
「バッチが終わらん !!」 DBA, 業務責任者
「メンテ、大変」 サーバー管理者、経理
「アプリ追加、めんどう !!」 開発者...
11
標準化を推進して、
• インフラを入れ替えやすく
• アプリを開発しやすく
Oracleからの移行に関する注意点
12
各RDBMS毎のSQL Statements比較
なぜ「標準」が存在するのでしょうか
0
50
100
150
200
250
ANSI SQL
(標準SQL)
約70構文
データベース A
約200構文
SQL プロシージャー
– アプリケーションが選択するRDBMS に依存
14
ANSI SQL
(標準SQL)
約70構文
Oracle PL/SQLSQL/MX プロシージャ
SQL PL DB2
Java プロシージャー
NonStop SQL とOracleのJava 用語
Oracle RDBMS NonStop SQL IBM DB2
Java メソッド起動 PL/SQL ラッパー 機能あり(名称なし) SQL PL ラッパー
JNI 機能あり(名称なし)...
Oracle からの移行に際して注意点 (項目)
– データ型(データタイプ)
– データ・ディクショナリー
– SQL
– 基本的なDDL
– データベース・リンク
– マテリアライズド・ビュー
– 分離レベル
– 同時実行制御
– PL/S...
データ型 (データタイプ)
Oracle
– 文字データ型
– 数値データ型
– DATEデータ型
– LOBデータ型
– RAWおよびLONG RAWデータ型
– ROWIDおよびUROWIDデータ型
NonStop SQL
– 文字データタ...
データディクショナリー
Oracle
データディクショナリーとはデータベース内のオブジェクト(表やビュー、索引、プロシージャなどなど) や表領域、ユー
ザ、権限などデータベースに関する様々な情報をテーブル形式で保持しています。
「%ORACLE...
SQL
基本的なDDL
Oracle
– スキーマ・オブジェクトの作成、変更および削除
– 権限およびロールの付与および取消し
– 表、索引またはクラスタ上の情報の分析
– 監査オプションの構築
– データ・ディクショナリへのコメントの追加
N...
SQL
基本的なDDL
Oracle
– ALTER
– ANALYZE
– ASSOCIATE STATISTICS
– AUDIT
– COMMENT
– CREATE (CREATEで始まるすべての文)
– DISASSOCIATE ST...
SQL
データベースリンク (Oracle)
概要 オプション
パラメータ 説明
PUBLIC
パブリックデータベースリンクを
作成する場合に指定する。
(パブリックデータベースリンクは
全てのユーザがアクセス可能な
データベースリンクの事です...
SQL
マテリアライズドビュー
Oracle
Oracle では、マテリアライズド・ビュー(以前はスナップショット
と呼ばれていたもの) を使用して、レプリケーション環境のマス
ター・サイト以外のサイトにデータをレプリケートし、コストのか
かる...
分離レベル
ANSI/ISO SQL標準
分離レベル Oracle NonStop SQL
SERIALIZABLE
( 直列化可能 )
○ ○
REPEATABLE READ
( 読み取り対象のデータを常に読み取る )
× ○
READ CO...
READ COMMITTED 時の挙動
Oracle NonStop SQL
ノン・リピータブル・リード (ファジーリード) 発生する 発生する
ファントムリード 発生する 発生する
マテリアライズドビューの読み取り ステートメント N/A
ト...
分離レベルとアプリケーションの課題
– ロックの種類と動作の違い
– 同時実効制御の違い
25
NonStop SQL: ロックの範囲
分離レベルとの関連
– 分離レベルによってロックに関する振る舞いが変わる
– SQL/MXにおいては以下の分離レベルとなる
– デフォルトはREAD COMMITTEDとなる
# 分離レベル ロック範囲 ...
NonStop SQL: ロックの範囲
実行プランとの関連
– 実行プランによってロック範囲(オブジェクト・scan範囲)が決定
– 実行プランに出てくるアクセス(scan)対象がロックされうる対象となる
– 分離レベルでscan対象の中のロッ...
NonStop SQL: ロックの範囲
ロック粒度
– ロック粒度はレコード単位となる
– 範囲指定においては、その範囲内のレコードが全てロックされる形
– テーブルロックについては、テーブル単位となる
– ロックエスカレーションがありうる
–...
Multi Version Concurrency Control (MVCC)
– 複数のユーザから同時に処理要求が行われた場合でも同時並行性を失わずに処理し、かつ情報の一貫性を保
証する仕組み
– 書き込み中も読み取りができ、読み取り中でも...
Multi Version Concurrency Control (MVCC)
Oracle 読み取り一貫性
30
Oracleからの移行ポイント
Oracle との注意したい差異
1. SQLコンパイル(パース) 関連
2. ステートメントキャッシュ共有範囲
3. プライマリーキー
4. パーティションキー
5. 一貫性保障方式
6. 文レベルの一貫性 (大量アクセス時)
7. ロック制...
8. NULLと空文字列の扱いについて
全般的な注意事項
– Oracleにおいては、文字列項目においてNULLと空文字列は同列に扱われるのに対し、SQL/MXにおいては
NULLと空文字列は別のものとして扱われる
– 空文字とNULLが別とし...
8-1. NVL, NVL2関数
Null Value Logic
• 空文字をNULL等価としたい場合、NVL/NVL2の第一引数に
CASE文で空文字→NULLとする条件を挿入する
変換方法
制約
• NVLはSQL/MXでもサポートされて...
8-2. COALESCE関数
NULLでない最初の引数を返す
•空文字をNULLと等価としたい場合、COALESCEの各引数に空文
字→NULLとするCASE文を挿入し、空文字の場合もNULLと評価さ
せる
変換方法
制約
• SQL/MXで...
8-3. 文字列連結 (CONCAT関数及び||連結演算子)
•NULLとの連結をNULLと評価させない場合、各要素にNVL関数を
使用し、空文字列に変えてから連結させる
変換方法
・変換においてNVL使用をする際、第一引数に変数を用いる場合、...
8-4. COUNT関数
•空文字列をcount対象とさせない場合には、CASE文を適用
変換方法
制約
• SQL/MXではCOUNT(項目)においては空文字列もカウント対象となる
•Oracleでは空文字列とNULLが同列のため、両方カウン...
8-5. DISTINCT関数
重複行の削除
•空文字列を対象とさせない場合には、CASE文を適用
変換方法
制約
• SQL/MXではDISTINCTにおいては空文字列も対象となる
•Oracleでは空文字列とNULLが同列のため、両方対象と...
8-6. is NULL, is not NULL
•Is NULL, is not NULLに空文字も該当させたい場合は空文字に対
する条件を追加する。
変換方法
制約
•CASE文を項目に対して適用することも出来るが、is NULLの場合、...
8-7. MIN関数、MAX関数
•MIN, MAXに空文字を適用したくない場合、CASEを入れる
変換方法
制約
•MIN,MAX関数の評価はNULLが取り除かれる
•Oracleは空文字とNULLが同列のため空文字は入らない
•SQL/MX...
8-8. ORDER BY
•ORDER BYにおいて空文字とNULLを分けない場合はCASEを入
れる
変換方法
制約
• SQL/MXでは文字列項目においては空文字が一番小さなものとして評価
される。NULLは一番大きなものとして評価される...
8-9. GROUP BY#1
•GROUP BYにおいて空文字とNULLを分けない場合はCASEを入
れる
変換方法
制約
• SQL/MXでは文字列項目においては空文字とNULLは別のグループとな
る
•Oracleは空文字とNULLは等価...
8-9. GROUP BY#2
•CASE文を入れたGROUP BY項目の別名を項目名と同一にした
場合はGROUP BY後の別名ではなく項目名でGROUP BYされる
ため、表示名を変えたくない場合は一旦別名を項目名と違う名称に
し、サブクエ...
10. 暗黙型変換について
全般的な注意事項
– 日付型の参照更新について
– Oracleにおいては日付型に対する参照更新においては文字列の暗黙的変換が行われるが、SQL/MXにおいては日付型へ
のCASTが必要となる。
– CASTする際の...
10-1. 日付指定#1
•日付/時刻項目に対する検索条件指定は文字列を日付時刻型に
CASTする
変換方法
CASTの際の文字列フォーマットは
YYYY-MM-DD hh:mm:ss[.f(6桁まで)]である必要がある
バインド変数の場合はフ...
10-1. 日付指定#2
•年月日が/(スラッシュ)区切りの場合
・TIMESTAMP型に対して年月日のみの指定
・日付のみ使用する項目(時刻使用しない)において、年月日区切り
がスラッシュ/ハイフン不明、時刻情報が付与されるか不明の場合
変換...
10-1. 日付指定#3
•年月日時分秒が区切りなし繋がりの場合、同一パラメタを複数回
定義し、各々をsubstringで分割して繋げる
変換
パターン
変換例(変数にYYYYMMDDhhmmssで入ってくる場合):
以下すべての変数に同一の値...
10-x.
– 日付演算
– 数値と文字列
– …
– …
48
NonStop SQL の特徴
NonStop SQL の特徴
– HP Integrity NonStop サーバーの性能を最大限引き出すように設計
– 性能の直線的拡張性
– 混合ワークロード優先度管理機能
– 多量のオンライン更新、オンライン・データロードのサポート
–...
無停止型データベースの価値
51
コスト削減瞬時の”引継ぎ”
無停止型データベース
HPE NonStop SQL
運用工数削減 オープン
クラスタ構成
フェールオーバー
HP NonStop
テークオーバー
数十秒 vs 数秒
30%以上のコ...
ビジネス継続を保証する圧倒的な優位性 1
100% 完全に統合されたフォールトトレラントシステム。 他のx86製品では
真似の出来ない100%のアプリケーションレベルでの可用性を実現
卓越した拡張性とキャパシティでビジネスパフォーマンスを
加速...
新たな世界を開くHPE NonStopサーバー、DB 連携
Linux環境とのシームレスな融合によりお客様のビジネスを更に活性化します
53
Integrated
Environment
Cross-system
communication
ミ...
ビッグデータ技術は「ビッグデータサイエンス」をどう変えるのか
54
by シバタアキラ, Ph.D. – データサイエンティスト
https://ashibata.com/2014/08/25/bigdata/
NonStop SQL の
実装...
移行ツール
SQL Ways
SQLWaysは、異なるデータベース間でDDL/ストアドプロシジャー/SQLアプリケーションの自動変換を行うデータ
ベース移行支援ツールです。市場で利用されている主なデータベースに幅広く対応し、異なるデータベースへの移
行プロ...
SQL Ways
マルチベンダ対応の高機能データベース移行支援ツール
– Ispirer社のSQLWaysは、複数の異なる
データベース間で、SQL文変換とデータ
移行を容易にするWindows上で稼働す
るツール
– GUIによる利用と、コマ...
SQL Ways
SQLWays Wizard ―オンライン変換ツール SQLWays Studio ―対話型変換ツール
58
変換元コード
(Oracle PL/SQL)
変換後コード
(SQL Server T-SQL)
アンケートにご協力ください
Thank you!
後藤 宏
プリセールス統括本部
ソリューションセンター
ソリューション技術部
Tel: 090-7906-4517
Mail: hiromu.gotoi@hpe.com日本ヒューレット・パッカード
株式会社
〒136-87...
Upcoming SlideShare
Loading in …5
×

[db tech showcase Tokyo 2016] B24: そのデータベース 5年後大丈夫ですか ~ 本気で標準化とサービスレベルの確保を手に入れるNonStop SQL ~by日本ヒューレット・パッカード株式会社 後藤 宏

1,407 views

Published on

標準化を唱えて早6年、今のままで大丈夫ですか。移行に不安を抱えていますか。移行の実例を示しながら、これまでにない可用性を確保しながら、これまでにない運用性をご紹介します。5年後も最高なインフラ、RDBMS へも移行可能です。

Published in: Technology
  • Be the first to comment

  • Be the first to like this

[db tech showcase Tokyo 2016] B24: そのデータベース 5年後大丈夫ですか ~ 本気で標準化とサービスレベルの確保を手に入れるNonStop SQL ~by日本ヒューレット・パッカード株式会社 後藤 宏

  1. 1. そのデータベース 5年後大丈夫ですか ~ 本気で標準化とサービスレベルの確保を手に入れるNonStop SQL ~ 日本ヒューレット・パッカード株式会社 プリセールス統括本部 ソリューション技術部 後藤 宏 2016年 7月14日
  2. 2. 自己紹介 Jim Gray を見て、これだ、と感じてはや24年。よもやこんなにデータベースにかかわるとは思い もせず。以前は皆さんと同じどんな障害にも立ち向かうぞと徹夜もいとわずでしたが、今やコン ピューターシステムを信頼し、「ひと」ではなく「もの」に頑張ってもらい、もっとクリエイティブな仕 事をしようとしつこく「標準化」を唱える。 – 1986年 非常勤講師 (統計学など) – 1990年 日本ディジタルイクイップメント入社 DEC Rdb (現Oracle Rdb) 支援 – 1992年 ISV 技術支援 (Oracle, Informix, Sybase) – 1998年 コンパックコンピュータ株式会社 – 2003年 日本ヒューレット・パッカード株式会社 – 2005年 IPA OSS実証プロジェクト参加 – 2010年 「国境なき医師団 (Medecins Sans Frontieres=MSF)」へITでボランティア –
  3. 3. データ指向 経営の 推進 関連データを100%活用し、 卓越したビジネス成果をもた らす実用的な情報を提供。 ハイブリッド・ インフラへの 変革 ワークプレイスの 生産性 向上 デジタル・ エンタープライズの 保護 “アイデアエコノミー”の到来
  4. 4. 目的とゴール 目的 • ITの進化は新しい時代を 迎えています。新時代にふ さわしいデータベースを考 えてみましょう。 • 5年後の姿を想像してみよ う ゴール (Call to Action!!) • アプリケーション透過とは • データベースをシンプルに 使うこと • 見直すなら今だ ! • NonStop SQLを例に
  5. 5. コンピュータの処理性能向上 ストレージ処理性能が大幅に向上 メモリコントローラ PCIe 3.0 • クロックの向上は停滞 • 多コア化は継続 • E5 v4 : 22コア • E7 v4 : 24コア • 専用プロセッサ • GPU • FPGA • Xeon Phi • 容量の向上は鈍化 • 128GBの登場 • 半導体プロセスの限界 • 3D DRAM ? • DDR5 ? • フラッシュにより大幅に性能向上 • NVMe (PCIe接続) • 大容量化の継続 • 3D NAND • 7.68TB SSD (2.5インチ) CPU メモリ ストレージ
  6. 6. Special purpose cores 専用コア Photonics フォトニクス Massive memory pool 巨大なメモリー群 The Machine HPEが目指すコンピュータの将来像
  7. 7. アジェンダ 7 1. 移行への契機 2. Oracleからの移行に関する注意点 3. Oracleからの移行ポイント 4. NonStop SQL の特徴 5. 移行ツール
  8. 8. 移行への契機 8
  9. 9. 移行への契機 こんな課題からの困った • DBサーバ乱立でハードやソフトの保守費、光熱費や場所代が増加 • クラスタのスタンバイ機など遊休リソースが多い コスト削減 • 災害対策を行う場合DBサーバが乱立したままではお金と手間かかる • セキュリティレベルやポリシーがバラバラで、可用性が均一では無い リスク低減 • 台数増加でバックアップやパッチ対応など運用負荷やスタッフが増大 • DBサーバが老朽化して性能や拡張性の限界 サービス品質向上 • DBサーバ構築時間が長く、負荷に応じた迅速なリソース配分も困難 • データも分断され組織や業務変更などへの迅速な対応が困難 俊敏性の向上 • 合併や事業統合への対応 • 保守切れ、リース切れ コンペリングイベント
  10. 10. データベースに期待すること 「なんか知らんけど動いてくれれば」 経営者、営業 「止まってくれるな」 サーバー管理者 「バッチが終わらん !!」 DBA, 業務責任者 「メンテ、大変」 サーバー管理者、経理 「アプリ追加、めんどう !!」 開発者 「導入が大変」 サーバー管理者 まだまだありますよね なぜ、「動き続けて」と願うのでしょうか なぜ、メンテナンスが大変なのでしょうか なぜ、アプリ開発に時間とお金がかかるのでしょうか
  11. 11. 11 標準化を推進して、 • インフラを入れ替えやすく • アプリを開発しやすく
  12. 12. Oracleからの移行に関する注意点 12
  13. 13. 各RDBMS毎のSQL Statements比較 なぜ「標準」が存在するのでしょうか 0 50 100 150 200 250 ANSI SQL (標準SQL) 約70構文 データベース A 約200構文
  14. 14. SQL プロシージャー – アプリケーションが選択するRDBMS に依存 14 ANSI SQL (標準SQL) 約70構文 Oracle PL/SQLSQL/MX プロシージャ SQL PL DB2 Java プロシージャー
  15. 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. 16. Oracle からの移行に際して注意点 (項目) – データ型(データタイプ) – データ・ディクショナリー – SQL – 基本的なDDL – データベース・リンク – マテリアライズド・ビュー – 分離レベル – 同時実行制御 – PL/SQL言語 – JDBC – Pro*C – OCI – C言語のAPI 16
  17. 17. データ型 (データタイプ) Oracle – 文字データ型 – 数値データ型 – DATEデータ型 – LOBデータ型 – RAWおよびLONG RAWデータ型 – ROWIDおよびUROWIDデータ型 NonStop SQL – 文字データタイプ – 数値データタイプ – インターバルデータタイプ – 日付時刻データタイプ 17
  18. 18. データディクショナリー Oracle データディクショナリーとはデータベース内のオブジェクト(表やビュー、索引、プロシージャなどなど) や表領域、ユー ザ、権限などデータベースに関する様々な情報をテーブル形式で保持しています。 「%ORACLE_HOME%rdbmsadmincatalog.sql」で作成することができます。 18 種類 説明 DBA_* データベース内全てのオブジェクトに関する情報 ALL_* 自分がアクセスできるオブジェクトに関する情報 USER_* 自分の所有するオブジェクト(自スキーマのオブジェク ト)に関する情報 その他 セッションやロール、言語環境に関する情報
  19. 19. SQL 基本的なDDL Oracle – スキーマ・オブジェクトの作成、変更および削除 – 権限およびロールの付与および取消し – 表、索引またはクラスタ上の情報の分析 – 監査オプションの構築 – データ・ディクショナリへのコメントの追加 NonStop SQL – スキーマ・オブジェクトの作成、変更および削除 – 権限およびロールの付与および取消し – 表、索引またはクラスタ上の情報の分析 – 監査オプションの構築 19
  20. 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. 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;
  22. 22. SQL マテリアライズドビュー Oracle Oracle では、マテリアライズド・ビュー(以前はスナップショット と呼ばれていたもの) を使用して、レプリケーション環境のマス ター・サイト以外のサイトにデータをレプリケートし、コストのか かる問合せをデータ・ウェアハウス環境にキャッシュ。 NonStop SQL – NonStop SQL/MX V3.5 にて実装予定 22
  23. 23. 分離レベル ANSI/ISO SQL標準 分離レベル Oracle NonStop SQL SERIALIZABLE ( 直列化可能 ) ○ ○ REPEATABLE READ ( 読み取り対象のデータを常に読み取る ) × ○ READ COMMITTED ( 確定した最新データを常に読み取る ) ○ ○ READ UNCOMMITTED ( 確定していないデータまで読み取る ) × ○ 23
  24. 24. READ COMMITTED 時の挙動 Oracle NonStop SQL ノン・リピータブル・リード (ファジーリード) 発生する 発生する ファントムリード 発生する 発生する マテリアライズドビューの読み取り ステートメント N/A トランザクションにおける読み取り一貫性 ステートメント単位 ステートメント単位 問い合わせ時に行をロックするか しない しない 先行している競合しているトランザクションがコミット後にエラーが発生するか 発生しない 発生しない 先行している競合しているトランザクションのコミット後に後続のトランザクション にエラーが発生するか 発生しない 発生しない 24
  25. 25. 分離レベルとアプリケーションの課題 – ロックの種類と動作の違い – 同時実効制御の違い 25
  26. 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. 27. NonStop SQL: ロックの範囲 実行プランとの関連 – 実行プランによってロック範囲(オブジェクト・scan範囲)が決定 – 実行プランに出てくるアクセス(scan)対象がロックされうる対象となる – 分離レベルでscan対象の中のロック対象は変化 – トリガーや参照整合性など他テーブルと関連付けられているものについては、これらの情報も加味されて実行プランが決定さ れる – 実行プランは統計情報によって変わることがあるため、実行プランが変わることによってロック範囲も変わる – ロック範囲の見極めにおいては、実行プランの確認で可能 – DMLの種類(SELECT, INSERT, UPDATE, DELETE)に関わらず実行プランで確認可能
  28. 28. NonStop SQL: ロックの範囲 ロック粒度 – ロック粒度はレコード単位となる – 範囲指定においては、その範囲内のレコードが全てロックされる形 – テーブルロックについては、テーブル単位となる – ロックエスカレーションがありうる – エスカレーション単位は行ロック→パーティションロック(1パーティションの場合はテーブルロック) – 1トランザクションが同一パーティションに対するロックを閾値以上保持する場合、そのパーティションに対するロックエスカ レーションが発生する。エスカレーション閾値は論理ディスクの設定(MAXLOCKSPERTCB)に依存 – 設定でOFFにすることも可能だが、論理ディスクの合計ロック保持上限に達した場合、それ以上のロック確保が出来ずエラー となる
  29. 29. Multi Version Concurrency Control (MVCC) – 複数のユーザから同時に処理要求が行われた場合でも同時並行性を失わずに処理し、かつ情報の一貫性を保 証する仕組み – 書き込み中も読み取りができ、読み取り中でも書き込みができる – 分離レベルの「READ COMMITTED」に相当 – ファジーリード、ファントムリードが発生する 29
  30. 30. Multi Version Concurrency Control (MVCC) Oracle 読み取り一貫性 30
  31. 31. Oracleからの移行ポイント
  32. 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
  33. 33. 8. NULLと空文字列の扱いについて 全般的な注意事項 – Oracleにおいては、文字列項目においてNULLと空文字列は同列に扱われるのに対し、SQL/MXにおいては NULLと空文字列は別のものとして扱われる – 空文字とNULLが別として扱われるのはANSI準拠の動作となる – SQL/MXにおいて空文字列とNULLを同列に扱うためには検索時に空文字列をNULLとするCASE文を入れて扱 うこととなる – 全て半角空白も空文字列との比較ではTRUEになるため、空文字のみとする場合はchar_lengthで長さ0のものを 対象とする CASE文の例(全て空白もNULLとする): (CASE WHEN COL1 = '' THEN NULL ELSE COL1 END)  CASE文の例(空文字のみをNULLとする): (CASE WHEN char_length(COL1) = 0 THEN NULL ELSE COL1 END) 
  34. 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})
  35. 35. 8-2. COALESCE関数 NULLでない最初の引数を返す •空文字をNULLと等価としたい場合、COALESCEの各引数に空文 字→NULLとするCASE文を挿入し、空文字の場合もNULLと評価さ せる 変換方法 制約 • SQL/MXでもサポートされているが、NULLと空文字列が別として扱われる ため、空文字の場合はCOALESCEの評価はその時点で終了(次の要素の 評価に行かない) コメント 変換例: 変換前:COALESCE(COL1, COL2[,...]) 変換後:COALESCE((CASE WHEN COL1 = '' THEN NULL ELSE COL1 END), (CASE WHEN COL2 = '' THEN NULL ELSE COL2 END)[,...] ) またはCOALESCE((CASE WHEN char_length(COL1) = 0 THEN NULL ELSE COL1 END), (CASE WHEN char_length(COL2) = 0 THEN NULL ELSE COL2 END)[,...] )
  36. 36. 8-3. 文字列連結 (CONCAT関数及び||連結演算子) •NULLとの連結をNULLと評価させない場合、各要素にNVL関数を 使用し、空文字列に変えてから連結させる 変換方法 ・変換においてNVL使用をする際、第一引数に変数を用いる場合、NVLの仕 様で変数の型が第二引数と同様となるため、変数がとりうる最大型にCAST する必要あり制約 •OracleではNULLと文字列の連結は文字列となる •SQL/MXではNULLと文字列の連結はNULLとなる コメント 変換例(CONCAT関数): 変換前:CONCAT(COL1, COL2[,...]) 変換後:CONCAT(NVL(COL1, ''), NVL(COL2, '')[,...]) 変換例(||) 変換前:COL1 || COL2 変換後:NVL(COL1, '') || NVL(COL2, '') 例:NVL(CAST(? as VARCHAR(10)), '')
  37. 37. 8-4. COUNT関数 •空文字列をcount対象とさせない場合には、CASE文を適用 変換方法 制約 • SQL/MXではCOUNT(項目)においては空文字列もカウント対象となる •Oracleでは空文字列とNULLが同列のため、両方カウント対象とならない コメント 変換例: 変換前:COUNT(COL1) 変換後:COUNT(CASE WHEN COL1 = '' THEN NULL ELSE COL1 END) またはCOUNT(CASE WHEN char_length(COL1) = 0 THEN NULL ELSE COL1 END)
  38. 38. 8-5. DISTINCT関数 重複行の削除 •空文字列を対象とさせない場合には、CASE文を適用 変換方法 制約 • SQL/MXではDISTINCTにおいては空文字列も対象となる •Oracleでは空文字列とNULLが同列のため、両方対象とならない コメント 変換例: 変換前:DISTINCT(COL1) 変換後:DISTINCT(CASE WHEN COL1 = '' THEN NULL ELSE COL1 END) またはDISTINCT(CASE WHEN char_length(COL1) = 0 THEN NULL ELSE COL1 END)
  39. 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)
  40. 40. 8-7. MIN関数、MAX関数 •MIN, MAXに空文字を適用したくない場合、CASEを入れる 変換方法 制約 •MIN,MAX関数の評価はNULLが取り除かれる •Oracleは空文字とNULLが同列のため空文字は入らない •SQL/MXは空文字とNULLが別のため入るコメント 変換例(MIN): 変換前:MIN(COL1) 変換後:MIN(CASE WHEN COL1 = '' THEN NULL ELSE COL1 END) またはMIN(CASE WHEN char_length(COL1) = 0 THEN NULL ELSE COL1 END) 変換例(MAX): 変換前:MAX(COL1) 変換後:MAX(CASE WHEN COL1 = '' THEN NULL ELSE COL1 END) またはMAX(CASE WHEN char_length(COL1) = 0 THEN NULL ELSE COL1 END)
  41. 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. 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. 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. 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固有の仕様差分によるもの
  45. 45. 10-1. 日付指定#1 •日付/時刻項目に対する検索条件指定は文字列を日付時刻型に CASTする 変換方法 CASTの際の文字列フォーマットは YYYY-MM-DD hh:mm:ss[.f(6桁まで)]である必要がある バインド変数の場合はフォーマットが上記のものであればCASTしなくても処 理可能 制約 •OracleのDATE型はSQL/MXではTIMESTAMP(0)に相当 •SQL/MXのDATE型は時分秒を含まない •SQL/MXのDATE型文字列フォーマットはYYYY-MM-DDである必要があるコメント 変換例: 変換前:WHERE DATE_COL = '2015‐05‐20 00:00:00' 変換後:WHERE DATE_COL = CAST('2015‐05‐20 00:00:00' as TIMESTAMP(0))
  46. 46. 10-1. 日付指定#2 •年月日が/(スラッシュ)区切りの場合 ・TIMESTAMP型に対して年月日のみの指定 ・日付のみ使用する項目(時刻使用しない)において、年月日区切り がスラッシュ/ハイフン不明、時刻情報が付与されるか不明の場合 変換 パターン 変換例: CAST(REPLACE('2015/05/20 00:00:00', '/', '‐') as TIMESTAMP(0)) 変換例: CAST('2015‐05‐20' || ' 00:00:00 ') as TIMESTAMP(0)) 変換例: CAST(REPLACE(SUBSTRING(?,1,10), '/', '‐') || ' 00:00:00 ') as  TIMESTAMP(0))
  47. 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))
  48. 48. 10-x. – 日付演算 – 数値と文字列 – … – … 48
  49. 49. NonStop SQL の特徴
  50. 50. NonStop SQL の特徴 – HP Integrity NonStop サーバーの性能を最大限引き出すように設計 – 性能の直線的拡張性 – 混合ワークロード優先度管理機能 – 多量のオンライン更新、オンライン・データロードのサポート – 高信頼性・高可用性 – HP NonStop RDF 50
  51. 51. 無停止型データベースの価値 51 コスト削減瞬時の”引継ぎ” 無停止型データベース HPE NonStop SQL 運用工数削減 オープン クラスタ構成 フェールオーバー HP NonStop テークオーバー 数十秒 vs 数秒 30%以上のコスト削減 代表的なDBと比較して * 求められる性能要件に依存します 導入してすぐに無停止 切り替え、切り戻し、拡張も手間要らず セキュリティパッチ適用ほぼ不要 1/3 ANSI SQL完全準拠のオープンDB Javaをはじめとするミドルウェアや 開発環境、APIもオープン
  52. 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® プロセッサー
  53. 53. 新たな世界を開くHPE NonStopサーバー、DB 連携 Linux環境とのシームレスな融合によりお客様のビジネスを更に活性化します 53 Integrated Environment Cross-system communication ミッションクリティカル アプリケーション NonStop Linux Personalized real-time marketing Artificial Intelligence Mobile-to-mobile transactions 汎用 アプリケーション
  54. 54. ビッグデータ技術は「ビッグデータサイエンス」をどう変えるのか 54 by シバタアキラ, Ph.D. – データサイエンティスト https://ashibata.com/2014/08/25/bigdata/ NonStop SQL の 実装と同等
  55. 55. 移行ツール
  56. 56. SQL Ways SQLWaysは、異なるデータベース間でDDL/ストアドプロシジャー/SQLアプリケーションの自動変換を行うデータ ベース移行支援ツールです。市場で利用されている主なデータベースに幅広く対応し、異なるデータベースへの移 行プロジェクトのリスク低減とコスト削減に貢献します。 56 Informix Neoview SAP HANA SQLWays ビジネスロジック (ストアドプロシ ジャー)変換 データベース アプリケーション 変換 データ移⾏ アプリケーション ⾔語変換 DDL変換 SQL/MX
  57. 57. SQL Ways マルチベンダ対応の高機能データベース移行支援ツール – Ispirer社のSQLWaysは、複数の異なる データベース間で、SQL文変換とデータ 移行を容易にするWindows上で稼働す るツール – GUIによる利用と、コマンドでのバッチ利 用が可能 – Stored ProcedureのJavaへの変換機能 をあわせて提供 57 テーブル 定義 データ 他データベース SQL Ways 既存DBに接続し 情報を取り込み テーブル 生成 スクリプト CSV ロードデータ & スクリプト NonStop SQL 移行用ファイル を自動生成 他DB方言 のある SQL文 既存アプリケーション ANSI SQL99 準拠 SQL文 SQL文を 自動変換
  58. 58. SQL Ways SQLWays Wizard ―オンライン変換ツール SQLWays Studio ―対話型変換ツール 58 変換元コード (Oracle PL/SQL) 変換後コード (SQL Server T-SQL)
  59. 59. アンケートにご協力ください
  60. 60. Thank you! 後藤 宏 プリセールス統括本部 ソリューションセンター ソリューション技術部 Tel: 090-7906-4517 Mail: hiromu.gotoi@hpe.com日本ヒューレット・パッカード 株式会社 〒136-8711 東京都江東区大島2-2-1

×