Conversión de juego de caracteres de Oracle (7): 5.4. KO16MSWIN949 Entorno CSSCAN Resultado de ejecución
Examine el resultado de ejecución de CSSCAN del entorno KO16MSWIN949. Puede verificar la creación de esquemas, la creación de directorios, el archivo de resultados de ejecución de csscan scan.txt, scan.out, el contenido de scan.err y el propósito de csscan.
5.4. KO16MSWIN949 Entorno CSSCAN Resultado de ejecución
5.4.1. crear esquema
Ejecute el siguiente script en la instancia KO16MSWIN949 para crear un esquema para la ejecución de csscan.
-- MSWIN949 sqlplus sys/________@oramswin949 as sysdba @%ORACLE_HOME%\rdbms\admin\csminst.sql sqlplus sys/________@oramswin949 as sysdba ALTER USER CSMIG DEFAULT TABLESPACE USERS; EXIT
- Línea 3: Ejecute csminst.sql para crear objetos como el usuario csmig (esquema) y las tablas necesarias para la ejecución de csscan. En este momento, el tablespace predeterminado para el usuario csmig se designa como sistema.
- Línea 5: cambie el espacio de tabla predeterminado para el usuario csmig a usuarios. Puede cambiar a otro tablespace con suficiente espacio de almacenamiento que no sean usuarios.
5.4.2. crear directorio
Cree un directorio para guardar el resultado de la ejecución de csscan y muévase al directorio.
mkdir D:\Temp\csscan\MSWIN949 cd D:\Temp\csscan\MSWIN949
5.4.3. ejecutar csscan
Ejecute csscan con el siguiente comando en el símbolo del sistema de Windows.
csscan \"sys/________@oramswin949 as sysdba\" full=y tochar=AL32UTF8
Se especificaron dos parámetros.
- completo: especifique Y para escanear toda la base de datos
- Como referencia, puede designar el usuario de destino de exploración con el parámetro de usuario o especificar el destino de exploración en detalle con el parámetro de tabla o columna.
- tochar: especifique AL32UTF8, el conjunto de caracteres de destino que se convertirá (CHAR, VARCHAR2, CLOB, escaneo de tipo LONG)
- Como referencia, para escanear los tipos NCHAR, NVARCHAR2 y NCLOB, se debe especificar el parámetro tonchar.
5.4.4. Verifique la ejecución de csscan result-scan.txt (informe de resumen de resultados)
El contenido completo de scan.txt en el entorno de prueba KO16MSWIN949 es el siguiente.
Database Scan Summary Report Time Started : 2014-05-07 20:21:51 Time Completed: 2014-05-07 20:22:46 Process ID Time Started Time Completed ---------- -------------------- -------------------- 1 2014-05-07 20:22:04 2014-05-07 20:22:45 ---------- -------------------- -------------------- [Database Size] Tablespace Used Free Total Expansion ------------------------- --------------- --------------- --------------- --------------- SYSTEM 563.25M 136.75M 700.00M .00K SYSAUX 360.19M 239.81M 600.00M 2.00K UNDOTBS1 19.25M 465.75M 485.00M .00K TEMP .00K .00K .00K .00K USERS 1.81M 3.19M 5.00M 39.00K ------------------------- --------------- --------------- --------------- --------------- Total 944.50M 845.50M 1,790.00M 42.00K [Database Scan Parameters] Parameter Value ------------------------------ ------------------------------------------------ CSSCAN Version v2.1 Instance Name oramswin949 Database Version 11.2.0.1.0 Scan type Full database Scan CHAR data? YES Database character set KO16MSWIN949 FROMCHAR KO16MSWIN949 TOCHAR AL32UTF8 Scan NCHAR data? NO Array fetch buffer size 1024000 Number of processes 1 Capture convertible data? NO ------------------------------ ------------------------------------------------ [Scan Summary] All character type data in the data dictionary are convertible to the new character set Some character type application data are not convertible to the new character set [Data Dictionary Conversion Summary] Data Dictionary Tables: Datatype Changeless Convertible Truncation Lossy --------------------- ---------------- ---------------- ---------------- ---------------- VARCHAR2 2,566,115 36 0 0 CHAR 354 0 0 0 LONG 182,178 0 0 0 VARRAY 39,205 0 0 0 --------------------- ---------------- ---------------- ---------------- ---------------- Total 2,787,852 36 0 0 Total in percentage 99.999% 0.001% 0.000% 0.000% The data dictionary can not be safely migrated using the CSALTER script XML CSX Dictionary Tables: Datatype Changeless Convertible Truncation Lossy --------------------- ---------------- ---------------- ---------------- ---------------- VARCHAR2 493 0 0 0 CHAR 0 0 0 0 LONG 0 0 0 0 VARRAY 0 0 0 0 --------------------- ---------------- ---------------- ---------------- ---------------- Total 493 0 0 0 Total in percentage 100.000% 0.000% 0.000% 0.000% [Application Data Conversion Summary] Datatype Changeless Convertible Truncation Lossy --------------------- ---------------- ---------------- ---------------- ---------------- VARCHAR2 2,579,942 14,635 309 0 CHAR 0 0 0 0 LONG 0 0 0 0 VARRAY 0 0 0 0 --------------------- ---------------- ---------------- ---------------- ---------------- Total 2,579,942 14,635 309 0 Total in percentage 99.424% 0.564% 0.012% 0.000% [Distribution of Convertible, Truncated and Lossy Data by Table] Data Dictionary Tables: USER.TABLE Convertible Truncation Lossy -------------------------------------------------- ---------------- ---------------- ---------------- SYS.COM$ 11 0 0 SYS.ERROR$ 10 0 0 SYS.JOB$ 2 0 0 SYS.SCHEDULER$_JOB 8 0 0 SYS.SCHEDULER$_PROGRAM 5 0 0 -------------------------------------------------- ---------------- ---------------- ---------------- XML CSX Dictionary Tables: USER.TABLE Convertible Truncation Lossy -------------------------------------------------- ---------------- ---------------- ---------------- -------------------------------------------------- ---------------- ---------------- ---------------- Application Data: USER.TABLE Convertible Truncation Lossy -------------------------------------------------- ---------------- ---------------- ---------------- APEX_030200.WWV_FLOW_UPGRADE_PROGRESS 89 0 0 LEG.SUB_MON_STAT 14,544 309 0 LEG.Z_TEST 2 0 0 -------------------------------------------------- ---------------- ---------------- ---------------- [Distribution of Convertible, Truncated and Lossy Data by Column] Data Dictionary Tables: USER.TABLE|COLUMN Convertible Truncation Lossy -------------------------------------------------- ---------------- ---------------- ---------------- SYS.COM$|COMMENT$ 11 0 0 SYS.ERROR$|TEXT 10 0 0 SYS.JOB$|NLSENV 2 0 0 SYS.SCHEDULER$_JOB|NLS_ENV 8 0 0 SYS.SCHEDULER$_PROGRAM|NLS_ENV 5 0 0 -------------------------------------------------- ---------------- ---------------- ---------------- XML CSX Dictionary Tables: USER.TABLE|COLUMN Convertible Truncation Lossy -------------------------------------------------- ---------------- ---------------- ---------------- -------------------------------------------------- ---------------- ---------------- ---------------- Application Data: USER.TABLE|COLUMN Convertible Truncation Lossy -------------------------------------------------- ---------------- ---------------- ---------------- APEX_030200.WWV_FLOW_UPGRADE_PROGRESS|UPGRADE_ERR 89 0 0 LEG.SUB_MON_STAT|COMMT 0 1 0 LEG.SUB_MON_STAT|LINE_NUM 7,286 140 0 LEG.SUB_MON_STAT|SUB_STA_NM 7,258 168 0 LEG.Z_TEST|VAL 2 0 0 -------------------------------------------------- ---------------- ---------------- ---------------- [Indexes to be Rebuilt] USER.INDEX on USER.TABLE(COLUMN) ----------------------------------------------------------------------------------------- SYS.I_SCHEDULER_JOB4 on SYS.SCHEDULER$_JOB(SYS_NC00056$) SYS.I_SCHEDULER_JOB1 on SYS.SCHEDULER$_JOB(SYS_NC00055$) -----------------------------------------------------------------------------------------
Entre ellos, el contenido del "Resumen de conversión de datos de la aplicación" no son los datos del sistema Oracle, sino los datos creados por el usuario, escaneados por tipo.
[Application Data Conversion Summary] Datatype Changeless Convertible Truncation Lossy --------------------- ---------------- ---------------- ---------------- ---------------- VARCHAR2 2,579,942 14,635 309 0 CHAR 0 0 0 0 LONG 0 0 0 0 VARRAY 0 0 0 0 --------------------- ---------------- ---------------- ---------------- ---------------- Total 2,579,942 14,635 309 0 Total in percentage 99.424% 0.564% 0.012% 0.000%
La interpretación de lo anterior es la siguiente.
- Al cambiar a AL32UTF8 para el tipo VARCHAR2, 2 579 942 valores se pueden convertir sin cambio (Changeless), 14 635 valores son convertibles y 309 valores están truncados (Truncation) y perdidos/rotos (Lossy) No hay valor para que esto ocurre
- Los datos de otros tipos CHAR, LONG y VARRAY no están sujetos a conversión.
En lo anterior, la explicación de Changeless, Convertible, Truncation y Lossy se escribió en el artículo anterior y se marca nuevamente a continuación.
Conversión de juego de caracteres de Oracle (5) – 5.2. Cómo usar CSSCAN
Estado | Descripción |
Invariable | Los datos siguen siendo los mismos en el nuevo conjunto de caracteres – No hay cambio de datos al convertir el juego de caracteres |
Convertible | Los datos se pueden convertir con éxito al nuevo juego de caracteres – Los datos se pueden cambiar al convertir el juego de caracteres |
Truncamiento | Los datos se truncarán si se lleva a cabo la conversión – Datos truncados al convertir el juego de caracteres |
con pérdida | Los datos de los personajes se perderán si se realiza la conversión – Pérdida de datos (roto) al convertir el conjunto de caracteres |
"Distribución de datos convertibles, truncados y con pérdida por tabla" y "Distribución de datos convertibles, truncados y con pérdida por columna" son resultados de exploración para cada tabla y columna.
A continuación se muestran algunos extractos del archivo.
[Distribution of Convertible, Truncated and Lossy Data by Table] ... Application Data: USER.TABLE Convertible Truncation Lossy -------------------------------------------------- ---------------- ---------------- ---------------- APEX_030200.WWV_FLOW_UPGRADE_PROGRESS 89 0 0 LEG.SUB_MON_STAT 14,544 309 0 LEG.Z_TEST 2 0 0 -------------------------------------------------- ---------------- ---------------- ---------------- [Distribution of Convertible, Truncated and Lossy Data by Column] ... Application Data: USER.TABLE|COLUMN Convertible Truncation Lossy -------------------------------------------------- ---------------- ---------------- ---------------- APEX_030200.WWV_FLOW_UPGRADE_PROGRESS|UPGRADE_ERR 89 0 0 LEG.SUB_MON_STAT|COMMT 0 1 0 LEG.SUB_MON_STAT|LINE_NUM 7,286 140 0 LEG.SUB_MON_STAT|SUB_STA_NM 7,258 168 0 LEG.Z_TEST|VAL 2 0 0 -------------------------------------------------- ---------------- ---------------- ----------------
La interpretación de lo anterior es la siguiente.
- Cuando la tabla LEG.SUB_MON_STAT se cambia a AL32UTF8, normalmente se convierten 14 544 valores (Convertible), 309 valores se truncan (Truncamiento) y ningún valor se pierde/rompe. De la siguiente manera para cada columna
- COMMT: cuando se cambia a AL32UTF8, normalmente no se convierte ningún valor, se trunca un valor y no se pierde ni se rompe ningún valor.
- LINE_NUM: al cambiar a AL32UTF8, normalmente se convierten 7286 valores (Convertible), 140 valores se truncan (Truncation) y ningún valor se pierde/rompe (Lossy)
- SUB_STA_NM: al cambiar a AL32UTF8, normalmente se convierten 7258 valores (Convertible), 168 valores se truncan (Truncation) y ningún valor se pierde/rompe (Lossy)
- Cuando la tabla LEG.Z_TEST se cambia a AL32UTF8, dos valores se convierten normalmente y ningún valor se trunca, se pierde o se rompe. La columna VAL corresponde a esto.
5.4.5. Verifique la ejecución de csscan result-scan.out (información de la tabla de destino de escaneo)
En el archivo scan.out, puede consultar la lista de tablas para escanear.
Character Set Scanner v2.2 : Release 11.2.0.1.0 - Production on Wed May 7 20:21:48 2014 Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production With the Partitioning, OLAP, Data Mining and Real Application Testing options Enter array fetch buffer size: 1024000 > Enter number of scan processes to utilize(1..64): 1 > Enumerating tables to scan... . process 1 scanning SYS.SOURCE$[AAAADfAABAAAAXYAAA] . process 1 scanning SYS.PARAMETER$[AAAAH3AABAAAAzgAAA] . process 1 scanning SYS.TYPE$[AAAAH3AABAAAAzgAAA] . process 1 scanning SYS.ATTRIBUTE$[AAAAH3AABAAAAzgAAA] ... . process 1 scanning MDSYS.SDO_COORD_REF_SYS[AAAPKtAACAAAEtYAAA] . process 1 scanning XDB.XDB$H_LINK[AAANh/AACAAACUwAAA] . process 1 scanning SYS.SYS$SERVICE_METRICS_TAB[AAADI9AACAAACEAAAA] ... . process 1 scanning LEG.SUB_MON_STAT[AAAQSRAAEAAAACIAAA] ... . process 1 scanning XDB.PRIN_PT[AAAN2VAACAAAEDoAAA] ORA-30967: operation directly on the Path Table is disallowed CSS-00144: failed to scan table XDB.PRIN_PT Creating Database Scan Summary Report... Creating Individual Exception Report... Scanner terminated successfully.
Aquí puedes consultar:
- Línea 23: Escanee la tabla SUB_MON_STAT del usuario LEG creado en el entorno de prueba.
5.4.6. Compruebe el resultado de la ejecución de csscan - scan.err (detalles del error)
En el archivo scan.err, puede ver los detalles de los errores de conversión del conjunto de caracteres de cada tabla y columna.
Database Scan Individual Exception Report [Database Scan Parameters] Parameter Value ------------------------------ ------------------------------------------------ CSSCAN Version v2.1 Instance Name oramswin949 Database Version 11.2.0.1.0 Scan type Full database Scan CHAR data? YES Database character set KO16MSWIN949 FROMCHAR KO16MSWIN949 TOCHAR AL32UTF8 Scan NCHAR data? NO Array fetch buffer size 1024000 Number of processes 1 Capture convertible data? NO ------------------------------ ------------------------------------------------ [Data Dictionary individual exceptions] User : SYS Table : COM$ Column: COMMENT$ Type : VARCHAR2(4000) Number of Exceptions : 0 Max Post Conversion Data Size: 381 ROWID Exception Type Size Cell Data(first 30 bytes) ------------------ ------------------ ----- ------------------------------ AAAACIAABAAARCPABN convertible 사용월 AAAACIAABAAARCPABO convertible 호선명 AAAACIAABAAARCPABP convertible 지하철역코드 AAAACIAABAAARCPABQ convertible 지하철역명 AAAACIAABAAARCPABR convertible 승차인원수 AAAACIAABAAARCPABS convertible 하차인원수 AAAACIAABAAARCPABT convertible 작업일자 AAAACIAABAAARCPABU convertible 비고 AAAACIAABAAARCPABV convertible 참조설명 AAAACIAABAAARCPABW convertible 참조이미지 AAAACIAABAAARCPABX convertible 지하철역별승하차인원 ------------------ ------------------ ----- ------------------------------ [Application data individual exceptions] User : LEG Table : SUB_MON_STAT Column: LINE_NUM Type : VARCHAR2(14) Number of Exceptions : 140 Max Post Conversion Data Size: 20 ROWID Exception Type Size Cell Data(first 30 bytes) ------------------ ------------------ ----- ------------------------------ AAAQSRAAEAAAAC/ABp exceed column size 20 공항철도 1호선 AAAQSRAAEAAAAC/ABq exceed column size 20 공항철도 1호선 AAAQSRAAEAAAAC/ABr exceed column size 20 공항철도 1호선 ... ------------------ ------------------ ----- ------------------------------ User : LEG Table : SUB_MON_STAT Column: COMMT Type : VARCHAR2(4000) Number of Exceptions : 1 Max Post Conversion Data Size: 4500 ROWID Exception Type Size Cell Data(first 30 bytes) ------------------ ------------------ ----- ------------------------------ AAAQSRAAEAAAACNAAA exceed column size 4500 서울역서울역서울역서울역서울역 ------------------ ------------------ ----- ------------------------------ User : LEG Table : SUB_MON_STAT Column: SUB_STA_NM Type : VARCHAR2(20) Number of Exceptions : 168 Max Post Conversion Data Size: 27 ROWID Exception Type Size Cell Data(first 30 bytes) ------------------ ------------------ ----- ------------------------------ AAAQSRAAEAAAAC+AA8 exceed column size 24 디지털미디어시티 AAAQSRAAEAAAAC+AAC exceed column size 21 가산디지털단지 AAAQSRAAEAAAAC/AAR exceed column size 27 동대문역사문화공원 ... ------------------ ------------------ ----- ------------------------------
Los archivos de resultados de ejecución de CSSCAN en el entorno KO16MSWIN949 se pueden encontrar en el repositorio de github a continuación.
- escanear.txt: Oracle-CharacterSet-Conversion/scan.txt en el principal DAToolset/Oracle-CharacterSet-Conversion (github.com)
- escanear: Oracle-CharacterSet-Conversion/scan.out en principal · DAToolset/Oracle-CharacterSet-Conversion (github.com)
- escanear.err: Oracle-CharacterSet-Conversion/scan.err en DAToolset principal/Oracle-CharacterSet-Conversion (github.com)
5.5. Nota: Uso de CSSCAN
CSSCAN se puede utilizar para dos propósitos.
- Verifique el ID de fila y el ID de columna de los datos que se cortan o rompen durante la conversión -> Usar para la purificación de datos
- Si la mayoría de los datos están truncados o dañados (por ejemplo, US7ASCII a AL32UTF8), casi todos los datos deben limpiarse manualmente, lo que lleva mucho tiempo y es costoso.
- Verifique la lista de columnas para aumentar la longitud de la columna Tal como está -> Se utiliza para diseñar el modelo de datos To-Be
- Es muy significativo ya que puede usarse para determinar el número de dígitos en el dominio estándar al diseñar To-Be.
Además, se recomienda hacer referencia a esta longitud (MAXSIZ) al crear una tabla de replicación que convierte el conjunto de caracteres para datos tal cual por adelantado. Si la longitud de columna de la tabla Tal cual está configurada de la misma manera, la carga de datos falla con el siguiente error si la longitud aumentada después de la conversión del juego de caracteres excede la longitud de columna de la tabla Tal cual.
– ORA-12899: valor demasiado grande para la columna "PROPIETARIO". "TABLA". "COLUMNA" (real: longitud insertada, máximo: longitud declarada)
(por ejemplo, ORA-12899: valor demasiado grande para la columna "LEG". "SUB_MON_STAT"".LINE_NUM" (real: 16, máximo: 14))
La siguiente es una declaración de consulta que verifica si se debe convertir a CLOB, la longitud actual, la longitud de la conversión y el destino donde ocurre un error durante la conversión entre las columnas de la tabla de un usuario específico después de que se ejecuta CSSCAN.
SELECT U.USERNAME, TC.TABLE_NAME, TC.COLUMN_NAME, TC.DATA_TYPE, TC.DATA_LENGTH, CC.MAXSIZ ,CASE WHEN TC.DATA_TYPE <> 'CLOB' AND CC.MAXSIZ > 4000 THEN 'Y' END AS CLOB_CONV_YN FROM CSMIG.CSM$COLUMNS CC INNER JOIN DBA_USERS U ON (CC.USR# = U.USER_ID) INNER JOIN DBA_OBJECTS O ON (CC.OBJ# = O.OBJECT_ID) INNER JOIN DBA_TAB_COLUMNS TC ON (CC.COL# = TC.COLUMN_ID AND O.OBJECT_NAME = TC.TABLE_NAME) WHERE U.USERNAME = 'LEG' AND O.OBJECT_TYPE = 'TABLE' AND CC.ERRCNT <> 0;
Una muestra de los datos extraídos es la siguiente.
Fila# | NOMBRE DE USUARIO | NOMBRE DE LA TABLA | COLUMN_NAME | TIPO DE DATOS | LONGITUD DE DATOS (longitud actual) | TAMAÑO MÁXIMO (transforma la longitud) | CLOB_CONV_YN (CLOB conversión) |
1 | PIERNA | SUB_MON_STAT | LINE_NUM | VARCHAR2 | 14 | 20 | |
2 | PIERNA | SUB_MON_STAT | SUB_STA_NM | VARCHAR2 | 20 | 27 | |
3 | PIERNA | SUB_MON_STAT | COMUNICAR | VARCHAR2 | 4000 | 4500 | Y |
El significado de cada columna es el siguiente.
nombre de la columna | sentido |
NOMBRE DE USUARIO | dueño de la mesa |
NOMBRE DE LA TABLA | nombre de la tabla de destino |
COLUMN_NAME | Nombre de columna de la tabla de destino |
TIPO DE DATOS | Tipo de datos actual de la columna de destino |
LONGITUD DE DATOS | Longitud de datos actual de la columna de destino |
TAMAÑO MÁXIMO | Longitud máxima esperada después de la conversión del conjunto de caracteres |
CLOB_CONV_YN | Si el tipo VARCHAR2 actual está sujeto a cambio a CLOB (Y: Sujeto a cambio a CLOB) |
Tenga en cuenta que debido a que los datos se verificaron en función de los datos en el momento en que se ejecutó CSSCAN, incluso si la longitud aumenta según este estándar, puede ocurrir un error "ORA-12899: valor demasiado grande para la columna" según el aumento en la columna. longitud o datos La posibilidad sigue ahí.
Hasta ahora, hemos analizado los resultados de ejecutar CSSCAN en el entorno de prueba KO16MSWIN949.