25
Oracle -> SQL Serverシステム移行の勘所 ~Oracle開発経験者が戸惑うポイント~ 株式会社インサイトテクノロジー コンサルティング事業部 中村 範夫 Copyright © 201Insight Technology, Inc. All Rights Reserved.

[B24] Oracle から SQL Server システム移行の勘所 by Norio Nakamura

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: [B24] Oracle から SQL Server システム移行の勘所 by Norio Nakamura

Oracle -> SQL Serverシステム移行の勘所~Oracle開発経験者が戸惑うポイント~

株式会社インサイトテクノロジーコンサルティング事業部

中村 範夫

Copyright © 2014 Insight Technology, Inc. All Rights Reserved.

Page 2: [B24] Oracle から SQL Server システム移行の勘所 by Norio Nakamura

2

自己紹介

Copyright © 2014 Insight Technology, Inc. All Rights Reserved.

• 中村範夫(なかむらのりお)

• (株)インサイトテクノロジー コンサルティング事業部所属

• 大阪で10年以上システム開発に従事した後に、現職に

• よく扱うDBは、Oracle、SQL Server、MySQL

• 最近はOracleのシステムをSQL Serverで再構築という案件

に従事することが多いです

Page 3: [B24] Oracle から SQL Server システム移行の勘所 by Norio Nakamura

3

Agenda

Copyright © 2014 Insight Technology, Inc. All Rights Reserved.

1. システム移行の概要

2. Oracle開発経験者が意識して欲しい違い

3. よくある開発トラブルシューティング

4. その他開発でよく聞かれること

5. まとめ

Page 4: [B24] Oracle から SQL Server システム移行の勘所 by Norio Nakamura

4

システム移行概要

Copyright © 2014 Insight Technology, Inc. All Rights Reserved.

1. データベースオブジェクトの移行(SSMA)

2. データの移行(SSMA)

3. アプリケーションの移行

• アプリケーションのビジネスロジック部分を自動変換(SSMA)

• SSMAで変換できない部分を手動で変換

• 一般的なシステム移行の流れ(Webアプリケーションの場合)

• SSMAが大半を担う

Page 5: [B24] Oracle から SQL Server システム移行の勘所 by Norio Nakamura

5

システム移行概要

Copyright © 2014 Insight Technology, Inc. All Rights Reserved.

• SQL Server Migration Assistant(SSMA)とは?SSMA は、Oracle データベースから SQL Server へのアプリケーション移行の自動化に役立つツール セットです。SSMA を利用することで、データベースの変換を迅速、簡単、および正確に行うことが可能になり、SQL Server への移行に関する時間、コスト、およびリスクが大幅に軽減されます。

• SSMAを利用するメリットSSMA を利用することで、下記の項目のようなデータベースの移行に必要な作業のほとんどを自動化することが可能です。

・データベースのアセスメント

・スキーマとデータの移行

・ビジネス ロジックの変換

・移行の確認

http://msdn.microsoft.com/ja-jp/sqlserver/gg639007.aspx より

• どれだけ自動で移行でき、どれだけ手動での移行が必要かを、見積もるためにも、まずはSSMAで移行検証を

• 一般的なシステムではおよそ80%~90%以上が自動で移行可能で、手動で変換が必要な大半はPL/SQLのストアドプログラム

Page 6: [B24] Oracle から SQL Server システム移行の勘所 by Norio Nakamura

6

システム移行概要

Copyright © 2014 Insight Technology, Inc. All Rights Reserved.

• PL/SQLの手動変換をいかに効率的に行うかが鍵

• SSMAで変換できなかった部分をT-SQLで手動で変換するよりもPL/SQL側で変換できる形に修正する方が効率的なことが多々ある

【参考】Oracle から SQL Server 2008 への移行ガイドhttp://download.microsoft.com/download/3/4/7/34710CC0-5B7D-499B-B39A-50ED31F6A500/MigrateOracletoSQLServer2008.docx

Page 7: [B24] Oracle から SQL Server システム移行の勘所 by Norio Nakamura

7

Oracle開発経験者が意識して欲しい違い

Copyright © 2014 Insight Technology, Inc. All Rights Reserved.

• デフォルトのトランザクションの分離レベルはどちらも、

「Read committed」だが Oracle には読み取り一貫性がある

• PL/SQLとT-SQLの違い

– PL/SQLは手続き型言語としての歴史が古く完成度が高い

– PL/SQLはカーソルの構文、コレクション型が豊富

– T-SQLは例外処理として 2012以降 THROWが使用可能となった

• その他インデックスが使用できるSQLの条件等はだいたい同じ

• Oracleのパラレルクエリと同様SQL Serverの並列クエリも強力

Page 8: [B24] Oracle から SQL Server システム移行の勘所 by Norio Nakamura

8

よくある開発トラブルシューティング(1)

Copyright © 2014 Insight Technology, Inc. All Rights Reserved.

• [問題]デッドロックが多発する

– オンライン画面(Web)のシステムテストでデッドロックが多発する

• [原因]テーブルスキャンによるロック待ちにより

デッドロックが発生

• [対策]条件列に対してインデックスを付与、又は

「Read Committed Snapshot」分離レベルを採用

Page 9: [B24] Oracle から SQL Server システム移行の勘所 by Norio Nakamura

9

よくある開発トラブルシューティング(1)

Copyright © 2014 Insight Technology, Inc. All Rights Reserved.

• [解説]t1テーブル

a b

1 AA

2 BB

Oracle(PL/SQL)でよくあるソースコード

SELECT * FROM t1 WHERE a = 2 FOR UPDATE

UPDATE t1 SET b = ‘BBB' WHERE a = 2

SQL Server用に変換

SELECT * FROM t1 WITH (ROWLOCK, UPDLOCK) WHERE a = 2

UPDATE t1 SET b = ‘BBB' WHERE a = 2

【ポイント】更新条件のa列には主キー、インデックスなし

Page 10: [B24] Oracle から SQL Server システム移行の勘所 by Norio Nakamura

10

よくある開発トラブルシューティング(1)

Copyright © 2014 Insight Technology, Inc. All Rights Reserved.

• [解説]

トランザクション [1] a b トランザクション [2]

SELECT * FROM t1 WITH (ROWLOCK, UPDLOCK)WHERE a = 2

1 AASELECT * FROM t1 WITH (ROWLOCK, UPDLOCK)WHERE a = 1

2 BB

UPDATE t1 SET b = 'BBB' WHERE a = 2 UPDATE t1 SET b = 'AAA' WHERE a = 1

1)先頭から探す2)1件目を発見し、排他ロックを獲得3)他にもないか探す4)2行目で [1] の排他ロックにより待ちが発生

1)先頭から探す2)1行目で2の排他ロックを発見

↓デッドロック検知!!

① ②

Page 11: [B24] Oracle から SQL Server システム移行の勘所 by Norio Nakamura

11

よくある開発トラブルシューティング(1)

Copyright © 2014 Insight Technology, Inc. All Rights Reserved.

DEMO:

テーブルスキャンによるロック待ちによりデッドロックが発生

Page 12: [B24] Oracle から SQL Server システム移行の勘所 by Norio Nakamura

12

よくある開発トラブルシューティング(2)

Copyright © 2014 Insight Technology, Inc. All Rights Reserved.

• [問題]オンライン画面(Java Webアプリ)が遅い

– 自由検索画面の検索処理がOracleに比べてかなり遅い

• [原因]Prepared Statement の文字列パラメータが Unicode

で送信されたため VARCHAR 列に対するインデックスが使えない

sendStringParametersAsUnicode = false

• [対策]接続時に以下の設定を追記

Page 13: [B24] Oracle から SQL Server システム移行の勘所 by Norio Nakamura

13

よくある開発トラブルシューティング(2)

Copyright © 2014 Insight Technology, Inc. All Rights Reserved.

DEMO:

暗黙の型変換によりインデックスが使えない例

Page 14: [B24] Oracle から SQL Server システム移行の勘所 by Norio Nakamura

14

よくある開発トラブルシューティング(3)

Copyright © 2014 Insight Technology, Inc. All Rights Reserved.

• [問題]バッチ処理の性能が思った程でない

• [対策]定数取得の処理をアプリケーション側で行うことで

SQLが並列クエリになるよう修正

• [原因]SQL で定数取得のユーザー定義関数を使用しているため

並列クエリで処理されていない

Page 15: [B24] Oracle から SQL Server システム移行の勘所 by Norio Nakamura

15

よくある開発トラブルシューティング(3)

Copyright © 2014 Insight Technology, Inc. All Rights Reserved.

• [解説]

並列クエリ処理(SQL Serverオンラインブックより)http://technet.microsoft.com/ja-jp/library/ms178065(v=sql.105).aspx

Page 16: [B24] Oracle から SQL Server システム移行の勘所 by Norio Nakamura

16

よくある開発トラブルシューティング(3)

Copyright © 2014 Insight Technology, Inc. All Rights Reserved.

• [解説]EMP表を750万件に増幅し検証

並列クエリにならないパターン

SELECT COUNT(*)

FROM EMP2

WHERE JOB = dbo.USER_FUNC('SALESMAN')

並列クエリになるパターン

SELECT COUNT(*)

FROM EMP2

WHERE JOB = 'SALESMAN'

組み込み関数(GETDATE()やCONVERT等)は問題なく並列クエリになる

Page 17: [B24] Oracle から SQL Server システム移行の勘所 by Norio Nakamura

17

よくある開発トラブルシューティング(3)

Copyright © 2014 Insight Technology, Inc. All Rights Reserved.

DEMO:

並列クエリになるパターンとならないパターン例

Page 18: [B24] Oracle から SQL Server システム移行の勘所 by Norio Nakamura

18

その他よく聞かれること (1)

Copyright © 2014 Insight Technology, Inc. All Rights Reserved.

• ファイル入出力はどうすればいいの?

– OracleにはSQL*Loader、UTL_FILEパッケージの機能がある

• SQL Server にも bcpユーティリティ、BULK INSERT、OPENROWSETによる「INSERT~SELECT」がある

– ファイル入力では上記いずれの方法でも利用できる

– ファイル出力ではbcp

– OPENROWSETは非常に高性能で利用範囲が広い

Page 19: [B24] Oracle から SQL Server システム移行の勘所 by Norio Nakamura

19

その他よく聞かれること(2)

Copyright © 2014 Insight Technology, Inc. All Rights Reserved.

• bcpの出力が入力に比べて遅いけど?(CSVファイル)

大規模テーブルをCSVファイルに出力する場合、bcp ユーティリティでは、カンマ付与をSQLで記述する queryout 方式の方が高速

bcp Test.dbo.EMP out EMP.csv -c -t, -T

bcp "SELECT empno + ',' + ename + ',' ・・・FROM Test.dbo.EMP" queryout EMP.csv -c -T

Page 20: [B24] Oracle から SQL Server システム移行の勘所 by Norio Nakamura

20

その他よく聞かれること(2)

Copyright © 2014 Insight Technology, Inc. All Rights Reserved.

• 2,000万件 約10GBのテーブルに対して処理時間を比較

0

20

40

60

80

100

120

table out 方式 queryout方式

処理時間を相対比較

(table out方式を100とした場合)

Page 21: [B24] Oracle から SQL Server システム移行の勘所 by Norio Nakamura

21

その他よく聞かれること(3)

Copyright © 2014 Insight Technology, Inc. All Rights Reserved.

• Oracleの階層問合せ(connect by)は使えないの?

• 標準SQLの共通テーブル式(CTE)を使った再帰クエリが使える

Page 22: [B24] Oracle から SQL Server システム移行の勘所 by Norio Nakamura

22

その他よく聞かれること(3)

Copyright © 2014 Insight Technology, Inc. All Rights Reserved.

• 共通テーブル式サンプル(emp表を階層問合せする有名なやつ)

Page 23: [B24] Oracle から SQL Server システム移行の勘所 by Norio Nakamura

23

その他よく聞かれること(4)

Copyright © 2014 Insight Technology, Inc. All Rights Reserved.

• とりあえずサーバーの設定はどうすればいいの?

• 最低限やっておくべきSQL Serverの設定

– メモリの適切な割当てとページロック設定

– 並列処理の最大限度(MAXDOP)の設定

-> OLTPではCPUコア数の1/4 (目安)

– tempdb の ファイル分割 -> CPUコア数分 (目安)

【参考】熊澤さんの検証資料http://download.microsoft.com/download/F/1/0/F10BC023-9396-4D67-BAC9-7C43AE954BF4/Intel_WP_Xeon7500_SQL2008R2.pdf

Page 24: [B24] Oracle から SQL Server システム移行の勘所 by Norio Nakamura

24

まとめ

Copyright © 2014 Insight Technology, Inc. All Rights Reserved.

• SSMAを利用してシステム移行コストを見積もり

– システム移行コストは PL/SQL の変換が鍵

– PL/SQL側を一括修正することで変換コスト削減に貢献

• アーキテクチャの違いを理解した上での方式設計が重要

– トランザクションの分離レベル・ロック制御

– JDBC接続では [sendStringParametersAsUnicode] の設定に注意

– SQL Serverの並列クエリは強力なので上手に利用

Page 25: [B24] Oracle から SQL Server システム移行の勘所 by Norio Nakamura

25Copyright © 2014 Insight Technology, Inc. All Rights Reserved.

無断転載を禁ず

この文書はあくまでも参考資料であり、掲載されている情報は予告なしに変更されることがあります。株式会社インサイトテクノロジーは本書の内容に関していかなる保証もしません。また、本書の内容に関連したいかなる損害についても責任を負いかねます。本書で使用している製品やサービス名の名称は、各社の商標または登録商標です。