[20171019 三木会] データベース・マイグレーションについて by...

77
データベースマイグレーション について 藤井 元雄

Upload: insight-technology-inc

Post on 21-Jan-2018

244 views

Category:

Technology


4 download

TRANSCRIPT

Page 1: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

データベースマイグレーションについて藤井 元雄

Page 2: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

はじめに

この資料は個人の見解に基づくものであり、所属する組織の公式の見解ではありませんのでご了承ください。

1

Page 3: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

自己紹介

名前 :藤井 元雄

現在 :株式会社 シー・エス・イー

客先常駐でサーバーの構築をしています

過去 :金融機関で富士通、IBMの運用・保守・開発

オープン系のシステム開発

パッケージソフトのプリセールス・ヘルプデスク

客先常駐でインフラエンジニアとして構築・保守・開発標準策定、製品検証その他・・・・

2

Page 4: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

アジェンダ

データベースマイグレーションツール

SQLの動作の違い

3

Page 5: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

データベースマイグレーションツール

4

Page 6: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

データベース・マイグレーションとは

データベースの定義やデータをDBの新バージョンや別のDB

製品に移行する

移行先データベースに適合するようにミドルウェアやアプリケーションの変更等を行う

5

Page 7: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

データベース・マイグレーションツールとは

データベースのオブジェクト(テーブル、ファンクション等)、およびデータを移行先DBMSに合わせて変換して移行するためのツールです。

SQL Server、Oracleについては以下のツールが無償提供されています。

6

対象 ツール名 開発元

SQLServerへ移行 SQL Server Migration Assistant(SSMA) Microsoft

Oracleへ移行 SQL Developer Oracle

Page 8: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

SQL Server Migration Assistant

SSMAはマイクロソフトが無償で提供している、他のDBからSQL Serverへのマイグレーションツールです。

以下のステップに分けてマイグレーションできます

移行性評価(レポートの作成)

スキーママイグレーション

データマイグレーション

SQL Serverにないファンクションは、SSMA独自のファンクションで代替することができます。

移行元のデータベース毎に、インストールするモジュールが異なります。

7

Page 9: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

SSMAの対応DB

移行元

Oracle 9i-12c

MS-Access

MySQL

DB2

Sybase ASE

移行先

SQL Server 2008 – 2016 / 2017 Preview ( Windows / Linux)

Azure SQL Database

Azure SQL Data Warehouse ※Oracleのみ

8

Page 10: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

SSMA for Oracle の構成例 9

Oracle DataBase SSMA for Oracle

Oracle Net ClientSQL Server

SSMA ExtentionPack for Oracle

Oracle Data Provider

同居可能

移行元DB ②移行先DB①SSMA

Page 11: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

SSMA for Oracle の動作環境 10

SSMA 7.6 (2017/10/19 最新)の動作環境は以下の通り

対象 OS ソフトウェア 備考

①SSMA 64 Bit Windows SSMA for Oracle .Net Framework 4.5.2以上が必要

Oracle Net Client 移行元Oracleのバージョン用以降のもの

②移行先 Windows SSMA for Oracle Extention

Pack

.Net Framework 4.5.2以上が必要

SQL Server 任意のバージョン

Oracle Data Provider 移行元Oracleのバージョン用以降のもの.NET / oledb用どちらでも可

Page 12: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

SSMA for Oracleのマイグレーション対象

索引

ビュー

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

データタイプ

プロシージャ

ファンクション

トリガー

データ

ユーザー、ロール、データベース、データベースファイル等は対象外

11

Page 13: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

SSMAの入手

マイクロソフトのダウンロードセンターから入手できます。ユーザー登録は不要です。

SSMA for OracleとSSMA for Oracle Extention Pack の2つを同時にダウンロードできます。

12

Downloadをクリックするとファイル選択画面が表示されるので、すべてチェックします。

Page 14: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

インストール手順①

①SSMA

SSMA for Oracle.7.6.0.msi を実行してインストールします→インストーラーの設定に従いますインストール完了後、デスクトップに右のアイコンが作成されます

Oracle Net Clientをインストールする→インストーラー版とXCOPY版がありますので、付属のドキュメントを参考にインストールします

13

XCOPY版は以下をコマンドプロンプトで実行します。> cd /d (インストールファイル展開フォルダ)

> install_odpm.bat [ x86 | x64 | both ] (インストール先フォルダ)

Page 15: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

インストール手順②-1

②移行先DB

SQL Serverをインストールします(インスタンス作成)。

SSMA for Oracle Extension Pack.7.6.0.msi を実行します。

途中、以下のOracle Data Providerのダウンロード画面に誘導するボタンが表示されます。別途入手できますので、無視しても構いません。

14

Page 16: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

インストール手順②-2

SSMA用データベース作成のため、移行先インスタンスの接続情報を入力します。

接続ユーザーには、sysadmin権限が必要です。

15

接続先インスタンス選択 接続パラメータ入力パスワード(Windows認証のみ)

Page 17: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

インストール手順②-3

データベース作成の確認をされますので、Nextクリックで確定します。

インストールが完了すると、上記で接続したインスタンスに、2つのデータベースが作成されます:

ssmatesterdb → マイグレーションテスト用DB sysdb → SSMAの追加ファンクション等のスキーマ

16

Page 18: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

インストール手順②-3

sqmcmd、SSMSで以下のSQLを実行し、インスタンスでCLRを使用可能にします(SSMAのアセンブリを動作可能にします)。

Oracle Data Providerをインストールします。→インストーラーの指示に従ってインストールします。

17

sp_configure ‘clr enabled’, 1

GO

RECONFIGURE

GO

Page 19: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

SQL Server(マイグレーション先)

の準備

SQL Serverでマイグレーション先のデータベースを作成します。→移行元のデータベース名と違っても問題ありません。

TCP/IPで接続できるよう設定してください。

18

Page 20: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

SSMAの起動

デスクトップのSSMAのアイコンから起動するか、スタートメニューからSSMAを起動します。

19

Page 21: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

SSMAの画面 20

メニュー

Oracleオブジェクトのエリア(移行元)

SQL Serverオブジェクトのエリア(移行先)

メッセージエリア(起動時は未表示)

Page 22: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

マイグレーションの手順

①プロジェクトの作成(開く)

②Oracle接続

③マイグレーションレポート作成

④SQL Server接続

⑤スキーママイグレーション

⑥データマイグレーション

21

① ② ③④ ⑤

大きな流れとしては、画面上部のメニューを左から順番にたどっていきます。(例外あり)

Page 23: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

プロジェクト作成①

マイグレーションを行うためには、まずプロジェクトを作成します。

プロジェクト名

プロジェクトファイル保存先

マイグレーションターゲットのSQL Serverバージョンを選択します。

22

Page 24: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

プロジェクトの作成②

プロジェクト作成後のオプションを設定します。(いつでも可能です)

「Tools」-「ProjectSettings」でオプション画面を表示します。

設定可能なもの

プロジェクトの情報

一般設定

コンバート方法

マイグレーション時の動作

Oracleシステムオブジェクトのマイグレーション対象

データの同期

GUIの設定

データタイプの変換マッピング

23

Page 25: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

プロジェクトの作成③

コンバート方法で設定できるもの例

SSMAの独自関数を使用するかtrunc(日付型)、trim( 文字列, 除去する文字)など、SQL Serverが持っていない関数を、SSMAの拡張関数に置き換える

Order BYのNULLの扱いのエミュレーション

ROWID列のエミュレート(すべてのテーブルにROWID列を追加)

24

Page 26: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

Oracle接続

Oracleを接続します。下記のいずれかのモードを選択します。

Provider : Oracle Client / OLEDB / ODBC

Mode : Standard mode /TNSNAMES Connect / Connect String

接続に必要な情報を入力し、「Connect」をクリックします。

Oracle接続に成功すると、SSMAにOracleのスキーマ情報が保存されます。

25

Page 27: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

レポート作成①

スキーママイグレーションのレポートを作成します。

マイグレーションのツールでの変換結果を評価します。

レポートを作成するには、レポート作成対象オブジェクトをチェックした後、「Schemas」または「Syanonyms」を選択後、「Create Report」をクリックします。

26

Page 28: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

レポート作成②

レポートが完成すると、Webブラウザでレポートが表示されます。

レポートはプロジェクトファイルのフォルダに「report¥report(作成日時)」フォルダが作成されます。

レポートはフォルダ全体をコピーして他のPCで確認できます。トップページ : report¥report(作成日時)¥mainindex.html

27

Page 29: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

レポート作成③

レポートで確認できるもの

マイグレーション対象数

エラー、警告の数

エラー、警告の割合

マイグレーションしたプロシージャ、パッケージ、ファンクション(変換前、後の比較)

28

Page 30: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

SQL Server接続

SQL Serverに接続します。

SQL Serverに接続する前に、SQL Server Agentサービスを起動する必要があります。

29

Page 31: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

スキーママイグレーション①

マイグレーションするOracleのスキーマを選択し、「Convert

Schema」をクリックます。

※この時点では、まだSQL Serverへマイグレーションされていません。

30

Page 32: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

スキーママイグレーション③

SQL Serverのマイグレーション先のスキーマを選択し、右クリックメニュー「Synchronize with Database」をクリックします。

31

Page 33: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

スキーママイグレーション④

マイグレーションさせるオブジェクト画面が表示されるので、対象を選択し、「OK」をクリックします。

32

マイグレーション先 SSMAのデータ

双方向同期

同期しない

マイグレーション先に同期

SSMAに同期

Action

Page 34: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

スキーママイグレーション⑤

SSMA独自の拡張データタイプ、ファンクションなどはここで同期することで、初めてマイグレーション先のSQL Serverに保存されます。

33

Page 35: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

データマイグレーション①

Oracleのマイグレーション対象テーブルを選択し、「Migrate Data」をクリックします。

Oracle、SQL Serverへの接続要求がされるので接続します。

文字コードの変換は、マイグレーション先のSQL ServerにインストールされたOracle Data Providerに任されます。

34

Page 36: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

データマイグレーション②

マイグレーションが完了すると、結果が表示されれるので「Close」で終了します。

「Save Report」クリックで結果をCSVファイルに保存できます。

35

Page 37: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

マイグレーション結果

マイグレーションしたテーブルのほかに、SSMA用のテーブル、ビューが作成されます。

36

Page 38: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

マイグレーションツールの使い方(例)

事前調査として、マイグレーションの変換率、手動変換箇所、難易度等をレポートで確認する

自動変換可能なオブジェクト、データだけマイグレーションし、マイグレーション全体の負荷を軽減する

ファンクション、プロシージャのマイグレーション機能を利用し、SQLを他のDB用に変換した記述を確認する。(ファンクション1つだけでレポート作成可能なため)

37

Page 39: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

(参考)モジュール入手元 38

SSMA for Oracle / SSMA Extention Pack for Oracle

https://docs.microsoft.com/ja-jp/sql/ssma/sql-server-migration-assistant※上記はマニュアル。ダウンロードURLはここのリンクから辿ります。

Oracle Net Client

http://www.oracle.com/technetwork/database/enterprise-

edition/downloads/oracle12c-windows-3633015.html?ssSourceSiteId=otnjp

Oracle Data Provider(ODAC)

http://www.oracle.com/technetwork/jp/database/windows/downloads/inde

x-214820-ja.html

Page 40: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

SQL Developer

SQL Developerは、Oracleが提供する無償のGUIのデータベース管理ツールです。

Oracle Databaseに同梱されていますが、別途入手可能です。

以下のステップに分けてマイグレーションできます

移行性評価(レポートの作成)

スキーママイグレーション

データマイグレーション

39

Page 41: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

SQL Developerの構成例 40

SQL Server SQL Developer

JKD8

jtds

Oracle Database

同居可能

移行元DB 移行先DB①SQL Developer

Page 42: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

SQL Developer の動作環境 41

SQL Developer 17.2 Linux版(2017/10/19 最新)の動作環境は以下の通り

RPMでのインストールになります。

対象 OS ソフトウェア 備考

①SSMA Linux SSMA for Oracle GUI環境が必要です。

JDK8

Jtds オープンソースのjdbc

※MicrosoftのJDBCは使用できません

(参考)検証環境Oracle Linux 7.3(64bit)

ベース構成 : サーバー追加アドオン: 開発ツール、互換性ライブラリ

Page 43: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

SQL Developerの対応DB

移行元

SQL Server 7.0, 2000, 2005

MS-Access

Teradata

MySQL

DB2

Sybase ASE

Infomix

移行先

Oracle Database ~ 12c

42

Page 44: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

SQL Developerの入手

Oracleのサイトから入手できます。

ユーザー登録は不要です。

ライセンスに同意後、任意のソフトをダウンロードします。

43

Page 45: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

インストール手順①

① SQL Developer

JDK8をインストールします。

SQL Developerをインストールします。

→ /opt/sqldeveloper にインストールされます。

SQL Developerの設定ファイルを編集します。

44

# rpm – ivh jdk-8u144-linux-x64.rpm

# rpm -ivh 17.2.0.188.1159-1.noarch.rpm

設定ファイル名: ~/.sqldeveloper/4.2.0/product.conf

(以下の行を追加)SetJavaHome /usr/java/jdk1.8.0_144

Page 46: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

Oracle Database(マイグレーション先) の準備

Oracle Databaseでマイグレーション先のデータベースを作成します。→移行元のデータベース名と違っても問題ありません。

jtdsのJDBCドライバファイル(jtds1.3.1.jar)を任意のディレクトリにコピーします。

マイグレーション情報を保存するリポジトリにするスキーマを作成します(任意)。

→権限として:resource, create session, create viewが必要

45

Page 47: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

SQL Developerの起動

GUIが使用できる環境で、以下のシェルを実行します。

46

$ /opt/sqldeveloper/sqldeveloper.sh

Page 48: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

SQL Developerの画面 47

Page 49: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

マイグレーションの手順

SQL Server接続

移行オプション設定

ウィザードでのマイグレーション

48

Page 50: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

メニューの「ツール」ー「プリファレンス」で画面を表示します。

画面左のツリーメニューの「データベース」ー「サードパーティJDBCドライバ」を選択します。

「エントリの追加」をクリックし、jtdsのドライバファイル(jtds-1.3.1.jar)を選択します。

「OK」で画面を閉じます。

SQL Server接続① 49

Page 51: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

SQL Server接続②

「新規追加」をクリックします。

50

Page 52: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

SQL Server接続③

SQL Serverのタブを選択します。

接続名、接続に必要な情報を入力して「接続」をクリックします。※データベースの設定が必須です。

接続に成功すると、SQL DeveloperにSQL Serverのオブジェクトツリーが表示されます。

51

Page 53: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

移行オプションの設定①

「ツール」-「プリファレンス」-ツリーアイテム「移行」で選択します。移行対象オブジェクトのほか、12cへの対応を行うか選択します。

Teradata → エクスポートの最小、最大数

データ移行オプション → NULLデータの扱い、データ形式等

トランスレータ → 移行元のデータ形式、変数などの形式等

識別子オプション → 移行元の識別子の付加

生成オプション

移行スクリプト作成の作成単位

移行時の付加情報

移行対象オブジェクト

52

Page 54: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

ウィザードでのマイグレーション①

SQL Serverのマイグレーション対象を右クリックし、「Oracleへ移行」をクリックします。

53

Page 55: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

ウィザードでのマイグレーション②

移行ウィザード画面が起動します。「次」をクリックします。

54

Page 56: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

ウィザードでのマイグレーション③

移行の情報を保存するリポジトリDBを選択し、「次」をクリックします。

接続情報が未作成の場合は、「新しい接続」をクリックして追加します。

55

「新しい接続」で、接続情報を入力する

Page 57: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

ウィザードでのマイグレーション④

プロジェクト移行エンティティ名、保存ディレクトリを選択し、「次」をクリックします。

56

Page 58: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

ウィザードでのマイグレーション⑤

移行元のDBを選択して「次」をクリックします。

57

Page 59: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

ウィザードでのマイグレーション⑥

移行対象のデータベースを選択し、「次」をクリックします。

58

Page 60: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

ウィザードでのマイグレーション⑦

データ形式の変換オプションを登録し、「次」へを選択します。

59

Page 61: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

ウィザードでのマイグレーション⑧

移行対象のオブジェクトを選択し、「次」をクリックします。

60

Page 62: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

ウィザードでのマイグレーション⑨

移行先のDB接続先を選択し、「次」を選択します。接続ユーザーは、SYSTEMまたはDBA権限があるユーザーにしまs。

61

Page 63: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

ウィザードでのマイグレーション⑩

データの移動に使用する接続情報を選択し、「次」をクリックします。

62

Page 64: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

ウィザードでのマイグレーション⑪

変換内容を確認し、問題なければ「終了」をクリックします。

63

Page 65: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

ウィザードでのマイグレーション⑫

完了後、移行のツリーが表示されます。実行日付をクリックすると結果の確認ができます。

64

Page 66: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

オブジェクトのコピー①

SQL Serverから表を単体でコピーできます。

対象の表を右クリック、「Oracleへのコピー」をクリックします。

65

Page 67: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

オブジェクトのコピー②

コピーするOracle接続先を選択し、コピーのオプションを設定後に「OK」をクリックします。

事前にマイグレーション先のデータベースに接続する必要があります。

66

Page 68: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

オブジェクトのコピー③

コピー結果のログが表示されるので確認します。

67

Page 69: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

(参考)モジュール入手元

SQL Developer

http://www.oracle.com/technetwork/jp/developer-tools/sql-developer/downloads/index.html

JDK8

http://www.oracle.com/technetwork/java/javase/downloads/jdk8-

downloads-2133151.html

jTDShttps://sourceforge.net/projects/jtds/

68

Page 70: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

SQLの動作の違いについて

69

Page 71: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

演算の動作の違い①

SQL Serverでは整数同士の結果は小数点以下を切り捨てた整数を返します。

Oracleは結果によって整数または少数を返します。

SQL Server

Oracle

70

1> select 1/2, 2/2, -1/2

2> go

----------- ----------- -----------

0 1 0

SQL> select 1/2, 2/2, -1/2 from dual;

1/2 2/2 -1/2

---------- ---------- ----------

.5 1 -.5

Page 72: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

演算の動作の違い②

演算の動作による影響

整数同士の割り算している箇所

日時計算→ SQL Serverでは日の計算のみ反映されます。

例) 2017/01/01 00:00:00 に + 1 + 2/24 + 3/(24 *60) + 4/(24*60*60)

SQL Server → 2017/01/02 00:00:00

Oracle → 1027/01/02 02:03:04

71

Page 73: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

演算の動作の違い③

対応例

Oracle → SQL Server演算するどちらか一方の辺を少数付きの数字型することで小数点以下の計算が出来でます。ただし、答えが整数の場合でも答えが少数付きの数字になります。固定値の場合: 1/2 → 1/2.0

列の場合 : A/B → A/ cast (B as numeric)

SQL Server → Oracle計算結果をtruncで小数点以下を切り捨てます。固定値、列共通: 1/2 , A/B → trunc(1/2) , trunc(1/2)

72

Page 74: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

NULLの扱い①

SQL Server では、空文字’’ と NULLは明確に区別されますが、Oracleでは区別されないため、出力結果が異なります。

例)SELECT * FROM tbl1 WHERE col1 is null

→ Oracle NULLと空文字を出力SQL Server NULLのみを出力

73

Page 75: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

NULLの扱い②

NULL行を含む列でソートを行うと、SQL ServerとOracleでは出力順序が異なります。SQL Server → 最初に出力(最小値)Oracle → 最後に出力(最大値)

SQLの操作でNULLの出力順序を操作することもできます。SQL Sever : NULLを最後に出力

SELECT ~ FROM 表 ORDER BYCASE WHEN列 IS NULL THEN 1 ELSE 0 END, 列

Oracle : NULLを最初に出力SELECT ~ FROM表 ORDER BY 列 NULLS FIRST (NULLS LAST)

74

Page 76: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

検索結果の出力行数制限

行の検索結果を制限を行う場合、以下の違いがあります。

Oracle 11gselect rownum, * from tbl1 where rownum <= 10 order by 列

SQL ServerSELECT TOP 10 * from tbl1 order by 列

Oracle12cSELECT * from tbl1 FETCH FIRST 10 order by 列

75

Page 77: [20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏

照合順序の違い

SQL Serverはインスタンス作成時に言語の照合順序を設定します。

Oracleは基本的にはバイナリ順になります。照合順序を設定する際に、言語ソート機能により、照合順序を決めます。

例)

SQLで設定SELECT ~ ORDER BY NLSSORT(列, ’NLS_SORT=japanese’);

セッション全体で設定ALTER SESSION SET NLS_SORT=japanese;

SELECT ~ ORDER BY列

76