Oracle-Zeichensatzkonvertierung (4): 4.Konfigurieren der Testumgebung
Als Fortsetzung des vorherigen Artikels werden wir uns die Konfiguration der Testumgebung für die Oracle-Zeichensatzkonvertierung ansehen. Sie können die Konfiguration der Oracle-Serverumgebung (drei Instanzen, DB-Link-Erstellung), die Testtabellenerstellung und das Testdatenerstellungsskript überprüfen. Diese Testumgebung wird später bei der Zeichensatzkonvertierung verwendet.
Dies ist eine Fortsetzung des vorherigen Artikels.
Oracle-Zeichensatzkonvertierung (3): 3. Konfiguration der Client-Umgebung (2)
4. Konfigurieren Sie die Testumgebung für die Oracle-Zeichensatzkonvertierung
4.1. Konfiguration der Oracle DB-Serverumgebung
Gehen Sie davon aus, dass die Testumgebung für die Oracle-Zeichensatzkonvertierung auf einem lokalen PC (Windows) wie folgt konfiguriert ist.
Auf einem PC wurden drei Oracle DB-Instanzen installiert, und jede Konfiguration ist wie folgt.
Umfeld | SID | Server-Zeichensatz | Oracle-Version | Testbenutzer (Schema) |
US7ASCII Aktueller DB | ORAUS7 | US7ASCII | 11.2.0.1.0 | BEIN |
KO16MSWIN949 Aktueller DB | ORAMSWIN949 | KO16MSWIN949 | 11.2.0.1.0 | BEIN |
AL32UTF8 Ziel-DB | ORAUTF | AL32UTF8 | 11.2.0.1.0 | BEIN |
DB Link ist wie folgt konfiguriert.
SID generieren | Ziel-SID | Verbindungsbenutzer (Schema) | Zweck |
ORAMSWIN949 | ORAUS7 | BEIN | US7ASCII-Zugriffs- und Konvertierungstest auf KO16MSWIN949 |
ORAUTF | ORAUS7 | BEIN | Zugriffs- und Konvertierungstest von AL32UTF8 zu US7ASCII |
Das DB-Link-Erstellungsskript lautet wie folgt.
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. Testtabellenkonfiguration
Das Datenmodell zum Testen ist wie folgt.
(Zu Testzwecken wurden alle zusätzlichen Details wie Normalisierung und Bezeichnerkonfiguration weggelassen. US7ASCII und MSWIN949 wenden dieselbe Länge an, und AL32UTF8 erhöht die Länge.)
Das obige Datenmodell ist eine Struktur, die den von der Seoul Metropolitan Government veröffentlichten <Informationen zur Anzahl der Personen, die in jede U-Bahn-Linie und Station in Seoul ein- und aussteigen>, zwei Elemente (Referenzbeschreibung, Referenzbild) zum Testen hinzufügt.
Quelle: https://data.seoul.go.kr/dataList/OA-12252/S/1/datasetView.do
Die DDL, die das Schema des obigen Testdatenmodells erstellt, lautet wie folgt.
-- 한글 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 );
In AL32UTF8 benötigt ein koreanisches Zeichen 3 Bytes, daher wurde die Länge der beiden Spalten ausreichend vergrößert.
Datendateien im Excel-Format können über den unten stehenden Github-Pfad heruntergeladen werden.
* Excel-Datendatei: https://github.com/DAToolset/Oracle-CharacterSet-Conversion/raw/main/Anzahl der Passagiere pro U-Bahn-Station_Seoul Open Data_2013.xlsx
DML zum Eingeben von Daten in die Tabelle kann vom folgenden Github-Pfad heruntergeladen werden.
Ein Teil der obigen SQL-Datei ist ein Auszug und wird unten eingefügt.
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'); ...
Bisher haben wir uns die Konfiguration der Testumgebung und das Konfigurationsskript für die Konvertierung von Oracle-Zeichensätzen angesehen. Als nächstes werden wir uns verschiedene Möglichkeiten ansehen, den Zeichensatz in dieser Testumgebung zu konvertieren. Wir werden uns die von Oracle empfohlenen Methoden und Methoden ansehen, die eine separate Implementierung erfordern.