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.

20180216 sapporo techbar_db_migration

624 views

Published on

2018/2/16開催のSapporoTechBarにて、データベースマイグレーションツールについて講演いただきました。

Published in: Technology
  • Be the first to comment

  • Be the first to like this

20180216 sapporo techbar_db_migration

  1. 1. データベースマイグレーション について 藤井 元雄
  2. 2. はじめに この資料は個人の見解に基づくものであり、 所属する組織の公式の見解ではありませんので ご了承ください。 1
  3. 3. 自己紹介 名前 :藤井 元雄 現在 :大阪在住。インフラエンジニアとして客先常駐し、 Windows,Linux,Unixなどのサーバー構築をしています 過去 :富士通、IBMの運用・保守・開発 オープン系のシステム開発 パッケージソフトのプリセールス・ヘルプデスク 客先常駐でインフラエンジニアとして構築・保守・ 製品検証その他・・・・ 2
  4. 4. アジェンダ  データベースマイグレーションツール  SQLの動作の違い 3
  5. 5. データベースマイグレーションツール 4
  6. 6. データベース・マイグレーションとは  データベースの定義やデータをDBの新バージョンや別のDB 製品に移行する  移行先データベースに適合するようにミドルウェアやアプリ ケーション、ツール等の変更を行う 5
  7. 7. データベース・マイグレーションツー ルとは  データベースのオブジェクト(テーブル、ファンクション等)、および データを移行先DBMSに合わせて変換して移行するためのツールです。  SQL Server、Oracleについては以下のツールが無償提供されています。  その他 6 対象 ツール名 開発元 SQLServerへ移行 SQL Server Migration Assistant(SSMA) Microsoft Oracleへ移行 SQL Developer Oracle 対象 ツール名 開発元 My SQLへ移行 MySQL Workbench Oracle, MySQL Community
  8. 8. OracleからSQL Serverへの マイグレーション 7
  9. 9. SQL Server Migration Assistant  SSMAはマイクロソフトが無償で提供している、他のDBからSQL Serverへマイグレーショ ンを行うツールです。  以下のステップに分けてマイグレーションできます  移行性評価(レポートの作成)  スキーママイグレーション  データマイグレーション  SQL Serverにないファンクションは、SSMA独自のファンクションで代替することができま す。(ssma_oracle.ファンクション名 の関数)  移行元のデータベースによりに、インストールするモジュールが異なります。 (Oracle用、DB2用、MS-Access用など) 8
  10. 10. 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のみ 9
  11. 11. SSMA for Oracle の構成例 10 Oracle DataBase SSMA for Oracle Oracle Net Client SQL Server SSMA ExtentionPack for Oracle Oracle Data Provider 同居可能 移行元DB ②移行先DB①SSMA
  12. 12. SSMA for Oracle の動作環境 11  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 用どちらでも可
  13. 13. SSMA for Oracleのマイグレーション 対象  対象 表、索引、ビュー、 プロシージャ、ファンクション トリガー、シーケンス、シノニム 等のデータベースオブジェクト 表のデータ  対象外 ユーザー、ロール(セキュリティ) データベース、データベースファイル 12
  14. 14. SSMAの入手  マイクロソフトのダウンロードセンターから入手できます。 ユーザー登録は不要です。  SSMA for OracleとSSMA for Oracle Extention Pack の2つを同時にダ ウンロードできます。 13 Downloadをクリックするとファイル選択画面が 表示されるので、すべてチェックします。
  15. 15. インストール手順①  ①SSMA  SSMA for Oracle.7.6.0.msi を実行してインストールします →インストーラーの設定に従います インストール完了後、デスクトップに右のアイコンが作成されます  Oracle NET Client をインストールします。 →インストーラーの指示に従ってインストールします。 ※Oracle NET Clientは USのページからのみダウンロードできます。 (日本語のDBダウンロードページで 「See All」をクリックする とUSのページに移動します) 14
  16. 16. インストール手順②-1  ②移行先DB  SQL Serverをインストールします(インスタンス作成)。  SSMA for Oracle Extension Pack.7.6.0.msi を実行します。  途中、以下のOracle Data Providerのダウンロード画面に誘導するボタンが 表示されます。別途入手できますので、無視しても構いません。 15
  17. 17. インストール手順②-2  SSMA用データベース作成のため、移行先インスタンスの接続情報を入力しま す。  接続ユーザーには、sysadmin権限が必要です。 16 接続先インスタンス選択 接続パラメータ入力 パスワード(Windows認証のみ)
  18. 18. インストール手順②-3  データベース作成の確認をされますので、Nextクリックで確定します。  インストールが完了すると、上記で接続したインスタンスに、2つのデータ ベースが作成されます: ssmatesterdb → マイグレーションテスト用DB sysdb → SSMAの追加ファンクション等のスキーマ 17
  19. 19. インストール手順②-3  sqmcmd、SSMSで以下のSQLを実行し、インスタンスでCLR (.NET Frameworkのランタイム)を使用可能にします。  Oracle Data Providerをインストールする →インストーラー版とXCOPY版がありますので、付属のドキュメントを 参考にインストールします 18 sp_configure ‘clr enabled’, 1 GO RECONFIGURE GO XCOPY版は以下をコマンドプロンプトで実行します。 > cd /d (インストールファイル展開フォルダ) > install_odpm.bat (インストール先フォルダ) [ x86 | x64 | both ]
  20. 20. SQL Server(マイグレーション先) の準備  SQL Serverでマイグレーション先のデータベースを作成します。 →移行元のデータベース名と違っても問題ありません。 ※既存のインスタンス、データベースでも使用可能  TCP/IPで接続できるよう設定してください。 19
  21. 21. SSMAの起動  デスクトップのSSMAのアイコンから起動するか、 スタートメニューからSSMAを起動します。 20
  22. 22. SSMAの画面 21 メニュー Oracle オブジェクト のエリア (移行元) SQL Server オブジェクト のエリア (移行先) メッセージ エリア (起動時は未表示)
  23. 23. マイグレーションの手順 ①プロジェクトの作成(開く) ②Oracle接続 ③マイグレーションレポート作成 ④SQL Server接続 ⑤スキーマ変換 ⑥データマイグレーション 22 ① ② ③④ ⑤ 大きな流れとしては、画面上部のメニューを左から順番にたどっていきます。 ⑥
  24. 24. プロジェクト作成①  マイグレーションを行うためには、まずプロジェクトを作成します。  プロジェクト名  プロジェクトファイル保存先  マイグレーションターゲットのSQL Serverバージョンを選択します。 23
  25. 25. プロジェクトの作成②  プロジェクト作成後、プロジェクトの設定します。(いつでも可能です)  「Tools」-「ProjectSettings」で画面を表示します。  設定可能なもの  全般(General)  コンバート方法(Convert)  マイグレーション(Migration)  Oracleシステムオブジェクト(Loading System Object)  データの同期(Synchronization)  GUI(GUI)  データタイプのマッピング(Type Mapping) 24
  26. 26. ProjectSettingsについて①  コンバート方法(Convert)では、以下のような設定ができます。 例以外にも様々な設定ができます。  25 大項目 各項目 ビルトイン関数 SUBSTR, CONVERT等いくつかの関数の変換方法 変換メッセージの生成 変換情報の生成有無。デーフォルトはErrorとWarningのみ オブジェクトの変換 外部キーのNULL、subtype,シノニムの変換 レコードの変換 SELECT結果の変数への置き換え RETURNNING句の変換 RETTURNING句を変換するステートメントの設定 ROWID列の生成 表にROWID列を追加するか。デフォルトはトリガーのある表のみ追加 シーケンスの変換 SQL Serverの機能、SSMAの機能、表のいずれを使用するか ステートメントの変換 MERGE文、DEFAULTキーワード等の変換 その他 スキーマの移行先(データベース内のスキーマor スキーマのDB作成)
  27. 27. ProjectSettingsについて②  マイグレーション(Migration)では、移行時の動作の設定ができます。 マイグレーションする場所(クライアント or Server) マイグレーションの処理単位、トリガーやテーブルロック等の動作 等 26
  28. 28. ProjectSettingsについて③  Oracleシステムオブジェクト(Loading System Object) マイグレーションするOracleのシステムオブジェクトを選択できます。 これより、ssma_oracle.~のプロシージャにコンバートされます。 27
  29. 29. ProjectSettingsについて④  データタイプのマッピング テーブルや関数で使用するデータタイプの変換ルールを設定できます。 追加、削除などもできます。 28
  30. 30. Oracle接続  Oracleを接続します。下記のいずれかのモードを選択します。  Provider : Oracle Client / OLEDB / ODBC  Mode : Standard mode /TNSNAMES Connect / Connect String  接続に必要な情報を入力し、「Connect」をクリックします。  Oracle接続に成功すると、SSMAにOracleのスキーマ情報が保存されます。 29
  31. 31. レポート作成①  スキーママイグレーションのレポートを作成します。  マイグレーションのツールでの変換結果を評価します。  レポートを作成するには、レポート作成対象オブジェクトをチェックした 後、「Schemas」 または 「Syanonyms」を選択後、 「Create Report」をクリックします。 30
  32. 32. レポート作成②  レポートが完成すると、Webブラウザでレポートが表示されます。  レポートはプロジェクトファイルのフォルダに「report¥report(作成日時)」フォルダが作成されます。  レポートはフォルダ全体をコピーして他のPCで確認できます。 トップページ : report¥report(作成日時)¥mainindex.html 31
  33. 33. レポート作成③  レポートで確認できるもの  マイグレーション対象数  エラー、警告の数  エラー、警告の割合  マイグレーションしたプロシージャ、パッケージ、ファンクション (変換前、後の比較) 32
  34. 34. SQL Server接続  SQL Serverに接続します。  SQL Serverに接続する前に、SQL Server Agentサービスを起動する必要 があります。 33
  35. 35. スキーマ変換①  マイグレーション先のSQL Serverのデータベースをチェックします。  ¥マイグレーションするOracleのスキーマを選択し、「Convert Schema」をクリックます。 ※この時点では、まだSQL Serverへマイグレーションされていません。 34
  36. 36. スキーマ変換②  マイグレートが完了すると、SQL Server側にマイグレート後のSQLが表示 されるようになります。  エラーになったものや、別の方法で移行したい場合は、この時点でSQLの 修正ができます。 35 別の画面に切り替える際、 保存ダイアログが表示されます。
  37. 37. スキーマ変換②  SQL Serverのマイグレーション先のスキーマを選択し、 右クリックメニュー「Synchronize with Database」をクリックします。 36
  38. 38. スキーマ変換③  マイグレーションさせるオブジェクト画面が表示されるので、変換対象を 選択し、「OK」をクリックします。 37 マイグレーション先 SSMAのデータ 双方向同期 同期しない マイグレーション先に同期 SSMAに同期 Action
  39. 39. 注意事項  SSMAで使用したデータタイプ、関数、および.NETのアセンブリは、 コンバートのタイミングで初めて移行先に格納されます。 ※一部は、SSMA Extention for Oracleで導入  ※注意 SQL Server 2017 の初期設定ではアセンブリのコンバート時にエラーになるため、 以下を設定してアセンブリの追加を許可します。 スキーマ変換④ 38 sp_configure ‘show advanced option’, 1 GO RECONFIGURE GO sp_configure ‘clr strict security’, 0 GO
  40. 40. データマイグレーション①  Oracleのマイグレーション対象テーブルを選択し、「Migrate Data」を クリックします。  Oracle、SQL Serverへの接続要求がされるので接続します。  文字コードの変換は、マイグレーション先のSQL Serverにインストールさ れたOracle Data Providerに任されます。 39
  41. 41. データマイグレーション②  マイグレーションが完了すると、結果が表示されれるので「Close」で終 了します。  「Save Report」クリックで結果をCSVファイルに保存できます。 40
  42. 42. マイグレーション結果  マイグレーションしたテーブルのほかに、SSMA用のテーブル、ビューが 作成されます。 41
  43. 43. (参考)モジュール入手元 42  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
  44. 44. SQL ServerからOracleへの マイグレーション 43
  45. 45. SQL Developer  SQL Developerは、Oracle が提供する無償のGUIのデータベース管理 ツールです。  Oracle Databaseに同梱されていますが、別途入手可能です。  以下のステップに分けてマイグレーションできます  移行性評価(レポートの作成)  スキーママイグレーション  データマイグレーション 44
  46. 46. SQL Developerの構成例 45 SQL Server SQL Developer JKD8 jtds Oracle Database 同居可能 移行元DB 移行先DB①SQL Developer
  47. 47. SQL Developer の動作環境 46  SQL Developer 17.2 Linux版 の動作環境は以下の通り  RPMでのインストールになります。 対象 OS ソフトウェア 備考 ①SQL Developer Linux SQL Developer GUI環境が必要です。 JDK8 Jtds オープンソースのjdbc ※MicrosoftのJDBCは使用できません (参考)検証環境 Oracle Linux 7.3(64bit) ベース構成 : サーバー 追加アドオン: 開発ツール、互換性ライブラリ
  48. 48. SQL Developerの対応DB  移行元  SQL Server 7.0, 2000, 2005  MS-Access  Teradata  MySQL  DB2  Sybase ASE  Infomix  移行先  Oracle Database ~ 12c 47
  49. 49. SQL Developerの入手  Oracleのサイトから入手できます。  ユーザー登録は不要です。  ライセンスに同意後、 任意のソフトをダウンロードします。 48
  50. 50. インストール手順①  ① SQL Developer  JDK8をインストールします。  SQL Developer をインストールします。 → /opt/sqldeveloper にインストールされます。  SQL Developerの設定ファイルを編集します。 49 # 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
  51. 51. Oracle Database (マイグレーション先) の準備①  Oracle Databaseでマイグレーション先のデータベースを作成します。 →移行元のデータベース名と違っても問題ありません。  jtdsのJDBCドライバファイル(jtds1.3.1.jar)を任意のディレクトリにコ ピーします。 50
  52. 52. Oracle Database (マイグレーション先) の準備②  マイグレーション情報を保存するリポジトリにするユーザーを作成します。 このユーザーには以下のロール、権限を付与します。  ロール CONNECT WITH ADMIN OPTION, RESOURCE WITH ADMIN OPTION  権限 ALTER ANY ROLE, ALTER ANY SEQUENCE, ALTER ANY TABLE, ALTER TABLESPACE, ALTER ANY TRIGGER, COMMENT ANY TABLE, CREATE ANY SEQUENCE, CREATE ANY TABLE, CREATE ANY TRIGGER, CREATE VIEW WITH ADMIN OPTION, CREATE MATERIALIZED VIEW WITH ADMIN OPTION, CREATE PUBLIC SYNONYM WITH ADMIN OPTION, CREATE ROLE, CREATE USER, DROP ANY SEQUENCE, DROP ANY TABLE, DROP ANY TRIGGER, DROP USER, DROP ANY ROLE, GRANT ANY ROLE, INSERT ANY TABLE, SELECT ANY TABLE, UPDATE ANY TABLE 51
  53. 53. SQL Developerの起動  GUIが使用できる環境で、以下のシェルを実行します。 52 $ /opt/sqldeveloper/sqldeveloper.sh
  54. 54. SQL Developerの画面 53
  55. 55. マイグレーションの手順  SQL Server接続  移行オプション設定  ウィザードでのマイグレーション 54
  56. 56.  メニューの「ツール」ー「プリファレンス」で画面を表示します。  画面左のツリーメニューの「データベース」ー「サードパーティJDBCドライバ」 を選択します。  「エントリの追加」をクリックし、jtdsのドライバファイル(jtds-1.3.1.jar)を選択 します。  「OK」で画面を閉じます。 SQL Server接続① 55
  57. 57. SQL Server接続②  「新規追加」をクリックします。 56
  58. 58. SQL Server接続③  SQL Serverのタブを選択します。  接続名、接続に必要な情報を入力して「接続」をクリックします。 ※データベースの設定が必須です。  接続に成功すると、SQL DeveloperにSQL Serverのオブジェクトツリーが表示されま す。 57
  59. 59. 移行オプションの設定①  「ツール」-「プリファレンス」-ツリーアイテム「移行」で選択します。 移行対象オブジェクトのほか、12cへの対応を行うか選択します。  Teradata → エクスポートの最小、最大数  データ移行オプション → NULLデータの扱い、データ形式等  トランスレータ → 移行元のデータ形式、変数などの形式等  識別子オプション → 移行元の識別子の付加  生成オプション  移行スクリプト作成の作成単位  移行時の付加情報  移行対象オブジェクト 58
  60. 60. ウィザードでのマイグレーション①  SQL Serverのマイグレーション対象を右クリックし、「Oracleへ移行」 をクリックします。 59
  61. 61. ウィザードでのマイグレーション②  移行ウィザード画面が起動します。「次」をクリックします。 60
  62. 62. ウィザードでのマイグレーション③  移行の情報を保存するリポジトリDBを選択し、「次」をクリックします。  接続情報が未作成の場合は、「新しい接続」をクリックして追加します。 61 「新しい接続」で、接続情報を入力する
  63. 63. ウィザードでのマイグレーション④  プロジェクト移行エンティティ名、保存ディレクトリを選択し、「次」を クリックします。 62
  64. 64. ウィザードでのマイグレーション⑤  移行元のDBを選択して「次」をクリックします。 63
  65. 65. ウィザードでのマイグレーション⑥  移行対象のデータベースを選択し、「次」をクリックします。 64
  66. 66. ウィザードでのマイグレーション⑦  データ形式の変換オプションを登録し、「次」へを選択します。 65
  67. 67. ウィザードでのマイグレーション⑧  移行対象のオブジェクトを選択し、「次」をクリックします。 66
  68. 68. ウィザードでのマイグレーション⑨  移行先のDB接続先を選択し、「次」を選択します。 接続ユーザーは、SYSTEMまたはDBA権限があるユーザーにしまs。 67
  69. 69. ウィザードでのマイグレーション⑩  データの移動に使用する接続情報を選択し、「次」をクリックします。 68
  70. 70. ウィザードでのマイグレーション⑪  変換内容を確認し、問題なければ「終了」をクリックします。 69
  71. 71. ウィザードでのマイグレーション⑫  完了後、移行のツリーが表示されます。実行日付をクリックすると結果の 確認ができます。 70
  72. 72. オブジェクトのコピー①  SQL Serverから表を単体でコピーできます。  対象の表を右クリック、「Oracleへのコピー」をクリックします。 71
  73. 73. オブジェクトのコピー②  コピーするOracle接続先を選択し、コピーのオプションを設定後に 「OK」をクリックします。  事前にマイグレーション先のデータベースに接続する必要があります。 72
  74. 74. オブジェクトのコピー③  コピー結果のログが表示されるので確認します。 73
  75. 75. (参考)モジュール入手元  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  jTDS https://sourceforge.net/projects/jtds/ 74
  76. 76. SQLの動作の違いについて 75
  77. 77. SQL の動作の違いについて  マイグレーションツールでテーブルやデータ、プロシージャ、ファンク ションなどの移行ができても、SQLでのデータの扱い方が違うなどのため、 実行結果が異なってしまう場合があります。 ここでは、データの扱い方が違うために、結果が異なってしまう例をいく つかご紹介します。 76
  78. 78. 演算の動作の違い①  SQL Serverでは整数同士の結果は小数点以下を切り捨てた整数を返します。 Oracleは結果によって整数または少数を返します。 SQL Server Oracle 77 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
  79. 79. 演算の動作の違い②  演算の動作による影響  整数同士の割り算している箇所  日時計算 → 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 78
  80. 80. 演算の動作の違い③  対応例  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) 79
  81. 81. NULLの扱い①  SQL Server では、長さが0の空文字と NULLは明確に区別されますが、 Oracleでは長さが0の空文字とNULLと区別されないため、条件判定を 行った時の動作、出力結果が異なります。 例)SELECT * FROM tbl1 WHERE col1 is null → Oracle NULL と空文字を出力 SQL Server NULLのみを出力 80 ※Oracleでは将来この処理方法を変更する可能性についてマニュアルで示唆しています。 そのため、今からNULLと空文字を別として扱うことを考慮しておくとよいかと思います。 →Oracle® Database SQL言語リファレンス 12c リリース2 (12.2) https://docs.oracle.com/cd/E82638_01/SQLRF/Nulls.htm#GUID-B0BA4751-9D88-426A-84AD-BCDBD5584071
  82. 82. NULLの扱い②-1  NULLの並び順は、Oracleと他のDBでは異なります。  NULLの出力順序を合わせるには、SQLで制御する必要がありますが、DBごと に対応方法が異なります。  OracleではSQLの記述でNULLを最初、または最後に持っていくことができま す。  NULLを最初に: ORDER BY col1 [ASC|DESC] NULLS FIRST  NULLを最後に: ORDER BY col1 [ASC|DESC] NULLS LAST 81 Oracle SQL Server 昇順 最後 最初 降順 最初 最後
  83. 83. NULLの扱い②-2  SQL Serverの場合、NULLの並びを制御する機能がないため、条件式を 使って制御する必要があります。 例) SELECT col1, col2 FROM 表 ORDER BY CASE WHEN col1 IS NULL THEN 1 ELSE 0 END, col1 82 col1がNULLなら最後にする場合。 最初の場合以下のようにする。 CASE WHEN col1 IS NULL THEN 0 ELSE 1 END col1 でソート (NULLはソート済み)
  84. 84. 検索結果の出力行数制限  行の検索結果を制限を行う場合、以下の違いがあります。  SQL Server SELECT TOP 10 [PERCENT] [WITH TIES] * from tbl1 order by 列  Oracle 11g 以前 ※ROWNUMを駆使して対応する必要があり select rownum, * from tbl1 where rownum <= 10 order by 列  Oracle12c ※SQLで実装 SELECT * from tbl1 FETCH FIRST 10 [PERCENT] ROWS [ONLY | WITH TIES] order by 列 83
  85. 85. 照合順序の違い①  SQL ServerとOracleでは文字の照合順序が異なるため、文字列のソート結果や、検索 の結果が変わります。  SQL Server での対応  データベース作成時、照合順序を Japanese_bin2 にする  表作成時に、列の照合順序を設定する  ソートのみなら以下のように対応可能 SELECT * FROM 表 ORDER BY 列 COLLATE JAPANESE_BIN2 84 DB 照合順序 概要 SQL Server Japanese_CI_AS 日本語、大文字小文字区別なし、アクセント区別 Oracle NLS_LANGUAGE=JAPANESE NLS_SORT =BINARY 日本語、バイナリ(文字コードの句点識別あり) CREATE TABLE TBL1 ( COL1 varchar(100) COLLATE JAPANESE_BIN2 , …
  86. 86. 照合順序の違い②  Oracleでの対応 (並び替えの場合)  SQL個別でORDER BYでソートを設定する。また、索引を作成する。 SELECT ~ ORDER BY NLSSORT(列, ’NLS_SORT=JAPANESE_M_CI’); CREATE INDEX IDX on 表 ( NLSSORT(列, ’NLS_SORT=JAPANESE_M_CI’));  セッションで設定 ALTER SESSION SET NLS_SORT=‘JAPANESE_M_CI’; SELECT ~ ORDER BY 列  12cR2以降のバージョンのみ 表の列に指定 ※ 85 CREATE TABLE TBL1 ( COL1 varchar2(100) COLLATE JAPANESE_M_CI , … ※この方法を行った際、初期パラメータmax_string_size=extended に変更しなければエラーになりました。 STARTUP UPGRADE ALTER SYSTEM SET MAX_STRING_SIZE=EXTENDED SCOPE=BOTH; @?/rdbms/admin/utl32k.sql (インスタンス再起動)
  87. 87. 照合順序の違い③ (条件式(比較)での対応)  NLS_SORT設定を行っただけでは、WHERE条件式や関数では文字判定が BINARYになったままとなり、抽出結果に反映されません。そのため以下の設 定で対応する必要があります。 ALTER SESSION SET NLS_COMP=LINGUISTIC; ALTER SESSION SET NLS_SORT=JAPANESE_M_CI; 86 (参考)Oracle® Databaseグローバリゼーション・サポート・ガイド 12cリリース2 (12.2) 5 言語ソートと照合 https://docs.oracle.com/cd/E82638_01/NLSPG/linguistic-sorting-and-matching.htm#GUID-B0971B89-63EF-409B-B14A-459B8211E764

×