<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Troubleshooting on Café Com Cloud</title><link>https://blog.cafecomcloud.com.br/pt-br/categories/troubleshooting/</link><description>Recent content in Troubleshooting on Café Com Cloud</description><generator>Hugo -- gohugo.io</generator><language>pt-br</language><lastBuildDate>Thu, 16 Aug 2018 16:54:11 -0300</lastBuildDate><atom:link href="https://blog.cafecomcloud.com.br/pt-br/categories/troubleshooting/index.xml" rel="self" type="application/rss+xml"/><item><title>Aplicando Patch em um Engineered System</title><link>https://blog.cafecomcloud.com.br/pt-br/2018/08/16/patching-an-engineered-system/</link><pubDate>Thu, 16 Aug 2018 16:54:11 -0300</pubDate><guid>https://blog.cafecomcloud.com.br/pt-br/2018/08/16/patching-an-engineered-system/</guid><description>&lt;p&gt;Todo mundo no mundo de Oracle DBA sabe o valor chave de usar um Engineered System, tipo Exadata ou Supercluster.&lt;/p&gt;
&lt;p&gt;Em um banco mission critical on-premises, como DBA a gente precisa consolidar muitos bancos, plataforma em diferentes versões dentro de um Engineered System.&lt;/p&gt;
&lt;p&gt;No mundo Engineered System a gente tem diferentes tipos de patch deployment que consiste em um grupo de muitos outros patches pra diferentes versões de bancos / aplicações / sistema / serviços. Eles são chamados de Oracle Engineered Systems Quarterly Patch Deployment (QPD).&lt;/p&gt;
&lt;p&gt;A vantagem chave de usar QPD é ficar com os best practices patches que foram recomendados pela Oracle. O QDP fica disponível pra download a cada 4 meses e se você tem um contrato, você pode deixar a Oracle aplicar pra você via contrato ACS / platinum. Mais informações, você pode ver em &lt;a class="link" href="https://www.oracle.com/assets/as-quarterly-patch-deployment-3042102.pdf" target="_blank" rel="noopener"
 &gt;https://www.oracle.com/assets/as-quarterly-patch-deployment-3042102.pdf&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Experiências pessoais aplicando patch em Engineered Systems (Exadata, Supercluster)&lt;/strong&gt; Eu tenho algumas experiências aplicando patch em muitos ambientes, sejam sistemas Exadata ou Supercluster.&lt;/p&gt;
&lt;p&gt;Primeiro, eu sempre tiro um exachk. É extremamente importante comparar o quão saudável está seu ambiente antes de aplicar. Sempre baixa o último disponível no MOS &amp;ldquo;Oracle Exadata Database Machine exachk or HealthCheck (Doc ID 1070954.1)&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Segundo, eu recomendo a leitura dessas notas:&lt;/p&gt;
&lt;p&gt;Exadata Database Machine and Exadata Storage Server Supported Versions (Doc ID 888828.1)&lt;/p&gt;
&lt;p&gt;Oracle SuperCluster Supported Software Versions - All Hardware Types (Doc ID 1567979.1)&lt;/p&gt;
&lt;p&gt;PS. nessas notas tem algumas referências a outros Engineered Systems. Se você tem no seu ambiente, por favor dá uma olhada no MOS.&lt;/p&gt;
&lt;p&gt;Então antes de baixar, como em todo patch eu recomendo extremamente ler o README de cada patch antes de começar (parece óbvio, mas eu conheço muitos DBAs que não seguem essa regra secreta) e seguir os prechecks como a Oracle recomenda, tipo espaço, checar se tem algum conflito com outro patch, etc.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Algumas dicas baseadas na minha experiência pessoal&lt;/strong&gt; - Na maioria dos casos, durante o patching alguns erros relacionados com datapatch (no apply do banco) acontecem. Não fica com medo e dá uma olhada em:&lt;/p&gt;
&lt;p&gt;Queryable Patch Inventory - Issues/Solutions for ORA-20001: Latest xml inventory is not loaded into table (Doc ID 1602089.1)&lt;/p&gt;
&lt;p&gt;12.1 : Datapatch Fails with ERROR &amp;ldquo;KUP-04004,KUP-04017,KUP-04118,KUP-04095,ORA-29913&amp;rdquo;,&amp;quot; fatal: libjli.so or libpicl.so.1: open failed&amp;quot; (Doc ID 2085653.1)&lt;/p&gt;
&lt;p&gt;- Se você tem um ambiente segregado, sempre aplica patches em DEV ou UAT primeiro.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Exemplos de apply de patch no banco&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;=====&lt;/p&gt;
&lt;p&gt;Não fica com medo se você tomar um erro. Acontece com todo mundo:&lt;/p&gt;
&lt;p&gt;./datapatch -verbose SQL Patching tool version 12.1.0.2.0 Production on Thu Aug 16 14:39:41 2018 Copyright (c) 2012, 2017, Oracle. All rights reserved.&lt;/p&gt;
&lt;p&gt;Log file for this invocation: /u01/app/grid/cfgtoollogs/sqlpatch/sqlpatch_2278_2018_08_16_14_39_41/sqlpatch_invocation.log&lt;/p&gt;
&lt;p&gt;Connecting to database&amp;hellip;OK Note: Datapatch will only apply or rollback SQL fixes for PDBs that are in an open state, no patches will be applied to closed PDBs. Please refer to Note: Datapatch: Database 12c Post Patch SQL Automation (Doc ID 1585822.1) Bootstrapping registry and package to current versions&amp;hellip;done&lt;/p&gt;
&lt;p&gt;Queryable inventory could not determine the current opatch status. Execute &amp;lsquo;select dbms_sqlpatch.verify_queryable_inventory from dual&amp;rsquo; and/or check the invocation log /u01/app/grid/cfgtoollogs/sqlpatch/sqlpatch_2278_2018_08_16_14_39_41/sqlpatch_invocation.log for the complete error. Prereq check failed, exiting without installing any patches.&lt;/p&gt;
&lt;p&gt;Please refer to MOS Note 1609718.1 and/or the invocation log /u01/app/grid/cfgtoollogs/sqlpatch/sqlpatch_2278_2018_08_16_14_39_41/sqlpatch_invocation.log for information on how to resolve the above errors.&lt;/p&gt;
&lt;p&gt;SQL Patching tool complete on Thu Aug 16 14:39:59 2018&lt;/p&gt;
&lt;p&gt;=====&lt;/p&gt;
&lt;p&gt;É tão bom quando tudo funciona como planejado:&lt;/p&gt;
&lt;p&gt;./datapatch -verbose SQL Patching tool version 12.1.0.2.0 Production on Thu Aug 16 14:47:57 2018 Copyright (c) 2012, 2017, Oracle. All rights reserved.&lt;/p&gt;
&lt;p&gt;Log file for this invocation: /u01/app/grid/cfgtoollogs/sqlpatch/sqlpatch_23787_2018_08_16_14_47_57/sqlpatch_invocation.log&lt;/p&gt;
&lt;p&gt;Connecting to database&amp;hellip;OK Note: Datapatch will only apply or rollback SQL fixes for PDBs that are in an open state, no patches will be applied to closed PDBs. Please refer to Note: Datapatch: Database 12c Post Patch SQL Automation (Doc ID 1585822.1) Bootstrapping registry and package to current versions&amp;hellip;done Determining current state&amp;hellip;done&lt;/p&gt;
&lt;p&gt;Current state of SQL patches: Bundle series DBBP: ID 180717 in the binary registry and not installed in any PDB&lt;/p&gt;
&lt;p&gt;Adding patches to installation queue and performing prereq checks&amp;hellip; Installation queue: For the following PDBs: CDB$ROOT PDB$SEED Nothing to roll back The following patches will be applied: 27547374 (DATABASE BUNDLE PATCH 12.1.0.2.180717)&lt;/p&gt;
&lt;p&gt;Installing patches&amp;hellip; Patch installation complete. Total patches installed: 2&lt;/p&gt;
&lt;p&gt;Validating logfiles&amp;hellip; Patch 27547374 apply (pdb CDB$ROOT): SUCCESS logfile: /u01/app/grid/cfgtoollogs/sqlpatch/27547374/22329708/27547374_apply__MGMTDB_CDBROOT_2018Aug16_14_48_44.log (no errors) Patch 27547374 apply (pdb PDB$SEED): SUCCESS logfile: /u01/app/grid/cfgtoollogs/sqlpatch/27547374/22329708/27547374_apply__MGMTDB_PDBSEED_2018Aug16_14_52_35.log (no errors) SQL Patching tool complete on Thu Aug 16 14:55:29 2018&lt;/p&gt;
&lt;p&gt;=====&lt;/p&gt;
&lt;p&gt;Até breve! :-)&lt;/p&gt;</description></item><item><title>O infame jdbc closed connection</title><link>https://blog.cafecomcloud.com.br/pt-br/2017/09/11/the-infamous-jdbc-closed-connection/</link><pubDate>Mon, 11 Sep 2017 12:19:34 -0300</pubDate><guid>https://blog.cafecomcloud.com.br/pt-br/2017/09/11/the-infamous-jdbc-closed-connection/</guid><description>&lt;p&gt;Às vezes você, como DBA, leva a culpa por tudo. O banco está lento, indisponível, sem patch, e a lista vai longe.&lt;/p&gt;
&lt;p&gt;Às vezes, em situações raras, você consegue provar que estavam errados :D&lt;/p&gt;
&lt;p&gt;Semana passada a gente foi chamado pra analisar um problema intermitente de aplicação. O time de app culpou o banco, mostrando o erro &amp;ldquo;java.sql.SQLException: Closed Connection&amp;rdquo; nos logs da app. Tudo no nível de banco foi checado e re-checado, até eles nos chamarem. Longas horas de debug e ainda sem resultados, tentamos uma abordagem diferente. Que tal fazer sniff na placa de rede no app server.. checar o fluxo de comunicação entre APP e banco.&lt;/p&gt;
&lt;p&gt;E foi o que a gente fez:&lt;/p&gt;
&lt;p&gt;tcpdump -i eth0 tcp port 1521 -A -s1500 | awk &amp;lsquo;$1 ~ &amp;ldquo;ORA-&amp;rdquo; {i=1;split($1,t,&amp;ldquo;ORA-&amp;rdquo;);while (i &amp;lt;= NF) {if (i == 1) {printf(&amp;quot;%s&amp;quot;,&amp;ldquo;ORA-&amp;ldquo;t[2])}else {printf(&amp;quot;%s &amp;ldquo;,$i)};i++}printf(&amp;rdquo;\n&amp;rdquo;)}&amp;rsquo;&lt;/p&gt;
&lt;p&gt;Isso nos deu a saída bonitinha:&lt;/p&gt;
&lt;p&gt;bla@app_blaserver:~ # tcpdump -i eth0 tcp port 1521 -A -s1500 | awk &amp;lsquo;$1 ~ &amp;ldquo;ORA-&amp;rdquo; {i=1;split($1,t,&amp;ldquo;ORA-&amp;rdquo;);while (i &amp;lt;= NF) {if (i == 1) {printf(&amp;quot;%s&amp;rdquo;,&amp;ldquo;ORA-&amp;ldquo;t[2])}else {printf(&amp;quot;%s &amp;ldquo;,$i)};i++}printf(&amp;rdquo;\n&amp;rdquo;)}&amp;rsquo; tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 1500 bytes ORA-01403:no data found ORA-00913:too many values ORA-01403:no data found ORA-01403:no data found ORA-01403:no data found ORA-01403:no data found ORA-01403:no data found ORA-01403:no data found ORA-01403:no data found ORA-01403:no data found ORA-01438:value larger than specified precision allowed for this column ORA-06512:at line 2 ORA-00937:not a single-group group function ORA-01403:no data found ORA-01403:no data found ORA-00937:not a single-group group function ORA-01403:no data found ORA-00937:not a single-group group function ORA-01403:no data found ORA-00937:not a single-group group function ORA-01403:no data found&lt;/p&gt;
&lt;p&gt;O ORA-01403 é esperado depois do fetch de cada cursor sendo processado, sem novidade ruim aqui.&lt;/p&gt;
&lt;p&gt;Hummmm.. e quando os ORA-01438/ORA-06512/ORA-00937 são levantados, o que acontece com a conexão? Você pegou, né?&lt;/p&gt;
&lt;p&gt;Depois de checar o que estava causando os erros, o problema intermitente parou, todo mundo ficou feliz, incluindo o time de DBA :D&lt;/p&gt;
&lt;p&gt;(Você precisa adaptar o script pra encaixar com a porta do listener e a placa de rede da sua máquina, beleza?)&lt;/p&gt;
&lt;p&gt;Como sempre, feedbacks são bem vindos.&lt;/p&gt;
&lt;p&gt;Falamos,&lt;/p&gt;
&lt;p&gt;Hang.&lt;/p&gt;</description></item><item><title>db_multiblock_read_count - ser ou não ser?</title><link>https://blog.cafecomcloud.com.br/pt-br/2017/05/25/db_multiblock_read_count-to-be-or-not-to-be/</link><pubDate>Thu, 25 May 2017 18:37:21 -0300</pubDate><guid>https://blog.cafecomcloud.com.br/pt-br/2017/05/25/db_multiblock_read_count-to-be-or-not-to-be/</guid><description>&lt;p&gt;Às vezes você quer usar as coisas com opções default.. e às vezes o default não é bom o suficiente.&lt;/p&gt;
&lt;p&gt;A gente sabe que o db_file_multiblock_read_count é bumpado por default no startup, normalmente você pega 128 blocks por read. Por quê?&lt;/p&gt;
&lt;p&gt;Da documentação Oracle, esse valor é alto, mas o CBO não vai favorecer full table scans.&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Even though the default value may be a large value, the optimizer will not favor large plans if you do not set this parameter. It would do so only if you explicitly set this parameter to a large value.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Beleza. Mas por quê? De um 10053 trace dentro de uma sessão, você pode ver que o CBO vai computar o db_file_multiblock_read_count sempre como &amp;ldquo;8&amp;rdquo;.. mesmo se você ver 128 no spfile.&lt;/p&gt;
&lt;p&gt;O CBO sempre vai usar 8 se você não setar db_file_multiblock_read_count explicitamente. Como saber se você setou db_file_multiblock_read_count como 128? Usa isso:&lt;/p&gt;
&lt;h5 id="select-nvlvaluenull-as-value-from-vspparameter-where-name--db_file_multiblock_read_count"&gt;SELECT nvl(value,&amp;rsquo;*NULL*&amp;rsquo;) AS value FROM v$spparameter WHERE name = &amp;lsquo;db_file_multiblock_read_count&amp;rsquo;;
&lt;/h5&gt;&lt;p&gt;Se isso retornar *NULL*, você não setou db_file_multiblock_read_count, Oracle está te mostrando 128, mas o CBO usa 8. Triste, né?&lt;/p&gt;
&lt;p&gt;Vocês todos leram a documentação e sabem os efeitos de bumpar db_file_multiblock_read_count alto. Full table scans vão acontecer com mais frequência e, como resultado, num sistema OLTP, normalmente você recebe uma ligação do seu chefe (hehe)&lt;/p&gt;
&lt;p&gt;Mas tem um jeito de setar corretamente o db_file_multiblock_read_count.. testando.. por exemplo, dá uma olhada no bloco abaixo. É bobo, eu sei, mas pode te dar um valor mágico pra esse parâmetro.&lt;/p&gt;
&lt;h5 id="set-serveroutput-on-declare-l_count-pls_integer-l_time-pls_integer-l_starting_time-pls_integer-l_ending_time-pls_integer-begin-dbms_outputput_linedbfmbrc-seconds-for-l_dbfmbrc-in-164-loop-execute-immediate-alter-session-set-db_file_multiblock_read_countl_dbfmbrc-execute-immediate-alter-system-flush-buffer_cache-execute-immediate-alter-session-disable-parallel-dml-l_starting_time--dbms_utilityget_time-select--fullt--count-into-l_count-from-big_table-t-l_ending_time--dbms_utilityget_time-l_time--roundl_ending_time-l_starting_time100-dbms_outputput_linel_dbfmbrc-l_time-end-loop-end-"&gt;set serveroutput on DECLARE l_count PLS_INTEGER; l_time PLS_INTEGER; l_starting_time PLS_INTEGER; l_ending_time PLS_INTEGER; BEGIN dbms_output.put_line(&amp;lsquo;dbfmbrc seconds&amp;rsquo;); FOR l_dbfmbrc IN 1..64 LOOP EXECUTE IMMEDIATE &amp;lsquo;ALTER SESSION SET db_file_multiblock_read_count=&amp;rsquo;||l_dbfmbrc; EXECUTE IMMEDIATE &amp;lsquo;ALTER system flush buffer_cache&amp;rsquo;; EXECUTE IMMEDIATE &amp;lsquo;ALTER session disable parallel dml&amp;rsquo;; l_starting_time := dbms_utility.get_time(); SELECT /*+ full(t) */ count(*) INTO l_count FROM big_table t; l_ending_time := dbms_utility.get_time(); l_time := round((l_ending_time-l_starting_time)/100); dbms_output.put_line(l_dbfmbrc||&amp;rsquo; &amp;lsquo;||l_time); END LOOP; END; /
&lt;/h5&gt;&lt;p&gt;(Obrigado Chris Antognini, você é incrível)&lt;/p&gt;
&lt;p&gt;Com esse bloco (cuidado, ele vai levar 60-90 minutos dependendo do tamanho da big table, como conselho, usa uma tabela de 5GB), você vai ter valores, plota um gráfico e vê o comportamento. Não escolhe um valor alto pra OLTP.&lt;/p&gt;
&lt;p&gt;Falamos!&lt;/p&gt;</description></item><item><title>Usando oradebug - eventos 10053 e 10046</title><link>https://blog.cafecomcloud.com.br/pt-br/2017/02/27/using-oradebug-10053-and-10046-events/</link><pubDate>Mon, 27 Feb 2017 12:00:06 -0300</pubDate><guid>https://blog.cafecomcloud.com.br/pt-br/2017/02/27/using-oradebug-10053-and-10046-events/</guid><description>&lt;p&gt;E aí, beleza! Espero que esse artigo te encontre bem. Hoje a gente vai falar sobre oradebug, essa pequena maravilha do Oracle, e como setar os eventos 10046 e 10053 pra troubleshooting de performance.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Primeiro de tudo, o que é oradebug?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Oradebug é uma ferramenta do sqlplus, destinada só pra pessoal de suporte Oracle. Mas ela pode ser bem útil em um monte de situações. Você pode usar pra setar eventos específicos de troubleshooting, usar pra diagnosticar qual interface seu RAC está usando pras mensagens de interconnect, usar pra executar um hanganalyze (o comando, não eu, beleza? =]), system state dumps, errorstack dumps, e a lista vai longe.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Como eu uso?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Primeiro de tudo, você precisa atachar o oradebug a uma sessão/processo específico.&lt;/p&gt;
&lt;p&gt;Usando o ospid:&lt;/p&gt;
&lt;p&gt;Pega o os pid pro processo, normalmente com o comando ps, ou pegando a thread em ambiente Windows. Com o ospid (nesse exemplo 1177)&lt;/p&gt;
&lt;p&gt;oradebug setospid 1177;&lt;/p&gt;
&lt;p&gt;Se você tentar atachar o oradebug a um processo inativo, você vai receber:&lt;/p&gt;
&lt;p&gt;SQL&amp;gt; oradebug setospid 13050; ORA-00072: process &amp;ldquo;13050&amp;rdquo; is not active&lt;/p&gt;
&lt;p&gt;Se tudo correu bem, você vai receber:&lt;/p&gt;
&lt;p&gt;SQL&amp;gt; oradebug setospid 16792; Oracle pid: 150, Unix process pid: 16792, image: oracle@BLASERVER12&lt;/p&gt;
&lt;p&gt;Usando o SID pra atachar o oradebug:&lt;/p&gt;
&lt;p&gt;Primeiro de tudo você precisa descobrir o orapid da sessão, rodando o sql abaixo:&lt;/p&gt;
&lt;p&gt;select p.pid orapid from v$process p, v$session s where s.sid = &amp;amp;SID and p.addr = s.paddr /&lt;/p&gt;
&lt;p&gt;Exemplo:&lt;/p&gt;
&lt;p&gt;SQL&amp;gt; select p.pid orapid from v$process p, v$session s where s.sid = &amp;amp;SID and p.addr = s.paddr / 2 3 4 5 6 Enter value for sid: 651 old 4: where s.sid = &amp;amp;SID new 4: where s.sid = 651&lt;/p&gt;
&lt;p&gt;ORAPID &amp;mdash;&amp;mdash;&amp;mdash;- 152&lt;/p&gt;
&lt;p&gt;SQL&amp;gt; oradebug setorapid 152; Oracle pid: 152, Unix process pid: 5392, image: oracle@BLASERVER12 (TNS V1-V3)&lt;/p&gt;
&lt;p&gt;Tá pronto!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Setando o evento 10046&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;oradebug event 10046 trace name context forever, level 12;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Setando o evento 10053&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;oradebug event 10053 trace name context forever, level 1;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Por que isso é importante?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Você pode usar o 10046 pra pegar informações específicas de sql, tipo objeto, parsing, elapsed time, wait events, bind variables. É uma alternativa pro dbms_monitor e dbms_system, outro jeito de gerar um trace de sessão, e ele pode ser &amp;ldquo;tkprofado&amp;rdquo; também.&lt;/p&gt;
&lt;p&gt;Se você quer entender as decisões do optimizer, não tem jeito melhor que usar um trace 10053. Você vai entender os cost estimates, access paths, query block names, peeked binds, parâmetros de optimizer usados durante o parse.&lt;/p&gt;
&lt;p&gt;Em outro post eu vou dar detalhe sobre os levels, e por que a gente digita &amp;ldquo;name context forever&amp;rdquo;. Esse é um post how-to apenas =]&lt;/p&gt;
&lt;p&gt;Falamos!&lt;/p&gt;</description></item></channel></rss>