{"id":1125,"date":"2022-12-12T21:31:43","date_gmt":"2022-12-12T21:31:43","guid":{"rendered":"https:\/\/adrianotanaka.com.br\/?p=1125"},"modified":"2022-12-12T21:42:17","modified_gmt":"2022-12-12T21:42:17","slug":"goldengate-initial-load-para-oss-kafka","status":"publish","type":"post","link":"https:\/\/adrianotanaka.com.br\/index.php\/2022\/12\/12\/goldengate-initial-load-para-oss-kafka\/","title":{"rendered":"Goldengate &#8211; Initial Load para OSS\/KAFKA"},"content":{"rendered":"\n<p>Nos meus outros posts sobre OCI Goldengate, falei sobre como configurar uma replica\u00e7\u00e3o entre um banco Oracle e o OSS\/Kafka, nesse artigo vou demonstrar o procedimento para levar dados j\u00e1 existentes.<\/p>\n\n\n\n<p>Caso queira mais detalhes voc\u00ea pode consultar esse artigo: <a href=\"https:\/\/blogs.oracle.com\/dataintegration\/post\/goldengate-microservices-initial-load-instantiation-with-webui\" target=\"_blank\" rel=\"noreferrer noopener\">GoldenGate Microservices Initial Load Instantiation with WebUI<\/a><\/p>\n\n\n\n<p>Basicamente o que vamos fazer \u00e9:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Criar um Extract Definitivo(Ext_hr)<\/li><li>Criar um Extract do tipo Initial Load(INIHR)<\/li><li>Configurar um receiver server a partir do OGG Bigdata lendo o trail do Extract do Initial Load<\/li><li>Configurar um Distribution Service do OGG Oracle para o Bigdata enviando o Trail do Extract Definitivo<\/li><li>Configurar (mas n\u00e3o iniciar) o Replicat Definitivo<\/li><li>Configurar (e iniciar) o Replicat que l\u00ea o trail de initial Load<\/li><li>Iniciar o Replicat Definitivo usando o par\u00e2metro ATCSN <\/li><\/ul>\n\n\n\n<p><\/p>\n\n\n\n<p>A nossa topologia vai ser a seguinte:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1915\" height=\"671\" src=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/12\/image.png\" alt=\"\" class=\"wp-image-1147\" srcset=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/12\/image.png 1915w, https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/12\/image-300x105.png 300w, https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/12\/image-1024x359.png 1024w, https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/12\/image-768x269.png 768w, https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/12\/image-1536x538.png 1536w\" sizes=\"auto, (max-width: 1915px) 100vw, 1915px\" \/><\/figure>\n\n\n\n<p>E vamos aproveitar a parte de credenciais desse outro tutorial <em><a href=\"https:\/\/adrianotanaka.com.br\/index.php\/2022\/10\/21\/oci-configurando-oci-gg-com-gg4bigdata-para-escrever-no-streaming\/\" target=\"_blank\" rel=\"noreferrer noopener\">aqui<\/a><\/em>:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/10\/image-7.png\" alt=\"\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">M\u00e3o na massa<\/h2>\n\n\n\n<p>O primeiro passo \u00e9 criar e iniciar um Extract (EXT_HR) como j\u00e1 fizemos anteriormente nos outros artigos, depois disso vamos criar um Extract do tipo Initial Load(iniHR, c\u00f3digo abaixo) \u00e9 ele que vai ser o respons\u00e1vel por levar todos os dados e por isso nele colocamos o par\u00e2metro SQLPREDICATE &#8216;AS OF SCN XXXXXX&#8217;;<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">EXTRACT iniHR\nUSERIDALIAS atp_vcp DOMAIN OracleGoldenGate\nextfile initLoad3\/ii megabytes 2000 purge\nTABLE TNK_SRC.*, SQLPREDICATE 'AS OF SCN 39083101740223';<\/pre>\n\n\n\n<p>Esse SCN deve ser capturado ap\u00f3s o Extract normal (EXT_HR) ter sido iniciado e voc\u00ea pode usar o seguinte select:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">SELECT to_char(current_scn) FROM V$DATABASE;<\/pre>\n\n\n\n<p>O Extract do tipo Initial load executa apenas uma vez e ap\u00f3s a captura ele para sozinho ficando com o s\u00edmbolo de exclama\u00e7\u00e3o amarelo, um resumo do que foi capturado por ser consultado na tela Report:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"384\" height=\"456\" src=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/12\/image-1.png\" alt=\"\" class=\"wp-image-1149\" srcset=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/12\/image-1.png 384w, https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/12\/image-1-253x300.png 253w\" sizes=\"auto, (max-width: 384px) 100vw, 384px\" \/><\/figure>\n\n\n\n<p>Ou se preferir fazer uma chamada de API:<\/p>\n\n\n\n<p><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">curl -u oggadmin:\"password\" \\<br>-H \"Content-Type: application\/json\" \\<br>-H \"Accept: application\/json\" \\<br>-H 'cache-control: no-cache' \\<br>-X GET https:\/\/endpoint.oci.oraclecloud.com\/services\/adminsrvr\/v2\/extracts\/SEUEXTRACT\/info\/reports\/SEUEXTRACT.rpt | jq -r<\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"855\" height=\"704\" src=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/12\/image-2.png\" alt=\"\" class=\"wp-image-1150\" srcset=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/12\/image-2.png 855w, https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/12\/image-2-300x247.png 300w, https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/12\/image-2-768x632.png 768w\" sizes=\"auto, (max-width: 855px) 100vw, 855px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Receive Service<\/h2>\n\n\n\n<p>Depois que o Extract do tipo Initial Load terminar, voc\u00ea precisa ir no deploy do BigData e criar um receive service apontando para o trail do initial load, voc\u00ea precisa ter as credenciais criadas como mostrei <a rel=\"noreferrer noopener\" href=\"https:\/\/adrianotanaka.com.br\/index.php\/2022\/10\/21\/oci-configurando-oci-gg-com-gg4bigdata-para-escrever-no-streaming\/\" target=\"_blank\">aqui<\/a> , no meu caso criei um receive chamado iniHR, lendo do trail initLoad3\/ii(que est\u00e1 no deploy for oracle) e escrevendo no inihr\/hr (que est\u00e1 no deploy big data).<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"678\" height=\"178\" src=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/12\/image-3.png\" alt=\"\" class=\"wp-image-1153\" srcset=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/12\/image-3.png 678w, https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/12\/image-3-300x79.png 300w\" sizes=\"auto, (max-width: 678px) 100vw, 678px\" \/><\/figure>\n\n\n\n<p>O processo de cria\u00e7\u00e3o tamb\u00e9m est\u00e1 descrito no artigo anterior.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Replicat Initial Load<\/h2>\n\n\n\n<p>Com o Receive Service criado, voc\u00ea j\u00e1 pode criar um replicat para o initial Load, esse processo deve ser feito no deploy do tipo BigData, basta criar o processo lendo o arquivo que o Receive Service est\u00e1 criando(no nosso caso o dest3\/pp) e target como OSS, ap\u00f3s criado, inicie a replica\u00e7\u00e3o, a mesma quantidade que foi extra\u00edda no Oracle deve aparecer na tela de estat\u00edsticas:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1256\" height=\"426\" src=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/12\/gg-iniload.gif\" alt=\"\" class=\"wp-image-1156\"\/><\/figure>\n\n\n\n<p>Depois que todas as linhas passarem pelo Replicat voc\u00ea deve apaga-lo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Distribution Service<\/h2>\n\n\n\n<p>Depois do Replicat do initial Load ter terminado, voc\u00ea deve apaga-lo e criar um novo Distribtuion, dessa vez Origem deploy Oracle e destino BigData:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"721\" height=\"154\" src=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/12\/image-4.png\" alt=\"\" class=\"wp-image-1154\" srcset=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/12\/image-4.png 721w, https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/12\/image-4-300x64.png 300w\" sizes=\"auto, (max-width: 721px) 100vw, 721px\" \/><\/figure>\n\n\n\n<p>O trail de destino deve ser diferente do Trail usado no Receive de Initial Load.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Replicat definitivo <\/h2>\n\n\n\n<p>Depois que o o Replicat do initial Load terminar, basta criar um replicat baseado no Distribution que foi criado anteriormente, esse vai ser o nosso definitivo, o ponto importante aqui \u00e9 que ele deve ser iniciado com o par\u00e2metro ATCSN(Action -&gt; Start With Options):<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1265\" height=\"522\" src=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2022\/12\/rep-def.gif\" alt=\"\" class=\"wp-image-1157\"\/><\/figure>\n\n\n\n<p> <\/p>\n\n\n\n<p>Esse par\u00e2metro indica para o GG ignorar transa\u00e7\u00f5es anteriores e aplicar a partir do SCN especificado.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nos meus outros posts sobre OCI Goldengate, falei sobre como configurar uma replica\u00e7\u00e3o entre um banco Oracle e o OSS\/Kafka, nesse artigo vou demonstrar o procedimento para levar dados j\u00e1 existentes. Caso queira mais detalhes voc\u00ea pode consultar esse artigo: GoldenGate Microservices Initial Load Instantiation with WebUI Basicamente o que vamos fazer \u00e9: Criar um [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1162,"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-1125","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\/1125","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=1125"}],"version-history":[{"count":21,"href":"https:\/\/adrianotanaka.com.br\/index.php\/wp-json\/wp\/v2\/posts\/1125\/revisions"}],"predecessor-version":[{"id":1163,"href":"https:\/\/adrianotanaka.com.br\/index.php\/wp-json\/wp\/v2\/posts\/1125\/revisions\/1163"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/adrianotanaka.com.br\/index.php\/wp-json\/wp\/v2\/media\/1162"}],"wp:attachment":[{"href":"https:\/\/adrianotanaka.com.br\/index.php\/wp-json\/wp\/v2\/media?parent=1125"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/adrianotanaka.com.br\/index.php\/wp-json\/wp\/v2\/categories?post=1125"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/adrianotanaka.com.br\/index.php\/wp-json\/wp\/v2\/tags?post=1125"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}