<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pt-BR"><generator uri="https://jekyllrb.com/" version="4.3.3">Jekyll</generator><link href="https://tchuqui.github.io/feed.xml" rel="self" type="application/atom+xml"/><link href="https://tchuqui.github.io/" rel="alternate" type="text/html" hreflang="pt-BR"/><updated>2025-04-22T10:24:08-04:00</updated><id>https://tchuqui.github.io/feed.xml</id><title type="html">Thadeu Chuqui</title><subtitle>Um blog sobre dicas profissionais na área de Dados.</subtitle><entry><title type="html">Sincronizando o cofre do Obsidian com Iphone utilizando o Github</title><link href="https://tchuqui.github.io/sincronizar_obsidian_com_iphone_utilizando_github" rel="alternate" type="text/html" title="Sincronizando o cofre do Obsidian com Iphone utilizando o Github"/><published>2025-04-19T21:30:00-04:00</published><updated>2025-04-19T21:30:00-04:00</updated><id>https://tchuqui.github.io/sincronizar_obsidian_com_iphone_utilizando_github</id><content type="html" xml:base="https://tchuqui.github.io/sincronizar_obsidian_com_iphone_utilizando_github"><![CDATA[<p>O <a href="https://obsidian.md/">Obsidian</a> é um software de <code class="language-console highlighter-rouge"><span class="go">base de conhecimento</span></code> pessoal que funciona como um segundo cérebro. Sua função é registrar notas que podem ter um relacionamentos para facilitar a organização de idéias.</p> <blockquote> <p>Além de notas em markdown<sup id="fnref:1" role="doc-noteref"><a href="#fn:1" class="footnote" rel="footnote">1</a></sup>, existem plugins com funcionalidades como Canvas, <a href="https://excalidraw.com/">Excalidraw</a>, Kanban e outros recursos alimentados pela comunidade.</p> </blockquote> <p>O software opera a partir de uma pasta de documentos textos no formato <code class="language-console highlighter-rouge"><span class="go">markdown</span></code>, a qual, dentro do <strong>Obsidian</strong> se chama <code class="language-console highlighter-rouge"><span class="go">cofre</span></code> e pode ser totalmente customizado pelo usuário (acesso total ao código).</p> <p>Cada nova anotação criada no Obsidian gera um documento “.md” e o conteúdo pode ser relacionado com notas existentes, o que auxilia o motor de busca interno da ferramenta a encontrar as notas de forma mais rápida. Também existe a possibilidade de criar <code class="language-console highlighter-rouge"><span class="go">tags</span></code>.</p> <p>Depois de começar a alimentar o cofre, uma visão gráfica igual aos exemplos abaixo tornam-se disponíveis para consultar o relacionamentos:</p> <p style="text-align:center"><img src="/assets/img/2025-04-19-sincronizar_obsidian_com_iphone_utilizando_github/grafo2.png" align="center" alt="Grafo 1" style="max-width: 856px"/></p> <p style="text-align:center"><img src="/assets/img/2025-04-19-sincronizar_obsidian_com_iphone_utilizando_github/grafo.png" align="center" alt="Grafo 2" style="max-width: 856px"/></p> <p>É possível utilizar ferramentas como Dropbox, Onedrive e Icloud para salvar os arquivos, mas com isso você perde o principal recurso do Git, que é o versionamento.</p> <p class="bubble-tip">É possível sincronizar estes arquivos com o Iphone sem nenhum custo utilizando o Github.</p> <p>Vamos lá?</p> <h1 id="tutorial">Tutorial</h1> <h2 id="na-estação-de-trabalho">Na estação de trabalho</h2> <p class="bubble-note">Vamos considerar que o Obsidian já está instalado e com o cofre criado em sua estação de trabalho</p> <p>Existe a opção de sincronismo utilizando o próprio Obsidian, mas para isso é preciso ter uma conta cadastrada e arcar com um custo para utilizar o recurso de sincronismo entre dispositivos. Vou mostrar como podemos utilizar um repositório privado no <a href="https://github.com/">Github</a> para fazer esta função de graça no seu Iphone ou Android.</p> <p style="text-align:center"><img src="/assets/img/2025-04-19-sincronizar_obsidian_com_iphone_utilizando_github/2025-04-19_23-18.png " align="center" alt="obsidian cloud" style="max-width: 956px"/></p> <blockquote> <p>Mostro neste post somente como fazer no Iphone, mas o conceito é o mesmo para Android.</p> </blockquote> <h3 id="instalar-plugin-do-git">Instalar plugin do Git</h3> <p>Primeiro precisamos instalar o plugin não nativo do git no Obsidian, Clique em <code class="language-console highlighter-rouge"><span class="go">Plugins não oficiais</span></code> e depois em Procurar</p> <p style="text-align:center"><img src="/assets/img/2025-04-19-sincronizar_obsidian_com_iphone_utilizando_github/2025-04-19_23-26.png " align="center" alt="git plugin" style="max-width: 956px"/></p> <p>Digite Git no ponto 1 e depois no ponto 2 clique para Instalar o plugin do Git</p> <p style="text-align:center"><img src="/assets/img/2025-04-19-sincronizar_obsidian_com_iphone_utilizando_github/2025-04-19_23-29.png " align="center" alt="git plugin" style="max-width: 956px"/></p> <p>Após instalar o aplicativo será preciso criar um repositório privado no <strong>Github</strong> e fazer um clone em sua estação de trabalho utilizando os seguintes comandos via terminal:</p> <div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre></td><td class="rouge-code"><pre>git clone https://[github]/projeto
</pre></td></tr></tbody></table></code></pre></div></div> <p class="bubble-note">Vamos considerar daqui, o diretório do cofre do Obsidian já versionado com um repositório privado em uma conta do Github.</p> <p>Após versionado, qualquer mudança no Obsidian é indicado no canto inferior direto, conforme a imagem abaixo:</p> <p><img src="/assets/img/2025-04-19-sincronizar_obsidian_com_iphone_utilizando_github/2025-04-19_23-50.png" alt="git painel"/></p> <p class="bubble-warning">Tente não esquecer de subir todas as mudanças importantes para o repositório utilizando os conceitos de versionamento;</p> <h3 id="fluxo-de-versionamento-git">Fluxo de versionamento Git</h3> <p>O fluxo correto para não esquecer de subir as versões corretamente está logo abaixo:</p> <pre><code class="language-mermaid">flowchart LR
  A[Abrir Obsidian] --&gt; B[Git: Pull]
  B --&gt; C[mudanças]
  C --&gt; D[Git: Commit All changes]
  D --&gt; E[Git: Push]
  E --&gt; F[Fechar Solution]
</code></pre> <p>Até este momento, o Obsidian deve estar vinculado ao projeto privado da sua conta no Github</p> <p>Agora seguiremos com a parte principal deste post, que é como Acessar este repositório no github utilizando aplicativos sem custo do Iphone.</p> <p>Vamos lá?</p> <h2 id="no-iphone">No Iphone</h2> <h3 id="instalação-do-obsidian">Instalação do Obsidian</h3> <p>Primeiro instale o aplicativo <strong>Obsidian</strong>, disponível em sua Apple Store e escolha o Icloud para armazenar o cofre. Ao escolher o Icloud uma pasta do Obsidian será criada no repositório do Icloud conforme a imagem abaixo:</p> <p style="text-align:center"><img src="/assets/img/2025-04-19-sincronizar_obsidian_com_iphone_utilizando_github/whats05.jpeg" align="center" alt="git plugin" style="max-width: 356px"/></p> <h3 id="instalação-do-ish-terminal">Instalação do ISH (terminal)</h3> <p>Depois instale o aplicativo ISH, ele é um terminal linux na distribuição mais leve chamada <a href="https://alpinelinux.org/">Alpine</a>, também disponível na Apple Store.</p> <p style="text-align:center"><img src="/assets/img/2025-04-19-sincronizar_obsidian_com_iphone_utilizando_github/whats02.jpeg" align="center" alt="git plugin" style="max-width: 356px"/></p> <p>Ao abrir o app ISH, execute os comandos abaixo no terminal linux Alpine para atualizar o repositório.</p> <div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre></td><td class="rouge-code"><pre>apk update
</pre></td></tr></tbody></table></code></pre></div></div> <p style="text-align:center"><img src="/assets/img/2025-04-19-sincronizar_obsidian_com_iphone_utilizando_github/whats03.jpeg" align="center" alt="git plugin" style="max-width: 356px"/></p> <h3 id="instalação-do-git-no-ish">Instalação do git no ISH</h3> <p>Agora instale o git no diretório apartado do ISH</p> <div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre></td><td class="rouge-code"><pre>apk add git
</pre></td></tr></tbody></table></code></pre></div></div> <p style="text-align:center"><img src="/assets/img/2025-04-19-sincronizar_obsidian_com_iphone_utilizando_github/whats04.jpeg" align="center" alt="git plugin" style="max-width: 356px"/></p> <h3 id="vínculo-do-repositório-obsidian-com-o-icloud">Vínculo do repositório obsidian com o Icloud</h3> <p>Vá ao diretório raiz</p> <div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre></td><td class="rouge-code"><pre><span class="nb">cd</span> /
</pre></td></tr></tbody></table></code></pre></div></div> <p>Crie uma pasta do obsidian na raíz</p> <div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre></td><td class="rouge-code"><pre><span class="nb">mkdir </span>obsidian
</pre></td></tr></tbody></table></code></pre></div></div> <p>Agora vem o pulo do gato que é montar o repositório do Icloud na pasta do obsidian criada anteriormente no ponto de montagem “/obsidian”.</p> <div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre></td><td class="rouge-code"><pre>mount <span class="nt">-t</span> ios <span class="nb">.</span> obsidian
</pre></td></tr></tbody></table></code></pre></div></div> <p>Ao executar o último comando, o aplicativo vai abrir o app <strong>Arquivos</strong> em background e vai pedir para você escolher uma pasta diretamente para ser o ponto de montagem da pasta obsidian. É nesta pasta que você precisa escolher o diretório Obsidian no Icloud e clicar em <code class="language-console highlighter-rouge"><span class="go">Abrir</span></code>.</p> <p style="text-align:center"><img src="/assets/img/2025-04-19-sincronizar_obsidian_com_iphone_utilizando_github/whats05.jpeg" align="center" alt="git plugin" style="max-width: 356px"/></p> <p>Abra o aplicativo do github e copie o endereço do projeto</p> <p style="text-align:center"><img src="/assets/img/2025-04-19-sincronizar_obsidian_com_iphone_utilizando_github/whats06.jpeg" align="center" alt="git plugin" style="max-width: 356px"/></p> <p>Vá na pasta do obsidian</p> <div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre></td><td class="rouge-code"><pre><span class="nb">cd</span> <span class="se">\o</span>bsidian
</pre></td></tr></tbody></table></code></pre></div></div> <p>Agora faça o clone do projeto</p> <div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre></td><td class="rouge-code"><pre>git clone https://[github]/projeto
</pre></td></tr></tbody></table></code></pre></div></div> <p>Despois de digitar a senha, um clone do projeto será baixado para o diretório <code class="language-console highlighter-rouge"><span class="go">\obsidian</span></code> que é praticamente um link até a pasta do Obsidian de dentro do Icloud. Esta é a mágica para conseguir sincronizar o repositório e fazer o Obsidian funcionar no celular.</p> <p style="text-align:center"><img src="/assets/img/2025-04-19-sincronizar_obsidian_com_iphone_utilizando_github/whats07.jpeg" align="center" alt="git plugin" style="max-width: 356px"/></p> <p>Digite o seu usuário do Github e a senha que podem ser feitas de várias formas (chave gpg, chave pública e privada). Escolha a forma de autenticar em seus projetos no Github.</p> <p style="text-align:center"><img src="/assets/img/2025-04-19-sincronizar_obsidian_com_iphone_utilizando_github/whats08.jpeg" align="center" alt="git plugin" style="max-width: 356px"/></p> <p>Ao terminar, fica 100%</p> <p style="text-align:center"><img src="/assets/img/2025-04-19-sincronizar_obsidian_com_iphone_utilizando_github/whats10.jpeg" align="center" alt="git plugin" style="max-width: 356px"/></p> <p>Com isso, o repositório já está em seu celular, especificamente na pasta do Obsidian ocupando o espaço de sua conta no <a href="https://www.icloud.com/">Icloud</a>. Abra o aplicativo Obsidian e veja se está com o conteúdo do seu cofre.</p> <p style="text-align:center"><img src="/assets/img/2025-04-19-sincronizar_obsidian_com_iphone_utilizando_github/whats12.jpeg" align="center" alt="git plugin" style="max-width: 356px"/></p> <p>Depois, você pode configurar usuário e senha dentro do plugin do Obsidian para não precisar executar os comandos do terminal, podendo utilizar os comandos git de dentro do próprio obsidian, conforme as imagens abaixo:</p> <p>Clique na Engrenagem principal do Obsidian e vá no plugin <code class="language-console highlighter-rouge"><span class="go">Git</span></code></p> <p style="text-align:center"><img src="/assets/img/2025-04-19-sincronizar_obsidian_com_iphone_utilizando_github/whats15.jpeg" align="center" alt="git plugin" style="max-width: 356px"/></p> <p>Preencha as informações de conta e senha conforme a imagem abaixo:</p> <p style="text-align:center"><img src="/assets/img/2025-04-19-sincronizar_obsidian_com_iphone_utilizando_github/whats16.jpeg" align="center" alt="git plugin" style="max-width: 356px"/></p> <p>Agora você pode utilizar a opção de dentro do Obsidian para disparar os comandos <strong>Git</strong></p> <p style="text-align:center"><img src="/assets/img/2025-04-19-sincronizar_obsidian_com_iphone_utilizando_github/whats13.jpeg" align="center" alt="git plugin" style="max-width: 356px"/></p> <p>Gostou da dica?</p> <p>Lembre-se de respeitar o fluxo correto para um bom funcionamento do versionamento utilizando conceitos <code class="language-console highlighter-rouge"><span class="go">Git</span></code>.</p> <pre><code class="language-mermaid">flowchart LR
  A[Abrir Obsidian] --&gt; B[Git: Pull]
  B --&gt; C[mudanças]
  C --&gt; D[Git: Commit All changes]
  D --&gt; E[Git: Push]
  E --&gt; F[Fechar Solution]
</code></pre> <p>Legal a dica, né?</p> <p>Comente abaixo caso tenha alguma dúvida!!</p> <h2 id="referência">Referência</h2> <div class="footnotes" role="doc-endnotes"> <ol> <li id="fn:1" role="doc-endnote"> <p>Markdown é um formato de simples de markup, isso é, de marcação de texto. A ideia é marcar um texto informando o que é importante, o que é um tópico, o que são links e imagens, sem a necessidade de utilizar marcações mais complexas, como o HTML. <a href="#fnref:1" class="reversefootnote" role="doc-backlink">&#8617;</a></p> </li> </ol> </div>]]></content><author><name></name></author><category term="Obsidian"/><category term="obsidian"/><category term="github"/><category term="git"/><category term="iphone"/><category term="linux"/><category term="ish"/><summary type="html"><![CDATA[Já imaginou sincronizar o repositório do Obsidian de sua máquina com o Iphone sem pagar nada? Neste post vou mostrar como é possível fazer isso utilizando apenas 3 aplicativos em seu Iphone: ISH (terminal), Icloud e Obsidian]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://tchuqui.github.io/assets/img/2025-04-19-sincronizar_obsidian_com_iphone_utilizando_github/obsidian_git.png"/><media:content medium="image" url="https://tchuqui.github.io/assets/img/2025-04-19-sincronizar_obsidian_com_iphone_utilizando_github/obsidian_git.png" xmlns:media="http://search.yahoo.com/mrss/"/></entry><entry><title type="html">Como recriar ‘Database Link’ Oracle por aplicações customizadas .exe - Módulo de Pesagem - INFLOR</title><link href="https://tchuqui.github.io/desabilitando-database-link-oracle-por-aplicacao-exe" rel="alternate" type="text/html" title="Como recriar ‘Database Link’ Oracle por aplicações customizadas .exe - Módulo de Pesagem - INFLOR"/><published>2025-01-19T17:00:00-04:00</published><updated>2025-01-19T17:00:00-04:00</updated><id>https://tchuqui.github.io/desabilitando-database-link-oracle-por-aplicacao-exe</id><content type="html" xml:base="https://tchuqui.github.io/desabilitando-database-link-oracle-por-aplicacao-exe"><![CDATA[<p>A aplicação envolvida é o <strong>Módulo de Pesagem</strong> da <a href="https://inflor.com/">INFLOR</a>, que foi planejada com a intenção de manter um banco intermediário Oracle que poderia trabalhar <code class="language-console highlighter-rouge"><span class="go">offline</span></code> para não parar o fluxo dos clientes em um sistema apartado quando o MLPS oscilasse ou ficasse indisponível devido à perda do link de internet.</p> <h2 id="arquitetura">Arquitetura</h2> <p style="text-align:center"><img src="/assets/img/2025-01-18-desabilitando-database-link-oracle-por-aplicacao-exe/modulo_pesagem.png" align="center" alt="Modulo de Pesagem" style="max-width: 656px"/></p> <p>A arquitetura consiste em dois bancos Oracle: Um <strong>Oracle Principal</strong> com a <code class="language-console highlighter-rouge"><span class="go">aplicação SGF</span></code> e outro <strong>Oracle Intermediário</strong> com o <code class="language-console highlighter-rouge"><span class="go">Módulo de Pesagem</span></code>. A sincronização entre os bancos acontecia com o apoio de um “Database Link” e um link MPLS, possibilitando a comunicação rápida entre as diferentes regiões.</p> <blockquote> <p>O Módulo de Pesagem ficava OFFLINE automaticamente com a perda de comunicação entre os bancos envolvidos.</p> </blockquote> <h2 id="tabela-verdade">Tabela Verdade</h2> <table class="caption-table"> <thead> <tr> <th style="text-align: center">Módulo ONLINE</th> <th style="text-align: center">Módulo OFFLINE</th> </tr> </thead> <tbody> <tr> <td style="text-align: center">Database Link ON</td> <td style="text-align: center">Database Link OFF</td> </tr> <tr> <td style="text-align: center">aplicação ON_XE1.exe</td> <td style="text-align: center">aplicação OFF_XE1.exe</td> </tr> </tbody> </table> <p class="caption-table">Gatilhos</p> <h2 id="qual-o-problema-e-oportunidade">Qual o Problema e Oportunidade?</h2> <p>O “problema” era que ao oscilar o link de internet, o Módulo de Pesagem ficava OFFLINE e muitas vezes se perdia por não conseguir retomar a comunicação com o SGF, gerando muitos chamados para TI e atuações 24/7 do time. O sistema podia até funcionar por um tempo OFFLINE, mas depois era preciso sincronizá-lo com o SGF para manter as informações consilidados no sistema principal.</p> <p>A solução foi passar para stakeholders<sup id="fnref:1" role="doc-noteref"><a href="#fn:1" class="footnote" rel="footnote">1</a></sup> a função de controlar se o Módulo de Pesagem funcionaria OFFLINE ou ONLINE, por uma aplicação .exe que poderia ser executada de mais de um módulo, ou seja, de mais de um servidor Windows. Neste artigo do <a href="https://tchuqui.github.io/">blog</a> vou te mostrar uma solução que desenvolvi para tirar a função do DBA de editar um <strong>database link</strong> no Oracle.</p> <p>Vamos lá?</p> <h2 id="tutorial">Tutorial</h2> <p>Primeiramente para quem não conhece o que é um Database Link ou Linked Server, a descrição vem logo a seguir em <code class="language-console highlighter-rouge"><span class="go">NOTA</span></code></p> <p class="bubble-note">Database Link no Oracle é um objeto criado em um esquema de um banco de dados que possibilita o acesso a objetos de outro banco de dados.</p> <p>O executável foi gerado a partir de dois arquivos “.bat”, convertidos em “.exe” e disponibilizados na parte superior direita do servidor Windows conforme a imagem abaixo:</p> <p><img src="/assets/img/2025-01-18-desabilitando-database-link-oracle-por-aplicacao-exe/2025-01-18_16-43.png" alt="Tela Stakeholders"/></p> <p class="bubble-warning">Somente usuários com permissões liberadas pela TI podiam executar as aplicações “.exe”</p> <p>Veja o código do arquivo .bat que originou os executáveis</p> <ul> <li>Scripts <ul> <li>off.bat</li> <li>on.bat</li> </ul> </li> </ul> <h3 id="offbat">off.bat</h3> <div class="language-bat highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
</pre></td><td class="rouge-code"><pre><span class="nb">echo</span> <span class="kd">connect</span> <span class="o">[</span><span class="kd">usuario_oracle</span><span class="o">]</span>/<span class="o">[</span><span class="kd">senha_usuario</span><span class="o">]</span>@<span class="o">[</span><span class="kd">SID</span><span class="o">]</span> <span class="o">&gt;</span> <span class="kd">doit</span>.sql
<span class="nb">echo</span> <span class="kd">drop</span> <span class="kd">database</span> <span class="kd">link</span> <span class="o">[</span><span class="kd">DATABASE_LINK</span><span class="o">];</span> <span class="o">&gt;&gt;</span> <span class="kd">doit</span>.sql
<span class="nb">echo</span> <span class="kd">create</span> <span class="kd">database</span> <span class="kd">link</span> <span class="s2">"[DATABASE_LINK]"</span> <span class="kd">connect</span> <span class="kd">to</span> <span class="o">[</span><span class="kd">BANCO_SGF</span><span class="o">]</span> <span class="kd">identified</span> <span class="kd">by</span> <span class="s2">"[senha_usuario]"</span> <span class="kd">using</span> <span class="s1">'(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = [IP_BANCO])(PORT = 1521)))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = [NOME_SERVICO2])))'</span><span class="o">;</span> <span class="o">&gt;&gt;</span> <span class="kd">doit</span>.sql
<span class="nb">echo</span> <span class="k">exit</span> <span class="o">&gt;&gt;</span> <span class="kd">doit</span>.sql
<span class="kd">C</span>:\$ORACLE_HOME\server\bin\sqlplus.exe <span class="na">/nolog </span>@doit.sql
<span class="nb">del</span> <span class="kd">doit</span>.sql
<span class="nb">msg</span> <span class="o">*</span> <span class="s2">"MODULO OFFLINE"</span>
<span class="k">exit</span>
</pre></td></tr></tbody></table></code></pre></div></div> <p>Veja abaixo o que cada linha representa detalhadamente:</p> <ol> <li>conecta no banco com o usuário [usuario_oracle] no SID @[SID]</li> <li>apaga o database link [DATABASE_LINK]</li> <li>cria o database link com o nome do serviço errado propositalmente [NOME_SERVICO2]</li> <li>toda a ação é um texto que vai para o arquivo <code class="language-console highlighter-rouge"><span class="go">doit.sql</span></code></li> <li>o script doit.sql é executado no banco com o parâmetro /nolog para não gerar logs</li> <li>o script doit.sql é apagado</li> <li>a mensagem “MODULO OFFLINE” aparece na tela</li> <li>fecha a conexão com o banco</li> </ol> <p>Com a mesma logica foi possível criar outro script para ativar o Database Link.</p> <h3 id="onbat">on.bat</h3> <div class="language-bat highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
</pre></td><td class="rouge-code"><pre><span class="nb">echo</span> <span class="kd">connect</span> <span class="o">[</span><span class="kd">usuario_oracle</span><span class="o">]</span>/<span class="o">[</span><span class="kd">senha_usuario</span><span class="o">]</span>@<span class="o">[</span><span class="kd">SID</span><span class="o">]</span> <span class="o">&gt;</span> <span class="kd">doit</span>.sql
<span class="nb">echo</span> <span class="kd">drop</span> <span class="kd">database</span> <span class="kd">link</span> <span class="o">[</span><span class="kd">DATABASE_LINK</span><span class="o">];</span> <span class="o">&gt;&gt;</span> <span class="kd">doit</span>.sql
<span class="nb">echo</span> <span class="kd">create</span> <span class="kd">database</span> <span class="kd">link</span> <span class="s2">"[DATABASE_LINK]"</span> <span class="kd">connect</span> <span class="kd">to</span> <span class="o">[</span><span class="kd">BANCO_SGF</span><span class="o">]</span> <span class="kd">identified</span> <span class="kd">by</span> <span class="s2">"[senha_usuario]"</span> <span class="kd">using</span> <span class="s1">'(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = [IP_BANCO])(PORT = 1521)))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = [NOME_SERVICO])))'</span><span class="o">;</span> <span class="o">&gt;&gt;</span> <span class="kd">doit</span>.sql
<span class="nb">echo</span> <span class="k">exit</span> <span class="o">&gt;&gt;</span> <span class="kd">doit</span>.sql
<span class="kd">C</span>:\$ORACLE_HOME\server\bin\sqlplus.exe <span class="na">/nolog </span>@doit.sql
<span class="nb">del</span> <span class="kd">doit</span>.sql
<span class="nb">msg</span> <span class="o">*</span> <span class="s2">"MODULO ONLINE"</span>
<span class="k">exit</span>
</pre></td></tr></tbody></table></code></pre></div></div> <p class="bubble-tip">A diferença é que o serviço foi criado corretamente com o mesmo [NOME_SERVICO] disponível no banco do SGF, possibilitando com isso o sincronismo das informações.</p> <h3 id="executáveis">Executáveis</h3> <p>com os arquivos .bat prontos, podemos gerar os .exe utilizando um software chamado <code class="language-console highlighter-rouge"><span class="go">Bat to Exe Converter</span></code></p> <p style="text-align:center"><img src="/assets/img/2025-01-18-desabilitando-database-link-oracle-por-aplicacao-exe/2025-01-18_17-35.png" align="center" alt="conversao .exe" style="max-width: 756px"/></p> <p>Somente cole o conteúdo do script .bat neste campo marcado e clique para Converter em .exe</p> <p class="bubble-tip">Em Exe-Format selecione 32 Bit.</p> <p style="text-align:center"><img src="/assets/img/2025-01-18-desabilitando-database-link-oracle-por-aplicacao-exe/2025-01-18_17-39.png" align="center" alt="conversao .exe" style="max-width: 756px"/></p> <p>Faça o mesmo com o outro script “on.bat” para gerar o segundo aplicativo.</p> <p>Pronto!!</p> <p style="text-align:center"><img src="/assets/img/2025-01-18-desabilitando-database-link-oracle-por-aplicacao-exe/2025-01-18_17-41.png" align="center" alt="Mensagem OFFLINE" style="max-width: 756px"/></p> <p>No <strong>marcador 1</strong> está o Executável <code class="language-console highlighter-rouge"><span class="go">OFF_XE1.exe</span></code>, que foi acionado pelo stakeholder com permissão de execução. No <strong>marcado 2</strong> é a mensagem que aparece quando o database link foi modificado para um serviço que não encontrará o banco Primário.</p> <p style="text-align:center"><img src="/assets/img/2025-01-18-desabilitando-database-link-oracle-por-aplicacao-exe/2025-01-18_17-44.png" align="center" alt="Modulo de Pesagem offline" style="max-width: 756px"/></p> <p>ao executar o aplicativo <code class="language-console highlighter-rouge"><span class="go">ON_XE1.exe</span></code> a mensagem abaixo indica que o Modulo de Pesagem está ativo.</p> <p style="text-align:center"><img src="/assets/img/2025-01-18-desabilitando-database-link-oracle-por-aplicacao-exe/2025-01-18_17-47.png" align="center" alt="Modulo de Pesagem online" style="max-width: 256px"/></p> <p style="text-align:center"><img src="/assets/img/2025-01-18-desabilitando-database-link-oracle-por-aplicacao-exe/2025-01-18_17-52.png" align="center" alt="Modulo de Pesagem online" style="max-width: 756px"/></p> <p>Gostou da dica?</p> <p>Então é possível automatizar ações de DBA através de uma aplicação .exe via Windows. Você só precisa se certificador da sintaxe correta do script e a permissão correta para o usuário do banco conseguir realizar a operação desejada!!</p> <p>Legal, né?</p> <p>O céu é o limite para a sua criatividade.</p> <h2 id="referência">Referência</h2> <div class="footnotes" role="doc-endnotes"> <ol> <li id="fn:1" role="doc-endnote"> <p>Conceito criado na década de 1980, pelo filósofo norte-americano Robert Edward Freeman, o stakeholder é qualquer indivíduo ou organização que, de alguma forma, é impactado pelas ações de uma determinada empresa. Em uma tradução livre para o português, o termo significa parte interessada. <a href="#fnref:1" class="reversefootnote" role="doc-backlink">&#8617;</a></p> </li> </ol> </div>]]></content><author><name></name></author><category term="Oracle"/><category term="oracle"/><category term="inflor"/><category term="dba"/><category term="database link"/><category term="módulo de pesagem"/><category term="sgf"/><summary type="html"><![CDATA[Todo DBA uma hora vai precisar ter contato com Database Link no Oracle ou Linked Server no SQL Server. Vou te mostrar neste artigo uma solução que desenvolvi para tirar esta função do DBA e passar para um usuário nomeado conseguir editar este tipo de objeto no banco de dados por meio de uma aplicação .exe]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://tchuqui.github.io/assets/img/2025-01-18-desabilitando-database-link-oracle-por-aplicacao-exe/capa_modulo_pesagem.png"/><media:content medium="image" url="https://tchuqui.github.io/assets/img/2025-01-18-desabilitando-database-link-oracle-por-aplicacao-exe/capa_modulo_pesagem.png" xmlns:media="http://search.yahoo.com/mrss/"/></entry><entry><title type="html">Utilizando o Git em projetos SSIS</title><link href="https://tchuqui.github.io/utilizando-o-git-em-projetos-SSIS" rel="alternate" type="text/html" title="Utilizando o Git em projetos SSIS"/><published>2025-01-10T07:00:00-04:00</published><updated>2025-01-10T07:00:00-04:00</updated><id>https://tchuqui.github.io/utilizando-o-git-em-projetos-SSIS</id><content type="html" xml:base="https://tchuqui.github.io/utilizando-o-git-em-projetos-SSIS"><![CDATA[<p>Neste artigo do <a href="https://tchuqui.github.io/">blog</a> vou mostrar de maneira fácil como é possível integrar o seu projeto SSIS (SQL Server Integration Service) com engranagens de versionamento (github, gitlab, bitbucket e outros).</p> <h2 id="o-que-é-o-git">O que é o GIT?</h2> <p>O <a href="https://git-scm.com/">git</a> é um sistema de controle de versão de “código-fonte”, desenvolvido para projetar programas de pequeno à grande porte com velocidade e eficiência. O git segue a linha de “código aberto”, apoio da comunidade e foi desenvolvido por <code class="language-console highlighter-rouge"><span class="go">Linus Torvalds</span></code>, o criador do sistema operacional <a href="https://www.linux.org/">Linux</a>.</p> <blockquote> <p>A ferramenta é disponibilizada gratuitamente para o publico</p> </blockquote> <h2 id="versionamento">Versionamento</h2> <p>Uma ferramenta de versionamento controla cada alteração com atualizações criptografadas, salvas em um servidor formando um histórico imutável e permanente das versões. Este mecanismo é uma alternativa eficiente de backup e agilidade para o “código-fonte”, evitando desastre como a perda de código entre as equipes.</p> <blockquote> <p>Vale ressaltar que é de fácil aprendizagem e utilização.</p> </blockquote> <h2 id="ssis-sql-server-integration-services">SSIS (SQL Server Integration Services)</h2> <p>A grande vantagem de vincular o versionamento em projetos SSIS é que você pode utilizar qualquer máquina para desenvolver, não ficando dependente de estações de trabalho e servidores para avançar.</p> <p>Em grandes projetos, com o <strong>git</strong> configurado corretamente no <a href="https://code.visualstudio.com/"><strong>Visual Studio</strong></a>, mais de um profissional pode atuar simultaneamente em uma <code class="language-console highlighter-rouge"><span class="go">solution</span></code> e aumentar com isso a produtividade da equipe.</p> <p>Vale lembrar que a base dos arquivos do visual studio é o <code class="language-console highlighter-rouge"><span class="go">xml</span></code>, portanto é possível versionar e desmembrar versões do seu código utilizando branchs.</p> <p>Vamos lá?</p> <p class="bubble-note">Vamos considerar o Visual Studio, a feature do SSIS e o git já instalados em sua máquina para seguir com o Tutorial</p> <h2 id="tutorial">Tutorial</h2> <h3 id="preparação-do-gitlab">Preparação do Gitlab</h3> <p>Inicialmente devemos criar um projeto na engranagem de versionamento de sua preferência. Vamos utilizar como exemplo o <a href="https://about.gitlab.com/">gitlab</a></p> <p><img src="/assets/img/2024-08-25-utilizando-o-git-em-projetos-SSIS/2025-01-07_08-36.png" alt="Novo Projeto"/></p> <p>Coloque o nome do projeto e automaticamente ele vai gerar o slug do projeto. Depois siga clicando em <strong>Create Project</strong></p> <p><img src="/assets/img/2024-08-25-utilizando-o-git-em-projetos-SSIS/2025-01-07_08-38.png" alt="Criar Projeto"/></p> <p>Clique em <code class="language-console highlighter-rouge"><span class="go">Code</span></code> na marcação 1 e depois copie o endereço na marcação 2</p> <p><img src="/assets/img/2024-08-25-utilizando-o-git-em-projetos-SSIS/2025-01-07_09-15.png" alt="Copiar o endereço do projeto"/></p> <h3 id="preparação-do-diretório">Preparação do diretório</h3> <p>Crie um diretório em sua máquina com o nome “ETL_SSIS”</p> <p><img src="/assets/img/2024-08-25-utilizando-o-git-em-projetos-SSIS/2025-01-07_09-49.png" alt="Criar pasta" style="max-width: 756px"/></p> <p>Clique com o botão direito do mouse na pasta ETL_SSIS e escolha a opção marcada na imagem abaixo:</p> <p><img src="/assets/img/2024-08-25-utilizando-o-git-em-projetos-SSIS/2025-01-07_10-01.png" alt="Abrir o Git" style="max-width: 756px"/></p> <p>Notem que um terminal do git é aberto a partir do diretório <strong>ETL_SSIS</strong>.</p> <p><img src="/assets/img/2024-08-25-utilizando-o-git-em-projetos-SSIS/2025-01-07_10-04.png" alt="Terminal Git" style="max-width: 556px"/></p> <h3 id="vincular-o-diretório-ao-gitlab">Vincular o diretório ao Gitlab</h3> <p>Agora vamos fazer este diretório ter uma ligação com o projeto <code class="language-console highlighter-rouge"><span class="go">importCSVtoTable</span></code> criado no <strong>gitlab</strong> anteriormente.</p> <p>Digite no terminal</p> <div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre></td><td class="rouge-code"><pre>git clone https://[servidor gitlab]/etl_ssis/importcsvtotable.git
</pre></td></tr></tbody></table></code></pre></div></div> <p>Com este comando, o git vai versionar o repositório existente com o projeto <code class="language-console highlighter-rouge"><span class="go">importCSVtoTable</span></code>, baixando todos os arquivos e criando a pasta <strong>importcsvtotable</strong> com inicialmente o arquivo README.md e a pasta oculta .git</p> <p><img src="/assets/img/2024-08-25-utilizando-o-git-em-projetos-SSIS/2025-01-07_10-56.png" alt="Git Clone" style="max-width: 556px"/></p> <h3 id="criação-do-projeto-no-visual-studio">Criação do projeto no Visual Studio</h3> <p>Agora vamos criar um projeto SSIS no Visual Studio</p> <p><img src="/assets/img/2024-08-25-utilizando-o-git-em-projetos-SSIS/2025-01-07_11-06.png" alt="Abrir Visual Studio" style="max-width: 656px"/></p> <p>no marcador 1 filtre por SSIS e depois clique <strong>Integration Services Project</strong></p> <p><img src="/assets/img/2024-08-25-utilizando-o-git-em-projetos-SSIS/2025-01-07_11-08.png" alt="Criar Projeto SSIS" style="max-width: 856px"/></p> <p>Insira um nome para o Projeto e selecione o repositório que versionamos nos passos anteriores, depois clique em <strong>Criar</strong></p> <p><img src="/assets/img/2024-08-25-utilizando-o-git-em-projetos-SSIS/2025-01-07_11-12.png" alt="Criar Projeto"/></p> <h3 id="entendendo-o-uso-do-git-no-visual-studio">Entendendo o uso do git no Visual Studio</h3> <p>Ao abrir o projeto e incluir um <code class="language-console highlighter-rouge"><span class="go">Data Flow Task</span></code>, note que um lápis com as mudanças pendentes de “commit” aparecem com o número marcado 9 (indicando a quantidade de mudanças comparadas com a versão no final no gitlab).</p> <p><img src="/assets/img/2024-08-25-utilizando-o-git-em-projetos-SSIS/2025-01-07_11-22.png" alt="Criar Projeto"/></p> <p>Existem algumas considerações que devemos nos atentar para utilizar o Visual Studio da forma correta.</p> <p>O fluxo que devemos sempre nos atentar é:</p> <pre><code class="language-mermaid">flowchart LR
  A[Abrir Solution] --&gt; B[pull]
  B --&gt; C[mudanças]
  C --&gt; D[add]
  D --&gt; E[commit]
  E --&gt; F[push]
  F --&gt; G[Fechar Solution]
</code></pre> <p>Ao tentar realizar o primeiro “commit”, este erro vai aparecer na tela, pois será preciso fazer uma ação no marcador 1 (pasta oculta .vs)</p> <p><img src="/assets/img/2024-08-25-utilizando-o-git-em-projetos-SSIS/2025-01-07_14-18.png" alt="error commit" style="max-width: 556px"/></p> <p>Este erro ocorre porque a pasta oculta <strong>.vs</strong> não pode ser versionada, pois é uma pasta temporária criada pelo Visual Studio e não precisa ser salva. Para resolver temos que criar um arquivo <code class="language-console highlighter-rouge"><span class="go">.gitignore</span></code> clicando no item marcado abaixo:</p> <p><img src="/assets/img/2024-08-25-utilizando-o-git-em-projetos-SSIS/2025-01-07_14-21.png" alt="commit" style="max-width: 556px"/></p> <p>Note que agora o arquivo <code class="language-console highlighter-rouge"><span class="go">.gitignore</span></code> foi criado no diretório versionado.</p> <p><img src="/assets/img/2024-08-25-utilizando-o-git-em-projetos-SSIS/2025-01-07_14-27.png" alt="gitignore" style="max-width: 656px"/></p> <p>Agora precisamos incluir a pasta nova ao repositório usando o “git add” para itens novos conforme o botão abaixo:</p> <p><img src="/assets/img/2024-08-25-utilizando-o-git-em-projetos-SSIS/2025-01-07_14-47.png" alt="push" style="max-width: 556px"/></p> <p>Para finalizarmos o fluxo, depois de ter feito toda a mudança no projeto é hora de fazer o <code class="language-console highlighter-rouge"><span class="go">git push</span></code>, que é onde o código vai para o Gitlab e passa a ser versionado. Para realizar esta opção é só clicar no botão mostrado abaixo:</p> <p><img src="/assets/img/2024-08-25-utilizando-o-git-em-projetos-SSIS/2025-01-07_14-31.png" alt="add" style="max-width: 556px"/></p> <p class="bubble-warning">Não se esqueça de incluir um comentário para o commit realizado!</p> <p>Com isso uma mensagem de êxito aparece dizendo que o código foi enviado ao “origin/master”</p> <p><img src="/assets/img/2024-08-25-utilizando-o-git-em-projetos-SSIS/2025-01-07_15-27.png" alt="add" style="max-width: 456px"/></p> <p>Agora os arquivos estão no repositório do Gitlab e podemos visualizar as branchs, commits e alterações de código.</p> <p><img src="/assets/img/2024-08-25-utilizando-o-git-em-projetos-SSIS/2025-01-07_15-31.png" alt="Arquivos estão no gitlab"/></p> <h2 id="explorando-um-pouco-mais">Explorando um pouco mais!!</h2> <p>Editei o projeto incluir duas ferramentas do SSIS - “Flat File Source” e um “OLE DB Destination”. Depois desta inclusão notem que o lápis passa a mostrar 1 alteração e um marcador no Pacote “Package.dtsx” é assinalado.</p> <p><img src="/assets/img/2024-08-25-utilizando-o-git-em-projetos-SSIS/2025-01-07_16-03.png" alt="Mudanças"/></p> <p>Ao clicar no lápis, é só escrever um comentário, fazer um commit e logo depois um push, conforme o fluxo mostrado.</p> <pre><code class="language-mermaid">flowchart LR
  A[Abrir] --&gt; B[pull]
  B --&gt; C[mudanças]
  C --&gt; D[add]
  D --&gt; E[commit]
  E --&gt; F[push]
  F --&gt; G[Fechar]
</code></pre> <p>Logo após fazer o push, o lápis volta a apontar 0 nas alterações, ou seja, está no repositório outra mudança feita. Veja a árvore de commits logo abaixo:</p> <p><img src="/assets/img/2024-08-25-utilizando-o-git-em-projetos-SSIS/2025-01-07_16-08.png" alt="Árvore de Commits"/></p> <p>Podemos agora voltar para a versão anterior caso exista algum equívoco na mudança do projeto clicando em “Exibir todas as confirmações” e clicando em Reverter para a versão escolhida.</p> <p><img src="/assets/img/2024-08-25-utilizando-o-git-em-projetos-SSIS/2025-01-07_16-14.png" alt="exibir confirmações"/></p> <p><img src="/assets/img/2024-08-25-utilizando-o-git-em-projetos-SSIS/2025-01-07_16-16.png" alt="exibir confirmações"/></p> <p>Com isso é possível voltar para cada passo das versões do projeto, sem contar que podemos também utilizar branchs e dividir funcionalidades a serem implementadas por equipes diferentes no mesmo projeto.</p> <p>Gostou da dica?</p> <p>Aventure-se!!!</p>]]></content><author><name></name></author><category term="SSIS"/><category term="git"/><category term="ssis"/><summary type="html"><![CDATA[Já precisou versionar seus projetos de SSIS? Você pode utiliziar o GIT para esta função e trabalhar em equipe nas customizações de projetos de fluxos de cargas utilizando o SSIS. Vou te mostrar como configurar de forma simples neste artigo]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://tchuqui.github.io/assets/img/2024-08-25-utilizando-o-git-em-projetos-SSIS/ssis_git.png"/><media:content medium="image" url="https://tchuqui.github.io/assets/img/2024-08-25-utilizando-o-git-em-projetos-SSIS/ssis_git.png" xmlns:media="http://search.yahoo.com/mrss/"/></entry></feed>