{"id":933,"date":"2022-10-21T19:55:06","date_gmt":"2022-10-21T19:55:06","guid":{"rendered":"https:\/\/adrianotanaka.com.br\/?p=933"},"modified":"2022-10-21T19:55:06","modified_gmt":"2022-10-21T19:55:06","slug":"oci-configurando-oci-gg-com-gg4bigdata-para-escrever-no-streaming","status":"publish","type":"post","link":"https:\/\/adrianotanaka.com.br\/index.php\/2022\/10\/21\/oci-configurando-oci-gg-com-gg4bigdata-para-escrever-no-streaming\/","title":{"rendered":"OCI &#8211; Configurando OCI GG com GG4BIGDATA para escrever no Streaming"},"content":{"rendered":"\n<p>Esse post vai ser bem parecido com o que j\u00e1 escrevi <a rel=\"noreferrer noopener\" href=\"https:\/\/adrianotanaka.com.br\/index.php\/2022\/02\/12\/goldengate-escrevendo-dados-no-oci-streaming\/\" target=\"_blank\">aqui<\/a> sobre como configurar o GoldenGate for Bigdata para escrever no Streaming, a diferen\u00e7a aqui \u00e9 que vamos usar tudo como servi\u00e7o, tanto o for oracle quanto o for bigdata.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Arquitetura<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"771\" height=\"159\" src=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/06\/image-18.png\" alt=\"\" class=\"wp-image-934\" srcset=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/06\/image-18.png 771w, https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/06\/image-18-300x62.png 300w, https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/06\/image-18-768x158.png 768w\" sizes=\"auto, (max-width: 771px) 100vw, 771px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Registrando targets<\/h2>\n\n\n\n<p>Com o lan\u00e7amento do <a href=\"https:\/\/docs.oracle.com\/en-us\/iaas\/releasenotes\/changes\/620f73b4-976b-4c91-8d22-46de3532f420\/\" target=\"_blank\" rel=\"noreferrer noopener\">Goldengate Big Data como servi\u00e7o,<\/a> temos um novo menu chamado Connections e nele temos diversas op\u00e7\u00f5es de tipos de conex\u00e3o:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"401\" height=\"412\" src=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/10\/ggservice-connections-1.gif\" alt=\"\" class=\"wp-image-1078\"\/><\/figure>\n\n\n\n<p>Aqui al\u00e9m da conex\u00e3o com o banco de dados (source) vamos adicionar duas outras, uma do tipo OCI Streaming e outra do tipo Goldengate.<\/p>\n\n\n\n<p>Na conex\u00e3o do tipo Goldengate, voc\u00ea pode selecionar um deployment que j\u00e1 esteja criado(se for um deployment com endpoint p\u00fablico) ou entrar as informa\u00e7\u00f5es de conex\u00e3o caso ele esteja em um rede privada, vale lembrar que a rede que voc\u00ea seleciona quando marca para a conex\u00e3o via private endpoint precisa conseguir chegar no deployment do goldengate, caso voc\u00ea precise acessar um deployment privado, coloque a Console URL campo Host e a porta 443 al\u00e9m do IP privado.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"625\" height=\"672\" src=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/10\/ggservice-ggconn.gif\" alt=\"\" class=\"wp-image-1080\"\/><\/figure>\n\n\n\n<p>Depois que a conex\u00e3o est\u00e1 criada, voc\u00ea precisa vincular ela ao deployment que vai usa-la indo na conex\u00e3o e Assign Deployment:<\/p>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"709\" height=\"706\" src=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/10\/image-3.png\" alt=\"\" class=\"wp-image-1084\" srcset=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/10\/image-3.png 709w, https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/10\/image-3-300x300.png 300w, https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/10\/image-3-150x150.png 150w\" sizes=\"auto, (max-width: 709px) 100vw, 709px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"760\" height=\"718\" src=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/10\/image-4.png\" alt=\"\" class=\"wp-image-1085\" srcset=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/10\/image-4.png 760w, https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/10\/image-4-300x283.png 300w\" sizes=\"auto, (max-width: 760px) 100vw, 760px\" \/><\/figure>\n\n\n\n<p>Dessa forma um deployment vai ter a possibilidade de se conectar ao outro, uma dica importante \u00e9 que qualquer altera\u00e7\u00e3o da conex\u00e3o (endere\u00e7o, senha, etc) deve ser feita na console do OCI e n\u00e3o dentro do Goldengate.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><strong>Na conex\u00e3o do tipo OCI Streaming voc\u00ea precisa usar um usu\u00e1rio local para a autentica\u00e7\u00e3o e seu usu\u00e1rio deve ter o padr\u00e3o tenancy\/usuario\/stream_pool_ocid<\/strong>:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"614\" height=\"632\" src=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/10\/image-5.png\" alt=\"\" class=\"wp-image-1088\" srcset=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/10\/image-5.png 614w, https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/10\/image-5-291x300.png 291w\" sizes=\"auto, (max-width: 614px) 100vw, 614px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Essa conex\u00e3o precisa ser vinculada apenas ao deployment do big data.<\/p>\n\n\n\n<p>No final vamos ter 3 conex\u00f5es(al\u00e9m \u00e9 claro do source):<\/p>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"482\" height=\"173\" src=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/10\/image-6.png\" alt=\"\" class=\"wp-image-1091\" srcset=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/10\/image-6.png 482w, https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/10\/image-6-300x108.png 300w\" sizes=\"auto, (max-width: 482px) 100vw, 482px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Extract<\/h2>\n\n\n\n<p>Assim como no outro artigo, n\u00e3o vou me aprofundar muito aqui, o meu \u00e9 bem simples:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">EXTRACT eKafka\r\nUSERIDALIAS atp_vcp DOMAIN OracleGoldenGate\r\nEXTTRAIL extkafka\/qq\r\nddl include mapped\r\nddloptions report\r\nTRANLOGOPTIONS SOURCE_OS_TIMEZONE GMT-3\r\nTABLE TNK_SRC.INILOAD;\r\ntranlogoptions excludeuser ggadmin<\/pre>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Distribution\/Receive Service<\/h2>\n\n\n\n<p>Para a conex\u00e3o entre os deployments, al\u00e9m da conex\u00e3o criada e atribu\u00edda para o deployment, voc\u00ea precisa dentro do deployment for Oracle criar um usu\u00e1rio para o deployment for Bigdata e o contr\u00e1rio tamb\u00e9m e ap\u00f3s isso criar uma credencial:<br><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"697\" height=\"444\" src=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/10\/image-7.png\" alt=\"\" class=\"wp-image-1100\" srcset=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/10\/image-7.png 697w, https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/10\/image-7-300x191.png 300w\" sizes=\"auto, (max-width: 697px) 100vw, 697px\" \/><\/figure>\n\n\n\n<p>Para criar o usu\u00e1rio voc\u00ea precisa ir em Administration Service > Administrator-> Users:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"736\" height=\"546\" src=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/10\/image-8.png\" alt=\"\" class=\"wp-image-1102\" srcset=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/10\/image-8.png 736w, https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/10\/image-8-300x223.png 300w\" sizes=\"auto, (max-width: 736px) 100vw, 736px\" \/><\/figure>\n\n\n\n<p>E para criar a credencial voc\u00ea precisa ir em Administrator Service -> Configuration -> Credentials :<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"370\" src=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/10\/image-9-1024x370.png\" alt=\"\" class=\"wp-image-1104\" srcset=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/10\/image-9-1024x370.png 1024w, https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/10\/image-9-300x108.png 300w, https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/10\/image-9-768x278.png 768w, https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/10\/image-9.png 1048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Colocar o User ID com o mesmo nome do usu\u00e1rio criado e tamb\u00e9m sua senha.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Agora com as credenciais criadas j\u00e1 podemos criar nosso Distribution Service ou Receive Service, a diferen\u00e7a entre eles \u00e9 de onde a conex\u00e3o vai ser originada, por ex. se voc\u00ea precisa enviar os trails do ggoracle para o ggbigdata voc\u00ea cria um Distribution Service, agora se voc\u00ea deseja copiar os trails do ggoracle para o ggbigdata voc\u00ea cria um Receive Service.<\/p>\n\n\n\n<p>No meu caso vou enviar os trails que est\u00e3o no meu ggoracle para o ggbigdata (com um Distribution Service):<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1041\" height=\"875\" src=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/10\/ggservice-distribution-1.gif\" alt=\"\" class=\"wp-image-1110\"\/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>A primeira parte da configura\u00e7\u00e3o est\u00e1 relacionada com a origem, basicamente voc\u00ea deve escolher qual o Extract\/Trail vai ser enviado, depois voc\u00ea precisa configurar a parte de autentica\u00e7\u00e3o no target, aqui vamos usar a modalidade wss onde precisamos passar a URL do ggbigdata (mesmo que ele seja privado, toda configura\u00e7\u00e3o deve ser feita com ela e n\u00e3o com o IP), porta que por padr\u00e3o \u00e9 a 443, diret\u00f3rio dos trails, trail file no destino o Domain e a credencial criada para a conex\u00e3o, depois disso basta clicar em Create and Run no fim da p\u00e1gina.<\/p>\n\n\n\n<p>Se todas as informa\u00e7\u00f5es estiverem corretas, logo do Distribution Path deve ser criado e ficar verde:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"412\" src=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/10\/image-10-1024x412.png\" alt=\"\" class=\"wp-image-1111\" srcset=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/10\/image-10-1024x412.png 1024w, https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/10\/image-10-300x121.png 300w, https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/10\/image-10-768x309.png 768w, https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/10\/image-10.png 1259w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>E no deploy do Bigdata voc\u00ea deve ver um Receive Path:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"422\" src=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/10\/image-11-1024x422.png\" alt=\"\" class=\"wp-image-1113\" srcset=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/10\/image-11-1024x422.png 1024w, https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/10\/image-11-300x123.png 300w, https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/10\/image-11-768x316.png 768w, https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/10\/image-11.png 1256w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Replicat<\/h2>\n\n\n\n<p>Agora que j\u00e1 temos nosso Extract extraindo os dados da origem, nosso Distribution enviando os trails para o oggbigdata, vamos configurar a escrita no OSS usando o replicat.<\/p>\n\n\n\n<p>Esse processo \u00e9 bem simples de ser feito via console, a parte importante aqui \u00e9 ter atribu\u00eddo a conex\u00e3o OSS no deploy do bigdata e no trail name especificar o trail que configurou no Distribution Path:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"314\" src=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/10\/image-12-1024x314.png\" alt=\"\" class=\"wp-image-1118\" srcset=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/10\/image-12-1024x314.png 1024w, https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/10\/image-12-300x92.png 300w, https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/10\/image-12-768x235.png 768w, https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/10\/image-12-1536x471.png 1536w, https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/10\/image-12-2048x628.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>O resto do processo \u00e9 bem parecido com o que j\u00e1 descrevi <a rel=\"noreferrer noopener\" href=\"https:\/\/adrianotanaka.com.br\/index.php\/2022\/02\/12\/goldengate-escrevendo-dados-no-oci-streaming\/\" target=\"_blank\">aqui<\/a>, a principal diferen\u00e7a \u00e9 que agora temos o par\u00e2metro <strong>gg.handler.oss.connectionId<\/strong> que s\u00f3 existe no OCI GG.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># Properties file for Replicat repOSS2\r\n# OSS Handler Template\r\ngg.handlerlist=oss\r\ngg.handler.oss.type=kafka\r\ngg.handler.oss.connectionId=ocid1.goldengateconnection.oc1.sa-vinhedo-1.amaaaaaatXXXXXXXXXX\r\n#TODO: Set the template for resolving the topic name.\r\ngg.handler.oss.topicMappingTemplate=${fullyQualifiedTableName}\r\ngg.handler.oss.keyMappingTemplate=${primaryKeys}\r\ngg.handler.oss.mode=op\r\ngg.handler.oss.format=json\r\ngg.handler.oss.format.metaColumnsTemplate=${objectname[table]},${optype[op_type]},${timestamp[op_ts]},${currenttimestamp[current_ts]},${position[pos]}\r\ngg.classpath=$THIRD_PARTY_DIR\/kafka\/*\r\njvm.bootoptions=-Xmx512m -Xms32m<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Testando<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"2535\" height=\"883\" src=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/10\/ggservice-teste.gif\" alt=\"\" class=\"wp-image-1121\"\/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Esse post vai ser bem parecido com o que j\u00e1 escrevi aqui sobre como configurar o GoldenGate for Bigdata para escrever no Streaming, a diferen\u00e7a aqui \u00e9 que vamos usar tudo como servi\u00e7o, tanto o for oracle quanto o for bigdata. Arquitetura Registrando targets Com o lan\u00e7amento do Goldengate Big Data como servi\u00e7o, temos um [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":934,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"material-hide-sections":[],"footnotes":""},"categories":[45,48,8],"tags":[],"class_list":["post-933","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-database","category-goldengate","category-oci"],"_links":{"self":[{"href":"https:\/\/adrianotanaka.com.br\/index.php\/wp-json\/wp\/v2\/posts\/933","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/adrianotanaka.com.br\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/adrianotanaka.com.br\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/adrianotanaka.com.br\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/adrianotanaka.com.br\/index.php\/wp-json\/wp\/v2\/comments?post=933"}],"version-history":[{"count":40,"href":"https:\/\/adrianotanaka.com.br\/index.php\/wp-json\/wp\/v2\/posts\/933\/revisions"}],"predecessor-version":[{"id":1123,"href":"https:\/\/adrianotanaka.com.br\/index.php\/wp-json\/wp\/v2\/posts\/933\/revisions\/1123"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/adrianotanaka.com.br\/index.php\/wp-json\/wp\/v2\/media\/934"}],"wp:attachment":[{"href":"https:\/\/adrianotanaka.com.br\/index.php\/wp-json\/wp\/v2\/media?parent=933"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/adrianotanaka.com.br\/index.php\/wp-json\/wp\/v2\/categories?post=933"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/adrianotanaka.com.br\/index.php\/wp-json\/wp\/v2\/tags?post=933"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}