Skill Note

平凡なエンジニアがメモ代わりにプログラミング, インフラ, ネットワークを書き綴るブログ

Oracle 11g XEへのデータ移行方法を検討してみる

   

Oracleのデータ移行時は移行元と移行先の文字コードに注意する必要があります。

Windows環境のOracleでは「JA16SJIS」や「JA16SJISTILDE」が標準の文字コードであり、Oracle 11g Express Edition(XE)では「AL32UTF8」が標準の文字コードです。

文字コードの違いは、sjisが1文字あたり1~2バイトで扱い、UTFは1文字あたり1~3バイトで扱います。
1文字あたりのバイト数が異なる為、文字列型(VARCHAR, VARCHA2)のデータを移行する場合にバイト数オーバーでエラーになる場合があります。

ここでは文字コードが「JA16SJISTILDE」のDBから「AL32UTF8」のXEへデータを移行すると想定した場合の移行方法を記載します。

案1 文字コードを変更する

移行元と移行先の文字コードを同じにしてデータ移行を行います。

Oracle 11g XEで文字コードを変更する場合は、1サーバ1インスタンスの制約がある為、データベースを再作成する必要があり、再作成時に文字コードを「JA16SJISTILDE」に指定します。

案2 定義を変更する

文字型を扱う単位をバイト数から文字数に変更してデータ移行を行います。

文字型の項目をVARCHAR2→NVARCHAR2に定義を変更してデータ移行を行います。
移行元で定義変更が難しい場合は、先に表定義のみインポートして定義変更後にデータを移行します。

1.表定義のエクスポート

2.表定義のインポート

3.表定義の変更
VARCHAR2の項目をNVARCHAR2に変更する

4.データのエクスポート

5.データのインポート

または、Oracleパラメータ「NLS_LENGTH_SEMANTICS」を変更してデータ移行を行います。
 icon-check-square-o パラメータを設定後にテーブルを作成する必要があります。テーブルをインポートして作成した場合は設定は反映されません。

Google AdSense PC

Google AdSense PC

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

  関連記事

oracle
[Oracle]トリガーの実行順序を設定する方法

FOLLOWS句を使用して実行順序を設定する 1つの表に対して同レベル(タイミング)のトリガーを複数作成することはできますが、実行順序は保証されていません。 実 …

db
[Database]データベースのバージョン/エディションを確認する方法

OracleとSQLServerのバージョン/エディションを確認 Oracle

SQLServ …

oracle
Oracle12cでユーザを作成する方法

SQLコマンドを使用したユーザ作成 Oracle12cからマルチテナント・アーキテクチャが採用されており、以前までの手順ではユーザが作成できません。 ここではP …

oracle
[Oracle]ジョブをスケジューリングして定期実行する方法

DBMS_SCHEDULERパッケージを使用したジョブスケジューリング Oracleでジョブを定期実行するには、DBMS_SCHEDULERパッケージやDBMS …

sqlserer
[SQL Server]クロス集計の方法

PIVOTを使ってクロス集計する SQL ServerでExcelのピボットテーブルのようなクロス集計をするには、PIVOT関係演算子を使って集計することができ …

oracle
[Oracle]端数処理、丸めの方法

ORACLEで数値の端数処理、数値丸めをする 数値を四捨五入する場合は、ROUND関数数値を切り捨てる場合は、TRUNC関数各関数の第2引数の値で、小数部、また …

sqlserer
[SQL Server]データを期間別に集計する

SQL Serverで集計表を出力 日付をDATETIME型で管理している場合、CONVERT関数、DATEPART関数を使って、日、週、月、年別の集計結果を出 …

oracle
[Oracle]CSALTERを使用してOracle Expressのキャラクタセットを変更する

Oracle Expressでは標準のキャラクタセットとしてAL32UTF8が設定されます。キャラクタセットを意識しないでデータベースの移行やデータベース間のデ …

sqlserer
[SQL Server]再帰SQLで集計する

WITH(共通テーブル式)を使って集計する WITH句とは 共通テーブル式 (CTE) は、単一の SELECT、INSERT、UPDATE、DELETE、CR …

sqlserer
[SQLServer]形式指定で日付を取得する方法

SQLServerで形式を指定して日付を取得する 日付形式を指定するために、CONVERT関数、または、FORMAT関数を使用する。CONVERT関数とFORM …