Conversión de juegos de caracteres de Oracle (4): 4.Configuración del entorno de prueba
Continuando con el artículo anterior, analizamos la configuración del entorno de prueba de conversión del juego de caracteres de Oracle. Puede verificar la configuración del entorno del servidor Oracle (tres instancias, creación de DB Link), creación de tablas de prueba y scripts de creación de datos de prueba. Este entorno de prueba se utiliza en el proceso de conversión de juegos de caracteres más adelante.
Esta es una continuación del artículo anterior.
Conversión de juego de caracteres de Oracle (3): 3. Configuración del entorno del cliente (2)
4. Configurar el entorno de prueba de conversión de juegos de caracteres de Oracle
4.1. Configuración del entorno del servidor Oracle DB
Se supone que el entorno de prueba para la conversión del juego de caracteres de Oracle está configurado de la siguiente manera en la PC local (Windows).
Se instalaron tres instancias de Oracle DB en una PC y la configuración de cada una es la siguiente.
Medioambiente | S.I.D. | Conjunto de caracteres del servidor | Versión de oráculo | Usuario de prueba (esquema) |
US7ASCII base de datos actual | ORAUS7 | US7ASCII | 11.2.0.1.0 | PIERNA |
KO16MSWIN949 Base de datos actual | ORAMSWIN949 | KO16MSWIN949 | 11.2.0.1.0 | PIERNA |
Base de datos de destino AL32UTF8 | ORAUTF | AL32UTF8 | 11.2.0.1.0 | PIERNA |
DB Link está configurado de la siguiente manera.
SID generado | SID objetivo | Usuario de conexión (esquema) | propósito |
ORAMSWIN949 | ORAUS7 | PIERNA | Prueba de acceso y conversión US7ASCII en KO16MSWIN949 |
ORAUTF | ORAUS7 | PIERNA | Prueba de conversión y acceso AL32UTF8 a US7ASCII |
El script de creación de DB Link es el siguiente.
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. configuración de la mesa de prueba
El modelo de datos para la prueba es el siguiente.
(Para fines de prueba, se omiten todos los detalles adicionales, como la normalización y la configuración del identificador. Se aplica la misma longitud a US7ASCII y MSWIN949, y se aumenta la longitud a AL32UTF8).
El modelo de datos anterior es una estructura en la que se agregan dos elementos (descripción de referencia, imagen de referencia) para la prueba al conjunto de datos de <Información sobre la cantidad de personas que suben y bajan por línea y estación de metro en Seúl> divulgado por Seúl Gobierno Metropolitano.
fuente: https://data.seoul.go.kr/dataList/OA-12252/S/1/datasetView.do
El DDL que crea el esquema del modelo de datos de prueba anterior es el siguiente.
-- 한글 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 );
En AL32UTF8, se requieren 3 bytes para 1 carácter coreano, por lo que la longitud de las dos columnas aumenta lo suficiente.
Los archivos de datos en formato Excel se pueden descargar desde la ruta de github a continuación.
* Archivo de datos de Excel: https://github.com/DAToolset/Oracle-CharacterSet-Conversion/raw/main/Número de pasajeros por estación de metro_Seoul Open Data_2013.xlsx
El DML para ingresar datos en la tabla se puede descargar desde la ruta de github a continuación.
Algunos extractos del archivo sql anterior se pegan a continuación.
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'); ...
Hasta ahora, hemos analizado la configuración del entorno de prueba y los scripts de configuración para la conversión del juego de caracteres de Oracle. A continuación, veremos diferentes formas de transformar el conjunto de caracteres en este entorno de prueba. Veremos el método recomendado por Oracle y el método que requiere una implementación separada.