Oracle Reader and OJet programmer's reference
Oracle Reader properties
Before you can use this adapter, Oracle must be configured as described in the parts of Configuring Oracle to use Oracle Reader that are relevant to your environment.
Note
Before deploying an Oracle Reader application, see Runtime considerations when using Oracle Reader.
Striim provides wizards for creating applications that read from Oracle and write to various targets. SeeCreating an application using a wizard for details.
The adapter properties are:
property | type | default value | notes |
|---|---|---|---|
Bidirectional Marker Table | String | ||
CDDL Action | enum | Process | 18c and earlier only. Visible in Flow Designer only when CDDL Capture is enabled. See Handling schema evolution. |
CDDL Capture | Boolean | False | 18c and earlier only: enables schema evolution (see Handling schema evolution). Visible in Flow Designer only when Dictionary Mode is Offline Catalog. When set to True, Dictionary Mode must be set to Offline Catalog and Support PDB and CDB must be False. Do not use Find and Replace DDL unless instructed to by Striim support. |
Committed Transactions | Boolean | True | LogMiner only: by default, only committed transactions are read. Set to False to read both committed and uncommitted transactions. |
Compression | Boolean | False | If set to True, update operations for tables that have primary keys include only the primary key and modified columns, and delete operations include only the primary key. With the default value of False, all columns are included. See Oracle Reader example output for examples. |
Connection Profile Name | String | Appears in Flow Designer only when Use Connection Profile is True. See Connection profiles. | |
Connection Retry Policy | String | timeOut=30, retryInterval=30, maxRetries=3 | With the default setting:
Negative values are not supported. |
Connection URL | String |
If using Oracle 12c or later with PDB, use the SID for the CDB service. (Note that with DatabaseReader and DatabaseWriter, you must use the SID for the PDB service instead.) If using Amazon RDS for Oracle, the connection URL is To use Oracle native network encryption, append | |
Database Role | String | PRIMARY | Leave set to the default value of PRIMARY except when you Reading from a standby. |
Dictionary Mode | String | OnlineCatalog | Leave set to the default of OnlineCatalog except when CDDL Capture is True or you are Reading from a standby. |
Excluded Tables | String | Data for any tables specified here will not be returned. For example, if | |
Exclude Users | String | Optionally, specify one or more Oracle user names, separated by semicolons, whose transactions will be omitted from OracleReader output. Possible uses include:
| |
External Dictionary File | String | Visible in Flow Designer only when Database Role is PHYSICAL_STANDBY. Leave blank except when you Reading from a standby. | |
Fetch Size | Integer |
| LogMiner only: the number of records the JDBC driver will return at a time. For example, if Oracle Reader queries LogMiner and there are 2300 records available, the JDBC driver will return two batches of 1000 records and one batch of 300. |
Filter Transaction Boundaries | Boolean | True | With the default value of True, begin and commit transactions are filtered out. Set to False to include begin and commit transactions. This must be set to False to enable Preserve Source Transaction Boundary in a downstream writer. |
Ignorable Exception | String | Do not change unless instructed to by Striim support. | |
Optimized Read Range | Boolean | False | If Set Conservative Range is False and the database has frequent short transactions and infrequent long-running transactions, setting Optimized Read Range to True can speed up reading of the DML changes. |
Partial Record Policy | String | This property enables enable fetching column values from the database tables when the values are partially available or not available in the database transaction log. It allows the adapter to query and fetch supported/unsupported columns from the source database as needed. For example:
The LookupUsing parameter can be used to fetch the record from the flashback or from the latest snapshot of the table. The value should be SCN or PKEY for Oracle, or PKEY for MS SQL Server.
The SCN should be used if Flashback is enabled in the Oracle database. The Partial Record Policy fetches the record from the flashback database based on the SCN value. It uses the "AS OF SCN'' clause in the SELECT query created with the primary key column in the WHERE clause. This is the default behavior of the Partial Record Policy for Oracle.
The PKEY should be used if you need to fetch the record based on the primary key. If you do not specify a If no SCN is found for the table in the flashback database because the retention period has expired, the Partial Record Policy automatically switches to PKEY and fetches the record using the primary key. If you do not specify a See Using the Partial Record Policy with CDC Readers for more information. | |
Password | encrypted password | the password specified for the username (see Encrypted passwords) | |
Read Archive Logs Only | Boolean | False | With the default value of False, LogMiner will read both redo logs and archive logs. Set to True to read from archive logs only. Set to True to read changes only from archive logs (instead of active online redo logs) to avoid performance impacts on production systems. This approach processes stable, historical redo copies without competing for I/O resources on live online redo logs. However, it introduces latency, as the reader must wait for online redo logs to fill, archive, and become available before accessing real-time changes. |
Queue Size | Integer |
| |
Quiesce Marker Table | String | QUIESCEMARKER | See Creating the QUIESCEMARKER table for Oracle Reader. If the quiesce marker table is not in the schema associated with the user specified in the Username, modify the value to add the correct schema, such as MYSCHEMA.QUIESCEMARKER. Three-part CDB / PDB names are not supported in this release. |
Send Before Image | Boolean | True | set to False to omit |
Set Conservative Range | Boolean | True | If reading from Oracle 19c, you have long-running transactions, and parallel DML mode is enabled (see Enable Parallel DML Mode), set this to True. |
SSL Config | String | If using SSL/TLS with the Oracle JDBC driver, specify the required properties. Examples: If using SSL/TLS for encryption only: oracle.net.ssl_cipher_suites=
(SSL_DH_anon_WITH_3DES_EDE_CBC_SHA,
SSL_DH_anon_WITH_RC4_128_MD5,
SSL_DH_anon_WITH_DES_CBC_SHA)If using SSL/TLS for encryption and server authentication: javax.net.ssl.trustStore= /etc/oracle/wallets/ewallet.p12; javax.net.ssl.trustStoreType=PKCS12; javax.net.ssl.trustStorePassword=******** If using SSL/TLS for encryption and both server and client authentication: javax.net.ssl.trustStore= /etc/oracle/wallets/ewallet.p12; javax.net.ssl.trustStoreType=PKCS12; javax.net.ssl.trustStorePassword=********; javax.net.ssl.keyStore=/opt/Striim/certs; javax.net.ssl.keyStoreType=JKS; javax.net.ssl.keyStorePassword=******** If FIPS mode is enabled for the operating system of the Striim host, the keystore must be in PKCS12 format. | |
Start SCN | String | Optionally specify an SCN from which to start reading Do not specify a start point prior to when supplemental logging was enabled. If you are using schema evolution (see Handling schema evolution, set a Start SCN only if you are sure that there have been no DDL changes after that point. See also Switching from initial load to continuous replication of Oracle Database sources. | |
Start Timestamp | String |
| With the default value of null (blank), only new (based on current system time) transactions are read. Specify a timestamp to read transactions that began after that time. The format is DD-MON-YYYY HH:MI:SS. For example, to start at 5:00 pm on July 15, 2017, specify 15-JUL-2017 17:00:00. Do not specify a start point prior to when supplemental logging was enabled. If you are using schema evolution (see Handling schema evolution, set a Start Timestamp only if you are sure that there have been no DDL changes after that point. |
Support PDB and CDB | Boolean | False | Set to True if reading from CDB or PDB. |
Tables | String | The table or materialized view to be read (supplemental logging must be enabled as described in Configuring Oracle to use Oracle Reader) in the format <schema>.<table>. (If using Oracle 12c with PDB, use three-part names: <pdb>.<schema>.<table>.) Names are case-sensitive. Do not modify this property when CDDL Capture is True or recovery is enabled for the application. You may specify multiple tables and materialized views as a list separated by semicolons or with the % wildcard. For example, Unused columns are supported. Values in virtual columns will be set to null. If a table contains an invisible column, the application will terminate. Table and column identifiers (names) may not exceed 30 bytes when using one-byte character sets. When using two-byte character sets, the limit is 15 characters. Oracle character set AL32UTF8 (UTF-8) and character sets that are subsets of UTF-8, such as US7ASCII, are supported. Other character sets may work so long as their characters can be converted to UTF-8 by Striim. See also Specifying key columns for tables without a primary key. | |
Transaction Buffer Disk Location | String | .striim/LargeBuffer | Visible in Flow Designer only when Transaction Buffer Type is Disk. See Transaction Buffer Type. |
Transaction Buffer Spillover Size | String | 100MB | When Transaction Buffer Type is Disk, the amount of memory that Striim will use to hold each in-process transaction before buffering it to disk. You may specify the size in MB or GB. When Transaction Buffer Type is Memory, this setting has no effect. |
Transaction Buffer Type | String | Disk | When Striim runs out of available Java heap space, the application will terminate. With Oracle Reader, typically this will happen when a transaction includes millions of INSERT, UPDATE, or DELETE events with a single COMMIT, at which point the application will terminate with an error message such as "increase the block size of large buffer" or "exceeded heap usage threshold." To avoid this problem, with the default setting of Disk, when a transaction exceeds the Transaction Buffer Spillover Size, Striim will buffer it to disk at the location specified by the Transaction Buffer Disk Location property, then process it when memory is available. When the setting is Disk and recovery is enabled (see Recovering applications), after the application halts, terminates, or is stopped the buffer will be reset, and during recovery any previously buffered transactions will restart from the beginning. To disable transaction buffering, set Transaction Buffer Type to Memory. |
Use Connection Profile | Boolean | False | Set to True to use a connection profile instead of specifying the connection properties in the adapter properties. To change connection profile properties, stop the application, then restart it after making the changes. See Connection profiles. |
Username | String | the username created as described in Configuring Oracle to use Oracle Reader; if using Oracle 12c or later with PDB, specify the CDB user (c##striim) |
Specifying key columns for tables without a primary key
If a primary key is not defined for a table, the values for all columns are included in UPDATE and DELETE records, which can significantly reduce performance. You can work around this by setting the Compression property to True and including the KeyColumns option in the Tables property value. The syntax is:
Tables:'<table name> KeyColumns(<COLUMN 1 NAME>,<COLUMN 2 NAME>,...)'
The column names must be uppercase. Specify as many columns as necessary to define a unique key for each row. The columns must be supported (see Oracle Reader and OJet data type support and correspondence) and specified as NOT NULL.
If the table has a primary key, or the Compression property is set to False, KeyColumns will be ignored.
Using Oracle native network encryption with OJet
For more information, see Configuring Oracle Database Native Network Encryption and Data Integrity.
Edit
$TNS_ADMIN\sqlnet.ora.Add, on a line by itself:
SQLNET.ENCRYPTION_CLIENT=required/accepted
Follow that with, on a line by itself
SQLNET.ENCRYPTION_TYPES_CLIENT=(<list of types to support>)
replacing
<list of types to support>with a comma-separated list of encryption types to support (3DES112, 3DES168, AES128, AES192, AES256, DES, DES40, RC4_128, RC4_256, RC4_40, or RC4_56). For example:SQLNET.ENCRYPTION_TYPES_CLIENT=(AES192,AES256)
Save the file.
Oracle Reader and OJet WAEvent fields
The output data type for both Oracle Reader and OJet is WAEvent.
metadata: for DML operations, the most commonly used elements are:
DatabaseName (OJet only): the name of the database
OperationName: COMMIT, BEGIN, INSERT, DELETE, UPDATE, or (when using Oracle Reader only) ROLLBACK
TxnID: transaction ID
TimeStamp: timestamp from the CDC log
TableName (returned only for INSERT, DELETE, and UPDATE operations): fully qualified name of the table
ROWID (returned only for INSERT, DELETE, and UPDATE operations): the Oracle ID for the inserted, deleted, or updated row
To retrieve the values for these elements, use the META function. See Parsing the fields of WAEvent for CDC readers.
data: for DML operations, an array of fields, numbered from 0, containing:
for an INSERT or DELETE operation, the values that were inserted or deleted
for an UPDATE, the values after the operation was completed
To retrieve the values for these fields, use SELECT ... (DATA[]). See Parsing the fields of WAEvent for CDC readers.
before (for UPDATE operations only): the same format as data, but containing the values as they were prior to the UPDATE operation
dataPresenceBitMap, beforePresenceBitMap, and typeUUID are reserved and should be ignored.
The following is a complete list of fields that may appear in metadata. The actual fields will vary depending on the operation type and other factors.
metadata property | present when using Oracle Reader | present when using OJet | comments |
|---|---|---|---|
AuditSessionID | ✓ | Audit session ID associated with the user session making the change | |
BytesProcessed | ✓ | ||
COMMIT_TIMESTAMP | ✓ | the UNIX epoch time the transaction was committed, based on the Striim server's time zone: Oracle Reader returns this as jorg.joda.time.DateTime, OJet returns it as java.lang.Long | |
COMMITSCN | x | ✓ | system change number (SCN) when the transaction committed |
CURRENTSCN | ✓ | system change number (SCN) of the operation | |
DBCommitTimestamp | ✓ | the UNIX epoch time the transaction was committed, based on the Oracle server's time zone: Oracle Reader returns this as jorg.joda.time.DateTime, OJet returns it as java.lang.Long | |
DBTimestamp | ✓ | the UNIX epoch time of the operation, based on the Oracle server's time zone: Oracle Reader returns this as jorg.joda.time.DateTime, OJet returns it as java.lang.Long | |
OperationName | ✓ | ✓ | user-level SQL operation that made the change (INSERT, UPDATE, etc.) |
OperationType | ✓ | ✓ | the Oracle operation type
|
ParentTxnID | ✓ | raw representation of the parent transaction identifier | |
PK_UPDATE | ✓ | ✓ | true if an UPDATE operation changed the primary key, otherwise false |
RbaBlk | ✓ | RBA block number within the log file | |
RbaSqn | ✓ | sequence# associated with the Redo Block Address (RBA) of the redo record associated with the change | |
RecordSetID | ✓ | Uniquely identifies the redo record that generated the row. The tuple (RecordSetID, SSN) together uniquely identifies a logical row change. | |
RollBack | ✓ | 1 if the record was generated because of a partial or a full rollback of the associated transaction, otherwise 0 | |
ROWID | ✓ | see comment | Row ID of the row modified by the change (only meaningful if the change pertains to a DML). This will be NULL if the redo record is not associated with a DML. OJet: will be included only if |
SCN | ✓ | system change number (SCN) when the database change was made | |
SegmentName | ✓ | name of the modified data segment | |
SegmentType | ✓ | type of the modified data segment (INDEX, TABLE, ...) | |
Serial | ✓ | serial number of the session that made the change | |
Serial# | see comment | serial number of the session that made the change; will be included only if | |
Session | ✓ | session number of the session that made the change | |
Session# | see comment | session number of the session that made the change; will be included only if | |
SessionInfo | ✓ | Information about the database session that executed the transaction. Contains process information, machine name from which the user logged in, client info, and so on. | |
SQLRedoLength | ✓ | length of reconstructed SQL statement that is equivalent to the original SQL statement that made the change | |
SSN | ✓ | SQL sequence number. The tuple (RecordSetID, SSN) together uniquely identifies a logical row change. | |
TableName | ✓ | ✓ | name of the modified table (in case the redo pertains to a table modification) |
TableSpace | ✓ | name of the tablespace containing the modified data segment. | |
ThreadID | ✓ | ID of the thread that made the change to the database | |
Thead# | see comment | ID of the thread that made the change to the database; will be included only if | |
TimeStamp | ✓ | ✓ | the UNIX epoch time of the operation, based on the Striim server's time zone: Oracle Reader returns this as jorg.joda.time.DateTime, OJet returns it as java.lang.Long |
TransactionName | ✓ | ✓ | name of the transaction that made the change (only meaningful if the transaction is a named transaction) |
TxnID | ✓ | ✓ | raw representation of the transaction identifier |
TxnUserID | ✓ | ||
UserName | ✓ | name of the user associated with the operation |
OracleReader simple application
The following application will write change data for all tables in myschema to SysOut. Replace the Username and Password values with the credentials for the account you created for Striim for use with LogMiner (see Configuring Oracle LogMiner) and myschema with the name of the schema containing the databases to be read.
CREATE APPLICATION OracleLMTest; CREATE SOURCE OracleCDCIn USING OracleReader ( Username:'striim', Password:'passwd', ConnectionURL:'203.0.113.49:1521:orcl', Tables:'myschema.%', FetchSize:1 ) OUTPUT TO OracleCDCStream; CREATE TARGET OracleCDCOut USING SysOut(name:OracleCDCLM) INPUT FROM OracleCDCStream; END APPLICATION OracleLMTest;
Alternatively, you may specify a single table, such as myschema.mytable. See the discussion of Tables in Oracle Reader properties for additional examples of using wildcards to select a set of tables.
When troubleshooting problems, you can get the current LogMiner SCN and timestamp by entering mon <namespace>.<OracleReader source name>; in the Striim console.
Oracle Reader example output
OracleReader's output type is WAEvent. See WAEvent contents for change data for general information.
The following are examples of WAEvents emitted by OracleReader for various operation types. Note that many of the metadata values (see Oracle Reader and OJet WAEvent fields) are dependent on the Oracle environment and thus will vary from the examples below.
The examples all use the following table:
CREATE TABLE POSAUTHORIZATIONS ( BUSINESS_NAME varchar2(30), MERCHANT_ID varchar2(100), PRIMARY_ACCOUNT NUMBER, POS NUMBER,CODE varchar2(20), EXP char(4), CURRENCY_CODE char(3), AUTH_AMOUNT number(10,3), TERMINAL_ID NUMBER, ZIP number, CITY varchar2(20), PRIMARY KEY (MERCHANT_ID)); COMMIT;
INSERT
If you performed the following INSERT on the table:
INSERT INTO POSAUTHORIZATIONS VALUES( 'COMPANY 1', 'D6RJPwyuLXoLqQRQcOcouJ26KGxJSf6hgbu', 6705362103919221351, 0, '20130309113025', '0916', 'USD', 2.20, 5150279519809946, 41363, 'Quicksand'); COMMIT;
Using LogMiner, the WAEvent for that INSERT would be similar to:
data: ["COMPANY 1","D6RJPwyuLXoLqQRQcOcouJ26KGxJSf6hgbu","6705362103919221351","0","20130309113025", "0916","USD","2.2","5150279519809946","41363","Quicksand"] metadata: "RbaSqn":"21","AuditSessionId":"4294967295","TableSpace":"USERS","CURRENTSCN":"726174", "SQLRedoLength":"325","BytesProcessed":"782","ParentTxnID":"8.16.463","SessionInfo":"UNKNOWN", "RecordSetID":" 0x000015.00000310.0010 ","DBCommitTimestamp":"1553126439000","COMMITSCN":726175, "SEQUENCE":"1","Rollback":"0","STARTSCN":"726174","SegmentName":"POSAUTHORIZATIONS", "OperationName":"INSERT","TimeStamp":1553151639000,"TxnUserID":"SYS","RbaBlk":"784", "SegmentType":"TABLE","TableName":"SCOTT.POSAUTHORIZATIONS","TxnID":"8.16.463","Serial":"201", "ThreadID":"1","COMMIT_TIMESTAMP":1553151639000,"OperationType":"DML","ROWID":"AAAE9mAAEAAAAHrAAB", "DBTimeStamp":"1553126439000","TransactionName":"","SCN":"72617400000059109745623040160001", "Session":"105"} before: null
UPDATE
If you performed the following UPDATE on the table:
UPDATE POSAUTHORIZATIONS SET BUSINESS_NAME = 'COMPANY 5A' where pos=0; COMMIT;
Using LogMiner with the default setting Compression: false, the WAEvent for that UPDATE for the row created by the INSERT above would be similar to:
data: ["COMPANY 5A","D6RJPwyuLXoLqQRQcOcouJ26KGxJSf6hgbu",null,null,null, null,null,null,null,null,null] metadata: "RbaSqn":"21","AuditSessionId":"4294967295","TableSpace":"USERS","CURRENTSCN":"726177"," SQLRedoLength":"164","BytesProcessed":"729","ParentTxnID":"2.5.451","SessionInfo":"UNKNOWN", "RecordSetID":" 0x000015.00000313.0010 ","DBCommitTimestamp":"1553126439000","COMMITSCN":726178, "SEQUENCE":"1","Rollback":"0","STARTSCN":"726177","SegmentName":"POSAUTHORIZATIONS", "OperationName":"UPDATE","TimeStamp":1553151639000,"TxnUserID":"SYS","RbaBlk":"787", "SegmentType":"TABLE","TableName":"SCOTT.POSAUTHORIZATIONS","TxnID":"2.5.451","Serial":"201", "ThreadID":"1","COMMIT_TIMESTAMP":1553151639000,"OperationType":"DML","ROWID":"AAAE9mAAEAAAAHrAAB", "DBTimeStamp":"1553126439000","TransactionName":"","SCN":"72617700000059109745625006240000", "Session":"105"} before: ["COMPANY 1","D6RJPwyuLXoLqQRQcOcouJ26KGxJSf6hgbu",null,null,null,null,null,null,null, null,null]
Note that when using LogMiner the before section contains a value only for the modified column. You may use the IS_PRESENT() function to check whether a particular field value has a value (see Parsing the fields of WAEvent for CDC readers).
With Compression: true, only the primary key is included in the before array:
before: [null,"D6RJPwyuLXoLqQRQcOcouJ26KGxJSf6hgbu",null,null,null, null,null,null,null,null,null]
In all cases, if OracleReader's SendBeforeImage property is set to False, the before value will be null.
DELETE
If you performed the following DELETE on the table:
DELETE from POSAUTHORIZATIONS where pos=0; COMMIT;
Using LogMiner with the default setting Compression: false, the WAEvent for a DELETE for the row affected by the UPDATE above would be:
data: ["COMPANY 5A","D6RJPwyuLXoLqQRQcOcouJ26KGxJSf6hgbu","6705362103919221351","0","20130309113025", "0916","USD","2.2","5150279519809946","41363","Quicksand"] metadata: "RbaSqn":"21","AuditSessionId":"4294967295","TableSpace":"USERS","CURRENTSCN":"726180", "SQLRedoLength":"384","BytesProcessed":"803","ParentTxnID":"3.29.501","SessionInfo":"UNKNOWN", "RecordSetID":" 0x000015.00000315.0010 ","DBCommitTimestamp":"1553126439000","COMMITSCN":726181, "SEQUENCE":"1","Rollback":"0","STARTSCN":"726180","SegmentName":"POSAUTHORIZATIONS", "OperationName":"DELETE","TimeStamp":1553151639000,"TxnUserID":"SYS","RbaBlk":"789", "SegmentType":"TABLE","TableName":"SCOTT.POSAUTHORIZATIONS","TxnID":"3.29.501","Serial":"201", "ThreadID":"1","COMMIT_TIMESTAMP":1553151639000,"OperationType":"DML","ROWID":"AAAE9mAAEAAAAHrAAB", "DBTimeStamp":"1553126439000","TransactionName":"","SCN":"72618000000059109745626316960000", "Session":"105"} before: null
With Compression: true, the data array would be:
data: [null,"D6RJPwyuLXoLqQRQcOcouJ26KGxJSf6hgbu",null,null,null,null,null,null,null,null,null]
Note that the contents of data and before are reversed from what you might expect for a DELETE operation. This simplifies programming since you can get data for INSERT, UPDATE, and DELETE operations using only the data field.
Oracle Reader and OJet data type support and correspondence
Oracle type | TQL type when using Oracle Reader | TQL type when using OJet |
|---|---|---|
ADT | not supported, values will be set to null | not supported, application will halt if it reads a table containing a column of this type |
ANYDATA, ANYDATASET, ANYTYPE | not supported; values will set to EMPTY_CLOB | not supported; application will halt if it reads a table containing a column of this type |
BFILE | not supported, values will be set to null | values for a column of this type will contain the file names, not their contents |
BINARY_DOUBLE | Double | Double |
BINARY_FLOAT | Float | Float |
BLOB | String (a primary or unique key must exist on the table) An insert or update containing a column of this type generates two CDC log entries: an insert or update in which the value for this column is null, followed by an update including the value. When reading from Oracle 19c, values for this type may be incorrect when (1) a table contains multiple columns of this type and operations are performed on more than one of those columns in the same transaction or (2) multiple tables containing columns of this type are being read and different user sessions are performing operations on them. If you encounter either of these issues, Contact Striim support for assistance. | Byte[] |
CHAR | String | String |
CLOB | string (a primary or unique key must exist on the table) An insert or update containing a column of this type generates two CDC log entries: an insert or update in which the value for this column is null, followed by an update including the value. When reading from Oracle 19c, values for this type may be incorrect when (1) a table contains multiple columns of this type and operations are performed on more than one of those columns in the same transaction or (2) multiple tables containing columns of this type are being read and different user sessions are performing operations on them. If you encounter either of these issues, Contact Striim support for assistance. | String |
DATE | DateTime | java.time.LocalDateTime |
FLOAT | String | String |
INTERVALDAYTOSECOND | string (always has a sign) | String (unsigned) |
INTERVALYEARTOMONTH | string (always has a sign) | String (unsigned) |
JSON | not supported, values will be set to null | not supported, application will halt if it reads a table containing a column of this type |
LONG | Results may be inconsistent. Oracle recommends using CLOB instead. | String |
LONG RAW | Results may be inconsistent. Oracle recommends using CLOB instead. | Byte[] |
NCHAR | String | String |
NCLOB | String (a primary or unique key must exist on the table) | String (a primary or unique key must exist on the table) |
NESTED TABLE | not supported, application will halt if it reads a table containing a column of this type | not supported, application will halt if it reads a table containing a column of this type |
NUMBER | String | String |
NVARCHAR2 | String | String |
RAW | String | Byte[] |
REF | not supported, application will halt if it reads a table containing a column of this type | not supported, application will halt if it reads a table containing a column of this type |
ROWID | String | values for a column of this type will be set to null |
SD0_GEOMETRY | SD0_GEOMETRY values will be set to null | Known issue DEV-20726: if a table contains a column of this type, the application will terminate |
TIMESTAMP | DateTime | java.time.LocalDateTime |
TIMESTAMP WITH LOCAL TIME ZONE | DateTime | java.time.LocalDateTime |
TIMESTAMP WITH TIME ZONE | DateTime | java.time.ZonedDateTime |
UDT | not supported, values will be set to null | not supported, application will halt if it reads a table containing a column of this type |
URIType, DBURIType, HTTPURIType, XDBURIType | not supported; values will be set to null | not supported; application will halt if it reads a table containing a column of this type |
UROWID | not supported, a table containing a column of this type will not be read | not supported due to Oracle bug 33147962, application will terminate if it reads a table containing a column of this type |
VARCHAR2 | String | String |
VARRAY | Supported by LogMiner only in Oracle 12c and later. Required Oracle Reader settings:
Limitations:
When the output of an Oracle Reader source is the input of a target using XML Formatter, the formatter's Format Column Value As property must be set to | known issue DEV-29799: if a table contains a column of this type, the application will terminate |
XMLTYPE | Supported only for Oracle 12c and later. When DictionaryMode is OnlineCatalog, values in any XMLType columns will be set to null. When DictionaryMode is OfflineCatalog, reading from tables containing XMLType columns is not supported. | String |
Target data type support & mapping for Oracle sources
The table below details how Striim maps the data types of an Oracle source to ClickHouse data types when you create an application using a wizard with Auto Schema Creation, perform an initial load using Database Reader with Create Schema enabled, or run the schema conversion utility, or when Striim schema evolution creates or alters target tables.
Oracle source types ADT, ARRAY, BFILE, LONG, LONG RAW, NESTED TABLE, REF, ROWID, SD0_GEOMETRY, UDT, and UROWID are not supported. Oracle suggests using CLOB in place of LONG or LONG RAW.
For fixed-length data types, Striim interprets the length parameter as one character = one byte, which can result in errors if the data uses multi-byte characters. To avoid this issue, manually increase the size of the data type in the target, or change the target data type to blob or clob.
Oracle Data Type | ClickHouse |
|---|---|
BFILE | Not supported |
BINARY_DOUBLE | Float64 |
BINARY_FLOAT | Float32 |
BLOB | String |
CHAR | String |
CHAR(p) | String |
CLOB | String |
DATE | Date32 |
FLOAT | String |
FLOAT(p) | String, if (p) > 53* |
INTERVAL DAY TO SECOND | String |
INTERVAL YEAR TO MONTH | String |
LONG | Not supported |
LONG RAW | Not supported |
NCHAR(p) | String |
NCLOB | String |
NUMBER | Decimal(76) Decimal(p, s) |
NUMBER(p,0) | Decimal(p, s), if (p) <= 76, if (s) <= 76 |
NUMBER(p,s) | Decimal(p, s), if (p) <= 76, if (s) <= 76 String, if (p,s) > 76, if (s) > 76* |
NVARCHAR2(p) | String |
RAW(p) | String |
ROWID | String |
SDO_GEOMETRY | Not supported |
TIMESTAMP | DateTime64(s) |
TIMESTAMP WITH LOCAL TIME ZONE | DateTime64(s) |
TIMESTAMP WITH LOCAL TIME ZONE(p) | DateTime64(s), if (s) <= 9 |
TIMESTAMP WITH TIME ZONE | DateTime64(s) |
TIMESTAMP WITH TIME ZONE(p) | DateTime64(s), if (s) <= 9 |
TIMESTAMP(p) | DateTime64(s), if (s) <= 9 |
UROWID | Not supported |
VARCHAR2(p) | String |
XMLTYPE | String |
*When using the schema conversion utility, these mappings appear in converted_tables_with_striim_intelligence.sql.