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が推奨する方法と別途実装が必要な方法に分けて見ていく予定だ。