Oracle Character Set変換(4):4.テスト環境の構成
前の記事に続いて、Oracle Character Set変換テスト環境の構成について説明します。 Oracleサーバー環境の構成(3つのインスタンス、DB Linkの生成)、テストテーブルの作成、テストデータの生成スクリプトを確認できます。このテスト環境は、以降、キャラクタセット変換プロセスで使用されます。
前の記事で続く内容だ。
Oracle Character Set変換(3): 3. Client環境の構成(2)
4. Oracle Character Set変換テスト環境の構成
4.1。 Oracle DBサーバー環境の構成
Oracle Character Set変換用のテスト環境をLocal PC(Windows)に次のように構成したとします。
1つのPCに3つのOracle DB Instanceをインストールし、それぞれの構成は次のとおりです。
| 環境 | SID | Server Character Set | Oracle Version | テストユーザー(スキーマ) |
| US7ASCII現行DB | ORAUS7 | US7ASCII | 11.2.0.1.0 | LEG |
| KO16MSWIN949現行DB | ORAMSWIN949 | KO16MSWIN949 | 11.2.0.1.0 | LEG |
| AL32UTF8目標DB | ORAUTF | AL32UTF8 | 11.2.0.1.0 | LEG |
DB Linkは次のように構成した。
| 生成SID | Target SID | 接続 User (Schema) | 用途 |
| ORAMSWIN949 | ORAUS7 | LEG | KO16MSWIN949でUS7ASCIIアクセスと変換テスト |
| ORAUTF | ORAUS7 | LEG | AL32UTF8でUS7ASCIIアクセスと変換テスト |
DB Link生成スクリプトは次のとおりです。
CREATE DATABASE LINK DL_US7
CONNECT TO leg IDENTIFIED BY leg
USING '(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ORAUS7)
)
)'
;
4.2。テストテーブルの設定
テストのためのデータモデルは次のとおりです。
(テスト目的のため、正規化、識別子構成などの追加の内容はすべて省略し、US7ASCIIとMSWIN949は同じ長さを適用し、AL32UTF8は長さを増加させます)
上記データモデルは、ソウル市で公開した「ソウル市地下鉄号選別駅別乗降車人員情報」Data setにテストのための2つの項目(参照説明、参照画像)を追加した構造である。
ソース: https://data.seoul.go.kr/dataList/OA-12252/S/1/datasetView.do
上記のテストデータモデルのSchemaを生成するDDLは次のとおりです。
-- 한글 2 byte 체계 스키마 생성(US7ASCII, MSWIN949)
CREATE TABLE SUB_MON_STAT
(
USE_MON VARCHAR2(8),
LINE_NUM VARCHAR2(14), -- AL32UTF8: 50
SUB_STA_ID VARCHAR2(4),
SUB_STA_NM VARCHAR2(20), -- AL32UTF8: 100
RIDE_PASGR_NUM NUMBER(10),
ALIGHT_PASGR_NUM NUMBER(10),
WORK_DT VARCHAR2(8),
COMMT VARCHAR2(4000),
REF_DES CLOB,
REF_IMG BLOB
);
-- 한글 3 byte 체계 스키마 생성(AL32UTF8)
CREATE TABLE SUB_MON_STAT
(
USE_MON VARCHAR2(8),
LINE_NUM VARCHAR2(50),
SUB_STA_ID VARCHAR2(4),
SUB_STA_NM VARCHAR2(100),
RIDE_PASGR_NUM NUMBER(10),
ALIGHT_PASGR_NUM NUMBER(10),
WORK_DT VARCHAR2(8),
COMMT VARCHAR2(4000),
REF_DES CLOB,
REF_IMG BLOB
);
AL32UTF8では、ハングル1文字に3バイトが必要なので、両方の列の長さを十分に長く増加させてくれた。
Excel形式のデータファイルは、以下のgithubパスで受け取ることができます。
* Excelデータファイル: https://github.com/DAToolset/Oracle-CharacterSet-Conversion/raw/main/地下鉄駅別乗車人員_ソウル市オープンデータ_2013.xlsx
テーブルにデータを入力するDMLは、以下のgithubパスで受け取ることができます。
* DML: https://github.com/DAToolset/Oracle-CharacterSet-Conversion/raw/main/地下鉄駅別乗車人数_ソウル市オープンデータ_2013.sql
上記のsqlファイルを一部抜粋して下に貼り付けておく。
INSERT INTO SUB_MON_STAT(USE_MON, LINE_NUM, SUB_STA_ID, SUB_STA_NM, RIDE_PASGR_NUM, ALIGHT_PASGR_NUM, WORK_DT, COMMT, REF_DES, REF_IMG)
VALUES('201301', '1호선', '0150', '서울역', 2199181, 1855268, '20130723', RPAD('서울역', 3000, '서울역'), RPAD('서울역', 3000, '서울역'), UTL_RAW.CAST_TO_RAW('12345'));
INSERT INTO SUB_MON_STAT(USE_MON, LINE_NUM, SUB_STA_ID, SUB_STA_NM, RIDE_PASGR_NUM, ALIGHT_PASGR_NUM, WORK_DT)
VALUES('201301', '1호선', '0151', '시청', 737005, 726892, '20130723');
INSERT INTO SUB_MON_STAT(USE_MON, LINE_NUM, SUB_STA_ID, SUB_STA_NM, RIDE_PASGR_NUM, ALIGHT_PASGR_NUM, WORK_DT)
VALUES('201301', '1호선', '0152', '종각', 1542710, 1446464, '20130723');
INSERT INTO SUB_MON_STAT(USE_MON, LINE_NUM, SUB_STA_ID, SUB_STA_NM, RIDE_PASGR_NUM, ALIGHT_PASGR_NUM, WORK_DT)
VALUES('201301', '1호선', '0153', '종로3가', 1159253, 1126995, '20130723');
INSERT INTO SUB_MON_STAT(USE_MON, LINE_NUM, SUB_STA_ID, SUB_STA_NM, RIDE_PASGR_NUM, ALIGHT_PASGR_NUM, WORK_DT)
VALUES('201301', '1호선', '0154', '종로5가', 816307, 820769, '20130723');
INSERT INTO SUB_MON_STAT(USE_MON, LINE_NUM, SUB_STA_ID, SUB_STA_NM, RIDE_PASGR_NUM, ALIGHT_PASGR_NUM, WORK_DT)
VALUES('201301', '1호선', '0155', '동대문', 446527, 512163, '20130723');
INSERT INTO SUB_MON_STAT(USE_MON, LINE_NUM, SUB_STA_ID, SUB_STA_NM, RIDE_PASGR_NUM, ALIGHT_PASGR_NUM, WORK_DT)
VALUES('201301', '1호선', '0156', '신설동', 496150, 484583, '20130723');
INSERT INTO SUB_MON_STAT(USE_MON, LINE_NUM, SUB_STA_ID, SUB_STA_NM, RIDE_PASGR_NUM, ALIGHT_PASGR_NUM, WORK_DT)
VALUES('201301', '1호선', '0157', '제기동', 587740, 601913, '20130723');
INSERT INTO SUB_MON_STAT(USE_MON, LINE_NUM, SUB_STA_ID, SUB_STA_NM, RIDE_PASGR_NUM, ALIGHT_PASGR_NUM, WORK_DT)
VALUES('201301', '1호선', '0158', '청량리(지하)', 966341, 985741, '20130723');
INSERT INTO SUB_MON_STAT(USE_MON, LINE_NUM, SUB_STA_ID, SUB_STA_NM, RIDE_PASGR_NUM, ALIGHT_PASGR_NUM, WORK_DT)
VALUES('201301', '1호선', '0159', '동묘앞', 240864, 252523, '20130723');
INSERT INTO SUB_MON_STAT(USE_MON, LINE_NUM, SUB_STA_ID, SUB_STA_NM, RIDE_PASGR_NUM, ALIGHT_PASGR_NUM, WORK_DT)
VALUES('201301', '2호선', '0202', '을지로입구', 1610744, 1607133, '20130723');
INSERT INTO SUB_MON_STAT(USE_MON, LINE_NUM, SUB_STA_ID, SUB_STA_NM, RIDE_PASGR_NUM, ALIGHT_PASGR_NUM, WORK_DT)
VALUES('201301', '2호선', '0203', '을지로3가', 539622, 559866, '20130723');
INSERT INTO SUB_MON_STAT(USE_MON, LINE_NUM, SUB_STA_ID, SUB_STA_NM, RIDE_PASGR_NUM, ALIGHT_PASGR_NUM, WORK_DT)
VALUES('201301', '2호선', '0204', '을지로4가', 364217, 365994, '20130723');
INSERT INTO SUB_MON_STAT(USE_MON, LINE_NUM, SUB_STA_ID, SUB_STA_NM, RIDE_PASGR_NUM, ALIGHT_PASGR_NUM, WORK_DT)
VALUES('201301', '2호선', '0205', '동대문역사문화공원', 435358, 508405, '20130723');
INSERT INTO SUB_MON_STAT(USE_MON, LINE_NUM, SUB_STA_ID, SUB_STA_NM, RIDE_PASGR_NUM, ALIGHT_PASGR_NUM, WORK_DT)
VALUES('201301', '2호선', '0206', '신당', 407110, 438543, '20130723');
INSERT INTO SUB_MON_STAT(USE_MON, LINE_NUM, SUB_STA_ID, SUB_STA_NM, RIDE_PASGR_NUM, ALIGHT_PASGR_NUM, WORK_DT)
VALUES('201301', '2호선', '0207', '상왕십리', 288629, 274519, '20130723');
INSERT INTO SUB_MON_STAT(USE_MON, LINE_NUM, SUB_STA_ID, SUB_STA_NM, RIDE_PASGR_NUM, ALIGHT_PASGR_NUM, WORK_DT)
VALUES('201301', '2호선', '0208', '왕십리', 583444, 498091, '20130723');
INSERT INTO SUB_MON_STAT(USE_MON, LINE_NUM, SUB_STA_ID, SUB_STA_NM, RIDE_PASGR_NUM, ALIGHT_PASGR_NUM, WORK_DT)
VALUES('201301', '2호선', '0209', '한양대', 262492, 286399, '20130723');
INSERT INTO SUB_MON_STAT(USE_MON, LINE_NUM, SUB_STA_ID, SUB_STA_NM, RIDE_PASGR_NUM, ALIGHT_PASGR_NUM, WORK_DT)
VALUES('201301', '2호선', '0210', '뚝섬', 402631, 420166, '20130723');
...
これまで、Oracle Character Set変換用のテスト環境構成と構成スクリプトを見てきました。次に、このテスト環境でCharacter Setを変換するさまざまな方法を見てみましょう。 Oracleが推奨する方法と別途実装が必要な方法に分けて見ていく予定だ。







