{"id":15932,"date":"2022-06-28T12:33:01","date_gmt":"2022-06-28T16:33:01","guid":{"rendered":"https:\/\/www.iri.com\/blog\/?p=15932"},"modified":"2024-10-23T12:19:49","modified_gmt":"2024-10-23T16:19:49","slug":"cdc","status":"publish","type":"post","link":"https:\/\/www.iri.com\/blog\/vldb-operations\/cdc\/","title":{"rendered":"Getting Started with IRI Ripcurrent"},"content":{"rendered":"<p><b><i>Abstract<\/i><\/b>: <i><span style=\"font-weight: 400;\">Data collected, processed, and saved across industries is constantly generated and updated. Database (DB) tables can be refreshed with new data from applications or events in intervals as frequent as a fraction of a second. With this in mind, IRI developed <\/span><\/i><b><i>Ripcurrent<\/i><\/b><i><span style=\"font-weight: 400;\"> as an adjunct feature in <\/span><\/i><a href=\"https:\/\/www.iri.com\/products\/voracity\"><i><span style=\"font-weight: 400;\">Voracity<\/span><\/i><\/a><i><span style=\"font-weight: 400;\"> for real-time data replication to monitor, refresh and mask DB data that changes in real-time.<\/span><\/i><\/p>\n<p><em><strong>Editors Note<\/strong><\/em>: <em>You can read the press release introducing Ripcurrent <a href=\"https:\/\/www.prnewswire.com\/news-releases\/new-database-monitoring-facility-acts-on-changes-in-real-time-301579656.html\">here<\/a>.<\/em><\/p>\n<h5><b>What is Ripcurrent?<\/b><\/h5>\n<p><a href=\"https:\/\/docs.google.com\/document\/d\/1UkFY5pQ8UkveREeKZOcpO-bec1kA6ID6EGj21Lk_kgQ\/edit?usp=sharing\"><span style=\"font-weight: 400;\">Ripcurrent<\/span><\/a><span style=\"font-weight: 400;\"> is the name of an IRI-developed Java application included in the Voracity data management <a href=\"https:\/\/www.iri.com\/products\/voracity-platform\">platform<\/a> that combines the <\/span><a href=\"https:\/\/debezium.io\/documentation\/reference\/1.9\/development\/engine.html\"><span style=\"font-weight: 400;\">Debezium embedded engine<\/span><\/a><span style=\"font-weight: 400;\"> with the streaming feature of the <\/span><a href=\"https:\/\/www.iri.com\/products\/cosort\/sortcl\"><span style=\"font-weight: 400;\">IRI (CoSort) SortCL program<\/span><\/a><span style=\"font-weight: 400;\"> to react in real-time to DB change events by <\/span><i><span style=\"font-weight: 400;\">replicating <\/span><\/i><span style=\"font-weight: 400;\">data to downstream target(s), optionally with transformation (e.g., PII <\/span><i><span style=\"font-weight: 400;\">masking<\/span><\/i><span style=\"font-weight: 400;\">) rules consistently applied based on your <\/span><a href=\"https:\/\/www.iri.com\/blog\/vldb-operations\/data-classification-in-iri-workbench\/\"><span style=\"font-weight: 400;\">classification<\/span><\/a><span style=\"font-weight: 400;\"> of the data.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Ripcurrent integrates with <\/span>Debezium<span style=\"font-weight: 400;\"> to track changes from several different DBs. Ripcurrent bundles Debezium connectors for MySQL, SQL Server, PostgreSQL, and Oracle.\u00a0 Debezium may eventually also support MongoDB, DB2 and Vitess, but more work is required.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Ripcurrent automatically triggers SortCL to take action on data in an inserted, updated, or deleted row. This can keep a set of equivalent targets (likely in a lower environment) in sync with source tables, and optionally apply consistent field-level transforms (like PII-classified masking) to the data.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Ripcurrent is a seamless <em>analog<\/em> to <\/span><a href=\"https:\/\/www.iri.com\/blog\/etl\/automating-iri-jobs-using-file-monitoring\/\"><span style=\"font-weight: 400;\">this approach<\/span><\/a><span style=\"font-weight: 400;\"> for processing changes to flat files in real time, and an <em>alternative<\/em> to <\/span><a href=\"https:\/\/www.iri.com\/blog\/etl\/incremental-data-masking-and-mapping\/\"><span style=\"font-weight: 400;\">this approach<\/span><\/a><span style=\"font-weight: 400;\"> for moving and masking changed DB data incrementally. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">This diagram shows the approach Ripcurrent takes for supported DB sources:<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-15936 aligncenter\" src=\"\/blog\/wp-content\/uploads\/2022\/06\/Basic-Ripcurrent.drawio-2-242x300.png\" alt=\"\" width=\"343\" height=\"425\" srcset=\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/06\/Basic-Ripcurrent.drawio-2-242x300.png 242w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/06\/Basic-Ripcurrent.drawio-2.png 315w\" sizes=\"(max-width: 343px) 100vw, 343px\" \/><\/p>\n<p style=\"text-align: center;\"><i><span style=\"font-weight: 400;\">How Ripcurrent replicates data in real-time from a source table to a target<\/span><\/i><i><\/i><\/p>\n<p><span style=\"font-weight: 400;\">Ripcurrent can detect changes for every row insertion, update, or delete in all tables in a DB, excluding any tables or schemas that have been filtered out based on the configuration properties passed to Ripcurrent.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Additionally, other DB change events like the change of the structure of a table are monitored and recorded by Ripcurrent. However, only DB change events that involve the modification, addition, or deletion of data in a table trigger Ripcurrent to take action on that event.<\/span><\/p>\n<h4><b>Why Use Ripcurrent?<\/b><\/h4>\n<p><span style=\"font-weight: 400;\">The ability to replicate and\/or mask data in DB tables to other DB tables or files has long been supported by IRI software. This is commonly done through <\/span><a href=\"https:\/\/www.iri.com\/products\/workbench\"><span style=\"font-weight: 400;\">IRI Workbench<\/span><\/a><span style=\"font-weight: 400;\">, the graphical user interface for all IRI (structured) data management products.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The <\/span><a href=\"https:\/\/www.iri.com\/blog\/data-transformation2\/schema-data-class-search\/\"><i><span style=\"font-weight: 400;\">Schema Data Class Job<\/span><\/i><\/a><span style=\"font-weight: 400;\"> wizard in IRI Workbench \u2013 where data in a schema are searched and grouped into data classes \u2013 can be paired with <\/span><a href=\"https:\/\/www.iri.com\/solutions\/data-masking\/static-data-masking\/overview\"><span style=\"font-weight: 400;\">masking rules<\/span><\/a><span style=\"font-weight: 400;\">. A batch file or shell script is generated from the wizard to execute bulk masking operations defined in FieldShield scripts.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">However, if there are any changes to the DB, there is no easy way to replicate the changes without running the batch\/shell script again. And, if there were any additional tables added to the DB or new columns added to existing tables, those will be ignored unless the wizard is run again to generate a new batch\/shell script and the relevant FieldShield scripts for the operation.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The need to keep in sync with DB changes is the motivation for the development of IRI Ripcurrent. For those who want to keep the downstream target(s) in-sync with a source DB, perhaps for testing, Ripcurrent provides the functionality of a <\/span><a href=\"https:\/\/www.iri.com\/blog\/data-protection\/db-data-class-masking\/\"><i><span style=\"font-weight: 400;\">Data Class DB Masking Job<\/span><\/i><\/a><span style=\"font-weight: 400;\">, but in a dynamic fashion. In other words, Ripcurrent enables real-time data masking.<\/span><\/p>\n<h4><b>Ripcurrent Prerequisites<\/b><\/h4>\n<p><span style=\"font-weight: 400;\">If duplicating data to tables in a target DB, the target tables must <\/span><a href=\"https:\/\/www.iri.com\/blog\/iri\/iri-workbench\/create-new-tables-in-iri-workbench\/\"><span style=\"font-weight: 400;\">be created beforehand<\/span><\/a><span style=\"font-weight: 400;\"> with the same DDL as the source table. If the structure of a source table is changed, the target table must also have the change applied. Ripcurrent cannot automatically change the structure of a target table.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">If duplicating to target tables in the same DB instance and DB schema, a postfix string (i.e. _masked) should be applied. This consistent postfix allows the target tables to be filtered out from monitoring by Debezium if they are in the same DB. This can be done by using a regular expression like .<\/span><i><span style=\"font-weight: 400;\">*_masked<\/span><\/i><span style=\"font-weight: 400;\"> as the value of the <\/span><b><i>table.exclude.list<\/i><\/b> <span style=\"font-weight: 400;\">configuration property.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Ripcurrent <\/span><b>cannot <\/b><span style=\"font-weight: 400;\">use a DB change event to replicate data to any tables being monitored themselves by Debezium as this would trigger an infinite feedback loop of DB change events.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Ripcurrent requires a <\/span><a href=\"mailto:voracity@iri.com\"><span style=\"font-weight: 400;\">licensed Voracity installation<\/span><\/a><span style=\"font-weight: 400;\"> with a CoSort 10.5 build tag of May 2022 or newer, and an installation of <\/span><a href=\"https:\/\/adoptium.net\/temurin\/releases\"><span style=\"font-weight: 400;\">Java JRE <\/span><\/a><span style=\"font-weight: 400;\">11 or greater.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">To monitor Oracle databases, place the Oracle <\/span><a href=\"https:\/\/mvnrepository.com\/artifact\/com.oracle.database.jdbc\/ojdbc8\"><span style=\"font-weight: 400;\">JDBC driver<\/span><\/a><span style=\"font-weight: 400;\">, <\/span><a href=\"https:\/\/mvnrepository.com\/artifact\/com.oracle.database.xml\/xdb\"><span style=\"font-weight: 400;\">JDBC 4.x standard java.sql.SQLXML interface<\/span><\/a><span style=\"font-weight: 400;\">, and <\/span><span style=\"font-weight: 400;\">the<\/span> <a href=\"https:\/\/mvnrepository.com\/artifact\/com.oracle.database.xml\/xmlparserv2\"><span style=\"font-weight: 400;\">Oracle Database XML Parser library<\/span><\/a><span style=\"font-weight: 400;\"> jar files into the <\/span><b><i>lib<\/i><\/b><span style=\"font-weight: 400;\"> folder of the Ripcurrent distribution. These Oracle dependencies could not be packaged directly into the distribution due to licensing restrictions.<\/span><\/p>\n<h4><b>Installing Ripcurrent<\/b><\/h4>\n<p><span style=\"font-weight: 400;\">IRI Ripcurrent is installed as an optional feature for IRI Workbench. From the top menu in IRI Workbench, select <\/span><b><i>Help-&gt;Install New Software\u2026<\/i><\/b><span style=\"font-weight: 400;\">\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">A screen similar to the one below will be displayed:<\/span><\/p>\n<figure id=\"attachment_16426\" class=\"thumbnail wp-caption aligncenter style=\"width: 638px\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-16426 size-full\" src=\"http:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/06\/tooling-10.5.2.20230207.png\" alt=\"\" width=\"628\" height=\"217\" srcset=\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/06\/tooling-10.5.2.20230207.png 628w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/06\/tooling-10.5.2.20230207-300x104.png 300w\" sizes=\"(max-width: 628px) 100vw, 628px\" \/><figcaption class=\"caption wp-caption-text\"><em>IRI Voracity Ripcurrent feature installation in IRI Workbench<\/em><\/figcaption><\/figure>\n<p><span style=\"font-weight: 400;\">Select the <\/span><b><i>IRI Tools<\/i><\/b><span style=\"font-weight: 400;\"> site, and select IRI Ripcurrent from the available options.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">When Ripcurrent is installed as a feature, there should be a <\/span><i><span style=\"font-weight: 400;\">ripcurrent<\/span><\/i><span style=\"font-weight: 400;\"> directory located within the <\/span><i><span style=\"font-weight: 400;\">Ripcurrent<\/span><\/i><span style=\"font-weight: 400;\"> feature folder of the Workbench distribution. This directory is the root directory of the Ripcurrent distribution.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">In addition, the feature installs several user interface plugins to generate and edit a properties file, which is a file that specifies configuration options to Ripcurrent.<\/span><\/p>\n<h4><b>Configuring Ripcurrent<\/b><\/h4>\n<p><span style=\"font-weight: 400;\">After installing the <\/span><b><i>Ripcurrent<\/i><\/b><span style=\"font-weight: 400;\"> feature, there is a new wizard available from the IRI Voracity (orca icon) menu to generate a Ripcurrent properties file. A Ripcurrent properties file contains configuration options that are read by Ripcurrent at the start of execution.\u00a0<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-15939 aligncenter\" src=\"\/blog\/wp-content\/uploads\/2022\/06\/ripcurrent-source-database-configuration-300x219.png\" alt=\"\" width=\"647\" height=\"472\" srcset=\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/06\/ripcurrent-source-database-configuration-300x219.png 300w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/06\/ripcurrent-source-database-configuration.png 606w\" sizes=\"(max-width: 647px) 100vw, 647px\" \/><\/p>\n<p><span style=\"font-weight: 400;\">The first page contains options for the source DB to be monitored by Ripcurrent. Ripcurrent can monitor MySQL, PostgreSQL, Oracle, and SQL Server DBs. A source DB connection must be selected from one of the aforementioned supported DB types.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The port number associated with that connection should be entered. The default port number for the type of DB will be automatically shown, but the number must be modified if the DB is not using the default port.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Optionally, a regular expression pattern for filtering schemas and tables to be monitored within the DB can be specified. For some DB types such as Oracle and PostgreSQL, a DB name should be specified (e.g. ORCL). If the DB connection selected is a DB type that does not require this property, the text box will be disabled.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-15940 aligncenter\" src=\"\/blog\/wp-content\/uploads\/2022\/06\/ripcurrent-target-configuration-300x219.png\" alt=\"\" width=\"613\" height=\"448\" srcset=\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/06\/ripcurrent-target-configuration-300x219.png 300w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/06\/ripcurrent-target-configuration.png 606w\" sizes=\"(max-width: 613px) 100vw, 613px\" \/><\/p>\n<p><span style=\"font-weight: 400;\">The second page contains options for Ripcurrent targets.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Ripcurrent can replicate data to either a set of files, DB tables in a schema, or both files and tables in a schema. After selecting a replication option, this page will be filled in with only the relevant configuration options for the replication option selected.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">When targeting DB tables, select the target DB from the list of connection profiles. A target schema can be selected to which all events from the source DB will be replicated.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Ripcurrent will not create tables if they do not exist; therefore, a set of tables with the equivalent structure to the source tables being monitored <\/span><a href=\"https:\/\/www.iri.com\/blog\/iri\/iri-workbench\/create-new-tables-in-iri-workbench\/\"><span style=\"font-weight: 400;\">must be already created<\/span><\/a><span style=\"font-weight: 400;\"> in the target schema. The name of the target table should be the same as the source table, optionally with a consistent suffix such as <\/span><b><i>_masked<\/i><\/b><span style=\"font-weight: 400;\">.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Alternatively, the target schema selection could be left unselected; in this case, an event received from the source DB will attempt to be replicated to the target DB using the same schema name as the table of the source event.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The file target path configuration should include a directory and base file name. The file name part of the path is actually not necessary but may be important so that the file has the desired extension, such as <\/span><b><i>.xlsx<\/i><\/b><span style=\"font-weight: 400;\"> for Excel files (otherwise the operating system will not know how to open the file by default).<\/span><\/p>\n<p><span style=\"font-weight: 400;\">A set of files are created \u2013 one for each unique table that changes have been replicated from \u2013 in the following format:\u00a0<\/span><\/p>\n<p><i><span style=\"font-weight: 400;\">{Folder Portion of dataTarget}{SOURCE_SCHEMA}.{SOURCE_TABLE}-{suffix}-{Filename Portion of dataTarget}\u00a0<\/span><\/i><\/p>\n<p><span style=\"font-weight: 400;\">For example:<\/span><\/p>\n<p><b><i>C:\\Users\\dakoz\\Desktop\\replication-station\\TEST.TRANSACTIONS-_masked-file.tsv\u00a0<\/i><\/b><\/p>\n<p><span style=\"font-weight: 400;\">for an event from the <\/span><i><span style=\"font-weight: 400;\">TRANSACTIONS<\/span><\/i><span style=\"font-weight: 400;\"> table of the <\/span><i><span style=\"font-weight: 400;\">TEST<\/span><\/i><span style=\"font-weight: 400;\"> schema in the source DB.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The <\/span><b><i>target process type<\/i><\/b><span style=\"font-weight: 400;\"> is an option that specifies the SortCL process type of the output file. Record is for delimited files, CSV for delimited files with a header, XML for Extensible Markup Language, and XLSX for a Microsoft Excel Open XML Spreadsheet.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The <\/span><b><i>target separator<\/i><\/b><span style=\"font-weight: 400;\"> option specifies the separator between columns in delimited flat file outputs. It can be a maximum of 15 characters.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The target name suffix option is an optional configuration option that adds a consistent suffix to a target table name, which would otherwise be the same as the source table name.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The third page allows existing IRI libraries, which are artifacts generated in other Workbench wizards like the <\/span><b><i>Schema Data Class Search<\/i><\/b><span style=\"font-weight: 400;\"> wizard, to be selected for use in data classification and consistent rule application in the replication of data to targets.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-15941 aligncenter\" src=\"\/blog\/wp-content\/uploads\/2022\/06\/ripcurrent-iri-library-configuration-300x197.png\" alt=\"\" width=\"711\" height=\"467\" srcset=\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/06\/ripcurrent-iri-library-configuration-300x197.png 300w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/06\/ripcurrent-iri-library-configuration.png 716w\" sizes=\"(max-width: 711px) 100vw, 711px\" \/><\/p>\n<p><span style=\"font-weight: 400;\">For example, a data class could be defined in the IRI data class library to consistently classify credit card numbers. A default rule can be assigned to the Credit Card data class to consistently mask all data classified as a credit card with <\/span><a href=\"https:\/\/www.iri.com\/solutions\/data-masking\/static-data-masking\/encrypt\/overview\"><span style=\"font-weight: 400;\">format-preserving encryption<\/span><\/a><span style=\"font-weight: 400;\">.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The details of the rule referenced in the data class library are contained in the IRI rules library. If no data class library or rules library is selected, data will just be mirrored from source to target.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The fourth page has several other miscellaneous Ripcurrent properties to select from.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-15942 aligncenter\" src=\"\/blog\/wp-content\/uploads\/2022\/06\/ripcurrent-miscellaneous-configuration-300x197.png\" alt=\"\" width=\"732\" height=\"480\" srcset=\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/06\/ripcurrent-miscellaneous-configuration-300x197.png 300w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/06\/ripcurrent-miscellaneous-configuration.png 716w\" sizes=\"(max-width: 732px) 100vw, 732px\" \/><\/p>\n<p><b><i>Name<\/i><\/b><span style=\"font-weight: 400;\"> is a required property that specifies a unique name for the connector. It is not important what exactly this name is so long as one instance of Ripcurrent is running.<\/span><\/p>\n<p><b><i>Server ID<\/i><\/b><span style=\"font-weight: 400;\"> is an optional property to identify the DB client. A positive integer can be specified as the Server ID; otherwise a random ID is generated.<\/span><\/p>\n<p><b><i>Server name <\/i><\/b><span style=\"font-weight: 400;\">is a logical name that identifies and provides a namespace for the particular DB server\/cluster in which Debezium is capturing changes. Again, it is not important what exactly this name is if only one instance of Ripcurrent is running.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Finally, a file path that DDL contents of schema change events will be logged to can be selected (<\/span><i><span style=\"font-weight: 400;\">schema_change_events.log<\/span><\/i><span style=\"font-weight: 400;\"> is the default value if no location is selected).<\/span><\/p>\n<p><span style=\"font-weight: 400;\">After clicking the <\/span><i><span style=\"font-weight: 400;\">Finish <\/span><\/i><span style=\"font-weight: 400;\">button, the properties file should be successfully generated and automatically opened in an editor for review. For example:<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-15943 aligncenter\" src=\"\/blog\/wp-content\/uploads\/2022\/06\/ripcurrent-config-300x144.png\" alt=\"\" width=\"635\" height=\"305\" srcset=\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/06\/ripcurrent-config-300x144.png 300w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/06\/ripcurrent-config.png 672w\" sizes=\"(max-width: 635px) 100vw, 635px\" \/><\/p>\n<h4><b>Executing Ripcurrent<\/b><\/h4>\n<p><span style=\"font-weight: 400;\">Once a properties file has been successfully generated to the <\/span><b><i>conf<\/i><\/b><span style=\"font-weight: 400;\"> directory of the Ripcurrent distribution, Ripcurrent can be started.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">To start Ripcurrent, execute the <\/span><i><span style=\"font-weight: 400;\">ripcurrent <\/span><\/i><span style=\"font-weight: 400;\">(Unix) or<\/span><i><span style=\"font-weight: 400;\"> ripcurrent.bat <\/span><\/i><span style=\"font-weight: 400;\">(Windows) scripts in the <\/span><i><span style=\"font-weight: 400;\">bin <\/span><\/i><span style=\"font-weight: 400;\">directory of the Ripcurrent distribution.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Since Ripcurrent is run as a script (a batch script on Windows, otherwise a shell script), it can also be launched through the <\/span><b>External Tools Configuration<\/b><span style=\"font-weight: 400;\"> run configuration in IRI Workbench. As a run configuration, it can also be <\/span><a href=\"https:\/\/www.iri.com\/blog\/iri\/iri-workbench\/scheduling-jobs-in-iri-workbench\/\"><span style=\"font-weight: 400;\">scheduled<\/span><\/a><span style=\"font-weight: 400;\">.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-15944 aligncenter\" src=\"\/blog\/wp-content\/uploads\/2022\/06\/ripcurrent-run-configuration-300x231.png\" alt=\"\" width=\"790\" height=\"609\" srcset=\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/06\/ripcurrent-run-configuration-300x231.png 300w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/06\/ripcurrent-run-configuration-768x592.png 768w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/06\/ripcurrent-run-configuration.png 850w\" sizes=\"(max-width: 790px) 100vw, 790px\" \/><\/p>\n<p><span style=\"font-weight: 400;\">Ripcurrent will run constantly, monitoring the source DB for changes. Ripcurrent must be explicitly terminated to stop running.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">If DB changes occur when Ripcurrent is not running, Ripcurrent will resume from where it left off; the changes that occurred in the meantime will not be skipped over.<\/span><\/p>\n<h4><b>Ripcurrent Documentation<\/b><\/h4>\n<p><span style=\"font-weight: 400;\">Detailed documentation for Ripcurrent is available <\/span><a href=\"https:\/\/docs.google.com\/document\/d\/1UkFY5pQ8UkveREeKZOcpO-bec1kA6ID6EGj21Lk_kgQ\/edit?usp=sharing\"><span style=\"font-weight: 400;\">here<\/span><\/a><span style=\"font-weight: 400;\">, and help for Ripcurrent is also included in IRI Workbench.<\/span><\/p>\n<h4><b>Demonstrating Ripcurrent<\/b><\/h4>\n<p><span style=\"font-weight: 400;\">This article provided an introduction of Ripcurrent, and detailed how to install and configure Ripcurrent. Additional articles in this series will display the capabilities of Ripcurrent through demonstration.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The <\/span><a href=\"https:\/\/www.iri.com\/blog\/migration\/data-migration\/real-time-database-data-replication\"><span style=\"font-weight: 400;\">second article<\/span><\/a><span style=\"font-weight: 400;\"> demonstrates real-time replication of data with Ripcurrent, the <\/span><a href=\"https:\/\/www.iri.com\/blog\/data-protection\/real-time-incremental-data-masking\/\"><span style=\"font-weight: 400;\">third article<\/span><\/a><span style=\"font-weight: 400;\"> demonstrates real-time data masking with Ripcurrent, and the <\/span><a href=\"https:\/\/www.iri.com\/blog\/vldb-operations\/using-ripcurrent-for-db-structure-change-reporting\"><span style=\"font-weight: 400;\">fourth article<\/span><\/a><span style=\"font-weight: 400;\"> demonstrates how the schema change event log generated by Ripcurrent can be monitored to alert when the structure of a database has changed (database change monitoring).<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Abstract: Data collected, processed, and saved across industries is constantly generated and updated. Database (DB) tables can be refreshed with new data from applications or events in intervals as frequent as a fraction of a second. With this in mind, IRI developed Ripcurrent as an adjunct feature in Voracity for real-time data replication to monitor,<\/p>\n<div><a class=\"btn-filled btn\" href=\"https:\/\/www.iri.com\/blog\/vldb-operations\/cdc\/\" title=\"Getting Started with IRI Ripcurrent\">Read More<\/a><\/div>\n","protected":false},"author":119,"featured_media":15949,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"footnotes":""},"categories":[8,31,1,776,91,29,3],"tags":[13,51,5,1696,789,1896,1706,1948,1949,1697,24],"class_list":["post-15932","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-data-protection","category-data-migration","category-data-transformation2","category-etl","category-iri-workbench","category-test-data","category-vldb-operations","tag-data-protection-2","tag-data-replication","tag-data-transformation","tag-iri-ripcurrent","tag-iri-voracity","tag-oracle-data-masking","tag-oracle-data-replication","tag-real-time-db-replication","tag-real-time-masking","tag-ripcurrent","tag-vldb"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v23.4 (Yoast SEO v23.4) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Getting Started with IRI Ripcurrent - IRI<\/title>\n<meta name=\"description\" content=\"Discover IRI Ripcurrent, the onboard CDC module in Voracity that allows you to monitor, replicate and mask database data in real time.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.iri.com\/blog\/vldb-operations\/cdc\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Getting Started with IRI Ripcurrent\" \/>\n<meta property=\"og:description\" content=\"Discover IRI Ripcurrent, the onboard CDC module in Voracity that allows you to monitor, replicate and mask database data in real time.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.iri.com\/blog\/vldb-operations\/cdc\/\" \/>\n<meta property=\"og:site_name\" content=\"IRI\" \/>\n<meta property=\"article:published_time\" content=\"2022-06-28T16:33:01+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-10-23T16:19:49+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/06\/Blog-Image-Feature-Ripcurrent.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1110\" \/>\n\t<meta property=\"og:image:height\" content=\"581\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Devon Kozenieski\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Devon Kozenieski\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.iri.com\/blog\/vldb-operations\/cdc\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.iri.com\/blog\/vldb-operations\/cdc\/\"},\"author\":{\"name\":\"Devon Kozenieski\",\"@id\":\"https:\/\/www.iri.com\/blog\/#\/schema\/person\/de972c035aaeecfc40a3ae2ea5ff7ba1\"},\"headline\":\"Getting Started with IRI Ripcurrent\",\"datePublished\":\"2022-06-28T16:33:01+00:00\",\"dateModified\":\"2024-10-23T16:19:49+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.iri.com\/blog\/vldb-operations\/cdc\/\"},\"wordCount\":2012,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.iri.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.iri.com\/blog\/vldb-operations\/cdc\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/06\/Blog-Image-Feature-Ripcurrent.png\",\"keywords\":[\"data protection\",\"data replication\",\"data transformation\",\"IRI Ripcurrent\",\"IRI Voracity\",\"Oracle data masking\",\"oracle data replication\",\"real-time db replication\",\"real-time masking\",\"Ripcurrent\",\"VLDB\"],\"articleSection\":[\"Data Masking\/Protection\",\"Data Migration\",\"Data Transformation\",\"ETL\",\"IRI Workbench\",\"Test Data\",\"VLDB\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.iri.com\/blog\/vldb-operations\/cdc\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.iri.com\/blog\/vldb-operations\/cdc\/\",\"url\":\"https:\/\/www.iri.com\/blog\/vldb-operations\/cdc\/\",\"name\":\"Getting Started with IRI Ripcurrent - IRI\",\"isPartOf\":{\"@id\":\"https:\/\/www.iri.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.iri.com\/blog\/vldb-operations\/cdc\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.iri.com\/blog\/vldb-operations\/cdc\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/06\/Blog-Image-Feature-Ripcurrent.png\",\"datePublished\":\"2022-06-28T16:33:01+00:00\",\"dateModified\":\"2024-10-23T16:19:49+00:00\",\"description\":\"Discover IRI Ripcurrent, the onboard CDC module in Voracity that allows you to monitor, replicate and mask database data in real time.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.iri.com\/blog\/vldb-operations\/cdc\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.iri.com\/blog\/vldb-operations\/cdc\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.iri.com\/blog\/vldb-operations\/cdc\/#primaryimage\",\"url\":\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/06\/Blog-Image-Feature-Ripcurrent.png\",\"contentUrl\":\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/06\/Blog-Image-Feature-Ripcurrent.png\",\"width\":1110,\"height\":581},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.iri.com\/blog\/vldb-operations\/cdc\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.iri.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Getting Started with IRI Ripcurrent\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.iri.com\/blog\/#website\",\"url\":\"https:\/\/www.iri.com\/blog\/\",\"name\":\"IRI\",\"description\":\"Total Data Management Blog\",\"publisher\":{\"@id\":\"https:\/\/www.iri.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.iri.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.iri.com\/blog\/#organization\",\"name\":\"IRI\",\"url\":\"https:\/\/www.iri.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.iri.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2019\/02\/iri-logo-total-data-management-small-1.png\",\"contentUrl\":\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2019\/02\/iri-logo-total-data-management-small-1.png\",\"width\":750,\"height\":206,\"caption\":\"IRI\"},\"image\":{\"@id\":\"https:\/\/www.iri.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.iri.com\/blog\/#\/schema\/person\/de972c035aaeecfc40a3ae2ea5ff7ba1\",\"name\":\"Devon Kozenieski\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.iri.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/e4c421588c1a85dd9a76146fe15528f7?s=96&d=blank&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/e4c421588c1a85dd9a76146fe15528f7?s=96&d=blank&r=g\",\"caption\":\"Devon Kozenieski\"},\"url\":\"https:\/\/www.iri.com\/blog\/author\/devonk\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Getting Started with IRI Ripcurrent - IRI","description":"Discover IRI Ripcurrent, the onboard CDC module in Voracity that allows you to monitor, replicate and mask database data in real time.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.iri.com\/blog\/vldb-operations\/cdc\/","og_locale":"en_US","og_type":"article","og_title":"Getting Started with IRI Ripcurrent","og_description":"Discover IRI Ripcurrent, the onboard CDC module in Voracity that allows you to monitor, replicate and mask database data in real time.","og_url":"https:\/\/www.iri.com\/blog\/vldb-operations\/cdc\/","og_site_name":"IRI","article_published_time":"2022-06-28T16:33:01+00:00","article_modified_time":"2024-10-23T16:19:49+00:00","og_image":[{"width":1110,"height":581,"url":"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/06\/Blog-Image-Feature-Ripcurrent.png","type":"image\/png"}],"author":"Devon Kozenieski","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Devon Kozenieski","Est. reading time":"11 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.iri.com\/blog\/vldb-operations\/cdc\/#article","isPartOf":{"@id":"https:\/\/www.iri.com\/blog\/vldb-operations\/cdc\/"},"author":{"name":"Devon Kozenieski","@id":"https:\/\/www.iri.com\/blog\/#\/schema\/person\/de972c035aaeecfc40a3ae2ea5ff7ba1"},"headline":"Getting Started with IRI Ripcurrent","datePublished":"2022-06-28T16:33:01+00:00","dateModified":"2024-10-23T16:19:49+00:00","mainEntityOfPage":{"@id":"https:\/\/www.iri.com\/blog\/vldb-operations\/cdc\/"},"wordCount":2012,"commentCount":0,"publisher":{"@id":"https:\/\/www.iri.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.iri.com\/blog\/vldb-operations\/cdc\/#primaryimage"},"thumbnailUrl":"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/06\/Blog-Image-Feature-Ripcurrent.png","keywords":["data protection","data replication","data transformation","IRI Ripcurrent","IRI Voracity","Oracle data masking","oracle data replication","real-time db replication","real-time masking","Ripcurrent","VLDB"],"articleSection":["Data Masking\/Protection","Data Migration","Data Transformation","ETL","IRI Workbench","Test Data","VLDB"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.iri.com\/blog\/vldb-operations\/cdc\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.iri.com\/blog\/vldb-operations\/cdc\/","url":"https:\/\/www.iri.com\/blog\/vldb-operations\/cdc\/","name":"Getting Started with IRI Ripcurrent - IRI","isPartOf":{"@id":"https:\/\/www.iri.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.iri.com\/blog\/vldb-operations\/cdc\/#primaryimage"},"image":{"@id":"https:\/\/www.iri.com\/blog\/vldb-operations\/cdc\/#primaryimage"},"thumbnailUrl":"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/06\/Blog-Image-Feature-Ripcurrent.png","datePublished":"2022-06-28T16:33:01+00:00","dateModified":"2024-10-23T16:19:49+00:00","description":"Discover IRI Ripcurrent, the onboard CDC module in Voracity that allows you to monitor, replicate and mask database data in real time.","breadcrumb":{"@id":"https:\/\/www.iri.com\/blog\/vldb-operations\/cdc\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.iri.com\/blog\/vldb-operations\/cdc\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.iri.com\/blog\/vldb-operations\/cdc\/#primaryimage","url":"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/06\/Blog-Image-Feature-Ripcurrent.png","contentUrl":"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/06\/Blog-Image-Feature-Ripcurrent.png","width":1110,"height":581},{"@type":"BreadcrumbList","@id":"https:\/\/www.iri.com\/blog\/vldb-operations\/cdc\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.iri.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Getting Started with IRI Ripcurrent"}]},{"@type":"WebSite","@id":"https:\/\/www.iri.com\/blog\/#website","url":"https:\/\/www.iri.com\/blog\/","name":"IRI","description":"Total Data Management Blog","publisher":{"@id":"https:\/\/www.iri.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.iri.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.iri.com\/blog\/#organization","name":"IRI","url":"https:\/\/www.iri.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.iri.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2019\/02\/iri-logo-total-data-management-small-1.png","contentUrl":"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2019\/02\/iri-logo-total-data-management-small-1.png","width":750,"height":206,"caption":"IRI"},"image":{"@id":"https:\/\/www.iri.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.iri.com\/blog\/#\/schema\/person\/de972c035aaeecfc40a3ae2ea5ff7ba1","name":"Devon Kozenieski","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.iri.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/e4c421588c1a85dd9a76146fe15528f7?s=96&d=blank&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/e4c421588c1a85dd9a76146fe15528f7?s=96&d=blank&r=g","caption":"Devon Kozenieski"},"url":"https:\/\/www.iri.com\/blog\/author\/devonk\/"}]}},"jetpack_featured_media_url":"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/06\/Blog-Image-Feature-Ripcurrent.png","_links":{"self":[{"href":"https:\/\/www.iri.com\/blog\/wp-json\/wp\/v2\/posts\/15932"}],"collection":[{"href":"https:\/\/www.iri.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.iri.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.iri.com\/blog\/wp-json\/wp\/v2\/users\/119"}],"replies":[{"embeddable":true,"href":"https:\/\/www.iri.com\/blog\/wp-json\/wp\/v2\/comments?post=15932"}],"version-history":[{"count":12,"href":"https:\/\/www.iri.com\/blog\/wp-json\/wp\/v2\/posts\/15932\/revisions"}],"predecessor-version":[{"id":18058,"href":"https:\/\/www.iri.com\/blog\/wp-json\/wp\/v2\/posts\/15932\/revisions\/18058"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.iri.com\/blog\/wp-json\/wp\/v2\/media\/15949"}],"wp:attachment":[{"href":"https:\/\/www.iri.com\/blog\/wp-json\/wp\/v2\/media?parent=15932"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.iri.com\/blog\/wp-json\/wp\/v2\/categories?post=15932"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.iri.com\/blog\/wp-json\/wp\/v2\/tags?post=15932"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}