Validating Data from Oracle¶
This page covers Oracle-specific setup for Data validation. For workflow field definitions, see Data validation configuration reference.
Prerequisites¶
- Oracle Instant Client and ODBC driver on Workers (same as Migrating Data from Oracle).
Connectivity¶
Reuse [connections.source.oracle] Worker TOML from data migration:
Set source_platform: oracle in the validation workflow YAML.
Validation behavior¶
- Empty string semantics: Oracle treats an empty string (
'') as NULL on character types. Snowflake does not. This can surface as L2/L3 differences onVARCHAR2,NVARCHAR2, and related text columns. - Fixed-width character types: Oracle
CHARandNCHARvalues are space-padded. L3 normalization appliesRTRIMwhen comparing to SnowflakeVARCHARtargets. - LOB types:
CLOB,NCLOB, andLONGcan trigger ORA-00932 when L2 aggregate functions run over LOB columns, so L2 is often disabled for those columns. - Binary large objects: L3 row validation hashes only the first 4000 bytes of a
BLOB. TIMESTAMP WITH LOCAL TIME ZONE: L3 row validation is excluded when the Worker uses the oracledb thin driver (DPY-3022).INTERVALtypes: Compared as normalized text with a known sign-stripping limitation in the interval formatter.JSONandXMLTYPE: Limited validation coverage.XMLTYPEmapped to native Snowflake tables is typically limited to L1 schema checks.SDO_GEOMETRY: Requires Oracle Spatial. Geometry validation is not supported end to end in Cloud Data Validation today.
For partitioning, index_column_list, and other workflow settings shared across platforms, see Data validation configuration reference.
Example workflow excerpt:
Data type mappings¶
| Oracle type | Snowflake target type | Supported for validation | Notes |
|---|---|---|---|
| NUMBER, FLOAT, integers, DECIMAL | NUMBER / FLOAT | Yes | |
| VARCHAR2, NVARCHAR2, VARCHAR | VARCHAR | Yes | Oracle treats empty string as NULL |
| CHAR, NCHAR | VARCHAR | Yes | Trailing spaces ignored in comparison |
| CLOB, NCLOB | TEXT | Partial | Metrics comparison not supported |
| LONG | VARCHAR | Partial | Metrics and row comparison not supported |
| RAW, BLOB | BINARY | Partial | Row comparison covers only the first 4000 bytes |
| DATE, TIMESTAMP types | TIMESTAMP_NTZ / TIMESTAMP_TZ | Yes | |
| TIMESTAMP WITH LOCAL TIME ZONE | TIMESTAMP_LTZ | Partial | Row comparison not supported |
| INTERVAL types | VARCHAR | Yes | Known limitation comparing interval sign |
| JSON, XMLTYPE | VARIANT | Partial | XML supports schema-level comparison only |
| SDO_GEOMETRY | GEOMETRY | No | Requires Oracle Spatial |
Platform-specific suggestions¶
- When validating
VARCHAR2/NVARCHAR2columns, investigate empty-string versus NULL mismatches before treating results as data errors. - For
CHAR/NCHAR, expect padding differences unless L3RTRIMnormalization applies. - For
CLOB,NCLOB,LONG, and largeBLOBcolumns, plan on L1 and selective L3 where supported rather than relying on L2 metrics. - If you use
TIMESTAMP WITH LOCAL TIME ZONEand need L3, confirm your Worker ODBC/driver configuration avoids DPY-3022 on the thin driver path. - Anti-locking: AIM DMV adds an automatic
PARALLELoptimizer hint on large Oracle tables. Override withqueryModifiers.selectModifier, or setselectModifierto"NONE"to disable. See Anti-locking and query modifiers.