[db tech showcase Tokyo 2016] B24: そのデータベース 5年後大丈夫ですか ~...

60
そのデータベース 5年後大丈夫ですか ~ 本気で標準化とサービスレベルの確保を手に入れるNonStop SQL 日本ヒューレット・パッカード株式会社 プリセールス統括本部 ソリューション技術部 後藤 宏 2016714

Transcript of [db tech showcase Tokyo 2016] B24: そのデータベース 5年後大丈夫ですか ~...

そのデータベース 5年後大丈夫ですか~ 本気で標準化とサービスレベルの確保を手に入れるNonStop SQL ~

日本ヒューレット・パッカード株式会社プリセールス統括本部ソリューション技術部後藤 宏

2016年 7月14日

自己紹介

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でボランティア

データ指向経営の

推進関連データを100%活用し、

卓越したビジネス成果をもたらす実用的な情報を提供。

ハイブリッド・インフラへの

変革

ワークプレイスの生産性

向上

デジタル・エンタープライズの

保護

“アイデアエコノミー”の到来

目的とゴール

目的

• ITの進化は新しい時代を

迎えています。新時代にふさわしいデータベースを考えてみましょう。

• 5年後の姿を想像してみよう

ゴール (Call to Action!!)

• アプリケーション透過とは

• データベースをシンプルに使うこと

• 見直すなら今だ !• NonStop SQLを例に

コンピュータの処理性能向上ストレージ処理性能が大幅に向上

メモリコントローラ

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 メモリ

ストレージ

Special purpose cores専用コア

Photonicsフォトニクス

Massive memory pool巨大なメモリー群

The MachineHPEが目指すコンピュータの将来像

アジェンダ

7

1. 移行への契機

2. Oracleからの移行に関する注意点

3. Oracleからの移行ポイント

4. NonStop SQL の特徴

5. 移行ツール

移行への契機

8

移行への契機こんな課題からの困った

• DBサーバ乱立でハードやソフトの保守費、光熱費や場所代が増加

• クラスタのスタンバイ機など遊休リソースが多いコスト削減

• 災害対策を行う場合DBサーバが乱立したままではお金と手間かかる

• セキュリティレベルやポリシーがバラバラで、可用性が均一では無いリスク低減

• 台数増加でバックアップやパッチ対応など運用負荷やスタッフが増大

• 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 DB2Java メソッド起動 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

Oracle からの移行に際して注意点 (項目)

–データ型(データタイプ)

–データ・ディクショナリー

– SQL–基本的なDDL–データベース・リンク

–マテリアライズド・ビュー

–分離レベル

–同時実行制御

– PL/SQL言語

– JDBC

– Pro*C

– OCI– C言語のAPI

16

データ型 (データタイプ)

Oracle– 文字データ型

– 数値データ型

– DATEデータ型

– LOBデータ型

– RAWおよびLONG RAWデータ型

– ROWIDおよびUROWIDデータ型

NonStop SQL– 文字データタイプ

– 数値データタイプ

– インターバルデータタイプ

– 日付時刻データタイプ

17

データディクショナリーOracle

データディクショナリーとはデータベース内のオブジェクト(表やビュー、索引、プロシージャなどなど) や表領域、ユーザ、権限などデータベースに関する様々な情報をテーブル形式で保持しています。

「%ORACLE_HOME%\rdbms\admin\catalog.sql」で作成することができます。

18

種類 説明

DBA_* データベース内全てのオブジェクトに関する情報

ALL_* 自分がアクセスできるオブジェクトに関する情報

USER_* 自分の所有するオブジェクト(自スキーマのオブジェクト)に関する情報

その他 セッションやロール、言語環境に関する情報

SQL基本的なDDL

Oracle– スキーマ・オブジェクトの作成、変更および削除

– 権限およびロールの付与および取消し

– 表、索引またはクラスタ上の情報の分析

– 監査オプションの構築

– データ・ディクショナリへのコメントの追加

NonStop SQL– スキーマ・オブジェクトの作成、変更および削除

– 権限およびロールの付与および取消し

– 表、索引またはクラスタ上の情報の分析

– 監査オプションの構築

19

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

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;

SQLマテリアライズドビュー

OracleOracle では、マテリアライズド・ビュー(以前はスナップショットと呼ばれていたもの) を使用して、レプリケーション環境のマスター・サイト以外のサイトにデータをレプリケートし、コストのかかる問合せをデータ・ウェアハウス環境にキャッシュ。

NonStop SQL– NonStop SQL/MX V3.5 にて実装予定

22

分離レベルANSI/ISO SQL標準

分離レベル Oracle NonStop SQLSERIALIZABLE( 直列化可能 )

○ ○

REPEATABLE READ( 読み取り対象のデータを常に読み取る )

× ○

READ COMMITTED( 確定した 新データを常に読み取る )

○ ○

READ UNCOMMITTED( 確定していないデータまで読み取る )

× ○

23

READ COMMITTED 時の挙動

Oracle NonStop SQLノン・リピータブル・リード (ファジーリード) 発生する 発生する

ファントムリード 発生する 発生する

マテリアライズドビューの読み取り ステートメント N/A

トランザクションにおける読み取り一貫性 ステートメント単位 ステートメント単位

問い合わせ時に行をロックするか しない しない

先行している競合しているトランザクションがコミット後にエラーが発生するか 発生しない 発生しない

先行している競合しているトランザクションのコミット後に後続のトランザクションにエラーが発生するか

発生しない 発生しない

24

分離レベルとアプリケーションの課題

– ロックの種類と動作の違い

– 同時実効制御の違い

25

NonStop SQL: ロックの範囲分離レベルとの関連

– 分離レベルによってロックに関する振る舞いが変わる

– SQL/MXにおいては以下の分離レベルとなる

– デフォルトはREAD COMMITTEDとなる

# 分離レベル ロック範囲 説明

1 READ UNCOMMITTED(ANSI)

ロックしない いわゆるダーティーリード。更新中のデータも読み込めるため、一貫性保障されない場合がある。ロック待ちを行わず、ロックの生成・保持も行わない。同時実行性・パフォーマンス有利

2 READ COMMITTED(ANSI、デフォルト)

ロックのチェックのみ、ロックしない

コミット済みのデータのみ読むモード。SQL/MXにおいては、更新中・排他ロック中のデータは読み込めない(ロック待ちとなる)。内部的にはロックメカニズムを使用し、ロックをチェックしながら読み取る形となる。実際のロックは発生しない。

3 STABLE(SQLMX拡張)

Fetch中のデータのみロック

SQL/MX拡張の分離レベル。更新中・排他ロック中のデータは読み込めない(ロック待ちとなる)。アクセス中のデータに対してのみ順次ロックを保持する形となり、アクセス終了時点でロックを開放する。(トランザクション終了までは保持しない)

4 REPEATABLE READSERIALIZABLE(ANSI)

スキャンしたデータ全てロック

データの繰り返し読み込み保障(REPEATABLE READ)、データの直列化可能性を保障(SERIALIZABLE)アクセスしたデータ全てにロックを行う。トランザクション終了まで保持。SQL/MXにおいては、REPEATABLE READとSERIALIZABLEは同じ実装となる。

NonStop SQL: ロックの範囲実行プランとの関連

– 実行プランによってロック範囲(オブジェクト・scan範囲)が決定

– 実行プランに出てくるアクセス(scan)対象がロックされうる対象となる

– 分離レベルでscan対象の中のロック対象は変化

– トリガーや参照整合性など他テーブルと関連付けられているものについては、これらの情報も加味されて実行プランが決定される

– 実行プランは統計情報によって変わることがあるため、実行プランが変わることによってロック範囲も変わる

– ロック範囲の見極めにおいては、実行プランの確認で可能

– DMLの種類(SELECT, INSERT, UPDATE, DELETE)に関わらず実行プランで確認可能

NonStop SQL: ロックの範囲ロック粒度

– ロック粒度はレコード単位となる

– 範囲指定においては、その範囲内のレコードが全てロックされる形

– テーブルロックについては、テーブル単位となる

– ロックエスカレーションがありうる

– エスカレーション単位は行ロック→パーティションロック(1パーティションの場合はテーブルロック)– 1トランザクションが同一パーティションに対するロックを閾値以上保持する場合、そのパーティションに対するロックエスカレーションが発生する。エスカレーション閾値は論理ディスクの設定(MAXLOCKSPERTCB)に依存

– 設定でOFFにすることも可能だが、論理ディスクの合計ロック保持上限に達した場合、それ以上のロック確保が出来ずエラーとなる

Multi Version Concurrency Control (MVCC)

– 複数のユーザから同時に処理要求が行われた場合でも同時並行性を失わずに処理し、かつ情報の一貫性を保証する仕組み

– 書き込み中も読み取りができ、読み取り中でも書き込みができる

– 分離レベルの「READ COMMITTED」に相当

– ファジーリード、ファントムリードが発生する

29

Multi Version Concurrency Control (MVCC)Oracle 読み取り一貫性

30

Oracleからの移行ポイント

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

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) 

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})

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)[,...] )

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)), '')

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)

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)

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)

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)

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

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

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) COL1GROUP BY COL1

※例は空文字比較のケースのみ記載(char_length() = 0もあり)OK例1:SELECT COL1_GRP as COL1FROM(SELECT (CASE WHEN COL1 = '' THEN NULL ELSE COL1 END) COL1_GRPGROUP BY COL1_GRP) sub1OK例2:SELECT(CASE WHEN COL1 = '' THEN NULL ELSE COL1 END) COL1

GROUP BY (CASE WHEN COL1 = '' THEN NULL ELSE COL1 END)

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固有の仕様差分によるもの

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))

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))

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))

10-x.

– 日付演算

– 数値と文字列

– …

– …

48

NonStop SQL の特徴

NonStop SQL の特徴

– HP Integrity NonStop サーバーの性能を 大限引き出すように設計

– 性能の直線的拡張性

– 混合ワークロード優先度管理機能

– 多量のオンライン更新、オンライン・データロードのサポート

– 高信頼性・高可用性

– HP NonStop RDF

50

無停止型データベースの価値

51

コスト削減瞬時の”引継ぎ”

無停止型データベースHPE NonStop SQL

運用工数削減 オープン

クラスタ構成フェールオーバー

HP NonStopテークオーバー

数十秒 vs 数秒 30%以上のコスト削減

代表的なDBと比較して

* 求められる性能要件に依存します

導入してすぐに無停止

切り替え、切り戻し、拡張も手間要らず

セキュリティパッチ適用ほぼ不要

1/3 ANSI SQL完全準拠のオープンDBJavaをはじめとするミドルウェアや開発環境、APIもオープン

ビジネス継続を保証する圧倒的な優位性 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® プロセッサー

新たな世界を開くHPE NonStopサーバー、DB 連携Linux環境とのシームレスな融合によりお客様のビジネスを更に活性化します

53

Integrated

Environment

Cross-system communication

ミッションクリティカル

アプリケーション

NonStop Linux

Personalized real-time marketing

Artificial Intelligence

Mobile-to-mobile transactions

汎用

アプリケーション

ビッグデータ技術は「ビッグデータサイエンス」をどう変えるのか

54

by シバタアキラ, Ph.D. – データサイエンティストhttps://ashibata.com/2014/08/25/bigdata/

NonStop SQL の実装と同等

移行ツール

SQL Ways

SQLWaysは、異なるデータベース間でDDL/ストアドプロシジャー/SQLアプリケーションの自動変換を行うデータベース移行支援ツールです。市場で利用されている主なデータベースに幅広く対応し、異なるデータベースへの移行プロジェクトのリスク低減とコスト削減に貢献します。

56

Informix Neoview SAP HANA

SQLWays

ビジネスロジック(ストアドプロシ

ジャー)変換

データベースアプリケーション

変換 データ移⾏

アプリケーション⾔語変換DDL変換

SQL/MX

SQL Waysマルチベンダ対応の高機能データベース移行支援ツール

– Ispirer社のSQLWaysは、複数の異なるデータベース間で、SQL文変換とデータ移行を容易にするWindows上で稼働するツール

– GUIによる利用と、コマンドでのバッチ利用が可能

– Stored ProcedureのJavaへの変換機能をあわせて提供

57

テーブル定義

データ

他データベース

SQL Ways

既存DBに接続し情報を取り込み

テーブル生成

スクリプト

CSVロードデータ

&スクリプト

NonStop SQL移行用ファイルを自動生成

他DB方言のあるSQL文

既存アプリケーション

ANSI SQL99準拠

SQL文

SQL文を自動変換

SQL Ways

SQLWays Wizard ―オンライン変換ツール SQLWays Studio ―対話型変換ツール

58

変換元コード(Oracle PL/SQL)

変換後コード(SQL Server T-SQL)

アンケートにご協力ください

Thank you!

後藤宏プリセールス統括本部ソリューションセンターソリューション技術部

Tel: 090-7906-4517Mail: [email protected]日本ヒューレット・パッカード

株式会社〒136-8711東京都江東区大島2-2-1