{"id":11327,"date":"2018-06-11T12:21:24","date_gmt":"2018-06-11T10:21:24","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/change-data-capture-from-oracle-with-streamset-data-collector\/"},"modified":"2018-06-11T12:21:24","modified_gmt":"2018-06-11T10:21:24","slug":"change-data-capture-from-oracle-with-streamset-data-collector","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/change-data-capture-from-oracle-with-streamset-data-collector\/","title":{"rendered":"Change Data Capture from Oracle with StreamSets Data Collector"},"content":{"rendered":"<h2>By Franck Pachot<\/h2>\n<p>.<br \/>\nWith this trend of CQRS architectures where the transactions are streamed to a bunch of heterogenous eventually consistent polyglot-persistence microservices, logical replication and Change Data Capture becomes an important component, already at the architecture design phase. This is good for existing products vendors such as Oracle GoldenGate (which must be licensed even to use only the CDC part in the Oracle Database as <a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/18\/upgrd\/terminal-release-oracle-streams.html#GUID-A28764D7-EDD7-41CF-92DF-60A3FBDD949A\" target=\"_blank\" rel=\"noopener noreferrer\">Streams is going to be desupported<\/a>) or <a href=\"http:\/\/replicate-connector-for-kafka.readthedocs.io\/en\/latest\/\" target=\"_blank\" rel=\"noopener noreferrer\">Dbvisit replicate to Kafka<\/a>. But also for Open Source projects. There are some ideas running on (<a href=\"http:\/\/debezium.io\/docs\/connectors\/oracle\/\" target=\"_blank\" rel=\"noopener noreferrer\">Debezium<\/a>), <a href=\"http:\/\/blog.ora-600.pl\/2017\/05\/28\/how-to-recover-a-dropped-package-from-archvielogs-based-on-research-for-voodoo-engine\/\" target=\"_blank\" rel=\"noopener noreferrer\">VOODOO<\/a> but not yet released. <\/p>\n<p>Today I tested the <a href=\"https:\/\/streamsets.com\/documentation\/datacollector\/latest\/help\/#datacollector\/UserGuide\/Origins\/OracleCDC.html\" target=\"_blank\" rel=\"noopener noreferrer\">Oracle CDC Data Collector<\/a> for StreamSets. <a href=\"https:\/\/streamsets.com\" target=\"_blank\" rel=\"noopener noreferrer\">StreamSets Data Collector<\/a> is an open-source project started by former people from Cloudera and Informatica, to define pipelines streaming data from data collectors. It is easy, simple and has a buch of destinations possible. The Oracle CDC is based on LogMiner which means that it is easy but may have some limitations (mainly datatypes, DDL replication and performance).<br \/>\n<!--more--><\/p>\n<h3>Install<\/h3>\n<p>The installation guide is at <a href=\"https:\/\/streamsets.com\/documentation\/datacollector\/latest\/help\/#datacollector\/UserGuide\/Installation\/Install_title.html\" target=\"_blank\" rel=\"noopener noreferrer\">streamsets.com<\/a>. I choose the easiest way for testing as they provide a Docker container (<a href=\"https:\/\/github.com\/streamsets\/datacollector-docker\/blob\/master\/README.md\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/github.com\/streamsets<\/a>)<\/p>\n<pre><code>\n# docker run --restart on-failure -p 18630:18630 -d --name streamsets-dc streamsets\/datacollector\nUnable to find image 'streamsets\/datacollector:latest' locally\nlatest: Pulling from streamsets\/datacollector\n605ce1bd3f31: Pull complete\n529a36eb4b88: Pull complete\n09efac34ac22: Pull complete\n4d037ef9b54a: Pull complete\nc166580a58b2: Pull complete\n1c9f78fe3d6c: Pull complete\nf5e0c86a8697: Pull complete\na336aef44a65: Pull complete\ne8d1e07d3eed: Pull complete\nDigest: sha256:0428704019a97f6197dfb492af3c955a0441d9b3eb34dcc72bda6bbcfc7ad932\nStatus: Downloaded newer image for streamsets\/datacollector:latest\nef707344c8bd393f8e9d838dfdb475ec9d5f6f587a2a253ebaaa43845b1b516d\n<\/code><\/pre>\n<p><a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/CaptureStreamSets001.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/CaptureStreamSets001.png\" alt=\"CaptureStreamSets001\" width=\"300\" height=\"214\" class=\"alignright size-medium wp-image-24274\" \/><\/a><br \/>\nAnd that&#8217;s all. I am  ready to connect with http on port 18630.<\/p>\n<p>The default user\/password is admin\/admin<\/p>\n<p>The GUI looks simple and efficient. There&#8217;s a home page where you define the &#8216;pipelines&#8217; and monitor them running. In the pipelines, we define sources and destinations. Some connectors are already installed, others can be automatically installed. For Oracle, as usual, you need to download the JDBC driver yourself because Oracle doesn&#8217;t allow to get it embedded for legal reasons. I&#8217;ll do something simple here just to check the mining from Oracle.<\/p>\n<p><a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/CaptureStreamSets002.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/CaptureStreamSets002.png\" alt=\"CaptureStreamSets002\" width=\"300\" height=\"183\" class=\"alignleft size-medium wp-image-24276\" \/><\/a><\/a><a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/CaptureStreamSets003.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/CaptureStreamSets003.png\" alt=\"CaptureStreamSets003\" width=\"300\" height=\"99\" class=\"alignright size-medium wp-image-24277\" \/><\/a><br \/>\nIn &#8216;Package Manager&#8217; (the little gift icon on the top) go to JDBC and check &#8216;install&#8217; for the streamsets-datacollector-jdbc-lib library<br \/>\nThen in &#8216;External Libraries&#8217;, install (with the &#8216;upload&#8217; icon at the top) the Oracle jdbc driver (ojdbc8.jar).<br \/>\nI&#8217;ve also installed the MySQL one for future tests:<\/p>\n<pre><code>\n File Name                        Library ID \n ojdbc8.jar                       streamsets-datacollector-jdbc-lib\n mysql-connector-java-8.0.11.jar  streamsets-datacollector-jdbc-lib\n<\/code><\/pre>\n<h3>Oracle CDC pipeline<\/h3>\n<p>I&#8217;ll use the Oracle Change Data Capture here, based on Oracle LogMiner. The GUI is very easy: just select &#8216;Oracle CDC&#8217; as source in a new pipeline. Click on it and configure it. I&#8217;ve set the minimum here.<br \/>\nIn JDBC tab I&#8217;ve set only the JDBC Connection String to: jdbc:oracle:thin:scott\/tiger@\/\/192.168.56.188:1521\/pdb1 which is my PDB (I&#8217;m on Oracle 18c here and multitenant is fully supported by StreamSets). In the Credentials tab I&#8217;ve set &#8216;sys as sysdba&#8217; as username and its password. The configuration can also be displayed as JSON and here is the corresponding entry:<\/p>\n<pre><code>\n\"configuration\": [\n{\n\"name\": \"hikariConf.connectionString\",\n\"value\": \"jdbc:oracle:thin:scott\/tiger@\/\/192.168.56.188:1521\/pdb1\"\n},\n{\n\"name\": \"hikariConf.useCredentials\",\n\"value\": true\n},\n{\n\"name\": \"hikariConf.username\",\n\"value\": \"sys as sysdba\"\n},\n{\n\"name\": \"hikariConf.password\",\n\"value\": \"oracle\"\n},\n...\n<\/code><\/pre>\n<p>I&#8217;ve provided SYSDBA credentials and only the PDB service, but it seems that StreamSets figured out automatically how to connect to the CDB (as LogMiner can be started only from CDB$ROOT). The advantage of using LogMiner here is that you need only a JDBC connection to the source &#8211; but of course, it will use CPU and memory resource from the source database host in this case.<\/p>\n<p>Then I&#8217;ve defined the replication in the Oracle CDC tab. Schema to &#8216;SCOTT&#8217; and Table Name Pattern to &#8216;%&#8217;. Initial Change as &#8216;From Latest Change&#8217; as I just want to see the changes and not actually replicate for this first test. But of course, we can define a SCN here which is what must be used to ensure consistency between the initial load and the replication. &#8216;Dictionary source to &#8216;Online Catalog&#8217; &#8211; this is what will be used by LogMiner to map the object and column IDs to table names and column names. But be carefull as table structure changes may not be managed correctly with this option.<\/p>\n<pre><code>\n{\n\"name\": \"oracleCDCConfigBean.baseConfigBean.schemaTableConfigs\",\n\"value\": [\n{\n\"schema\": \"SCOTT\",\n\"table\": \"%\"\n}\n]\n},\n{\n\"name\": \"oracleCDCConfigBean.baseConfigBean.changeTypes\",\n\"value\": [\n\"INSERT\",\n\"UPDATE\",\n\"DELETE\",\n\"SELECT_FOR_UPDATE\"\n]\n},\n{\n\"name\": \"oracleCDCConfigBean.dictionary\",\n\"value\": \"DICT_FROM_ONLINE_CATALOG\"\n},\n<\/code><\/pre>\n<p>I&#8217;ve left the defaults. I can&#8217;t think yet about a reason for capturing the &#8216;select for update&#8217;, but it is there.<\/p>\n<h3>Named Pipe destination<\/h3>\n<p>I know that the destination part is easy. I just want to see the captured changes here and I took the easiest destination: Named Pipe where I configured only the Named Pipe (\/tmp\/scott) and Data Format (JSON)<\/p>\n<pre><code>\n{\n\"instanceName\": \"NamedPipe_01\",\n\"library\": \"streamsets-datacollector-basic-lib\",\n\"stageName\": \"com_streamsets_pipeline_stage_destination_fifo_FifoDTarget\",\n\"stageVersion\": \"1\",\n\"configuration\": [\n{\n\"name\": \"namedPipe\",\n\"value\": \"\/tmp\/scott\"\n},\n{\n\"name\": \"dataFormat\",\n\"value\": \"JSON\"\n},\n...\n<\/code><\/pre>\n<h3>Supplemental logging<\/h3>\n<p>The Oracle redo log stream is by default focused only on recovery (replay of transactions in the same database) and contains only the minimal physical information requried for it. In order to get enough information to replay them in a different database we need supplemental logging for the database, and for the objects involved:<\/p>\n<pre><code>\nSQL&gt; alter database add supplemental log data;\nDatabase altered.\nSQL&gt; exec for i in (select owner,table_name from dba_tables where owner='SCOTT' and table_name like '%') loop execute immediate 'alter table \"'||i.owner||'\".\"'||i.table_name||'\" add supplemental log data (primary key) columns'; end loop;\nPL\/SQL procedure successfully completed.\n<\/code><\/pre>\n<h3>Run<\/h3>\n<p>And that&#8217;s all. Just run the pipeline and look at the logs:<\/p>\n<p><a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/CaptureStreamSets005-log.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/CaptureStreamSets005-log.png\" alt=\"CaptureStreamSets005-log\" width=\"1024\" height=\"484\" class=\"aligncenter size-large wp-image-24298\" \/><\/a><\/p>\n<p>StreamSet Oracle CDC pulls continuously from LogMiner to get the changes. Here are the queries that it uses for that:<\/p>\n<pre><code>\nBEGIN DBMS_LOGMNR.START_LOGMNR( STARTTIME =&gt; :1 , ENDTIME =&gt; :2 , OPTIONS =&gt; DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG          + DBMS_LOGMNR.CONTINUOUS_MINE          + DBMS_LOGMNR.NO_SQL_DELIMITER); END;\n<\/code><\/pre>\n<p>This starts to mine between two timestamp. I suppose that it will read the SCNs to get finer grain and avoid overlapping information.<\/p>\n<p>And here is the main one:<\/p>\n<pre><code>\nSELECT SCN, USERNAME, OPERATION_CODE, TIMESTAMP, SQL_REDO, TABLE_NAME, COMMIT_SCN, SEQUENCE#, CSF, XIDUSN, XIDSLT, XIDSQN, RS_ID, SSN, SEG_OWNER  FROM V$LOGMNR_CONTENTS WHERE  ((( (SEG_OWNER='SCOTT' AND TABLE_NAME IN ('BONUS','DEPT','EMP','SALGRADE')) ) AND (OPERATION_CODE IN (1,3,2,25))) OR (OPERATION_CODE = 7 OR OPERATION_CODE = 36))\n<\/code><\/pre>\n<p>This reads the redo records. The operation codes 7 and 36 are for commit and rollbacks. The operations 1,3,2,25 are those that we want to capture (insert, update, delete, select for update) and were defined in the configuration. Here the pattern &#8216;%&#8217; for the SCOTT schema has been expanded to the table names. As far as I know, there&#8217;s no DDL mining here to automatically capture new tables.<\/p>\n<h3>Capture<\/h3>\n<p>Then I&#8217;ve run this simple insert (I&#8217;ve added a primary key on this table as it is not ther from utlsampl.sql):<\/p>\n<pre><code>\nSQL&gt; insert into scott.dept values(50,'IT','Cloud');\n<\/code><\/pre>\n<p>And I committed (as it seems that StreamSet buffers the changes until the end of the transaction)<\/p>\n<pre><code>\nSQL&gt; commit;\n<\/code><\/pre>\n<p>and here I got the message from the pipe:<\/p>\n<pre><code>\n\/ $ cat \/tmp\/scott\n&nbsp;\n{\"LOC\":\"Cloud\",\"DEPTNO\":50,\"DNAME\":\"IT\"}\n<\/code><\/pre>\n<p>The graphical interface shows how the pipeline is going:<br \/>\n<a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/CaptureStreamSets006.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/CaptureStreamSets006.png\" alt=\"CaptureStreamSets006\" width=\"1024\" height=\"396\" class=\"aligncenter size-large wp-image-24304\" \/><\/a><\/p>\n<p>I&#8217;ve tested some bulk loads (direct-path inserts) and it seems to be managed correctly. Actually, this Oracle CDC is based on LogMiner so it is fully supported (no mining of proprietary redo stream format) and limitations are clearly documented. <\/p>\n<h3>Monitoring<\/h3>\n<p>Remember that the main work is done by LogMiner, so don&#8217;t forget to look at the alert.log on the source database. With big transactions, you may need large PGA (but you can also choose buffer to disk). If you have Oracle Tuning Pack, you can also monitor the main query which retreives the redo information from LogMiner:<br \/>\n<a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/CaptureStreamSets007.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/CaptureStreamSets007.png\" alt=\"CaptureStreamSets007\" width=\"1024\" height=\"311\" class=\"aligncenter size-large wp-image-24318\" \/><\/a><br \/>\nYou will see a different SQL_ID because the filter predicates sues literals instead of bind variables (which is not a problem here).<\/p>\n<h3>Conclusion<\/h3>\n<p>This product is very easy to test, so you can do a Proof of Concept within a few hours and test for your context: supported datatypes, operations and performance. By easy to test, I mean: very good documentation, very friendly and responsive graphical interface, very clear error messages,&#8230;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>By Franck Pachot . With this trend of CQRS architectures where the transactions are streamed to a bunch of heterogenous eventually consistent polyglot-persistence microservices, logical replication and Change Data Capture becomes an important component, already at the architecture design phase. This is good for existing products vendors such as Oracle GoldenGate (which must be licensed [&hellip;]<\/p>\n","protected":false},"author":27,"featured_media":11328,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[294,229,59],"tags":[220,64,96,66,223,1372,1105],"type_dbi":[],"class_list":["post-11327","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-business-intelligence","category-database-administration-monitoring","category-oracle","tag-cdb","tag-multitenant","tag-oracle","tag-pdb","tag-pluggable-databases","tag-steramset","tag-streaming"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Change Data Capture from Oracle with StreamSets Data Collector - dbi Blog<\/title>\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.dbi-services.com\/blog\/change-data-capture-from-oracle-with-streamset-data-collector\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Change Data Capture from Oracle with StreamSets Data Collector\" \/>\n<meta property=\"og:description\" content=\"By Franck Pachot . With this trend of CQRS architectures where the transactions are streamed to a bunch of heterogenous eventually consistent polyglot-persistence microservices, logical replication and Change Data Capture becomes an important component, already at the architecture design phase. This is good for existing products vendors such as Oracle GoldenGate (which must be licensed [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/change-data-capture-from-oracle-with-streamset-data-collector\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2018-06-11T10:21:24+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/CaptureStreamSets001.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1034\" \/>\n\t<meta property=\"og:image:height\" content=\"737\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Oracle Team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Oracle Team\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/change-data-capture-from-oracle-with-streamset-data-collector\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/change-data-capture-from-oracle-with-streamset-data-collector\/\"},\"author\":{\"name\":\"Oracle Team\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee\"},\"headline\":\"Change Data Capture from Oracle with StreamSets Data Collector\",\"datePublished\":\"2018-06-11T10:21:24+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/change-data-capture-from-oracle-with-streamset-data-collector\/\"},\"wordCount\":1104,\"commentCount\":0,\"image\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/change-data-capture-from-oracle-with-streamset-data-collector\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/CaptureStreamSets001.png\",\"keywords\":[\"CDB\",\"multitenant\",\"Oracle\",\"PDB\",\"Pluggable Databases\",\"SteramSet\",\"streaming\"],\"articleSection\":[\"Business Intelligence\",\"Database Administration &amp; Monitoring\",\"Oracle\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/change-data-capture-from-oracle-with-streamset-data-collector\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/change-data-capture-from-oracle-with-streamset-data-collector\/\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/change-data-capture-from-oracle-with-streamset-data-collector\/\",\"name\":\"Change Data Capture from Oracle with StreamSets Data Collector - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/change-data-capture-from-oracle-with-streamset-data-collector\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/change-data-capture-from-oracle-with-streamset-data-collector\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/CaptureStreamSets001.png\",\"datePublished\":\"2018-06-11T10:21:24+00:00\",\"author\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/change-data-capture-from-oracle-with-streamset-data-collector\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/change-data-capture-from-oracle-with-streamset-data-collector\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/change-data-capture-from-oracle-with-streamset-data-collector\/#primaryimage\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/CaptureStreamSets001.png\",\"contentUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/CaptureStreamSets001.png\",\"width\":1034,\"height\":737},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/change-data-capture-from-oracle-with-streamset-data-collector\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.dbi-services.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Change Data Capture from Oracle with StreamSets Data Collector\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/\",\"name\":\"dbi Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee\",\"name\":\"Oracle Team\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g\",\"caption\":\"Oracle Team\"},\"url\":\"https:\/\/www.dbi-services.com\/blog\/author\/oracle-team\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Change Data Capture from Oracle with StreamSets Data Collector - dbi Blog","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.dbi-services.com\/blog\/change-data-capture-from-oracle-with-streamset-data-collector\/","og_locale":"en_US","og_type":"article","og_title":"Change Data Capture from Oracle with StreamSets Data Collector","og_description":"By Franck Pachot . With this trend of CQRS architectures where the transactions are streamed to a bunch of heterogenous eventually consistent polyglot-persistence microservices, logical replication and Change Data Capture becomes an important component, already at the architecture design phase. This is good for existing products vendors such as Oracle GoldenGate (which must be licensed [&hellip;]","og_url":"https:\/\/www.dbi-services.com\/blog\/change-data-capture-from-oracle-with-streamset-data-collector\/","og_site_name":"dbi Blog","article_published_time":"2018-06-11T10:21:24+00:00","og_image":[{"width":1034,"height":737,"url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/CaptureStreamSets001.png","type":"image\/png"}],"author":"Oracle Team","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Oracle Team","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/change-data-capture-from-oracle-with-streamset-data-collector\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/change-data-capture-from-oracle-with-streamset-data-collector\/"},"author":{"name":"Oracle Team","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee"},"headline":"Change Data Capture from Oracle with StreamSets Data Collector","datePublished":"2018-06-11T10:21:24+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/change-data-capture-from-oracle-with-streamset-data-collector\/"},"wordCount":1104,"commentCount":0,"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/change-data-capture-from-oracle-with-streamset-data-collector\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/CaptureStreamSets001.png","keywords":["CDB","multitenant","Oracle","PDB","Pluggable Databases","SteramSet","streaming"],"articleSection":["Business Intelligence","Database Administration &amp; Monitoring","Oracle"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/change-data-capture-from-oracle-with-streamset-data-collector\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/change-data-capture-from-oracle-with-streamset-data-collector\/","url":"https:\/\/www.dbi-services.com\/blog\/change-data-capture-from-oracle-with-streamset-data-collector\/","name":"Change Data Capture from Oracle with StreamSets Data Collector - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/change-data-capture-from-oracle-with-streamset-data-collector\/#primaryimage"},"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/change-data-capture-from-oracle-with-streamset-data-collector\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/CaptureStreamSets001.png","datePublished":"2018-06-11T10:21:24+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee"},"breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/change-data-capture-from-oracle-with-streamset-data-collector\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/change-data-capture-from-oracle-with-streamset-data-collector\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dbi-services.com\/blog\/change-data-capture-from-oracle-with-streamset-data-collector\/#primaryimage","url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/CaptureStreamSets001.png","contentUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/CaptureStreamSets001.png","width":1034,"height":737},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/change-data-capture-from-oracle-with-streamset-data-collector\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Change Data Capture from Oracle with StreamSets Data Collector"}]},{"@type":"WebSite","@id":"https:\/\/www.dbi-services.com\/blog\/#website","url":"https:\/\/www.dbi-services.com\/blog\/","name":"dbi Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee","name":"Oracle Team","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g","caption":"Oracle Team"},"url":"https:\/\/www.dbi-services.com\/blog\/author\/oracle-team\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/11327","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/users\/27"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=11327"}],"version-history":[{"count":0,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/11327\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media\/11328"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=11327"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=11327"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=11327"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=11327"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}