<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Mufalani IT Services</title>
	<atom:link href="http://mufalani.com.br/site/feed/" rel="self" type="application/rss+xml" />
	<link>http://mufalani.com.br/site</link>
	<description>Expert Remote Consulting</description>
	<lastBuildDate>Mon, 29 Apr 2013 20:11:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Path do alert.log 11g pelo sqlplus</title>
		<link>http://mufalani.com.br/site/path-do-alert-log-11g-pelo-sqlplus/</link>
		<comments>http://mufalani.com.br/site/path-do-alert-log-11g-pelo-sqlplus/#comments</comments>
		<pubDate>Mon, 29 Apr 2013 19:53:38 +0000</pubDate>
		<dc:creator>Rodrigo Mufalani</dc:creator>
				<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://mufalani.com.br/site/?p=680</guid>
		<description><![CDATA[Para facilitar a minha vida no acesso do arquivo alert.log, visto que em cada máquina que acessamos o caminho é variável, criei um script para mostrar o caminho do alert.log a partir de uma visão interna que está disponível desde a versão do Oracle 11gR1, apresento a vocês a view X$DBGDIREXT. Até o Oracle 10.2 [...]]]></description>
			<content:encoded><![CDATA[<p>Para facilitar a minha vida no acesso do arquivo alert.log, visto que em cada máquina que acessamos o caminho é variável, criei um script para mostrar o caminho do alert.log a partir de uma visão interna que está disponível desde a versão do Oracle 11gR1, apresento a vocês a view X$DBGDIREXT.</p>
<p>Até o Oracle 10.2 a Oracle mantinha a estrutura de diretório de traces idêntica por diversos releases do Oracle database. Dai veio a feature do DIAG e a coisa toda mudou, para quem já estava acostumado com o caminho antigo, como eu, as vezes é um pouco difícil lembrar do caminho novo quando está verificando um problema. Afinal, comecei a trabalhar com o Oracle 8.0 e 8i, mas já tive que dar manutenção até em Oracle 7.3.4 no passado.</p>
<p>Tem alguns métodos para achar o arquivo. Vou mostrar o mais difícil primeiro, que é memorizar essa nova estrutura de diretórios:</p>
<p>$ORACLE_BASE/diag/rdbms/&lt;DBNAME&gt;/&lt;INSTNAME&gt;/trace/alert_&lt;INSTNAME&gt;.log</p>
<p>Onde:</p>
<p>DBNAME = Nome do seu banco de dados (se for single é o nome da instance)<br />
INSTNAME = Nome da instância ou SID<br />
$ORACLE_BASE = Variável bem conhecida dos DBA&#8217;s é a base do software Oracle.</p>
<p>Agora o jeito que eu estou usando:</p>
<p>Eu adicionei as linhas abaixo no meu script glogin.sql</p>
<p>def alert=unknown<br />
column alertfile noprint new_value alert<br />
set termout off<br />
select LOGICAL_PATH||&#8217;/'||LOGICAL_FILE alertfile<br />
from sys.X$DBGDIREXT<br />
where logical_file = (select &#8216;alert_&#8217;||instance_name||&#8217;.log&#8217; from v$instance);</p>
<p>Quando me logo em um banco de dados como &#8220;SYS&#8221; ele preenche a variável alert no sqlplus, então basta usar o comando &#8220;SQL&gt; def alert&#8221; e o sqlplus te mostra o path correto do seu alert.</p>
<p>SQL&gt; def alert<br />
DEFINE ALERT = &#8220;/dsv/oracle/diag/rdbms/dsv/dsv/trace/alert_dsv.log&#8221; (CHAR)</p>
<p>O acesso a esta view X$ só é permitido com SYS e o login fica um pouco mais lento por causa de mais um comando você está fazendo, mas o resultado vale a pena, pelo menos para mim.</p>
<p>Caso não queira alterar o seu arquivo e glogin.sql e usar quando necessário, também funciona.</p>
<p>&#8211; script whereismyalert.sql</p>
<p>select LOGICAL_PATH||&#8217;/'||LOGICAL_FILE alert_file<br />
from X$DBGDIREXT<br />
where logical_file = (select &#8216;alert_&#8217;||instance_name||&#8217;.log&#8217; from v$instance);</p>
<div>   Há algum tempo atrás eu mostrei como consultar o conteúdo do alert através do sqlplus no <a title="post" href="http://mufalani.com.br/site/usando-sql-ver-o-alert-log-11g/">post</a> já em meu blog.</p>
<p>Espero que essa dica ajude as pessoas que assim como eu estão ficando velhos&#8230; kkkkkk</p>
<p>Att,<br />
@Mufalani<br />
@Br_Oracle_ACEs<br />
&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://mufalani.com.br/site/path-do-alert-log-11g-pelo-sqlplus/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Plano ruim? Cheque seu tipo de dados</title>
		<link>http://mufalani.com.br/site/plano-ruim-cheque-seu-tipo-de-dados/</link>
		<comments>http://mufalani.com.br/site/plano-ruim-cheque-seu-tipo-de-dados/#comments</comments>
		<pubDate>Sun, 21 Apr 2013 21:23:23 +0000</pubDate>
		<dc:creator>Rodrigo Mufalani</dc:creator>
				<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://mufalani.com.br/site/?p=675</guid>
		<description><![CDATA[Recentemente eu tive um problema com um cliente onde algumas queries usando BIND estavam fazendo plano errado. Depois de comparar o tipo de dado que o otimizador estava recebendo com o que estava na tabela verifiquei que a query estava fazendo um plano extremamente ineficiente devido a uma conversão implícita de dados. Vamos ver o [...]]]></description>
			<content:encoded><![CDATA[<p>Recentemente eu tive um problema com um cliente onde algumas queries usando BIND estavam fazendo plano errado. Depois de comparar o tipo de dado que o otimizador estava recebendo com o que estava na tabela verifiquei que a query estava fazendo um plano extremamente ineficiente devido a uma conversão implícita de dados.</p>
<p>Vamos ver o exemplo abaixo:</p>
<p>1) Criei uma tabela chamada t1</p>
<p>SQL&gt; create table t1 (colvar varchar2(10), colnum number);</p>
<p>2) Vamos preencher dados de testes nessa tabela para realizar algumas queries e ver como essa conversão é perigosa em alguns casos e em outros nem tanto.</p>
<p>SQL&gt; begin</p>
<p>2    for i in 1..1000000 loop</p>
<p>3      insert into t1 values (i, i);</p>
<p>4    end loop;</p>
<p>5   commit;</p>
<p>6* end;</p>
<p>/</p>
<p>3) Vamos coletar estatísticas dessa nova tabela para que o otimizador tenha mais informação para decidir sobre como vai resolver as queries</p>
<p>SQL&gt; exec dbms_stats.gather_table_stats(user, &#8216;T1&#8242;, null, method_opt=&gt;&#8217;FOR TABLE FOR ALL COLUMNS SIZE REPEAT&#8217;, cascade=&gt;true);;</p>
<p>4) Criei um índice na coluna com tipo de dados varchar e também na coluna numerica, note que apenas tenho 1 ocorrência de valores para cada linha, poderia até criar uma PK nessa coluna.</p>
<p>SQL&gt; create index ix1 on t1(colvar);</p>
<p>SQL&gt; create index ix2 on t1(colnum);</p>
<p>5) Vamos primeiro checar planos de execução em cima do tipo de dados varchar;</p>
<p>SQL&gt; select * from t1 where colvar=1;</p>
<p>Plano de Execuc?o</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
Plan hash value: 3617692013<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
|   0 | SELECT STATEMENT  |      |     1 |    12 |   669   (6)| 00:00:09 |<br />
|*  1 |  TABLE ACCESS FULL| T1   |     1 |    12 |   669   (6)| 00:00:09 |<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>Predicate Information (identified by operation id):</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>1 &#8211; filter(TO_NUMBER(&#8220;COLVAR&#8221;)=1)</p>
<p>&nbsp;</p>
<p>Estatisticas<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
12  recursive calls<br />
0  db block gets<br />
2358  consistent gets<br />
1630  physical reads<br />
0  redo size<br />
410  bytes sent via SQL*Net to client<br />
364  bytes received via SQL*Net from client<br />
2  SQL*Net roundtrips to/from client<br />
4  sorts (memory)<br />
0  sorts (disk)<br />
1  rows processed</p>
<p>Obs.: Note o que o omitizador do Oracle faz, filter(TO_NUMBER(&#8220;COLVAR&#8221;)=1), por isso ele não usou o índice.</p>
<p>&nbsp;</p>
<p>6) Agora vamos ajudar o otimizador e passar o tipo de dados correto:</p>
<p>&nbsp;</p>
<p>SQL&gt; select * from t1 where colvar=&#8217;1&#8242;;</p>
<p>Plano de Execuc?o</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>Plan hash value: 748304776</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
| Id  | Operation                   | Name | Rows  | Bytes | Cost (%CPU)| Time     |<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
|   0 | SELECT STATEMENT            |      |     1 |    12 |     1   (0)| 00:00:01 |<br />
|   1 |  TABLE ACCESS BY INDEX ROWID| T1   |     1 |    12 |     1   (0)| 00:00:01 |<br />
|*  2 |   INDEX RANGE SCAN          | IX1  |     1 |       |     1   (0)| 00:00:01 |<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>Predicate Information (identified by operation id):<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>2 &#8211; access(&#8220;COLVAR&#8221;=&#8217;1&#8242;)</p>
<p>Estatisticas<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
1  recursive calls<br />
0  db block gets<br />
5  consistent gets<br />
3  physical reads<br />
0  redo size<br />
414  bytes sent via SQL*Net to client<br />
364  bytes received via SQL*Net from client<br />
2  SQL*Net roundtrips to/from client<br />
0  sorts (memory)<br />
0  sorts (disk)<br />
1  rows processed</p>
<p>Obs.: Podemos notar que o Oracle agora decidiu por um plano muito mais tranquilo e fez muito menos esforço para entregar a única linha para o usuário.</p>
<p>7) Agora vamos fazer o mesmo comparativo com o tipo de dados numérico</p>
<p>SQL&gt; select * from t1 where colnum=&#8217;1&#8242;;</p>
<p>&nbsp;</p>
<p>Plano de Execuc?o<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
Plan hash value: 3248492971<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
| Id  | Operation                   | Name | Rows  | Bytes | Cost (%CPU)| Time     |<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
|   0 | SELECT STATEMENT            |      |     1 |    12 |     1   (0)| 00:00:01 |<br />
|   1 |  TABLE ACCESS BY INDEX ROWID| T1   |     1 |    12 |     1   (0)| 00:00:01 |<br />
|*  2 |   INDEX RANGE SCAN          | IX2  |     1 |       |     1   (0)| 00:00:01 |<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
Predicate Information (identified by operation id):</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>2 &#8211; access(&#8220;COLNUM&#8221;=1)</p>
<p>Estatisticas</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>1  recursive calls<br />
0  db block gets<br />
5  consistent gets<br />
2  physical reads<br />
0  redo size<br />
414  bytes sent via SQL*Net to client<br />
364  bytes received via SQL*Net from client<br />
2  SQL*Net roundtrips to/from client<br />
0  sorts (memory)<br />
0  sorts (disk)<br />
1  rows processed</p>
<p> <img src='http://mufalani.com.br/site/wp-includes/images/smilies/icon_cool.gif' alt='8)' class='wp-smiley' /> Quando passamos o tipo de correto para ajudar o otimizador o Oracle faz exatamente o mesmo plano:</p>
<p>SQL&gt; select * from t1 where colnum=1;</p>
<p>Plano de Execuc?o</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
Plan hash value: 3248492971<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
| Id  | Operation                   | Name | Rows  | Bytes | Cost (%CPU)| Time     |<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
|   0 | SELECT STATEMENT            |      |     1 |    12 |     1   (0)| 00:00:01 |<br />
|   1 |  TABLE ACCESS BY INDEX ROWID| T1   |     1 |    12 |     1   (0)| 00:00:01 |<br />
|*  2 |   INDEX RANGE SCAN          | IX2  |     1 |       |     1   (0)| 00:00:01 |<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>Predicate Information (identified by operation id):<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>2 &#8211; access(&#8220;COLNUM&#8221;=1)</p>
<p>&nbsp;</p>
<p>Estatisticas<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
1  recursive calls<br />
0  db block gets<br />
5  consistent gets<br />
0  physical reads<br />
0  redo size<br />
414  bytes sent via SQL*Net to client<br />
364  bytes received via SQL*Net from client<br />
2  SQL*Net roundtrips to/from client<br />
0  sorts (memory)<br />
0  sorts (disk)<br />
1  rows processed</p>
<p>Fica a lição aprendida de que temos que tomar cuidado com conversão implícita de dados, de qualquer maneira, porém, se ela foi feita em uma coluna com tipo de dados numérico o otimizador do Oracle não faz nenhuma besteira. Sabem por que? Simples, em uma coluna com tipo de dados numérico eu só posso gravar number, ao passo que em colunas de dados varchar eu posso gravar number, datas e strings.</p>
<p>Tomem cuidado, pois uma pequena query fazendo uma coisa errada pode significar muito tempo perdido, pois o Oracle teria que sempre ler 23Mb no caso de testes acima para me fornecer a informação de apenas 1 linha.</p>
<p>Att,</p>
<p>Mufalani</p>
]]></content:encoded>
			<wfw:commentRss>http://mufalani.com.br/site/plano-ruim-cheque-seu-tipo-de-dados/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Evil WMSYS.WM_CONCAT</title>
		<link>http://mufalani.com.br/site/evil-wm_concat/</link>
		<comments>http://mufalani.com.br/site/evil-wm_concat/#comments</comments>
		<pubDate>Fri, 12 Apr 2013 21:16:49 +0000</pubDate>
		<dc:creator>Rodrigo Mufalani</dc:creator>
				<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://mufalani.com.br/site/?p=668</guid>
		<description><![CDATA[Essa semana eu tive um problema grave em um cliente onde algumas aplicações estavam parando pois a tablespace temporária estava 100% cheia, em primeiro momento aumentei o espaço, algumas horas depois o espaço havia sido completamente esgotado e mais uma vez a aplicação enfrentou problemas. Comecei a analisar as queries da aplicação tentando entender onde [...]]]></description>
			<content:encoded><![CDATA[<p>Essa semana eu tive um problema grave em um cliente onde algumas aplicações estavam parando pois a tablespace temporária estava 100% cheia, em primeiro momento aumentei o espaço, algumas horas depois o espaço havia sido completamente esgotado e mais uma vez a aplicação enfrentou problemas. Comecei a analisar as queries da aplicação tentando entender onde estavam sendo alocado todo esse espaço.</p>
<p>Como o cliente usa aplicações web conectadas usando pool de conexões, essa situação se agravou devido ao fato de segmentos temporários alocados em uma sessão somente são desalocados quando ela se desconecta do banco de dados, então o perfil dessa aplicação era encher dezenas de gigabytes em alguns minutos. O que me chamou a atenção foi ver segmentos do tipo LOB sendo alocados constantemente (v$tempseg_usage), porém, eu estava fazendo join com a v$session e os sql_id&#8217;s estavam sendo atualizados a todo instante, e isso não me dava uma  figura exata do que realmente estava acontecendo.</p>
<p>Verifiquei também que algumas das queries nessas sessões estavam usando a função WM_CONCAT tinham custo bem baixo, executavam em segundos e as outras, em sua grande maioria, usavam muito pouco ORDER BY, GROUP BY ou HASH JOINS que são rotinas que exigem da área temporária do Oracle.</p>
<p>Vou mostrar um caso de testes em uma base logado como SYS, pode fazer conectado com um usuário que tenha privégios de create table, consulta ao dicionário de dados ou acesso as views v$sql,v$tempseg_usage,v$session e dba_objects.</p>
<p>1) Criação de uma tabela &#8220;t&#8221; com algumas linhas</p>
<p>SQL&gt; create table t as select * from dba_objects;</p>
<p>Table created.</p>
<p>2) Verificação de quantas linhas existem na tabela &#8220;t&#8221;</p>
<p>SQL&gt; select count(1) from t;</p>
<p>COUNT(1)<br />
&#8212;&#8212;&#8212;-<br />
93701</p>
<p>3) A query abaixo mostra a quantidade de espaço usada por uma sessão conectada como &#8220;SYS&#8221;, inicialmente irá mostrar nada</p>
<p>select<br />
s.sid<br />
, s.serial#<br />
, s.sql_id<br />
, s.username<br />
, t.segtype<br />
, s.program<br />
, t.blocks<br />
, round((t.blocks*8096)/1024/1024,2) uso_mbs<br />
from<br />
v$session s<br />
, v$tempseg_usage t<br />
, v$sql sql<br />
where<br />
t.session_addr = s.saddr<br />
and t.sqladdr = s.sql_address<br />
and t.session_num=s.serial#<br />
and s.sql_id = t.sql_id<br />
and s.sql_id = sql.sql_id<br />
and s.sql_child_number=sql.child_number<br />
and s.username =&#8217;SYS&#8217;;</p>
<p>no rows selected</p>
<p>4) Usando a função WM_CONCAT para concatenar alguns dados e mostrar na mesma linha:</p>
<p>SQL&gt; set long 20000</p>
<p>SQL&gt; select wm_concat(owner||&#8217; &#8216;||object_type||&#8217; &#8216;||object_name)<br />
from t<br />
where rownum &lt; 5001;</p>
<p>WM_CONCAT(OWNER||&#8221;||OBJECT_TYPE||&#8221;||OBJECT_NAME)<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
JOB_NAME,SYS INDEX I_DIR$INSTANCE_ACTTYP,SYS INDEX I_DIR$INSTANCE_END_TIME,SYS T<br />
ABLE DIR$RESONATE_OPERATIONS,SYS INDEX I_DIR$RESONATE_UI,SYS INDEX I_DIR$RESONAT<br />
E_STATUS,SYS INDEX I_DIR$RESONATE_END_TIME,SYS INDEX I_DIR$RESONATE_ALERT_NAME,S<br />
YS TABLE DIR$ALERT_HISTORY,SYS INDEX I_DIR$ALERT_HISTORY_NAME,SYS INDEX I_DIR$AL<br />
ERT_HISTORY_ACTION_ID,SYS INDEX I_DIR$ALERT_HISTORY_REASON_ID,SYS INDEX I_DIR$AL<br />
ERT_HISTORY_AT,SYS TABLE DIR$REASON_STRINGS,SYS INDEX I_DIR$REASON_STRINGS_UI,SY<br />
S TABLE DIR$DATABASE_ATTRIBUTES,SYS INDEX I_DIR$DB_ATTRIBUTES_UI,SYS TABLE DIR$V<br />
ICTIM_POLICY,SYS TABLE DIR$NODE_ATTRIBUTES,SYS INDEX I_DIR$NODE_ATTRIBUTES_ATTR,<br />
SYS TABLE DIR$SERVICE_ATTRIBUTES,SYS INDEX I_DIR$SERVICE_ATTRIBUTES_UI,SYS INDEX<br />
I_DIR$SERVICE_ATTRIBUTES_ATTR,SYS TABLE CACHE_STATS_1$,SYS INDEX I_CACHE_STATS_<br />
1,SYS SEQUENCE CACHE_STATS_SEQ_1,SYS TABLE CACHE_STATS_0$,SYS INDEX I_CACHE_STAT</p>
<p>5) Rodei a query novamente do passo 3 e olha o resultado:</p>
<p>SID    SERIAL# SQL_ID        USERNAME     SEGTYPE   PROGRAM                                      BLOCKS    USO_MBS<br />
&#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8212; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;-<br />
1758       3047 1xk8hsn1wacp7 SYS          LOB_INDEX sqlplus@oraclehomolog (TNS V1-V3)              2944      22,73<br />
1758       3047 1xk8hsn1wacp7 SYS          LOB_DATA  sqlplus@oraclehomolog (TNS V1-V3)             41984     324,16</p>
<p>6) Vamos checar que sql_id é esse que tanto usa área temporária do Oracle</p>
<p>SQL&gt; select sql_fulltext from v$sql where sql_id=&#8217;1xk8hsn1wacp7&#8242;;</p>
<p>SQL_FULLTEXT<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
select wm_concat(owner||&#8217; &#8216;||object_type||&#8217; &#8216;||object_name)<br />
from t<br />
where rownum &lt; 5001</p>
<p>Checando no Metalink eu achei a nota abaixo, que nem precisa abrir para entender o recado.</p>
<p>WMSYS.WM_Concat Should not be used for customer applications, it is an internal function [ID 1336219.1]</p>
]]></content:encoded>
			<wfw:commentRss>http://mufalani.com.br/site/evil-wm_concat/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GUOB &#8211; Real World Performance in RIO</title>
		<link>http://mufalani.com.br/site/guob-real-world-performance-in-rio/</link>
		<comments>http://mufalani.com.br/site/guob-real-world-performance-in-rio/#comments</comments>
		<pubDate>Wed, 03 Apr 2013 15:54:46 +0000</pubDate>
		<dc:creator>Rodrigo Mufalani</dc:creator>
				<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://mufalani.com.br/site/?p=636</guid>
		<description><![CDATA[Ontem ocorreu no Rio de Janeiro o primeiro evento do GUOB de 2013, e foi na minha cidade!!! O renomado trio Andrew Holdsworth, Tom Kyte e Graham Wood fizeram uma palestra excepcional e deram diversas dicas preciosas sobre problemas comuns de performance de nosso cotidiando. Para os que não puderam comparecer, digo que perderam uma [...]]]></description>
			<content:encoded><![CDATA[<p>Ontem ocorreu no Rio de Janeiro o primeiro evento do GUOB de 2013, e foi na minha cidade!!! O renomado trio Andrew Holdsworth, Tom Kyte e Graham Wood fizeram uma palestra excepcional e deram diversas dicas preciosas sobre problemas comuns de performance de nosso cotidiando.</p>
<p>Para os que não puderam comparecer, digo que perderam uma excelente oportunidade de passar o dia com grandes nomes da Comunidade Oracle no mundo. Irei postar algumas fotos do GUOB:</p>
<p><strong>Tom Kyte</strong>, autor do popular site AskTom Blog</p>
<p><strong>Andrew Holdsworth</strong>, Líder do Time da Oracle Real World Database Performance</p>
<p><strong>Graham Wood</strong>, renomado arquiteto em Oracle Database Performance e uma das mentes por trás do AWR e ASH</p>
<p>&nbsp;</p>
<p>Agenda do evento</p>
<p>&nbsp;</p>
<p><a href="http://mufalani.com.br/site/wp-content/uploads/2013/04/DSC_0528.jpeg"><img class="aligncenter size-full wp-image-646" title="Agenda" src="http://mufalani.com.br/site/wp-content/uploads/2013/04/DSC_0528.jpeg" alt="" width="887" height="588" /></a></p>
<p>&nbsp;</p>
<p>Presidente do GUOB, Eduardo Hahn fazendo a abertura do evento</p>
<p>&nbsp;</p>
<p><a href="http://mufalani.com.br/site/wp-content/uploads/2013/04/DSC_0550.jpeg"><img class="aligncenter size-full wp-image-648" title="DSC_0550" src="http://mufalani.com.br/site/wp-content/uploads/2013/04/DSC_0550.jpeg" alt="" width="887" height="588" /></a></p>
<p>&nbsp;</p>
<p>Uma voz da Oracle do brasil, Vera Cook, falando para o Grupo de Usuários Oracle do Brasil</p>
<p>&nbsp;</p>
<p><a href="http://mufalani.com.br/site/wp-content/uploads/2013/04/DSC_0552.jpeg"><img class="aligncenter size-full wp-image-651" title="DSC_0552" src="http://mufalani.com.br/site/wp-content/uploads/2013/04/DSC_0552.jpeg" alt="" width="887" height="588" /></a></p>
<p>&nbsp;</p>
<p>Início da palestra e início das melhores dicas de performance</p>
<p>&nbsp;</p>
<p><a href="http://mufalani.com.br/site/wp-content/uploads/2013/04/DSC_0554.jpeg"><img class="aligncenter size-full wp-image-652" title="DSC_0554" src="http://mufalani.com.br/site/wp-content/uploads/2013/04/DSC_0554.jpeg" alt="" width="887" height="588" /></a></p>
<p>&nbsp;</p>
<p>Hora do networking no coffe-break oferecido aos participantes do GUOB</p>
<p>&nbsp;</p>
<p><a href="http://mufalani.com.br/site/wp-content/uploads/2013/04/DSC_0556.jpeg"><img class="aligncenter size-full wp-image-654" title="DSC_0556" src="http://mufalani.com.br/site/wp-content/uploads/2013/04/DSC_0556.jpeg" alt="" width="887" height="588" /></a></p>
<p>&nbsp;</p>
<p>Mais  coffe-break e mais networking para o pessoal do evento</p>
<p>&nbsp;</p>
<p><a href="http://mufalani.com.br/site/wp-content/uploads/2013/04/DSC_0559.jpeg"><img class="aligncenter size-full wp-image-655" title="DSC_0559" src="http://mufalani.com.br/site/wp-content/uploads/2013/04/DSC_0559.jpeg" alt="" width="887" height="588" /></a></p>
<p>&nbsp;</p>
<p>Meu momento fã, Tom Kyte e Mufalani</p>
<p>&nbsp;</p>
<p><a href="http://mufalani.com.br/site/wp-content/uploads/2013/04/DSC_0560.jpg"><img class="aligncenter size-large wp-image-656" title="DSC_0560" src="http://mufalani.com.br/site/wp-content/uploads/2013/04/DSC_0560-1024x1001.jpg" alt="" width="1024" height="1001" /></a></p>
<p>&nbsp;</p>
<p>Momento fã novamente com Andrew, Mufalani e Graham</p>
<p>&nbsp;</p>
<p><a href="http://mufalani.com.br/site/wp-content/uploads/2013/04/DSC_0562.jpeg"><img class="aligncenter size-full wp-image-657" title="DSC_0562" src="http://mufalani.com.br/site/wp-content/uploads/2013/04/DSC_0562.jpeg" alt="" width="887" height="588" /></a></p>
<p>&nbsp;</p>
<p>Graham vestindo a role de DBA para mostrar como uma aplicação pode complicar um banco de dados</p>
<p>&nbsp;</p>
<p><a href="http://mufalani.com.br/site/wp-content/uploads/2013/04/DSC_0566.jpeg"><img class="aligncenter size-full wp-image-658" title="DSC_0566" src="http://mufalani.com.br/site/wp-content/uploads/2013/04/DSC_0566.jpeg" alt="" width="887" height="588" /></a></p>
<p>&nbsp;</p>
<p>Andrew vestindo a role do Arquiteto de sistemas, estragando as coisas para Graham</p>
<p>&nbsp;</p>
<p><a href="http://mufalani.com.br/site/wp-content/uploads/2013/04/DSC_0585.jpeg"><img class="aligncenter size-full wp-image-660" title="DSC_0585" src="http://mufalani.com.br/site/wp-content/uploads/2013/04/DSC_0585.jpeg" alt="" width="887" height="588" /></a></p>
<p>&nbsp;</p>
<p>Sala cheia preenchendo suas avaliações sobre o evento, o que valia um passe livre para o próximo GUOB.</p>
<p>&nbsp;</p>
<p><a href="http://mufalani.com.br/site/wp-content/uploads/2013/04/DSC_0605.jpeg"><img class="aligncenter size-full wp-image-661" title="DSC_0605" src="http://mufalani.com.br/site/wp-content/uploads/2013/04/DSC_0605.jpeg" alt="" width="887" height="588" /></a></p>
<p>&nbsp;</p>
<p>Encerramento do evento feito pelo presidente, Eduardo Hahn e início do sorteio.</p>
<p><a href="http://mufalani.com.br/site/wp-content/uploads/2013/04/DSC_0607.jpeg"><img class="aligncenter size-full wp-image-662" title="DSC_0607" src="http://mufalani.com.br/site/wp-content/uploads/2013/04/DSC_0607.jpeg" alt="" width="887" height="588" /></a></p>
<p>Ganhador da primeira entrada para o próximo GUOB</p>
<p>&nbsp;</p>
<p><a href="http://mufalani.com.br/site/wp-content/uploads/2013/04/DSC_0622.jpeg"><img class="aligncenter size-full wp-image-663" title="DSC_0622" src="http://mufalani.com.br/site/wp-content/uploads/2013/04/DSC_0622.jpeg" alt="" width="887" height="588" /></a></p>
<p>&nbsp;</p>
<p>Ganhador do segundo passe para o próximo GUOB</p>
<p>&nbsp;</p>
<p><a href="http://mufalani.com.br/site/wp-content/uploads/2013/04/DSC_06241.jpeg"><img class="aligncenter size-full wp-image-664" title="DSC_0624" src="http://mufalani.com.br/site/wp-content/uploads/2013/04/DSC_06241.jpeg" alt="" width="887" height="588" /></a></p>
<p>&nbsp;</p>
<p>Ganhador do terceiro passe livre para o próximo GUOB</p>
<p>&nbsp;</p>
<p><a href="http://mufalani.com.br/site/wp-content/uploads/2013/04/DSC_0625.jpeg"><img class="aligncenter size-full wp-image-665" title="DSC_0625" src="http://mufalani.com.br/site/wp-content/uploads/2013/04/DSC_0625.jpeg" alt="" width="887" height="588" /></a></p>
<p>Espero que as pessoas que participaram tenham aproveitado tanto quanto eu aproveitei, é trabalhoso, mas depois que o evento sai do papel está sendo executado vemos o quanto é gratificante fazer parte de tudo isso.</p>
<p>Agradeço imensamente as pessoas que puderam compareceram e esperamos vê-los nos próximos eventos.</p>
<p>Qualquer dúvida ou comentário, entre em contato rodrigo@mufalani.com.br</p>
<p>Forte abraço,</p>
<p>Mufalani</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://mufalani.com.br/site/guob-real-world-performance-in-rio/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Apex tour &#8211; LAD</title>
		<link>http://mufalani.com.br/site/apex-tour-lad/</link>
		<comments>http://mufalani.com.br/site/apex-tour-lad/#comments</comments>
		<pubDate>Tue, 16 Oct 2012 18:33:43 +0000</pubDate>
		<dc:creator>Rodrigo Mufalani</dc:creator>
				<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://mufalani.com.br/site/?p=630</guid>
		<description><![CDATA[No dia 05/11 vai acontecer mais um encontro promovido pelo GUOB em São Paulo onde o assunto é APEX , o APEX Tour América latina que é mais um tour de alto nível organizado pelo GUOB, o LAOUC e a Oracle. Esse tour vai passar somente pela Argentina e Uruguai além do Brasil. Então corra e [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://mufalani.com.br/site/wp-content/uploads/2012/10/BANNER_WEB_680X320.jpg"><img class="aligncenter size-large wp-image-631" title="BANNER_WEB_680X320" src="http://mufalani.com.br/site/wp-content/uploads/2012/10/BANNER_WEB_680X320-1024x484.jpg" alt="" width="1024" height="484" /></a></p>
<p>No dia 05/11 vai acontecer mais um encontro promovido pelo GUOB em São Paulo onde o assunto é APEX , o APEX Tour América latina que é mais um tour de alto nível organizado pelo GUOB, o LAOUC e a Oracle. Esse tour vai passar somente pela Argentina e Uruguai além do Brasil. Então corra e não deixe de fazer sua inscrição para um evento sobre tecnologia Oracle.</p>
<p>O APEX (APplication EXpress) é uma tecnologia livre da Oracle, e para quem não ouviu ainda sobre o mesmo eu sugiro dar uma conferida em <a href="http://www.oracle.com/technetwork/developer-tools/apex/index.html">http://www.oracle.com/technetwork/developer-tools/apex/index.html</a></p>
<p>No <a href="http://apextour2012.com/apex/f?p=242:2:0">Site do evento</a> que é todo escrito em APEX, você poderá realizar a sua inscrição para o evento. Agora vem a melhor parte, o evento é gratuito, só que as vagas são limitadas, então corra faça sua inscrição que pode ser realizada pelo link que está no site do GUOB <a href="http://www.guob.com.br/">http://www.guob.com.br/</a> ou diretamente pelo site do evento.</p>
<p>Att,</p>
<p>@mufalani</p>
]]></content:encoded>
			<wfw:commentRss>http://mufalani.com.br/site/apex-tour-lad/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Guob Tech Day</title>
		<link>http://mufalani.com.br/site/guob-tech-day/</link>
		<comments>http://mufalani.com.br/site/guob-tech-day/#comments</comments>
		<pubDate>Fri, 22 Jun 2012 18:16:11 +0000</pubDate>
		<dc:creator>Rodrigo Mufalani</dc:creator>
				<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://mufalani.com.br/site/?p=617</guid>
		<description><![CDATA[Amigos, Gostaria de convidá-los a participar do Guob Tech Day 2012 que será ainda maior do que o evento de 2011. Vagas são limitadas e as inscrições já estão abertas Link para inscrições Estarão presentes palestrantes como Tom Kyte, Graham Wood, Andrew Holdsworth, Dimitri Gielies, Craig Shallahamer, Tim Tow, Bruno Souza, Patanjali Venkatacharaya, Dana Singleterry [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.guob.com.br/index.php?page=inscricoes-4"><img class="alignnone" src="http://www.guob.com.br/uploads/images/GUOB%20TECH%20DAY%202012/banner_680x320.jpg" alt="" width="680" height="320" /></a></p>
<p>Amigos,</p>
<p>Gostaria de convidá-los a participar do Guob Tech Day 2012 que será ainda maior do que o evento de 2011. Vagas são limitadas e as inscrições já estão abertas</p>
<p><a href="http://www.guob.com.br/index.php?page=inscricoes-4">Link para inscrições</a></p>
<p>Estarão presentes palestrantes como <strong>Tom Kyte, Graham Wood, Andrew Holdsworth, Dimitri Gielies, Craig Shallahamer, Tim Tow, Bruno Souza, Patanjali Venkatacharaya, Dana Singleterry e Francisco Munoz Alvarez.</strong></p>
<p>Este ano, contaremos com a presença do evento mundialmente conhecido, Real World Performance, onde <strong>Tom Kyte, Graham Wood e Andrew Holdsworth </strong>realizam simultaneamente um grande workshop sobre performance de banco de dados e aplicações.</p>
<p>Reservem já suas passagens e hotéis!!!</p>
<p>Nos encontramos lá!!!</p>
<p>Abraços,</p>
<p>@mufalani</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://mufalani.com.br/site/guob-tech-day/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DBMS_MONITOR (por usuário)</title>
		<link>http://mufalani.com.br/site/dbms_monitor-por-usuario/</link>
		<comments>http://mufalani.com.br/site/dbms_monitor-por-usuario/#comments</comments>
		<pubDate>Tue, 17 Apr 2012 18:00:54 +0000</pubDate>
		<dc:creator>Rodrigo Mufalani</dc:creator>
				<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://mufalani.com.br/site/?p=609</guid>
		<description><![CDATA[Estava precisando realizar um trace por usuário na versão 10gr2, e este usuário se conecta através de várias aplicações e inclusive programas para rodar queries (SQL*PLUS/TOAD/Plsql Developer/Navigator e etc) daí resolvi dar uma olhada na dbms_monitor que até já tinha postado http://mufalani.com.br/site/fazendo-traces-para-investigar-problemas/ a muito tempo atrás como usar algumas procedures deste package. Na documentação oficial [...]]]></description>
			<content:encoded><![CDATA[<p>Estava precisando realizar um trace por usuário na versão 10gr2, e este usuário se conecta através de várias aplicações e inclusive programas para rodar queries (SQL*PLUS/TOAD/Plsql Developer/Navigator e etc) daí resolvi dar uma olhada na dbms_monitor que até já tinha postado <a title="post dbms_monitor" href="http://mufalani.com.br/site/fazendo-traces-para-investigar-problemas/">http://mufalani.com.br/site/fazendo-traces-para-investigar-problemas/</a> a muito tempo atrás como usar algumas procedures deste package.</p>
<p>Na documentação oficial do 10gr2 (versão 10.1 foi onde a Oracle introduziu essa package) podemos achar mais informações</p>
<p><a title="http://docs.oracle.com/cd/B19306_01/appdev.102/b14258/d_monitor.htm#sthref4019]:" href="http://docs.oracle.com/cd/B19306_01/appdev.102/b14258/d_monitor.htm#sthref4019]:">http://docs.oracle.com/cd/B19306_01/appdev.102/b14258/d_monitor.htm#sthref4019]:</a></p>
<p>A maneira mais fácil de realizar trace de um usuário foi utilizando a procedure DBMS_MONITOR.CLIENT_ID_TRACE_ENABLE que nos permite informar o valor para a coluna que quando igual ao da coluna CLIENT_IDENTIFIER da V$SESSION nos produz no diretório UDUMP os traces que eu precisava. Só esbarrei em um problema, como alguns blogs que consultei na net dizem que o client_identier é o username, errado, a coluna client_identifier assim como a coluna client_info são preenchidas através de packages DBMS_SESSION e DBMS_APPLICATION_INFO respectivamente e os valores na visão vem nulos por padrão.</p>
<p>Abaixo segue um exemplo de uma trigger de logon que serve para preencher a coluna client_identifier da v$session com o mesmo valor igual ao nome do usuário que estou me conectando ao banco. Isso é bom para não ter que solicitar nenhuma mudança em aplicações existentes.</p>
<p>CREATE OR REPLACE TRIGGER TESTE.SET_TRACE AFTER LOGON ON DATABASE</p>
<p>DECLARE</p>
<p>USUARIO VARCHAR2(30);</p>
<p>BEGIN</p>
<p>USUARIO := SYS_CONTEXT(&#8216;USERENV&#8217;,'SESSION_USER&#8217;);</p>
<p>IF USUARIO IN (&#8216;TESTE&#8217;) THEN &#8212; só faz isso para o usuário teste</p>
<p>DBMS_SESSION.SET_IDENTIFIER(&#8216;TESTE&#8217;);</p>
<p>END IF;</p>
<p>EXCEPTION WHEN OTHERS THEN<br />
NULL;<br />
END;<br />
/</p>
<p>Lembrando que podemos colocar qualquer valore string nesse campo.</p>
<p>No nosso caso, eu coloquei TESTE para ficar mais fácil o entendimento, espero que não confundam, no select abaixo podemos conferir todo mundo que está conectado com o usuário TESTE e que a trigger fez sua mágica.</p>
<p>SELECT *<br />
FROM V$SESSION<br />
WHERE CLIENT_IDENTIFIER=&#8217;TESTE&#8217;;</p>
<p>Feito isso, podemos então ligar o trace dos usuários que se conectaram no banco com a conta TESTE. Para tal, utilizamos a dbms_monitor conforme o exemplo abaixo:</p>
<p>BEGIN<br />
DBMS_MONITOR.CLIENT_ID_TRACE_ENABLE(&#8216;TESTE&#8217;, TRUE, FALSE);<br />
END;<br />
/</p>
<p>Verifique que está habilitado consultando a visão abaixo:</p>
<p>SELECT *<br />
FROM DBA_ENABLED_TRACES;</p>
<p>Depois de coletar traces por um período que achar razoável, pode desabilitar a coleta de traces, e verificar sempre se ele está desligado. Uma vez quase enchi o disco da Oracle home de um servidor que administrava.</p>
<p>Desabilitando o trace:</p>
<p>BEGIN<br />
DBMS_MONITOR.CLIENT_ID_TRACE_DISABLE(&#8216;TESTE&#8217;);<br />
END;<br />
/</p>
<p>Depois de desabilitar o trace, use o trcsess para juntar os traces em um único arquivo</p>
<p>trcsess [output=<output file="" name="">] [session=] [clientid=] [service=] [action=] [module=] </output></p>
<p>output=<output file="" name=""> output destination default being standard output.<br />
session= session to be traced.<br />
Session id is a combination of session Index &amp; session serial number e.g. 8.13.<br />
clientid= clientid to be traced.<br />
service= service to be traced.<br />
action= action to be traced.<br />
module= module to be traced.<br />
Space separated list of trace files with wild card &#8216;*&#8217; supported.</output></p>
<p>Depois disso, use o tkprof para formatar o trace de forma que melhor queira:</p>
<p>Usage: tkprof tracefile outputfile [explain= ] [table= ]<br />
[print= ] [insert= ] [sys= ] [sort= ]<br />
table=schema.tablename Use &#8216;schema.tablename&#8217; with &#8216;explain=&#8217; option.<br />
explain=user/password Connect to ORACLE and issue EXPLAIN PLAN.<br />
print=integer List only the first &#8216;integer&#8217; SQL statements.<br />
aggregate=yes|no<br />
insert=filename List SQL statements and data inside INSERT statements.<br />
sys=no TKPROF does not list SQL statements run as user SYS.<br />
record=filename Record non-recursive statements found in the trace file.<br />
waits=yes|no Record summary for any wait events found in the trace file.<br />
sort=option Set of zero or more of the following sort options:<br />
prscnt number of times parse was called<br />
prscpu cpu time parsing<br />
prsela elapsed time parsing<br />
prsdsk number of disk reads during parse<br />
prsqry number of buffers for consistent read during parse<br />
prscu number of buffers for current read during parse<br />
prsmis number of misses in library cache during parse<br />
execnt number of execute was called<br />
execpu cpu time spent executing<br />
exeela elapsed time executing<br />
exedsk number of disk reads during execute<br />
exeqry number of buffers for consistent read during execute<br />
execu number of buffers for current read during execute<br />
exerow number of rows processed during execute<br />
exemis number of library cache misses during execute<br />
fchcnt number of times fetch was called<br />
fchcpu cpu time spent fetching<br />
fchela elapsed time fetching<br />
fchdsk number of disk reads during fetch<br />
fchqry number of buffers for consistent read during fetch<br />
fchcu number of buffers for current read during fetch<br />
fchrow number of rows fetched<br />
userid userid of user that parsed the cursor</p>
<p>Abraços,</p>
<p>@mufalani</p>
]]></content:encoded>
			<wfw:commentRss>http://mufalani.com.br/site/dbms_monitor-por-usuario/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Collaborate 12 (Virtual Class)</title>
		<link>http://mufalani.com.br/site/collaborate-12-virtual-class/</link>
		<comments>http://mufalani.com.br/site/collaborate-12-virtual-class/#comments</comments>
		<pubDate>Thu, 12 Apr 2012 18:56:23 +0000</pubDate>
		<dc:creator>Rodrigo Mufalani</dc:creator>
				<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://mufalani.com.br/site/?p=587</guid>
		<description><![CDATA[&#160; Está chegando o Collaborate 12. Do dia 22 até 26 de Abril de 2012 ocorrerá um grande evento para a comunidade Oracle em Las Vegas nos Estados Unidos e se você gostaria muito de estar por lá para participar do evento, mas não pode,  poderá acompanhá-lo online, assim como eu e diversas pessoas ao [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>Está chegando o Collaborate 12.</p>
<p>Do dia 22 até 26 de Abril de 2012 ocorrerá um grande evento para a comunidade Oracle em Las Vegas nos Estados Unidos e se você gostaria muito de estar por lá para participar do evento, mas não pode,  poderá acompanhá-lo online, assim como eu e diversas pessoas ao redor do mundo.</p>
<p>&nbsp;</p>
<p><a href="http://events.ioug.org/p/cm/ld/fid=28"><img class="aligncenter size-full wp-image-589" title="c12_top" src="http://mufalani.com.br/site/wp-content/uploads/2012/04/c12_top1.jpg" alt="" width="940" height="160" /></a></p>
<p>&nbsp;</p>
<p>O Collaborate 12 é um evento organizado pelo IOUG/AOUG/Quest para a comunidade Oracle e terá muitas apresentações sobre diversos assuntos interessantes como Exadata, Cloud Computing, Virtualização, além dos casos de sucessos de migrações entre outros.</p>
<p>Alguns palestrantes que já passaram aqui no Guob e que estarão presentes no evento:</p>
<p>Kai Yu (Dell, inc)<br />
Arup Nanda (Starwood Hotels &amp; Resorts)<br />
Craig Shallahamer (Orapub, inc)</p>
<p>Além deles diversos nomes conhecidos no mercado além de funcionários da própria Oracle serão palestrantes deste evento maravilhoso.</p>
<p>Se puder ir estar presente no evento, tenho certeza de que será incrível!</p>
<p>O custo total com a viagem é pouco alto, então, para diminuir esse custo, o pessoal da organização vai disponibilizar o evento na modalidade virtual class ao custo de US$ 99,00  (4 dias de palestras incríveis com os maiores nomes do mundo Oracle).</p>
<p>Para obter o desconto tem que usar o código de desconto <strong>LAOUC12.</strong></p>
<p>O valor cheio do evento é US$299,00 sendo que informando o código tem US$200,00 de desconto.</p>
<p><a href="http://events.ioug.org/p/cm/ld/fid=58"><img class="size-full wp-image-590 alignleft" title="Vegas" src="http://mufalani.com.br/site/wp-content/uploads/2012/04/Vegas.jpg" alt="" width="150" height="173" /></a></p>
<p>&nbsp;</p>
<p>Ao clicar na imagem ao lado, você será direcionado para fazer a inscrição diretamente no site do IOUG (www.ioug.org) com seu cartão de crédito através de paypal. Muito simples e prático e ainda tem a comodidade de poder acompanhar um evento dessa magnitude sem precisar sair da sua casa. Achei muito legal essa ideia a que venham outros eventos como este e que possamos cada vez mais compartilhar conhecimento, fazer amigos e networking.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Vou anexar a agenda do evento para que tenham como verificar os assuntos que serão discutidos em suas respectivas datas:</p>
<p><a href="http://mufalani.com.br/site/wp-content/uploads/2012/04/Virtual-Schedule-v7.pdf">Agenda Collaborate 12 &#8211; Virtual</a></p>
<p>Eu irei postar no site do GUOB (<a title="Guob" href="http://www.guob.com.br">www.guob.com.br</a>) bastante informações sobre o evento e aqui também no meu blog.</p>
<p>Abraços,</p>
<p>@mufalani</p>
]]></content:encoded>
			<wfw:commentRss>http://mufalani.com.br/site/collaborate-12-virtual-class/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>1º GUOB 2012 eu estava lá!!!</title>
		<link>http://mufalani.com.br/site/1-encontro-guob-2012-eu-estava-la/</link>
		<comments>http://mufalani.com.br/site/1-encontro-guob-2012-eu-estava-la/#comments</comments>
		<pubDate>Sun, 25 Mar 2012 16:10:18 +0000</pubDate>
		<dc:creator>Rodrigo Mufalani</dc:creator>
				<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://mufalani.com.br/site/?p=576</guid>
		<description><![CDATA[Olá amigos, Quando achamos que é só mais um evento com palestras sobre Oracle, nos enganamos. Os eventos do GUOB, para mim, são excelentes pois além de aprendermos sempre um pouco mais sobre tecnologia Oracle ainda podemos nos encontrar e conhecer pessoas maravilhosas. Depois de assistir a palestra de Craig Shallahamer, a palavra evangelista Oracle [...]]]></description>
			<content:encoded><![CDATA[<p>Olá amigos,</p>
<p>Quando achamos que é só mais um evento com palestras sobre Oracle, nos enganamos. Os eventos do GUOB, para mim, são excelentes pois além de aprendermos sempre um pouco mais sobre tecnologia Oracle ainda podemos nos encontrar e conhecer pessoas maravilhosas. Depois de assistir a palestra de Craig Shallahamer, a palavra evangelista Oracle teve outro significado.</p>
<p>Sempre revemos velhos amigos, conhecemos pessoas com as quais, antes só trocávamos e-mails em listas de discussão e mais, podemos ver nossos grandes ídolos. Essas pessoas que sempre admiramos suas carreiras, seus pensamentos e posts em blogs e que o GUOB proporciona o acesso a elas. Em 2010 pudemos ver nada mais nada menos que Tom Kyte e Francisco Muñoz Alvarez e vários outros ACE&#8217;s directors, em 2011 pude conhecer pessoalmente Arup Nanda, Graham Wood, Debra Lilley, Kuassi Mensah, Kai Yu, Hans Forbrich. Ontem, abrindo muito bem o calendário de 2012 pude chegar perto de uma das mentes mais brilhantes do mundo Oracle <a href="http://resources.orapub.com/Default.asp">Craig Shallahamer</a> que nos abrilhantou mostrando um pouco de seus conhecimentos sobre performance em sua primeira palestra &#8220;UNit of work time based performance analysis&#8221; e me surpreendeu dando um show em sua segunda palestra do dia &#8220;Introduction to Oracle buffer cache internals&#8221; onde ele deu nada mais nada menos que um show, prendendo a atenção dos ouvintes e com certeza nunca vi alguém falar  com tanto entusiasmo e em poucos minutos mostrou no detalhe o que alguns demoram horas para explicar e enteder.</p>
<p>Essa foto aqui eu vou guardar de recordação, pena que eu esqueci de levar o meu livro para ele autografar.</p>
<p style="text-align: center;"><a href="http://mufalani.com.br/site/wp-content/uploads/2012/03/DSC07503.jpg"><img class="size-medium wp-image-577 aligncenter" title="me_and_craig" src="http://mufalani.com.br/site/wp-content/uploads/2012/03/DSC07503-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p style="text-align: left;">    Gostaria de agradecer a presença de todos que puderam prestigiar o evento e principalmente ao Eduardo Hahn que dedica muito do seu tempo a fazer do Guob o evento da magnitude que ele é. Obrigado à todos do conselho do Guob também, e por poder fazer parte desse time maravilhoso.</p>
<p style="text-align: left;">Abraços e se agendem, pois 2012 será um ano cheio de eventos!!!</p>
<p style="text-align: left;">Atenciosamente,</p>
<p style="text-align: left;">Rodrigo Mufalani</p>
]]></content:encoded>
			<wfw:commentRss>http://mufalani.com.br/site/1-encontro-guob-2012-eu-estava-la/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Database link Postgres X Oracle</title>
		<link>http://mufalani.com.br/site/database-link-postgres-x-oracle/</link>
		<comments>http://mufalani.com.br/site/database-link-postgres-x-oracle/#comments</comments>
		<pubDate>Tue, 20 Mar 2012 12:54:11 +0000</pubDate>
		<dc:creator>Rodrigo Mufalani</dc:creator>
				<category><![CDATA[Sem categoria]]></category>

		<guid isPermaLink="false">http://mufalani.com.br/site/?p=570</guid>
		<description><![CDATA[–###################################################################### –# Autor : Rodrigo Mufalani (rodrigo@mufalani.com.br) –# Data : Mai 6, 2009 –# De : Mufalani –# Para : –# Motivo: Database link do postgres para o Oracle –###################################################################### –# Obs : –###################################################################### &#8211; 1) ELIMINAÇÃO DO TIPO CASO ELE EXISTA DROP TYPE TP_USUARIO CASCADE; &#8211; 2) PRECISAMOS PARA ISSO DE UM TIPO PARA [...]]]></description>
			<content:encoded><![CDATA[<p>–######################################################################<br />
–# Autor : Rodrigo Mufalani (rodrigo@mufalani.com.br)<br />
–# Data : Mai 6, 2009<br />
–# De : Mufalani<br />
–# Para :<br />
–# Motivo: Database link do postgres para o Oracle<br />
–######################################################################<br />
–# Obs :<br />
–######################################################################</p>
<p>&#8211; 1) ELIMINAÇÃO DO TIPO CASO ELE EXISTA </p>
<p>DROP TYPE TP_USUARIO CASCADE;</p>
<p>&#8211; 2) PRECISAMOS PARA ISSO DE UM TIPO PARA QUE POSSAMOS EXECUTAR A CONSULTA NO ORACLE</p>
<p>CREATE TYPE TP_USUARIO AS (<br />
  &#8220;NO_USUARIO&#8221;               VARCHAR(70),<br />
  &#8220;NO_USUARIO_FONETIZADO&#8221;    VARCHAR(70),<br />
  &#8220;NO_MAE&#8221;                   VARCHAR(70),<br />
  &#8220;NO_MAE_FONETIZADO&#8221;        VARCHAR(70),<br />
  &#8220;NO_PAI&#8221;                   VARCHAR(70),<br />
  &#8220;NO_PAI_FONETIZADO&#8221;        VARCHAR(70)<br />
);</p>
<p>&#8211; 3) CRIACAO DA FUNÇÃO NO POSTGRES</p>
<p>CREATE OR REPLACE FUNCTION FC_CONSULTA_ORACLE(text)<br />
  RETURNS SETOF TP_USUARIO AS<br />
$BODY$<br />
use DBI;</p>
<p># usa o modulo DBI<br />
my $consulta = shift;</p>
<p># Definicao da variavel de entrada da funcao<br />
return unless (defined $consulta);</p>
<p># Abre a conexao com o banco de dados Oracle<br />
my $db_ora = DBI->connect(&#8220;dbi:Oracle:teste&#8221;,<br />
                           &#8220;meuteste&#8221;,<br />
                           &#8220;**************&#8221;) # Senha fica exposta por isso criaremos usuarios especificos<br />
                                             # para conexao com o Oracle<br />
              or die &#8220;Nao obtive acesso ao banco: &#8221; . DBI->errstr;</p>
<p># Variavel que recebe a consulta para execucao<br />
my $sel = $db_ora->prepare($consulta)<br />
          or die &#8220;Nao pude preparar a consulta: &#8221; . $db_ora->errstr;</p>
<p># Execucao da query que foi passada na chamada da funcao<br />
$sel->execute() or die &#8220;Nao pude executar a consulta: &#8221; . $sel->errstr;</p>
<p># Loop com a variavel $row para retornar as varias linhas da query<br />
while (my $row = $sel->fetchrow_hashref)<br />
   {<br />
    return_next($row);<br />
    }</p>
<p># Disconexao do Oracle<br />
$db_ora->disconnect;</p>
<p>return;<br />
$BODY$<br />
  LANGUAGE &#8216;plperlu&#8217; VOLATILE<br />
  COST 100<br />
  ROWS 1000;</p>
<p>&#8211; 4) TORNANDO O POSTGRES O DONO DA FUNÇÃO<br />
ALTER FUNCTION FC_CONSULTA_ORACLE(text) OWNER TO postgres;</p>
<p>&#8211; 5) EXEMPLO DE CONSULTA USANDO A FUNÇÃO NO ORACLE</p>
<p>select a.&#8221;NO_USUARIO&#8221;<br />
   , a.&#8221;NO_USUARIO_FONETIZADO&#8221;<br />
   , a.&#8221;NO_MAE&#8221;<br />
   , a.&#8221;NO_PAI&#8221;<br />
from fc_consulta_oracle(&#8216;select<br />
			                      NO_USUARIO<br />
                            , NO_USUARIO_FONETIZADO<br />
                            , NO_MAE<br />
                            , NO_PAI<br />
                         from<br />
                            tm_usuario<br />
                         where<br />
                            rownum < 10&#8242;) a;</p>
<p>/*</p>
<p>  Para essa consulta funcionar, precisa do módulo perl DBI instalado, existe na comunidade<br />
um database link também usando o DBI/DBD, porém, ele faz sempre acesso full<br />
por isso eu criei essa função em perl dentro do postgres para realizar esse acesso &#8220;indexado&#8221;.<br />
  Quando eu tive que colocar essa rotina em funcionamento, a tabela tinha mais de 100Gb em dados,<br />
imaginem quão desastroso seria um fullscan a todo acesso vindo do postgres&#8230;<br />
  Se você tem mais facilidade com Java, pode usar a mesma tecnologia e escrever uma função<br />
em Java fazendo acesso no Oracle via JDBC. </p>
<p>*/</p>
]]></content:encoded>
			<wfw:commentRss>http://mufalani.com.br/site/database-link-postgres-x-oracle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
