<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6771588576061782619</id><updated>2011-11-27T16:43:03.440-08:00</updated><category term='blocos'/><category term='TRANSAÇÃO'/><category term='alert.log'/><category term='_allow_resetlogs_corruption'/><category term='controlfile'/><category term='tuning like oracle'/><category term='DISPLAY'/><category term='DEADLOCK'/><category term='perda de archives'/><category term='LOCK'/><category term='etl'/><category term='soft parse'/><category term='replicação no mysql'/><category term='Replicação Semi Sincronizada'/><category term='parsing'/><category term='oracle tuning'/><category term='variaveis bind'/><category term='data warehouse'/><category term='dbid'/><category term='hard parse'/><category term='db2'/><category term='hard parsing'/><category term='buffer cache'/><category term='archivelog'/><category term='sql tuning'/><category term='administrador de banco de dados'/><category term='matar job do datapump'/><category term='exadata'/><category term='job'/><category term='sistema operacional'/><category term='CONCORRÊNCIA DE DADOS'/><category term='ddl oracle'/><category term='v$sql'/><category term='log_archive_dest'/><category term='schema sem linhas'/><category term='enable_ddl_logging'/><category term='get dbid'/><category term='salvar banco de dados'/><category term='SMON'/><category term='performance'/><category term='like'/><category term='bind variables'/><category term='exporta linhas sem dump'/><category term='xhost+'/><category term='processo de commit'/><category term='processo'/><category term='bind'/><category term='recuperação'/><category term='backup'/><category term='export no rows oracle'/><category term='DBWN'/><category term='variaveis de ligação'/><category term='virtualbox'/><category term='buffers'/><category term='V$LOCKED_OBJECT'/><category term='threads'/><category term='library cache'/><category term='logar ddl no oracle'/><category term='kill job datapump oracle'/><category term='mysql'/><category term='V$SQL_BIND_CAPTURE'/><category term='Go Horse Process'/><category term='check table'/><category term='schema'/><category term='instância'/><category term='kill job expdp'/><category term='impdp'/><category term='datapump'/><category term='sql oracle'/><category term='log ddl oracle'/><category term='dba.o que um dba deve saber'/><category term='exp'/><category term='oracle'/><category term='alter system set ENABLE_DDL_LOGGING=true'/><category term='archives'/><category term='tuning oracle'/><category term='oracle vm'/><category term='constraints'/><category term='desfragmentação mysql'/><category term='I/O'/><category term='recuperação de tabela mysql'/><category term='joins'/><category term='innodb'/><category term='checkpoint'/><category term='tempo'/><category term='metodo de join oracle'/><category term='cbo.'/><category term='COMMIT'/><category term='DBA'/><category term='replicação'/><category term='gerar select concatenado'/><category term='expdp'/><category term='find dbid'/><category term='cache de biblioteca'/><category term='scn'/><category term='mecanismo'/><category term='CONCORRÊNCIA'/><category term='descobrir dbid oracle'/><category term='plano de execucao'/><category term='inner loop'/><category term='UNDO'/><category term='asynchronous'/><category term='nested loop'/><category term='palestras'/><category term='hash join'/><category term='build input'/><category term='v$parameter'/><category term='outer loop'/><category term='LOCKS'/><category term='ORA - 16179'/><category term='new features'/><category term='soft parsing'/><category term='merge join'/><category term='probe input'/><category term='guob'/><category term='ROLLBACK'/><category term='novas caracteristicas'/><category term='oracle rac'/><category term='dw'/><category term='tuning'/><category term='slave'/><category term='install oracle database'/><category term='Go Horse'/><category term='find value variable bind'/><category term='explain plan'/><category term='actual_redo_blocks'/><category term='scn oracle'/><category term='spfile'/><category term='PMON'/><category term='buscar valor bind variables'/><category term='conhecimento'/><category term='Instruções sql'/><category term='parse'/><category term='kill datapump'/><category term='export de linhas oracle'/><category term='guob tech day'/><category term='exportar linhas oracle'/><category term='oracle performance'/><category term='database buffer cache'/><category term='bind oracle'/><category term='aprendizado'/><category term='sql server'/><category term='repair table'/><category term='hash join oracle'/><category term='mysql 5.5'/><category term='DISPLAY variable'/><category term='select concatenado'/><category term='myisam'/><category term='kill_job'/><category term='V$Instance_Recovery'/><category term='MTTR'/><category term='Hit Ratio'/><category term='processos'/><category term='matar processo datapump'/><category term='log comandos ddl no oracle'/><category term='Semisynchronous replication'/><category term='full table scan'/><category term='DADOS'/><category term='sql'/><category term='FAST_START_MTTR_TARGET'/><category term='analyze table'/><category term='perda de backup'/><category term='Cache de Hit Hatio'/><category term='log'/><category term='analise'/><category term='mysql 5.5.3'/><category term='rman'/><category term='manutenção de tabelas mysql'/><category term='optmização de tabela mysql'/><category term='ddl'/><category term='shutdown abort'/><category term='falha de instância'/><category term='ORA - 16179 : incremental changes to &quot;log_archive_dest_1&quot; not allowed with spfile'/><category term='Instrução'/><category term='replication'/><category term='master'/><category term='optimize table'/><category term='schema sem dados'/><title type='text'>Mundo do Banco de Dados</title><subtitle type='html'>Soluções, noticías e informações sobre Banco de dados.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://hudsonsantosdba.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6771588576061782619/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://hudsonsantosdba.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Hudson Santos</name><uri>http://www.blogger.com/profile/02017454919238662371</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-WAD9nptVqgE/Tlav6_tYdyI/AAAAAAAAAB8/HexNioKI-KA/s220/perfil.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>25</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6771588576061782619.post-5173017246183385476</id><published>2011-11-23T11:01:00.001-08:00</published><updated>2011-11-23T11:06:15.719-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tuning like oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='tuning'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle tuning'/><category scheme='http://www.blogger.com/atom/ns#' term='like'/><category scheme='http://www.blogger.com/atom/ns#' term='cbo.'/><category scheme='http://www.blogger.com/atom/ns#' term='sql tuning'/><title type='text'>Tuning na Instruçao SQL LIKE no Oracle</title><content type='html'>&lt;br /&gt;Fala pessoal, vou postar aqui um dica simples, que é quando&amp;nbsp;se precisa de um tunning rápido nas declarações "LIKE" &amp;nbsp;que o CBO naturalmente ignora os índices existentes nas colunas&amp;nbsp;utilizadas pelo LIKE para uso de um FTS.&amp;nbsp;Quando ocorre isso temos o recurso de utilizar um hint forçando&amp;nbsp;a utilização do índice.&lt;br /&gt;&lt;br /&gt;No Blog do &lt;a href="http://laurentschneider.com/wordpress/2009/07/how-to-tune-where-name-likebc.html"&gt;Laurent Schneider&lt;/a&gt; tem um demo bem legal.&lt;br /&gt;Abaixo a demonstração.&lt;br /&gt;&lt;br /&gt;&lt;pre class="sql" name="code"&gt;CREATE TABLE lsc_t AS&lt;br /&gt;SELECT&lt;br /&gt;  ROWNUM ID,&lt;br /&gt;  SUBSTR(DBMS_RANDOM.STRING ('n', DBMS_RANDOM.VALUE (2, 8))&lt;br /&gt; || ' '&lt;br /&gt; || DBMS_RANDOM.STRING ('n', DBMS_RANDOM.VALUE (2, 8))&lt;br /&gt; ,1,17) NAME,&lt;br /&gt;  TRUNC(SYSDATE-ABS(10000*DBMS_RANDOM.NORMAL)) birthdate,&lt;br /&gt;  LPAD('X',4000,'X') address&lt;br /&gt;FROM DUAL&lt;br /&gt;CONNECT BY LEVEL &amp;lt;= 1e5;&lt;br /&gt;&lt;br /&gt;ALTER TABLE lsc_t ADD PRIMARY KEY(ID);&lt;br /&gt;&lt;br /&gt;CREATE INDEX lsc_i ON lsc_t(NAME);&lt;br /&gt;&lt;br /&gt;EXEC dbms_stats.gather_table_stats(user,'LSC_T',cascade=&amp;gt;true);&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; SELECT ID, NAME, birthdate&lt;br /&gt;  FROM lsc_t WHERE NAME LIKE '%ABC%';  2&lt;br /&gt;---------------------------------------------------------------------------&lt;br /&gt;| Id  | Operation         | Name  | Rows  | Bytes | Cost (%CPU)| Time     |&lt;br /&gt;---------------------------------------------------------------------------&lt;br /&gt;|   0 | SELECT STATEMENT  |       |  5044 |   123K| 22123   (1)| 00:04:26 |&lt;br /&gt;|*  1 |  TABLE ACCESS FULL| LSC_T |  5044 |   123K| 22123   (1)| 00:04:26 |&lt;br /&gt;---------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;Statistics&lt;br /&gt;----------------------------------------------------------&lt;br /&gt;  379  recursive calls&lt;br /&gt;    0  db block gets&lt;br /&gt;  100090  consistent gets&lt;br /&gt;  100016  physical reads&lt;br /&gt;    0  redo size&lt;br /&gt;    2066  bytes sent via SQL*Net to client&lt;br /&gt;  491  bytes received via SQL*Net from client&lt;br /&gt;    4  SQL*Net roundtrips to/from client&lt;br /&gt;    5  sorts (memory)&lt;br /&gt;    0  sorts (disk)&lt;br /&gt;   35  rows processed&lt;br /&gt;&lt;br /&gt;SWLQL&amp;gt; SELECT /*+INDEX(LSC_T,LSC_I)*/  ID, NAME, birthdate&lt;br /&gt;  FROM lsc_t WHERE NAME LIKE '%ABC%';  2&lt;br /&gt;&lt;br /&gt;-------------------------------------------------------------------------------------&lt;br /&gt;| Id  | Operation                   | Name  | Rows  | Bytes | Cost (%CPU)| Time     |&lt;br /&gt;-------------------------------------------------------------------------------------&lt;br /&gt;|   0 | SELECT STATEMENT            |       |  5044 |   123K|  3574   (1)| 00:00:43 |&lt;br /&gt;|   1 |  TABLE ACCESS BY INDEX ROWID| LSC_T |  5044 |   123K|  3574   (1)| 00:00:43 |&lt;br /&gt;|*  2 |   INDEX FULL SCAN           | LSC_I |  5000 |       |   220   (2)| 00:00:03 |&lt;br /&gt;-------------------------------------------------------------------------------------&lt;br /&gt;Statistics&lt;br /&gt;----------------------------------------------------------&lt;br /&gt;    1  recursive calls&lt;br /&gt;    0  db block gets&lt;br /&gt;  360  consistent gets&lt;br /&gt;  322  physical reads&lt;br /&gt;    0  redo size&lt;br /&gt;  142849  bytes sent via SQL*Net to client&lt;br /&gt;  491  bytes received via SQL*Net from client&lt;br /&gt;    4  SQL*Net roundtrips to/from client&lt;br /&gt;    0  sorts (memory)&lt;br /&gt;    0  sorts (disk)&lt;br /&gt;   35  rows processed&lt;/pre&gt;&lt;pre class="sql" name="code"&gt;&lt;/pre&gt;&lt;pre class="sql" name="code"&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6771588576061782619-5173017246183385476?l=hudsonsantosdba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hudsonsantosdba.blogspot.com/feeds/5173017246183385476/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hudsonsantosdba.blogspot.com/2011/11/tuning-na-instrucao-sql-like-no-oracle.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6771588576061782619/posts/default/5173017246183385476'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6771588576061782619/posts/default/5173017246183385476'/><link rel='alternate' type='text/html' href='http://hudsonsantosdba.blogspot.com/2011/11/tuning-na-instrucao-sql-like-no-oracle.html' title='Tuning na Instruçao SQL LIKE no Oracle'/><author><name>Hudson Santos</name><uri>http://www.blogger.com/profile/02017454919238662371</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-WAD9nptVqgE/Tlav6_tYdyI/AAAAAAAAAB8/HexNioKI-KA/s220/perfil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6771588576061782619.post-1584969987153438703</id><published>2011-11-21T10:13:00.001-08:00</published><updated>2011-11-21T10:21:50.513-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ddl oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='log'/><category scheme='http://www.blogger.com/atom/ns#' term='alter system set ENABLE_DDL_LOGGING=true'/><category scheme='http://www.blogger.com/atom/ns#' term='log comandos ddl no oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='v$parameter'/><category scheme='http://www.blogger.com/atom/ns#' term='alert.log'/><category scheme='http://www.blogger.com/atom/ns#' term='logar ddl no oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='log ddl oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='enable_ddl_logging'/><title type='text'>Habilitar DDL no alert.log Oracle</title><content type='html'>Fala pessoal, o 11g tem um recurso interessante que é habilitar o log de comandos DDLs no alert.log, para habilitar é bem simples basta alterar o parâmetro&amp;nbsp;ENABLE_DDL_LOGGING para true, segue abaixo um pequeno step by step que altera o parâmetro e cria alguns objetos para teste.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="sql" name="code"&gt;COLUMN DESCRIPTION FORMAT A30&lt;br /&gt;COLUMN VALUE FORMAT A30&lt;br /&gt;SET LINESIZE 120&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; select value,isdefault,isses_modifiable, issys_modifiable,isbasic,description  &lt;br /&gt;from v$parameter  where name='enable_ddl_logging';&lt;br /&gt;&lt;br /&gt;VALUE  ISDEFAULT ISSES ISSYS_MOD ISBAS DESCRIPTION&lt;br /&gt;------ --------- ----- --------- ----- -------------------&lt;br /&gt;FALSE   TRUE    TRUE  IMMEDIATE FALSE enable ddl logging&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; alter system set ENABLE_DDL_LOGGING=true ;&lt;br /&gt;&lt;br /&gt;System altered.&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; conn hudson/c402d92&lt;br /&gt;&lt;br /&gt;Connected&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; create table t_hudson as select * from user_tables;&lt;br /&gt;&lt;br /&gt;Table created.&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; grant select on t_hudson to public;&lt;br /&gt;&lt;br /&gt;Grant succeeded.&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; alter table t_hudson read only;&lt;br /&gt;&lt;br /&gt;Table altered.&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; drop table t_hudson ;&lt;br /&gt;&lt;br /&gt;Table dropped.&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;Após a alteração do parâmetro vamos verificar se foi gerado o log no alert.log:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[oracle@rjhud trace]$ tail -f alert_centro.log&lt;br /&gt;&lt;br /&gt;Mon Nov 21 15:58:43 2011&lt;br /&gt;SMCO started with pid=31, OS id=5981&lt;br /&gt;Mon Nov 21 16:08:37 2011&lt;br /&gt;ALTER SYSTEM SET enable_ddl_logging=TRUE SCOPE=SPFILE;&lt;br /&gt;ALTER SYSTEM SET enable_ddl_logging=TRUE SCOPE=BOTH;&lt;br /&gt;Mon Nov 21 16:09:41 2011&lt;br /&gt;create table t_hudson as select * from user_tables&lt;br /&gt;Mon Nov 21 16:10:09 2011&lt;br /&gt;alter table t_hudson read only&lt;br /&gt;drop table t_hudson&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Para maiores informações sobre o parâmetro é só consultar o link:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;http://download.oracle.com/docs/cd/E14072_01/server.112/e10820/initparams078.htm&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6771588576061782619-1584969987153438703?l=hudsonsantosdba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hudsonsantosdba.blogspot.com/feeds/1584969987153438703/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hudsonsantosdba.blogspot.com/2011/11/habilitar-ddl-no-alertlog-oracle.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6771588576061782619/posts/default/1584969987153438703'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6771588576061782619/posts/default/1584969987153438703'/><link rel='alternate' type='text/html' href='http://hudsonsantosdba.blogspot.com/2011/11/habilitar-ddl-no-alertlog-oracle.html' title='Habilitar DDL no alert.log Oracle'/><author><name>Hudson Santos</name><uri>http://www.blogger.com/profile/02017454919238662371</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-WAD9nptVqgE/Tlav6_tYdyI/AAAAAAAAAB8/HexNioKI-KA/s220/perfil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6771588576061782619.post-3644847681408203965</id><published>2011-11-18T06:32:00.001-08:00</published><updated>2011-11-18T06:53:59.090-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='expdp'/><category scheme='http://www.blogger.com/atom/ns#' term='ddl oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='schema'/><category scheme='http://www.blogger.com/atom/ns#' term='gerar select concatenado'/><category scheme='http://www.blogger.com/atom/ns#' term='exp'/><category scheme='http://www.blogger.com/atom/ns#' term='datapump'/><category scheme='http://www.blogger.com/atom/ns#' term='select concatenado'/><category scheme='http://www.blogger.com/atom/ns#' term='exportar linhas oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='ddl'/><category scheme='http://www.blogger.com/atom/ns#' term='exporta linhas sem dump'/><category scheme='http://www.blogger.com/atom/ns#' term='export de linhas oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>Exportar linhas sem dump ou backup no Oracle</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Muitas vezes é necessário obter um número pequenos de linhas de algumas ou todas tabelas de um ambiente de produção, mas nem sempre um dump ou um backup esta&amp;nbsp;disponível&amp;nbsp;ou ainda o tempo de demora pode atrasar muito uma atuação, quem trabalha em consultorias, fabricas e qualquer lugar onde ambiente de produção é um lugar onde você não pode entrar em 1000 seguranças do seu lado sabe do que eu estou falando.&lt;br /&gt;Então um meio muito utilizado é gerar "Inserts" concatenando via selects os famosos :&lt;br /&gt;&lt;br /&gt;&lt;pre class="sql" name="code"&gt;SELECT 'INSER INTO ..... ' &amp;nbsp;|| COLUMNS &amp;nbsp;.....&lt;/pre&gt;Dessa forma é possível obter os dados da tabela de uma forma simples e rápida, o problema é o tempo gasto na hora de gerar esses selects, principalmente se estamos falando de uma tabela com muitas colunas, ou se você precisa de muitas tabelas.&lt;br /&gt;Pensando nisso eu fiz uma package que gera esses selects&amp;nbsp;dinamicamente , recebendo como argumentos o nome de uma tabela&amp;nbsp;com o número de linhas que deseja, ou passando diretamente um onwer e as linhas que precisa.&lt;br /&gt;Óbvio que esse método só é útil quando precisa de um número pequeno de linhas e não tem em mãos outras ferramentas.&lt;br /&gt;&lt;br /&gt;Abaixo o código de criação das packages :&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;pre class="sql" name="code"&gt;CREATE OR REPLACE PACKAGE PKG_DUMP AS&lt;br /&gt;&lt;br /&gt;  PROCEDURE P_DUMP(V_OWNER VARCHAR2,V_ROWS INT);&lt;br /&gt;  FUNCTION V_DUMP(v_table_name VARCHAR2,V_ROWS INT) RETURN VARCHAR2;&lt;br /&gt;&lt;br /&gt;END;&lt;br /&gt;/&lt;br /&gt;CREATE OR REPLACE PACKAGE BODY PKG_DUMP AS&lt;br /&gt;&lt;br /&gt;PROCEDURE P_DUMP(V_OWNER VARCHAR2,V_ROWS INT)&lt;br /&gt;IS&lt;br /&gt;  V_SMT VARCHAR2(3000);&lt;br /&gt;  V_TABLE_NAME VARCHAR2(100);&lt;br /&gt;  CURSOR trip_cursor IS SELECT TABLE_NAME FROM ALL_TABLES WHERE OWNER=V_OWNER AND TABLE_NAME IN &lt;br /&gt;  ('ACTION','ROLE','ROLE_ACTION','URL','MENU');&lt;br /&gt;BEGIN&lt;br /&gt;  FOR trip_record IN trip_cursor LOOP&lt;br /&gt;  SELECT V_DUMP(trip_record.TABLE_NAME,V_ROWS) INTO V_SMT FROM DUAL;&lt;br /&gt;  V_TABLE_NAME := trip_record.TABLE_NAME;&lt;br /&gt;  dbms_output.new_line();&lt;br /&gt;  dbms_output.new_line();&lt;br /&gt;  DBMS_OUTPUT.PUT_LINE('/************* ' || V_TABLE_NAME || '***************/');&lt;br /&gt;  dbms_output.new_line();&lt;br /&gt;  DBMS_OUTPUT.PUT_LINE(V_SMT);&lt;br /&gt;  END LOOP;&lt;br /&gt;--EXECUTE IMMEDIATE V_SMT ;&lt;br /&gt;EXCEPTION&lt;br /&gt;    WHEN OTHERS THEN&lt;br /&gt;    PKG_ERR.PRC_HANDLE(-20001, 'Problems in P_DUMP  ' || V_TABLE_NAME );&lt;br /&gt;END P_DUMP;&lt;br /&gt;&lt;br /&gt;FUNCTION V_DUMP(v_table_name VARCHAR2,V_ROWS INT) &lt;br /&gt;RETURN VARCHAR2&lt;br /&gt;IS&lt;br /&gt;&lt;br /&gt;  v_column_name VARCHAR2(5000);&lt;br /&gt;  v_column_name2 VARCHAR2(5000);&lt;br /&gt;  v_column_name3 VARCHAR2(5000);&lt;br /&gt;  v_column_name4 VARCHAR2(5000);&lt;br /&gt;  v_column_name5 VARCHAR2(5000);&lt;br /&gt;  V_SMT VARCHAR2(5000);&lt;br /&gt;   &lt;br /&gt;  CURSOR trip_cursor IS SELECT COLUMN_NAME FROM USER_TAB_COLUMNS WHERE TABLE_NAME=v_table_name ORDER BY COLUMN_ID;&lt;br /&gt;&lt;br /&gt;BEGIN&lt;br /&gt;&lt;br /&gt;  FOR trip_record IN trip_cursor LOOP&lt;br /&gt;  v_column_name2 := trip_record.column_name ;&lt;br /&gt;  v_column_name := v_column_name || ',' || v_column_name2;&lt;br /&gt;&lt;br /&gt;  END LOOP;&lt;br /&gt;  SELECT REGEXP_REPLACE(v_column_name, ',' , '' ,1,1)  into v_column_name3 FROM DUAL;&lt;br /&gt;  --SELECT REGEXP_REPLACE(v_column_name, ',' , '|| '',''||' ,2) into v_column_name4 FROM DUAL;&lt;br /&gt;  SELECT REGEXP_REPLACE(v_column_name, ',' , '|| '''''''' || '',''||'''''''' ||' ,2) into v_column_name4 FROM DUAL;&lt;br /&gt;  SELECT REGEXP_REPLACE(v_column_name4, ',' , ',''''||''''''''||' ,1,1)  into v_column_name5 FROM DUAL;&lt;br /&gt;  --DBMS_OUTPUT.PUT_LINE(v_column_name);&lt;br /&gt;  V_SMT:= ' SELECT ''INSERT INTO ' || v_table_name || ' ( ' || v_column_name3 || ' ) VALUES (''' || v_column_name5&lt;br /&gt;  || '||'''''''' ||'');''  FROM ' || v_table_name || ' WHERE ROWNUM &amp;lt; ' || V_ROWS || ';';&lt;br /&gt;  --EXECUTE IMMEDIATE V_SMT ;&lt;br /&gt;  --DBMS_OUTPUT.PUT_LINE(V_SMT);&lt;br /&gt;  RETURN V_SMT;&lt;br /&gt;EXCEPTION&lt;br /&gt;    WHEN OTHERS THEN&lt;br /&gt;    PKG_ERR.PRC_HANDLE(-20001, 'Problems in V_DUMP  ' || v_table_name );&lt;br /&gt;END V_DUMP;&lt;br /&gt;END PKG_DUMP;&lt;br /&gt;/&lt;br /&gt;&lt;/pre&gt;Agora as formas de Utilizar a package, a primeira forma é gerar o insert de apenas uma tabela.Primeiro executando a function PKG_DUMP.V_DUMP passando o nome da tabela e depois o número de linhas.&lt;br /&gt;&lt;pre class="sql" name="code"&gt;new@ORACLE&amp;gt; SELECT PKG_DUMP.V_DUMP('TESTE',29) FROM DUAL;&lt;br /&gt; SELECT 'INSERT INTO TESTE ( X,C,H,G,HG ) VALUES (',''||''''||X|| '''' || ','||'''' ||C|| '''' || ','||'''' ||H|| '''' || ','||'''' ||G|| '''' || ','||'''' ||HG||'''' ||');'  FROM TESTE WHERE ROWNUM &amp;lt;&lt;br /&gt; 29;&lt;br /&gt;&lt;/pre&gt;Após o resultado executa o select gerado e já se tem o insert pronto.&lt;br /&gt;&lt;pre class="sql" name="code"&gt;new@ORACLE&amp;gt;  SELECT 'INSERT INTO TESTE ( X,C,H,G,HG ) VALUES (',''||''''||X|| '''' || ','||'''' ||C|| '''' || ','||'''' ||H|| '''' || ','||'''' ||G|| '''' || ','||'''' ||HG||'''' ||');'  FROM TESTE WHERE ROWNUM &amp;lt;&lt;br /&gt; 29;  2&lt;br /&gt;INSERT INTO TESTE ( X,C,H,G,HG ) VALUES (&lt;br /&gt;'1','2','1','1','A');&lt;br /&gt;&lt;br /&gt;INSERT INTO TESTE ( X,C,H,G,HG ) VALUES (&lt;br /&gt;'4','5','1','1','A');&lt;br /&gt;&lt;br /&gt;INSERT INTO TESTE ( X,C,H,G,HG ) VALUES (&lt;br /&gt;'4','5','1','1','A');&lt;br /&gt;&lt;/pre&gt;A outra forma é tendo todas as tabelas, executando a procedure PKG_DUMP.P_DUMP passando o ownere o número de linhas:&lt;br /&gt;&lt;pre class="sql" name="code"&gt;new@ORACLE&amp;gt; set pagesize 0&lt;br /&gt;set long 90000&lt;br /&gt;set linesize 200&lt;br /&gt;set trimspool ON&lt;br /&gt;set feedback off&lt;br /&gt;set echo off &lt;br /&gt;&lt;br /&gt;new@ORACLE&amp;gt;EXECUTE PKG_DUMP.P_DUMP('NEW',100);&lt;br /&gt;&lt;/pre&gt;Ele vai gerar o output de todos os selects para geraçao de inserts de todas as tabelas que esseowner possui, é aconselhável utilizar um spool para receber esse conteúdo.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;"&gt;That's all folks&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6771588576061782619-3644847681408203965?l=hudsonsantosdba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hudsonsantosdba.blogspot.com/feeds/3644847681408203965/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hudsonsantosdba.blogspot.com/2011/11/exportar-linhas-sem-dump-ou-backup-no.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6771588576061782619/posts/default/3644847681408203965'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6771588576061782619/posts/default/3644847681408203965'/><link rel='alternate' type='text/html' href='http://hudsonsantosdba.blogspot.com/2011/11/exportar-linhas-sem-dump-ou-backup-no.html' title='Exportar linhas sem dump ou backup no Oracle'/><author><name>Hudson Santos</name><uri>http://www.blogger.com/profile/02017454919238662371</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-WAD9nptVqgE/Tlav6_tYdyI/AAAAAAAAAB8/HexNioKI-KA/s220/perfil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6771588576061782619.post-5474320021383656701</id><published>2011-08-24T07:42:00.000-07:00</published><updated>2011-08-24T08:04:02.641-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='controlfile'/><category scheme='http://www.blogger.com/atom/ns#' term='get dbid'/><category scheme='http://www.blogger.com/atom/ns#' term='backup'/><category scheme='http://www.blogger.com/atom/ns#' term='rman'/><category scheme='http://www.blogger.com/atom/ns#' term='descobrir dbid oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='find dbid'/><category scheme='http://www.blogger.com/atom/ns#' term='dbid'/><category scheme='http://www.blogger.com/atom/ns#' term='bind oracle'/><title type='text'>Descobrindo o DBID quando o banco esta em nomount</title><content type='html'>Fala pessoal, uma situação chata mas que pode acontecer é recuperar os controlfiles depois de alguma perda. Se você não usa a FRA para uma recuperação automática dos controlfiles com o rman, você vai precisar setar o DBID e o control-file autobackup location manualmente.&lt;br /&gt;Mas ai que mora a questão, se seu banco não esta aberto e você não tem o DBID anotado, como descobrir ele ??&lt;br /&gt;Então vamos a boa dica :&lt;br /&gt;&lt;br /&gt;Primeira coisa vamos logar no rman:&lt;br /&gt;&lt;br /&gt;[oracle@rjhud ~]$ rlwrap rman target=sys/c402d92@centro&lt;br /&gt;&lt;br /&gt;Recovery Manager: Release 11.2.0.1.0 - Production on Wed Aug 24 11:46:23 2011&lt;br /&gt;&lt;br /&gt;Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.&lt;br /&gt;&lt;br /&gt;connected to target database (not started)&lt;br /&gt;&lt;br /&gt;RMAN&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Agora que começa o legal da história , precisamos descobrir o DBID e como o banco não esta montado não iremos conseguir acessar a V$DATABASE então o que vamos fazer, vamos no diretório onde os backups estão armazenados ou no diretório dos datafiles e vamos fazer a seguinte busca atraves do comando strings do sistema operacional.&lt;br /&gt;Os comandos vão variar para o tipo de backup que você vai pesquisar, se é um backup do datafile system ou undo ou um backupset.&lt;br /&gt;&lt;br /&gt;strings file_name |grep MAXVALUE, (No caso do SYSTEM datafile or FULL Backup)&lt;br /&gt;strings file_name |grep MAXVALUE (No caso do UNDO datafile )&lt;br /&gt;&lt;br /&gt;Exemplos :&lt;br /&gt;&lt;br /&gt;[root@rjhud backup2]# ls -lh&lt;br /&gt;&lt;br /&gt;-rw-r----- 1 oracle oinstall 972K Aug 23 16:42 01mknoqp_1_1_TAGBACKUP_FULL&lt;br /&gt;strings 01mknoqp_1_1_TAGBACKUP_FULL |grep MAXVALUE,&lt;br /&gt;&lt;br /&gt;1287652985, MAXVALUE,&lt;br /&gt;&lt;br /&gt;Esse é o meu DBID :1287652985&lt;br /&gt;&lt;br /&gt;Agora é só seguir a sequencia para restaurar o controlfile e da próxima vez mantenha o seu DBID guardado em uma planilha ou repositório qualquer.&lt;br /&gt;&lt;br /&gt;That's all folks&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6771588576061782619-5474320021383656701?l=hudsonsantosdba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hudsonsantosdba.blogspot.com/feeds/5474320021383656701/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hudsonsantosdba.blogspot.com/2011/08/descobrindo-o-dbid-quando-o-banco-esta.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6771588576061782619/posts/default/5474320021383656701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6771588576061782619/posts/default/5474320021383656701'/><link rel='alternate' type='text/html' href='http://hudsonsantosdba.blogspot.com/2011/08/descobrindo-o-dbid-quando-o-banco-esta.html' title='Descobrindo o DBID quando o banco esta em nomount'/><author><name>Hudson Santos</name><uri>http://www.blogger.com/profile/02017454919238662371</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-WAD9nptVqgE/Tlav6_tYdyI/AAAAAAAAAB8/HexNioKI-KA/s220/perfil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6771588576061782619.post-817484895888030803</id><published>2011-08-03T14:56:00.000-07:00</published><updated>2011-08-03T15:06:50.979-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='archivelog'/><category scheme='http://www.blogger.com/atom/ns#' term='spfile'/><category scheme='http://www.blogger.com/atom/ns#' term='log_archive_dest'/><category scheme='http://www.blogger.com/atom/ns#' term='ORA - 16179 : incremental changes to &quot;log_archive_dest_1&quot; not allowed with spfile'/><category scheme='http://www.blogger.com/atom/ns#' term='ORA - 16179'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>ORA-16179: incremental changes to "log_archive_dest_1" not allowed with SPFILE</title><content type='html'>Estava agora configurando uma base nova, antes de passar ela para ARCHIVELOG no momento que estava configurando o diretório dos archives recebi o famoso:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="sql" name="code"&gt;SQL&amp;gt; Alter system set log_archive_dest_1='/u01/app/oracle/archives/iraja';&lt;br /&gt;&lt;br /&gt;ORA - 16179 : incremental changes to "log_archive_dest_1" not allowed with &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Meu cenário era um Oracle Database 11G R2 com um Red Hat 5.5.&lt;br /&gt;&lt;br /&gt;A Solução é bem simples galera e eu achei no metalink que tem o Doc ID: 194494.1.&lt;br /&gt;Só adicionar a palavra LOCATION antes do caminho do diretório.&lt;br /&gt;&lt;br /&gt;&lt;pre class="sql" name="code"&gt;&lt;br /&gt;SQL&amp;gt; ALTER SYSTEM SET log_archive_dest_1 = 'LOCATION=/u01/app/oracle/archives/iraja' ;&lt;br /&gt;&lt;br /&gt;System altered.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;That's all folks&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6771588576061782619-817484895888030803?l=hudsonsantosdba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hudsonsantosdba.blogspot.com/feeds/817484895888030803/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hudsonsantosdba.blogspot.com/2011/08/ora-16179-incremental-changes-to.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6771588576061782619/posts/default/817484895888030803'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6771588576061782619/posts/default/817484895888030803'/><link rel='alternate' type='text/html' href='http://hudsonsantosdba.blogspot.com/2011/08/ora-16179-incremental-changes-to.html' title='ORA-16179: incremental changes to &quot;log_archive_dest_1&quot; not allowed with SPFILE'/><author><name>Hudson Santos</name><uri>http://www.blogger.com/profile/02017454919238662371</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-WAD9nptVqgE/Tlav6_tYdyI/AAAAAAAAAB8/HexNioKI-KA/s220/perfil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6771588576061782619.post-6815210118752562420</id><published>2011-08-02T13:55:00.000-07:00</published><updated>2011-08-02T14:02:27.489-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DISPLAY'/><category scheme='http://www.blogger.com/atom/ns#' term='virtualbox'/><category scheme='http://www.blogger.com/atom/ns#' term='xhost+'/><category scheme='http://www.blogger.com/atom/ns#' term='install oracle database'/><category scheme='http://www.blogger.com/atom/ns#' term='DISPLAY variable'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>Problema com DISPLAY no VirtualBox com Oracle</title><content type='html'>Post simples e com muito conteúdo na Internet, mas que de vez em quando me dava trabalho e eu não vi/não achei nada tão simples na internet.&lt;br /&gt;Problema :&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; Could not execute auto check for display colors using command /usr/bin/xdpyinfo. Check if the DISPLAY variable is set. Failed &lt;&lt;&lt;&lt;&lt;br /&gt;&lt;br /&gt;Cenário:&lt;br /&gt;VirtualBox 4.4 Instalando o Oracle Database 11G R2&lt;br /&gt;&lt;br /&gt;Soluçao :&lt;br /&gt;Como root executar :&lt;br /&gt;xhost +localhost&lt;br /&gt;&lt;br /&gt;Depois loga com o oracle na mesma sessão e zaz(Como diria o chaves).&lt;br /&gt;&lt;br /&gt;That's all folks !!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6771588576061782619-6815210118752562420?l=hudsonsantosdba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hudsonsantosdba.blogspot.com/feeds/6815210118752562420/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hudsonsantosdba.blogspot.com/2011/08/problema-com-display-no-virtualbox-com.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6771588576061782619/posts/default/6815210118752562420'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6771588576061782619/posts/default/6815210118752562420'/><link rel='alternate' type='text/html' href='http://hudsonsantosdba.blogspot.com/2011/08/problema-com-display-no-virtualbox-com.html' title='Problema com DISPLAY no VirtualBox com Oracle'/><author><name>Hudson Santos</name><uri>http://www.blogger.com/profile/02017454919238662371</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-WAD9nptVqgE/Tlav6_tYdyI/AAAAAAAAAB8/HexNioKI-KA/s220/perfil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6771588576061782619.post-576792895573846525</id><published>2011-08-01T13:13:00.000-07:00</published><updated>2011-09-01T06:12:19.083-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ddl oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='buscar valor bind variables'/><category scheme='http://www.blogger.com/atom/ns#' term='V$SQL_BIND_CAPTURE'/><category scheme='http://www.blogger.com/atom/ns#' term='v$sql'/><category scheme='http://www.blogger.com/atom/ns#' term='sql oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='sql tuning'/><category scheme='http://www.blogger.com/atom/ns#' term='find value variable bind'/><category scheme='http://www.blogger.com/atom/ns#' term='bind variables'/><category scheme='http://www.blogger.com/atom/ns#' term='bind oracle'/><title type='text'>Recuperando Variável Bind com a V$SQL_BIND_CAPTURE</title><content type='html'>&lt;span class="Apple-tab-span" style="white-space:pre"&gt;	&lt;/span&gt;Segue abaixo uma forma bem simples de pegar o valor de uma variável bind utilizando a view V$SQL_BIND_CAPTURE . Precisei recentemente pegar os valores de uma consulta que uma sessão estava realizando e o trace não estava ajudando por "n" fatores e utilizando o velho dicionario de dados foi bem mais simples nesse caso.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;1_ Buscando o valor o sql_id na V$SQL :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;pre class="sql" name="code"&gt;SELECT SQL_ID,SQL_TEXT FROM V$SQL WHERE SQL_TEXT LIKE '%all_tab_columns%';&lt;br /&gt;&lt;br /&gt;SQL_TEXT                                  SQL_ID&lt;br /&gt;&lt;br /&gt;----------------------------------------  -------------&lt;br /&gt;&lt;br /&gt;select col.*, com.Comments from sys.all_  032n4avhdnaz3&lt;br /&gt;&lt;br /&gt;tab_columns col,      sys.all_col_commen&lt;br /&gt;&lt;br /&gt;WHERE o.owner LIKE &lt;span style="font-weight:bold;"&gt;:1&lt;/span&gt; ESCAPE '/'&lt;br /&gt;&lt;br /&gt;AND o.object_name LIKE &lt;span style="font-weight:bold;"&gt;2:&lt;/span&gt; ESCAPE '/'&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Atenção a identificação das binds , essa mesma posição vai ser recuperada logo a frente.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;2_ Olhando a V$SQL_BIND_CAPTURE&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;SQL&amp;gt;&lt;br /&gt;&lt;pre class="sql" name="code"&gt; desc V$SQL_BIND_CAPTURE&lt;br /&gt;&lt;br /&gt; Name                                                              Null?    Type&lt;br /&gt;&lt;br /&gt; ----------------------------------------------------------------- -------- --------------------------------------------&lt;br /&gt;&lt;br /&gt; ADDRESS                                                                    RAW(8)&lt;br /&gt;&lt;br /&gt; HASH_VALUE                                                                 NUMBER&lt;br /&gt;&lt;br /&gt; SQL_ID                                                                     VARCHAR2(13)&lt;br /&gt;&lt;br /&gt; CHILD_ADDRESS                                                              RAW(8)&lt;br /&gt;&lt;br /&gt; CHILD_NUMBER                                                               NUMBER&lt;br /&gt;&lt;br /&gt; NAME                                                                       VARCHAR2(30)&lt;br /&gt;&lt;br /&gt; POSITION                                                                   NUMBER&lt;br /&gt;&lt;br /&gt; DUP_POSITION                                                               NUMBER&lt;br /&gt;&lt;br /&gt; DATATYPE                                                                   NUMBER&lt;br /&gt;&lt;br /&gt; DATATYPE_STRING                                                            VARCHAR2(15)&lt;br /&gt;&lt;br /&gt; CHARACTER_SID                                                              NUMBER&lt;br /&gt;&lt;br /&gt; PRECISION                                                                  NUMBER&lt;br /&gt;&lt;br /&gt; SCALE                                                                      NUMBER&lt;br /&gt;&lt;br /&gt; MAX_LENGTH                                                                 NUMBER&lt;br /&gt;&lt;br /&gt; WAS_CAPTURED                                                               VARCHAR2(3)&lt;br /&gt;&lt;br /&gt; LAST_CAPTURED                                                              DATE&lt;br /&gt;&lt;br /&gt; VALUE_STRING                                                               VARCHAR2(4000)&lt;br /&gt;&lt;br /&gt; VALUE_ANYDATA                                                              ANYDATA&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;3_Buscando o valor da bind desejada :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;pre class="sql" name="code"&gt;SQL_ SELECT NAME,TO_CHAR(LAST_CAPTURED,'DD/MM/YYYY HH24:MI:SS'),VALUE_STRING FROM V$SQL_BIND_CAPTURE WHERE SQL_ID='0prhvnya3f97z' ;&lt;br /&gt;NAME                           TO_CHAR(LAST_CAPTUR VALUE_STRING&lt;br /&gt;------------------------------ ------------------- ------------------------------&lt;br /&gt;:1                             01/08/2011 16:24:39 REPORT_SERVER_AALTAMIRANO&lt;br /&gt;:2                             01/08/2011 16:24:39 ROLE&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Pronto,  de forma simples foi recuperado os valores passados no filtro da consulta SQL.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6771588576061782619-576792895573846525?l=hudsonsantosdba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hudsonsantosdba.blogspot.com/feeds/576792895573846525/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hudsonsantosdba.blogspot.com/2011/08/recuperando-variavel-bind-com.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6771588576061782619/posts/default/576792895573846525'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6771588576061782619/posts/default/576792895573846525'/><link rel='alternate' type='text/html' href='http://hudsonsantosdba.blogspot.com/2011/08/recuperando-variavel-bind-com.html' title='Recuperando Variável Bind com a V$SQL_BIND_CAPTURE'/><author><name>Hudson Santos</name><uri>http://www.blogger.com/profile/02017454919238662371</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-WAD9nptVqgE/Tlav6_tYdyI/AAAAAAAAAB8/HexNioKI-KA/s220/perfil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6771588576061782619.post-3297133803580432401</id><published>2011-07-26T12:44:00.000-07:00</published><updated>2011-07-26T12:47:05.307-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='oracle vm'/><category scheme='http://www.blogger.com/atom/ns#' term='ddl oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle rac'/><category scheme='http://www.blogger.com/atom/ns#' term='guob tech day'/><category scheme='http://www.blogger.com/atom/ns#' term='exadata'/><category scheme='http://www.blogger.com/atom/ns#' term='palestras'/><category scheme='http://www.blogger.com/atom/ns#' term='guob'/><title type='text'>GUOB Tech Day 2011 - Minha Visão !</title><content type='html'>&lt;p class="MsoNormal"&gt;Revigorante, essa é a palavra que pra mim traduziu o GUOB Tech Day 11. Sabe quando você precisa respirar novos ares, conhecer novas tendências e buscar inspiração mesmo para seguir na nossa “batalha” diária ? Então o GUOB forneceu esse conteúdo para todos os presentes.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;As Palestras foram de alto nível, a começar pela parte da manhã com as palestras internacionais, dentre todas destaco a palestra do Pablo Ciccarello que apresentou a OTN de uma forma que muitos não conheciam com um ótimo conteúdo técnico e espaço para divulgação, e as palestras do Arup Nanda e a do Graham Wood nas quais ambos falaram de Exadata, o Graham Wood conseguiu mostrar em minutos o porquê que o Exadata tem essa fama, vou usar a frase do Rodrigo Almeida para descrever o que ele fez:&lt;/p&gt;  &lt;p class="MsoNormal"&gt;“...&lt;span class="apple-style-span"&gt;&lt;span style="font-size: 9.0pt;font-family:&amp;quot;Trebuchet MS&amp;quot;,&amp;quot;sans-serif&amp;quot;;color:#666666"&gt;1 hora de palestra e uma VPNzinha consegue montar um Data Warehouse de 1 TB ao vivo, direto de uma Oracle Exadata X2-2 e carregar 8 bilhões de registros&lt;/span&gt; ...”&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;E na palestra do Arup Nanda ele simplesmente desmitificou o Exadata e deu o caminho das pedras para qualquer DBA conseguir se tornar um DMA (Database Machine Administrator).&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Na parte da tarde eu assisti as duas palestras do Kai yu na qual ele deu um show em boas praticas para RAC e deu um belo overview sobre virtualização de RAC utilizando a Oracle VM, me deu motivações suficiente para testar a Oracle VM e talvez largar o VMWare.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Assisti também a concorrida palestra do Rodrigo Mulafani sobre certificações e a do Thomas Glufke sobre EBS.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;E pra finalizar assisti a uma das melhores palestras do dia do Arup Nada sobre Boas praticas para DBAs.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;O Evento pelo seu conteúdo técnico foi um dos melhores que eu já fui, e falando de Oracle com certeza o melhor, como disse o Ricardo Portilho não tenho saco para o Oracle Open World com seu conteúdo quase que todo para Gerentes.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;O Evento foi ótimo para fazer, fortalecer e ampliar o networking, ele contou com presença dos maiores Blogueiros de Oracle do País tais como Rodrigo Almeida, Ricardo Portilho ( Que eu já conhecia porque fiz o ótimo curso de RAC na nerv com ele), Eduardo Legatti, David Ricardo e quase todos donos de blogs que com certeza já te ajudaram ou que você achou algum conteúdo interessante em algum momento. Nesse ponto eu falhei por ter ido sozinho para o evento e falando no popular, “dei mole” nesse requisito, mas fica a dica pro próximo: Conheça e fale com todo mundo e não vá sozinho, mas e for não tem problema.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Pra finalizar acho mais que justo agradecer ao Eduardo Hahn, presidente do GUOB, que com certeza deve ter ficado bem orgulhoso do resultado final do evento e parabenizar todas as pessoas que ajudaram pra realizar esse Evento.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Abaixo tem a cobertura de outros blogs, é legal quem não foi ler para observar a visão das pessoas que foram e no Final tem o link do GUOB para o download das palestras, tem que realizar um cadastro e fazer a associação ao grupo (Relaxa é Free) e se eu você fosse eu com certeza faria o download das palestras.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Cobertura &lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;text-align: justify;text-justify:inter-ideograph;line-height:15.0pt"&gt;&lt;b&gt;&lt;span style="font-size:9.0pt;mso-bidi-font-size:10.0pt;font-family:&amp;quot;Trebuchet MS&amp;quot;,&amp;quot;sans-serif&amp;quot;; mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;;mso-bidi-font-family:&amp;quot;Times New Roman&amp;quot;; color:#666666"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;text-align: justify;text-justify:inter-ideograph;line-height:15.0pt"&gt;&lt;b&gt;&lt;span style="font-size:9.0pt;mso-bidi-font-size:10.0pt;font-family:&amp;quot;Trebuchet MS&amp;quot;,&amp;quot;sans-serif&amp;quot;; mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;;mso-bidi-font-family:&amp;quot;Times New Roman&amp;quot;; color:#666666"&gt;Ricado Portilho:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;text-align: justify;text-justify:inter-ideograph;line-height:15.0pt"&gt;&lt;a href="http://itweb.com.br/blogs/guob-tech-day-2011-eu-fui/"&gt;http://itweb.com.br/blogs/guob-tech-day-2011-eu-fui/&lt;/a&gt;&lt;b&gt;&lt;span style="font-size:9.0pt;mso-bidi-font-size:10.0pt;font-family:&amp;quot;Trebuchet MS&amp;quot;,&amp;quot;sans-serif&amp;quot;; mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;;mso-bidi-font-family:&amp;quot;Times New Roman&amp;quot;; color:#666666"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;text-align: justify;text-justify:inter-ideograph;line-height:15.0pt"&gt;&lt;span style="font-size:9.0pt;font-family:&amp;quot;Trebuchet MS&amp;quot;,&amp;quot;sans-serif&amp;quot;;mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;;mso-bidi-font-family:&amp;quot;Times New Roman&amp;quot;;color:#666666"&gt;Rodrigo Almeida:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;text-align: justify;text-justify:inter-ideograph;line-height:15.0pt"&gt;&lt;u&gt;&lt;span style="font-size:9.0pt;mso-bidi-font-size:10.0pt;font-family:&amp;quot;Trebuchet MS&amp;quot;,&amp;quot;sans-serif&amp;quot;; mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;;mso-bidi-font-family:&amp;quot;Times New Roman&amp;quot;; color:#105F7D"&gt;&lt;a href="http://www.rodrigoalmeida.net/blog/resumo-guob-tech-day-2011"&gt;&lt;span style="color:#105F7D;text-decoration:none;text-underline:none"&gt;http://www.rodrigoalmeida.net/blog/resumo-guob-tech-day-2011&lt;/span&gt;&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/u&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;text-align: justify;text-justify:inter-ideograph;line-height:15.0pt"&gt;&lt;b&gt;&lt;span style="font-size:9.0pt;mso-bidi-font-size:10.0pt;font-family:&amp;quot;Trebuchet MS&amp;quot;,&amp;quot;sans-serif&amp;quot;; mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;;mso-bidi-font-family:&amp;quot;Times New Roman&amp;quot;; color:#666666"&gt;Mauro Pichiliani&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size:9.0pt; font-family:&amp;quot;Trebuchet MS&amp;quot;,&amp;quot;sans-serif&amp;quot;;mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;; mso-bidi-font-family:&amp;quot;Times New Roman&amp;quot;;color:#666666"&gt;:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;text-align: justify;text-justify:inter-ideograph;line-height:15.0pt"&gt;&lt;span style="font-size:9.0pt;font-family:&amp;quot;Trebuchet MS&amp;quot;,&amp;quot;sans-serif&amp;quot;;mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;;mso-bidi-font-family:&amp;quot;Times New Roman&amp;quot;;color:#666666"&gt;&lt;a href="http://www.imasters.com.br/artigo/21478/outros/cobertura-do-guob-tech-day-2011" target="_blank"&gt;&lt;span style="mso-bidi-font-size:10.0pt;color:#105F7D"&gt;imasters.com.br/artigo/21478/outros/cobertura-do-guob-tech-day-2011&lt;/span&gt;&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;text-align: justify;text-justify:inter-ideograph;line-height:15.0pt"&gt;&lt;b&gt;&lt;span style="font-size:9.0pt;mso-bidi-font-size:10.0pt;font-family:&amp;quot;Trebuchet MS&amp;quot;,&amp;quot;sans-serif&amp;quot;; mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;;mso-bidi-font-family:&amp;quot;Times New Roman&amp;quot;; color:#666666"&gt;Alessandro Guimarães&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size:9.0pt; font-family:&amp;quot;Trebuchet MS&amp;quot;,&amp;quot;sans-serif&amp;quot;;mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;; mso-bidi-font-family:&amp;quot;Times New Roman&amp;quot;;color:#666666"&gt;:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;text-align: justify;text-justify:inter-ideograph;line-height:15.0pt"&gt;&lt;span style="font-size:9.0pt;font-family:&amp;quot;Trebuchet MS&amp;quot;,&amp;quot;sans-serif&amp;quot;;mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;;mso-bidi-font-family:&amp;quot;Times New Roman&amp;quot;;color:#666666"&gt;&lt;a href="http://aguimaraes.wordpress.com/2011/07/23/guob-2011-comentarios-feedbacks-e-impressoes/" target="_blank"&gt;&lt;span style="mso-bidi-font-size:10.0pt;color:#105F7D"&gt;http://aguimaraes.wordpress.com/2011/07/23/guob-2011-comentarios-feedbacks-e-impressoes/&lt;/span&gt;&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;text-align: justify;text-justify:inter-ideograph;line-height:15.0pt"&gt;&lt;b&gt;&lt;span style="font-size:9.0pt;mso-bidi-font-size:10.0pt;font-family:&amp;quot;Trebuchet MS&amp;quot;,&amp;quot;sans-serif&amp;quot;; mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;;mso-bidi-font-family:&amp;quot;Times New Roman&amp;quot;; color:#666666"&gt;Eduardo Legatti&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size:9.0pt; font-family:&amp;quot;Trebuchet MS&amp;quot;,&amp;quot;sans-serif&amp;quot;;mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;; mso-bidi-font-family:&amp;quot;Times New Roman&amp;quot;;color:#666666"&gt;:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;text-align: justify;text-justify:inter-ideograph;line-height:15.0pt"&gt;&lt;span style="font-size:9.0pt;font-family:&amp;quot;Trebuchet MS&amp;quot;,&amp;quot;sans-serif&amp;quot;;mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;;mso-bidi-font-family:&amp;quot;Times New Roman&amp;quot;;color:#666666"&gt;&lt;a href="http://eduardolegatti.blogspot.com/2011/07/minha-experiencia-no-guob-tech-day-2011.html" target="_blank"&gt;&lt;span style="mso-bidi-font-size:10.0pt;color:#105F7D"&gt;http://eduardolegatti.blogspot.com/2011/07/minha-experiencia-no-guob-tech-day-2011.html&lt;/span&gt;&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;text-align: justify;text-justify:inter-ideograph;line-height:15.0pt"&gt;&lt;b&gt;&lt;span style="font-size:9.0pt;mso-bidi-font-size:10.0pt;font-family:&amp;quot;Trebuchet MS&amp;quot;,&amp;quot;sans-serif&amp;quot;; mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;;mso-bidi-font-family:&amp;quot;Times New Roman&amp;quot;; color:#666666"&gt;William do Carmo&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size:9.0pt; font-family:&amp;quot;Trebuchet MS&amp;quot;,&amp;quot;sans-serif&amp;quot;;mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;; mso-bidi-font-family:&amp;quot;Times New Roman&amp;quot;;color:#666666"&gt;:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;text-align: justify;text-justify:inter-ideograph;line-height:15.0pt"&gt;&lt;span style="font-size:9.0pt;font-family:&amp;quot;Trebuchet MS&amp;quot;,&amp;quot;sans-serif&amp;quot;;mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;;mso-bidi-font-family:&amp;quot;Times New Roman&amp;quot;;color:#666666"&gt;&lt;a href="http://aprenderoracle.com/2011/07/review-do-evento-guob-2011/" target="_blank"&gt;&lt;span style="mso-bidi-font-size:10.0pt;color:#105F7D"&gt;http://aprenderoracle.com/2011/07/review-do-evento-guob-2011/&lt;/span&gt;&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;text-align: justify;text-justify:inter-ideograph;line-height:15.0pt"&gt;&lt;b&gt;&lt;span style="font-size:9.0pt;mso-bidi-font-size:10.0pt;font-family:&amp;quot;Trebuchet MS&amp;quot;,&amp;quot;sans-serif&amp;quot;; mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;;mso-bidi-font-family:&amp;quot;Times New Roman&amp;quot;; color:#666666"&gt;Paulo Henrique:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;text-align: justify;text-justify:inter-ideograph;line-height:15.0pt"&gt;&lt;span style="font-size:9.0pt;font-family:&amp;quot;Trebuchet MS&amp;quot;,&amp;quot;sans-serif&amp;quot;;mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;;mso-bidi-font-family:&amp;quot;Times New Roman&amp;quot;;color:#666666"&gt;&lt;a href="http://phpdba.wordpress.com/2011/07/22/guob-tech-day-2011-attendant-feedback/" target="_blank"&gt;&lt;span style="mso-bidi-font-size:10.0pt;color:#105F7D"&gt;http://phpdba.wordpress.com/2011/07/22/guob-tech-day-2011-attendant-feedback/&lt;/span&gt;&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;text-align: justify;text-justify:inter-ideograph;line-height:15.0pt"&gt;&lt;b&gt;&lt;span style="font-size:9.0pt;mso-bidi-font-size:10.0pt;font-family:&amp;quot;Trebuchet MS&amp;quot;,&amp;quot;sans-serif&amp;quot;; mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;;mso-bidi-font-family:&amp;quot;Times New Roman&amp;quot;; color:#666666"&gt;Fernando Franquini&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size:9.0pt; font-family:&amp;quot;Trebuchet MS&amp;quot;,&amp;quot;sans-serif&amp;quot;;mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;; mso-bidi-font-family:&amp;quot;Times New Roman&amp;quot;;color:#666666"&gt;:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;text-align: justify;text-justify:inter-ideograph;line-height:15.0pt"&gt;&lt;span style="font-size:9.0pt;font-family:&amp;quot;Trebuchet MS&amp;quot;,&amp;quot;sans-serif&amp;quot;;mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;;mso-bidi-font-family:&amp;quot;Times New Roman&amp;quot;;color:#666666"&gt;&lt;a href="http://franquini.wordpress.com/2011/07/17/guob-tech-day-2011/" target="_blank"&gt;&lt;span style="mso-bidi-font-size:10.0pt;color:#105F7D"&gt;http://franquini.wordpress.com/2011/07/17/guob-tech-day-2011/&lt;/span&gt;&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;text-align: justify;text-justify:inter-ideograph;line-height:15.0pt"&gt;&lt;b&gt;&lt;span style="font-size:9.0pt;mso-bidi-font-size:10.0pt;font-family:&amp;quot;Trebuchet MS&amp;quot;,&amp;quot;sans-serif&amp;quot;; mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;;mso-bidi-font-family:&amp;quot;Times New Roman&amp;quot;; color:#666666"&gt;Leandro Lana&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size:9.0pt;font-family: &amp;quot;Trebuchet MS&amp;quot;,&amp;quot;sans-serif&amp;quot;;mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;; mso-bidi-font-family:&amp;quot;Times New Roman&amp;quot;;color:#666666"&gt;:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;text-align: justify;text-justify:inter-ideograph;line-height:15.0pt"&gt;&lt;span style="font-size:9.0pt;font-family:&amp;quot;Trebuchet MS&amp;quot;,&amp;quot;sans-serif&amp;quot;;mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;;mso-bidi-font-family:&amp;quot;Times New Roman&amp;quot;;color:#666666"&gt;&lt;a href="http://leandrolana.blogspot.com/2011/07/guob-tech-day.html" target="_blank"&gt;&lt;span style="mso-bidi-font-size:10.0pt;color:#105F7D"&gt;http://leandrolana.blogspot.com/2011/07/guob-tech-day.html&lt;/span&gt;&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;text-align: justify;text-justify:inter-ideograph;line-height:15.0pt"&gt;&lt;span style="font-size:9.0pt;font-family:&amp;quot;Trebuchet MS&amp;quot;,&amp;quot;sans-serif&amp;quot;;mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;;mso-bidi-font-family:&amp;quot;Times New Roman&amp;quot;;color:#666666"&gt;Rodrigo Almeida:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;text-align: justify;text-justify:inter-ideograph;line-height:15.0pt"&gt;&lt;a href="http://www.rodrigoalmeida.net/blog/resumo-guob-tech-day-2011"&gt;http://www.rodrigoalmeida.net/blog/resumo-guob-tech-day-2011&lt;/a&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;text-align: justify;text-justify:inter-ideograph;line-height:15.0pt"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;text-align: justify;text-justify:inter-ideograph;line-height:15.0pt"&gt;Palestras:&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;text-align: justify;text-justify:inter-ideograph;line-height:15.0pt"&gt;&lt;a href="http://www.guob.com.br/"&gt;http://www.guob.com.br&lt;/a&gt;&lt;span style="font-size:9.0pt;font-family:&amp;quot;Trebuchet MS&amp;quot;,&amp;quot;sans-serif&amp;quot;;mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;;mso-bidi-font-family:&amp;quot;Times New Roman&amp;quot;;color:#666666"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6771588576061782619-3297133803580432401?l=hudsonsantosdba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hudsonsantosdba.blogspot.com/feeds/3297133803580432401/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hudsonsantosdba.blogspot.com/2011/07/guob-tech-day-2011-minha-visao.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6771588576061782619/posts/default/3297133803580432401'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6771588576061782619/posts/default/3297133803580432401'/><link rel='alternate' type='text/html' href='http://hudsonsantosdba.blogspot.com/2011/07/guob-tech-day-2011-minha-visao.html' title='GUOB Tech Day 2011 - Minha Visão !'/><author><name>Hudson Santos</name><uri>http://www.blogger.com/profile/02017454919238662371</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-WAD9nptVqgE/Tlav6_tYdyI/AAAAAAAAAB8/HexNioKI-KA/s220/perfil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6771588576061782619.post-471053599062890703</id><published>2011-06-14T12:38:00.000-07:00</published><updated>2011-06-14T12:38:21.652-07:00</updated><title type='text'>GUOB Tech Day 2011</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Lucida Grande', Verdana, Arial, sans-serif; font-size: 12px; line-height: 16px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;Agende-se para mais este grande evento organizado pelo GUOB com apoio do LAOUC e OTN. Acontecerá no dia&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;&lt;span&gt;16/07/2011,&lt;/span&gt;&lt;/strong&gt;sábado&lt;strong&gt;&lt;span&gt;,&lt;/span&gt;&lt;/strong&gt;&amp;nbsp;em São Paulo no Hotel Blue Tree Morumbi, a edição 2011 do grande encontro de usuários de tecnologia Oracle do Brasil com a participação de palestrantes internacionais e nacionais.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;Este ano contamos com a presença&amp;nbsp;de&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;&lt;span&gt;Arup Nanda,&amp;nbsp;Graham Wood, Debra Lilley, Kay Yu, Hans Forbrich e Francisco Munoz&lt;/span&gt;&lt;/strong&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;Aproveite esta grande oportunidade de estar próximo de grande autores e referências em tecnologia Oracle no mundo.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;Faça sua associação gratuita ao GUOB através da opção no menu&amp;nbsp;&lt;span&gt;&lt;/span&gt;&lt;strong&gt;&lt;span&gt;ASSOCIE-SE&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;em&amp;nbsp;&lt;a href="http://www.guob.com.br/" style="color: #0066cc; text-decoration: none;" target="_blank"&gt;nosso site&lt;/a&gt;. Você poderá ser o ganhador de um dos&amp;nbsp;3 convites para associados ao GUOB para um almoço com os palestrantes durante o GUOB TECH DAY 2011.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;Participem e divulguem o evento.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;Acesse nosso site para maiores informações. GUOB TECH DAY 2011.&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-Q8DxgyiPTVU/Tfe4DjUB-XI/AAAAAAAAAGk/UTVs7C6fH00/s1600/guob_full.jpg" /&gt;&lt;/div&gt;&lt;span&gt;GUOB - Grupo de Usuários de Tecnologia Oracle do Brasil&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6771588576061782619-471053599062890703?l=hudsonsantosdba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hudsonsantosdba.blogspot.com/feeds/471053599062890703/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hudsonsantosdba.blogspot.com/2011/06/guob-tech-day-2011.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6771588576061782619/posts/default/471053599062890703'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6771588576061782619/posts/default/471053599062890703'/><link rel='alternate' type='text/html' href='http://hudsonsantosdba.blogspot.com/2011/06/guob-tech-day-2011.html' title='GUOB Tech Day 2011'/><author><name>H.S</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-UD8iU2mgk7k/Tvi2-aMIOMI/AAAAAAAAAKA/2DcsYtFvO0I/s220/perfil.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-Q8DxgyiPTVU/Tfe4DjUB-XI/AAAAAAAAAGk/UTVs7C6fH00/s72-c/guob_full.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6771588576061782619.post-1144631240853568946</id><published>2011-05-19T09:17:00.001-07:00</published><updated>2011-07-05T14:35:10.347-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='matar job do datapump'/><category scheme='http://www.blogger.com/atom/ns#' term='expdp'/><category scheme='http://www.blogger.com/atom/ns#' term='kill job datapump oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='kill datapump'/><category scheme='http://www.blogger.com/atom/ns#' term='impdp'/><category scheme='http://www.blogger.com/atom/ns#' term='datapump'/><category scheme='http://www.blogger.com/atom/ns#' term='kill job expdp'/><category scheme='http://www.blogger.com/atom/ns#' term='kill_job'/><category scheme='http://www.blogger.com/atom/ns#' term='job'/><category scheme='http://www.blogger.com/atom/ns#' term='matar processo datapump'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>Matar job do Datapump Oracle</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Pessoal vou passar um dica, quando se precisa matar um job do datapump.Quando você esta executando o export ou import do datapump, nao basta dar Control-C para parar esse job, quando se faz isso apenas pausa o job, em alguns casos nem isso.Vou listar o Procedimento para eliminar realmente o Job.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;1)     Verifique as informações para eliminação do job.&lt;br /&gt;&lt;pre class="sql" name="code"&gt;SELECT OWNER_NAME,JOB_NAME FROM DBA_DATAPUMP_JOBS;&lt;br /&gt;&lt;/pre&gt;2)     Saia do sqlplus e entre no datapump novamente com o commando abaixo: &lt;br /&gt;&lt;pre class="sql" name="code"&gt;impdp username/password@database attach=nome_do_job&lt;br /&gt;&lt;/pre&gt;3)     Elimine o job com o commando :&lt;br /&gt;&lt;pre class="sql" name="code"&gt;$ Import&amp;gt;kill_job&lt;br /&gt;Are you sure you wish to stop this job (y/n): y&lt;br /&gt;&lt;/pre&gt;4)     Verifique se o job realmente foi eliminado&lt;br /&gt;&lt;pre class="sql" name="code"&gt;SELECT OWNER,JOB_NAME FROM DBA_DATAPUMP_JOBS;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6771588576061782619-1144631240853568946?l=hudsonsantosdba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hudsonsantosdba.blogspot.com/feeds/1144631240853568946/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hudsonsantosdba.blogspot.com/2011/05/matar-job-do-datapump-oracle.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6771588576061782619/posts/default/1144631240853568946'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6771588576061782619/posts/default/1144631240853568946'/><link rel='alternate' type='text/html' href='http://hudsonsantosdba.blogspot.com/2011/05/matar-job-do-datapump-oracle.html' title='Matar job do Datapump Oracle'/><author><name>H.S</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-UD8iU2mgk7k/Tvi2-aMIOMI/AAAAAAAAAKA/2DcsYtFvO0I/s220/perfil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6771588576061782619.post-6823160769956424640</id><published>2011-05-13T13:37:00.000-07:00</published><updated>2011-05-13T13:37:47.579-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='expdp'/><category scheme='http://www.blogger.com/atom/ns#' term='ddl oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='schema'/><category scheme='http://www.blogger.com/atom/ns#' term='schema sem dados'/><category scheme='http://www.blogger.com/atom/ns#' term='exp'/><category scheme='http://www.blogger.com/atom/ns#' term='datapump'/><category scheme='http://www.blogger.com/atom/ns#' term='schema sem linhas'/><category scheme='http://www.blogger.com/atom/ns#' term='ddl'/><category scheme='http://www.blogger.com/atom/ns#' term='constraints'/><category scheme='http://www.blogger.com/atom/ns#' term='export no rows oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>Gerar Schema (DDL) no Oracle sem Datapump ou Exp</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;br /&gt;Vou disponibilizar um script que fiz, para situações que voce precisa exportar um schema só com ddl e sem os dados.&lt;br /&gt;Ok, o datapump e o exp podem fazer isso perfeitamente, mas existem situações onde você não tem acesso a essas ferramentas e/ou nao pode esperar o DBA do cliente disponibilizar isso para voce.&lt;br /&gt;Além disso esse script não traz nenhuma definição de tablespace, armazenamento,ele separa a criação de constraints para o final, podendo ser executado novamente para a criação do schema depois direto, sem se preocupar com a ordem da criação dos objetos em relação a integridade.&lt;br /&gt;Ele também exporta procedures,triggers,sequences,views .&lt;br /&gt;Enfim uma mão na roda quando não se tem acesso a quase nada e precisa de informações em tempo rápido.&lt;br /&gt;Para acessar o link, va no meu outro blog, lá o código esta formatado .&lt;br /&gt;&lt;pre name="code" class="cpp"&gt;&lt;br /&gt;-- Comments and Script Documentation&lt;br /&gt;-- Script Name   : extract_schema_ddl.sql&lt;br /&gt;-- Requirements  : User calling script must be owner the objects, and have privileges the package&lt;br /&gt;     DBMS_METADATA. &lt;br /&gt;-- Author        : HUDSON SANTOS&lt;br /&gt;-- Created Date  : 05/05/2011&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;set pagesize 0&lt;br /&gt;set long 90000&lt;br /&gt;set linesize 32767&lt;br /&gt;set trimspool ON&lt;br /&gt;set feedback off&lt;br /&gt;set echo off &lt;br /&gt;column txt format a121 word_wrapped&lt;br /&gt;&lt;br /&gt;BEGIN&lt;br /&gt;dbms_metadata.set_transform_param( DBMS_METADATA.SESSION_TRANSFORM, 'PRETTY', TRUE );&lt;br /&gt;dbms_metadata.set_transform_param( DBMS_METADATA.SESSION_TRANSFORM, 'STORAGE', false );&lt;br /&gt;dbms_metadata.set_transform_param( DBMS_METADATA.SESSION_TRANSFORM, 'SQLTERMINATOR', TRUE );&lt;br /&gt;dbms_metadata.set_transform_param( DBMS_METADATA.SESSION_TRANSFORM, 'SEGMENT_ATTRIBUTES', false ); &lt;br /&gt;dbms_metadata.set_transform_param( DBMS_METADATA.SESSION_TRANSFORM, 'REF_CONSTRAINTS',false);&lt;br /&gt;END;&lt;br /&gt;/&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;spool schema.sql &lt;br /&gt;&lt;br /&gt;-- TABELAS&lt;br /&gt;&lt;br /&gt;SELECT DBMS_METADATA.GET_DDL('TABLE',u.table_name) txt&lt;br /&gt;     FROM USER_TABLES u ;&lt;br /&gt;&lt;br /&gt;-- CONSTRAINTS R1&lt;br /&gt;&lt;br /&gt;SELECT DBMS_METADATA.GET_DDL('CONSTRAINT',u.constraint_name) txt&lt;br /&gt;     FROM USER_constraints u WHERE CONSTRAINT_TYPE IN ('P','C');&lt;br /&gt;&lt;br /&gt;-- CONSTRAINTS R2&lt;br /&gt;&lt;br /&gt;SELECT DBMS_METADATA.GET_DDL('REF_CONSTRAINT',u.constraint_name) txt&lt;br /&gt;     FROM USER_constraints u WHERE CONSTRAINT_TYPE IN ('R');&lt;br /&gt;&lt;br /&gt;-- INDICES &lt;br /&gt;SELECT DBMS_METADATA.GET_DDL('INDEX',u.index_name) txt&lt;br /&gt;     FROM USER_INDEXES u ;&lt;br /&gt;&lt;br /&gt;-- TRIGGERS&lt;br /&gt;&lt;br /&gt;SELECT dbms_metadata.get_ddl('TRIGGER', u.trigger_name) txt&lt;br /&gt; FROM USER_TRIGGERS u;&lt;br /&gt;&lt;br /&gt;-- PROCEDURES&lt;br /&gt;&lt;br /&gt;SELECT dbms_metadata.get_ddl('PROCEDURE', u.object_name) txt&lt;br /&gt; FROM USER_objects u WHERE OBJECT_TYPE='PROCEDURE' ;&lt;br /&gt;&lt;br /&gt;-- FUNCTIONS&lt;br /&gt;&lt;br /&gt;SELECT dbms_metadata.get_ddl('FUNCTION', u.object_name) txt&lt;br /&gt; FROM USER_objects u WHERE OBJECT_TYPE='FUNCTION' ;&lt;br /&gt;&lt;br /&gt;-- SEQUENCES&lt;br /&gt;&lt;br /&gt;SELECT dbms_metadata.get_ddl('SEQUENCE',u.SEQUENCE_NAME) txt&lt;br /&gt; FROM USER_SEQUENCES u;&lt;br /&gt;&lt;br /&gt;-- VIEWS&lt;br /&gt;&lt;br /&gt;SELECT dbms_metadata.get_ddl('VIEW',u.VIEW_NAME) txt&lt;br /&gt; FROM USER_VIEWS u;&lt;br /&gt;&lt;br /&gt;-- VIEW_MATERIALIZED&lt;br /&gt;&lt;br /&gt;SELECT dbms_metadata.get_ddl('MATERIALIZED_VIEW',u.MVIEW_NAME) txt&lt;br /&gt; FROM USER_MVIEWS u;&lt;br /&gt;&lt;br /&gt;--PACKAGE&lt;br /&gt;&lt;br /&gt;SELECT dbms_metadata.get_ddl('PACKAGE',u.object_name) txt&lt;br /&gt; FROM USER_OBJECTS u WHERE OBJECT_TYPE='PACKAGE';&lt;br /&gt;&lt;br /&gt;--PACKAGE_BODY&lt;br /&gt;&lt;br /&gt;SELECT dbms_metadata.get_ddl('PACKAGE_BODY',u.object_name) txt&lt;br /&gt; FROM USER_OBJECTS u WHERE OBJECT_TYPE='PACKAGE_BODY';&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;spool off;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6771588576061782619-6823160769956424640?l=hudsonsantosdba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hudsonsantosdba.blogspot.com/feeds/6823160769956424640/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hudsonsantosdba.blogspot.com/2011/05/gerar-schema-ddl-no-oracle-sem-datapump.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6771588576061782619/posts/default/6823160769956424640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6771588576061782619/posts/default/6823160769956424640'/><link rel='alternate' type='text/html' href='http://hudsonsantosdba.blogspot.com/2011/05/gerar-schema-ddl-no-oracle-sem-datapump.html' title='Gerar Schema (DDL) no Oracle sem Datapump ou Exp'/><author><name>H.S</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-UD8iU2mgk7k/Tvi2-aMIOMI/AAAAAAAAAKA/2DcsYtFvO0I/s220/perfil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6771588576061782619.post-1380235172797571184</id><published>2011-04-07T13:00:00.000-07:00</published><updated>2011-04-07T13:00:06.388-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='probe input'/><category scheme='http://www.blogger.com/atom/ns#' term='build input'/><category scheme='http://www.blogger.com/atom/ns#' term='metodo de join oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle performance'/><category scheme='http://www.blogger.com/atom/ns#' term='hash join'/><category scheme='http://www.blogger.com/atom/ns#' term='nested loop'/><category scheme='http://www.blogger.com/atom/ns#' term='sql tuning'/><category scheme='http://www.blogger.com/atom/ns#' term='joins'/><category scheme='http://www.blogger.com/atom/ns#' term='hash join oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>Métodos de Joins no Oracle Parte III</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;br /&gt;&lt;div class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span style="font-size: 14.0pt; line-height: 115%; mso-ansi-language: PT-BR;"&gt;HASHJOIN&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-indent: 36.0pt;"&gt;&lt;span style="mso-ansi-language: PT-BR;"&gt;Os dois conjuntos de dados processados por um Hash Join são chamados de &lt;b style="mso-bidi-font-weight: normal;"&gt;build input e probe input&lt;/b&gt;. A buildinput é a esquerda, e a probe input é a entrada à direita. Como ilustrado naFigura abaixo, usando cada linha da entrada da build input, uma tabela hash namemória (ou espaço temporário, se não há memória suficiente está disponível) éconstruída.&lt;br /&gt;Observe que a chave de hash usada para esse fim é calculada com base nascolunas usadas como condição de join. Uma vez que a tabela hash contém todos osdados do build input, o processamento da probe input começa.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-indent: 36.0pt;"&gt;&lt;span style="mso-ansi-language: PT-BR;"&gt;Cada linha é testada contra a tabela hash, a fim de descobrir se elecumpre a condição de join. Obviamente, apenas registros coincidentes são retornados.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-indent: 36.0pt;"&gt;&lt;span style="mso-ansi-language: PT-BR;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-fB7eHr0i5jo/TZ4XYwJpveI/AAAAAAAAAGE/DTS-2x9gOYI/s1600/hash_join.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="136" src="http://1.bp.blogspot.com/-fB7eHr0i5jo/TZ4XYwJpveI/AAAAAAAAAGE/DTS-2x9gOYI/s320/hash_join.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-indent: 36.0pt;"&gt;&lt;span style="mso-ansi-language: PT-BR;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="mso-ansi-language: PT-BR;"&gt;&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="mso-ansi-language: PT-BR;"&gt;* &lt;b style="mso-bidi-font-weight: normal;"&gt;Visãodo processo de um Hash Join&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="mso-ansi-language: PT-BR;"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="mso-ansi-language: PT-BR;"&gt;Hash Joins sãocaracterizados pelas seguintes proriedades :&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpFirst" style="mso-list: l0 level1 lfo1; text-indent: -18.0pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-family: Symbol; mso-ansi-language: PT-BR; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;·&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="mso-ansi-language: PT-BR;"&gt;Cadaoperação Filha só é executada uma vez&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="mso-list: l0 level1 lfo1; text-indent: -18.0pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-family: Symbol; mso-ansi-language: PT-BR; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;·&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="mso-ansi-language: PT-BR;"&gt;A&amp;nbsp;tabela&amp;nbsp;hash&amp;nbsp;éconstruída&amp;nbsp;sobre&amp;nbsp;a&amp;nbsp;entrada&amp;nbsp;da esquerda.&amp;nbsp;Por conseqüência, é geralmente&amp;nbsp;construída&amp;nbsp;na&amp;nbsp;menor entrada.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="mso-list: l0 level1 lfo1; text-indent: -18.0pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-family: Symbol; mso-ansi-language: PT-BR; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;·&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="mso-ansi-language: PT-BR;"&gt;Antes de&amp;nbsp;retornar&amp;nbsp;aprimeira linha,&amp;nbsp;somente a entrada&amp;nbsp;deesquerda deve&amp;nbsp;ser&amp;nbsp;totalmente&amp;nbsp;processado.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpLast" style="mso-list: l0 level1 lfo1; text-indent: -18.0pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-family: Symbol; mso-ansi-language: PT-BR; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;·&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="mso-ansi-language: PT-BR;"&gt;Crossjoins, theta joins e partitiouned outer joins não são suportados.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span style="mso-ansi-language: PT-BR;"&gt;Exemplo de Hash Join.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="mso-ansi-language: PT-BR;"&gt;O exemplo a seguir é um simples plano de execuçãomostrando o processamento de um Hash Joins entre duas tabelas, O exemplo&amp;nbsp;também&amp;nbsp;mostracomo&amp;nbsp;forçar&amp;nbsp;uma&amp;nbsp;hash join por meio&amp;nbsp;das dos hints leading &amp;nbsp;e&amp;nbsp;use_hash.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span lang="EN-GB" style="mso-ansi-language: EN-GB;"&gt;SQL_IRAJA&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;gt; SELECT /*+ leading(t1) use_hash(t2) */ *&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span lang="EN-GB" style="mso-ansi-language: EN-GB;"&gt;FROM t1, t2&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span lang="EN-GB" style="mso-ansi-language: EN-GB;"&gt;WHERE t1.id = t2.t1_id&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span lang="EN-GB" style="mso-ansi-language: EN-GB;"&gt;AND t1.n = 19&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span lang="EN-GB" style="mso-ansi-language: EN-GB;"&gt;---------------------------------------------------------------------------&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span lang="EN-GB" style="mso-ansi-language: EN-GB;"&gt;| Id&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;| Operation&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;| Name |Rows&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;| Bytes | Cost (%CPU)| Time&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;|&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span lang="EN-GB" style="mso-ansi-language: EN-GB;"&gt;---------------------------------------------------------------------------&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span lang="EN-GB" style="mso-ansi-language: EN-GB;"&gt;|&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;0 | SELECT STATEMENT&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;|&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;|&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;10 |&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;1180 |&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;30&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;(4)| 00:00:01 |&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span lang="EN-GB" style="mso-ansi-language: EN-GB;"&gt;|*&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;1 |&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;HASH JOIN&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;|&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;|&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;10 |&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;1180 |&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;30&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;(4)| 00:00:01 |&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span lang="EN-GB" style="mso-ansi-language: EN-GB;"&gt;|*&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;2 |&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;TABLE ACCESS FULL| T1&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;|&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;1 |&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;57 |&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;5&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;(0)| 00:00:01 |&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span lang="EN-GB" style="mso-ansi-language: EN-GB;"&gt;|&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;3 |&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;TABLE ACCESS FULL| T2&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;|&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;100 |&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;6100 |&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;24&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;(0)| 00:00:01 |&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span lang="EN-GB" style="mso-ansi-language: EN-GB;"&gt;---------------------------------------------------------------------------&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span lang="EN-GB" style="mso-ansi-language: EN-GB;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;1 -access("T1"."ID"="T2"."T1_ID")&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span lang="EN-GB" style="mso-ansi-language: EN-GB;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;2 - filter("T1"."N"=19)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="mso-ansi-language: PT-BR;"&gt;&amp;nbsp;O&amp;nbsp;processamento&amp;nbsp;do plano&amp;nbsp;deexecução&amp;nbsp;pode&amp;nbsp;ser resumido da seguinte forma &lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;:&lt;br style="mso-special-character: line-break;" /&gt;&lt;!--[if !supportLineBreakNewLine]--&gt;&lt;br style="mso-special-character: line-break;" /&gt;&lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpFirst" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-layout-grid-align: none; mso-list: l1 level1 lfo2; text-autospace: none; text-indent: -18.0pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-family: Symbol; mso-ansi-language: PT-BR; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;·&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="mso-ansi-language: PT-BR;"&gt;Todas aslinhas&amp;nbsp;da&amp;nbsp;tabela t1&amp;nbsp;são lidas&amp;nbsp;através de&amp;nbsp;um full tablescan,&amp;nbsp;a&amp;nbsp;restrição&amp;nbsp;n&amp;nbsp;=&amp;nbsp;19&amp;nbsp;é aplicada, e&amp;nbsp;umatabela&amp;nbsp;de hash&amp;nbsp;é construído&amp;nbsp;com&amp;nbsp;as linhas&amp;nbsp;resultantes.&amp;nbsp;Para&amp;nbsp;construir&amp;nbsp;a&amp;nbsp;tabela&amp;nbsp;de hash, uma&amp;nbsp;função&amp;nbsp;hash&amp;nbsp;é&amp;nbsp;aplicadapara as colunas&amp;nbsp;usadas na condição de join&amp;nbsp;(id).&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpLast" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-layout-grid-align: none; mso-list: l1 level1 lfo2; text-autospace: none; text-indent: -18.0pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-family: Symbol; mso-ansi-language: PT-BR; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;·&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="mso-ansi-language: PT-BR;"&gt;Todas aslinhas da tabela T2 são ligas através de um full table scan, uma função hash éaplicada para as colunas usadas na condição de join (t2_id) e a tabela de hashentra no modo probed. Se for encontrado os dados correspondentes as linhas sãoretornadas&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none; text-indent: 18.0pt;"&gt;&lt;span style="mso-ansi-language: PT-BR;"&gt;A limitação&amp;nbsp;mais&amp;nbsp;importante para a&amp;nbsp;operação&amp;nbsp;HASH&amp;nbsp;JOIN&amp;nbsp;(comopara as outras operações combinadas não relacionadas)&amp;nbsp;é a incapacidade&amp;nbsp;de&amp;nbsp;tirarproveito&amp;nbsp;dos índices&amp;nbsp;para aplicar nas condições de join. Istosignifica&amp;nbsp;que&amp;nbsp;os índices podem&amp;nbsp;ser&amp;nbsp;utilizados&amp;nbsp;como&amp;nbsp;caminhode acesso&amp;nbsp;somente&amp;nbsp;se&amp;nbsp;as restrições&amp;nbsp;estão disponíveis. Por&amp;nbsp;exemplo,&amp;nbsp;se&amp;nbsp;a&amp;nbsp;restrição&amp;nbsp;n&amp;nbsp;=&amp;nbsp;19&amp;nbsp;fornece&amp;nbsp;boaseletividade, pode&amp;nbsp;ser&amp;nbsp;útil para&amp;nbsp;criar&amp;nbsp;um&amp;nbsp;índice&amp;nbsp;para&amp;nbsp;aplicá-la.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none; text-indent: 18.0pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="mso-ansi-language: PT-BR;"&gt;SQL_IRAJA &amp;gt; CREATE INDEX t1_n ON t1 (n)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="mso-ansi-language: PT-BR;"&gt;In fact, with this index in place, the following execution plan might beused. &lt;/span&gt;&lt;span lang="EN-GB" style="mso-ansi-language: EN-GB;"&gt;Note that the&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span lang="EN-GB" style="mso-ansi-language: EN-GB;"&gt;table t1 is no longer accessed through a fulltable scan.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="mso-ansi-language: PT-BR;"&gt;Na verdade,&amp;nbsp;com&amp;nbsp;esse índice&amp;nbsp;em&amp;nbsp;vigor,&amp;nbsp;o planode execução&amp;nbsp;a seguir&amp;nbsp;pode ser usado. Observe que a&amp;nbsp;tabela&amp;nbsp;t1&amp;nbsp;jánão é mas acessada através de um full table scan.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span lang="EN-GB" style="mso-ansi-language: EN-GB;"&gt;-------------------------------------------------------------------------------------&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span lang="EN-GB" style="mso-ansi-language: EN-GB;"&gt;| Id&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;|Operation&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;| Name |Rows&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;| Bytes | Cost (%CPU)| Time&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;|&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span lang="EN-GB" style="mso-ansi-language: EN-GB;"&gt;-------------------------------------------------------------------------------------&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span lang="EN-GB" style="mso-ansi-language: EN-GB;"&gt;|&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;0 |SELECT STATEMENT&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;|&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;|&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;10 |&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;1180 |&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;27&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;(4)| 00:00:01 |&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span lang="EN-GB" style="mso-ansi-language: EN-GB;"&gt;|*&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;1|&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;HASH JOIN&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;|&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;|&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;10 |&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;1180 |&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;27&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;(4)| 00:00:01 |&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span lang="EN-GB" style="mso-ansi-language: EN-GB;"&gt;|&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;2|&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;TABLE ACCESS BY INDEX ROWID| T1&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;|&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;1 |&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;57 |&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;2&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;(0)| 00:00:01 |&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span lang="EN-GB" style="mso-ansi-language: EN-GB;"&gt;|*&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;3|&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;INDEX RANGE SCAN&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;| T1_N |&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;1 |&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;|&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;1&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;(0)| 00:00:01 |&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span lang="EN-GB" style="mso-ansi-language: EN-GB;"&gt;|&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;4|&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;TABLE ACCESS FULL&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;| T2&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;|&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;100 |&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;6100 |&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;24&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;(0)| 00:00:01 |&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span lang="EN-GB" style="mso-ansi-language: EN-GB;"&gt;-------------------------------------------------------------------------------------&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span lang="EN-GB" style="mso-ansi-language: EN-GB;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span lang="EN-GB" style="mso-ansi-language: EN-GB;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;1 -access("T1"."ID"="T2"."T1_ID")&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span lang="EN-GB" style="mso-ansi-language: EN-GB;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="mso-ansi-language: PT-BR;"&gt;3 -access("T1"."N"=19)&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm; margin-left: 36.0pt; margin-right: 0cm; margin-top: 0cm;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6771588576061782619-1380235172797571184?l=hudsonsantosdba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hudsonsantosdba.blogspot.com/feeds/1380235172797571184/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hudsonsantosdba.blogspot.com/2011/04/metodos-de-joins-no-oracle-parte-iii.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6771588576061782619/posts/default/1380235172797571184'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6771588576061782619/posts/default/1380235172797571184'/><link rel='alternate' type='text/html' href='http://hudsonsantosdba.blogspot.com/2011/04/metodos-de-joins-no-oracle-parte-iii.html' title='Métodos de Joins no Oracle Parte III'/><author><name>H.S</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-UD8iU2mgk7k/Tvi2-aMIOMI/AAAAAAAAAKA/2DcsYtFvO0I/s220/perfil.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-fB7eHr0i5jo/TZ4XYwJpveI/AAAAAAAAAGE/DTS-2x9gOYI/s72-c/hash_join.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6771588576061782619.post-8127041701091750684</id><published>2011-01-24T05:50:00.000-08:00</published><updated>2011-01-27T05:29:10.091-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='plano de execucao'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle performance'/><category scheme='http://www.blogger.com/atom/ns#' term='full table scan'/><category scheme='http://www.blogger.com/atom/ns#' term='nested loop'/><category scheme='http://www.blogger.com/atom/ns#' term='joins'/><category scheme='http://www.blogger.com/atom/ns#' term='outer loop'/><category scheme='http://www.blogger.com/atom/ns#' term='merge join'/><category scheme='http://www.blogger.com/atom/ns#' term='explain plan'/><category scheme='http://www.blogger.com/atom/ns#' term='tuning oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='inner loop'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>Métodos de Joins no Oracle Parte I</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;br /&gt;&lt;div style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: black; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px; font: normal normal normal 13px/19px 'Lucida Grande', 'Lucida Sans Unicode', Tahoma, Verdana, sans-serif; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.6em; padding-left: 0.6em; padding-right: 0.6em; padding-top: 0.6em;"&gt;Depois muito tempo sem freqüentar e atualizar o blog , neste ano pretendo ser mais ativo na comunidade ,tendo tirado o ano passado para novas experiências profissionais infelizmente não tive tempo de aparecer por aqui, porém agora podem esperar novas atualizações.&lt;br /&gt;E volto falando de um assunto que sempre me perguntam que é como o oracle realiza joins com mais de uma tabela.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" mce_name="strong" style="font-weight: bold;"&gt;NESTED LOOPS (Loops aninhados)&lt;/span&gt;&lt;br /&gt;Definição&lt;br /&gt;Os registros da primeira tabela são recuperados, e para cada registro recuperado, o acesso é realizado na segunda tabela.&lt;br /&gt;NESTED LOOPS são úteis quando pequenos subconjuntos de dados estão sendo juntados, e se a condição de join é uma forma eficiente de acesso à segunda tabela.&lt;br /&gt;O acesso da segunda tabela é feito através de um acesso baseado em índice (index-based access).&lt;br /&gt;&lt;br /&gt;Um hint é usado para recomendar um acesso baseado em índice da tabela Livros no exemplo abaixo:&lt;br /&gt;&lt;br /&gt;select /*+ INDEX(Livros) */&lt;br /&gt;Livros.Publisher,&lt;br /&gt;Livros_autor.AuthorName&lt;br /&gt;from Livros, Livros_autor&lt;br /&gt;where Livros.Title = Livros_autor.Title;&lt;br /&gt;&lt;br /&gt;A coluna title da tabela Livros é utilizada como parte da condição de join na consulta, o índice de chave primária pode resolver esse join.&lt;br /&gt;Quando a consulta é executada, uma operação de NESTED LOOP pode ser usada para executar esse join.&lt;br /&gt;Para executar um join de NESTED LOOP, o otimizador deve primeiro selecionar uma tabela de condução da junção, que é a tabela que será lida primeiro (geralmente através de uma operação de TABLE ACCES FULL, embora index scans sejam muito utilizados). Para cada registro na tabela de condução, a segunda tabela na junção será consultada. A consulta de exemplo junta as tabelas Livros_autor e Livros, com base nos valores da coluna de title. Durante a execução de NESTED LOOPS, uma operação irá selecionar todos os registros da tabela Livros_autor. O índice de chave primária da tabela Livros será investigado para determinar se ele contém uma entrada para o valor do registro atual da tabela Livros_autor. Se uma correspondência for encontrada, então o valor de Title será retornado da chave primária de Livros. Se outras colunas são necessárias para Livros, a linha será selecionada da tabela Livros através de uma operação de TABLE ACCESS BY INDEX ROWID.&lt;br /&gt;&lt;br /&gt;Então podemos resumir que um NESTED LOOP envolve as seguintes etapas:&lt;br /&gt;&lt;br /&gt;1_ O otimizador determina a tabela de condução e designa-o como uma tabela externa.&lt;br /&gt;2_ A outra tabela é designada como a tabela interna.&lt;br /&gt;Para cada linha na tabela externa, o Oracle permite acesso a todas as linhas na tabela interna.&lt;br /&gt;&lt;br /&gt;O outer loop é para cada linha na tabela externa e o inner loop é para todas as linhas na tabela interna.&lt;br /&gt;O outer loop aparece antes do inner no plano de execução, como segue:&lt;br /&gt;&lt;br /&gt;Agora vamos mostrar o plano de execução desta consulta para esclarecer a sua mente.&lt;br /&gt;&lt;br /&gt;EXPLAIN PLAN FOR&lt;br /&gt;SELECT e.employee_id, j.job_title, e.salary, d.department_name&lt;br /&gt;FROM employees e, jobs j, departments d&lt;br /&gt;WHERE e.employee_id &amp;lt; 103&lt;br /&gt;AND e.job_id = j.job_id&lt;br /&gt;AND e.department_id = d.department_id;&lt;br /&gt;-----------------------------------------------------------------------------------------------&lt;br /&gt;| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |&lt;br /&gt;-----------------------------------------------------------------------------------------------&lt;br /&gt;| 0 | SELECT STATEMENT | | 3 | 165 | 4 (0)| 00:00:01 |&lt;br /&gt;| 1 | NESTED LOOPS | | 3 | 165 | 4 (0)| 00:00:01 |&lt;br /&gt;| 2 | NESTED LOOPS | | 3 | 123 | 3 (0)| 00:00:01 |&lt;br /&gt;| 3 | TABLE ACCESS BY INDEX ROWID| EMPLOYEES | 3 | 48 | 2 (0)| 00:00:01 |&lt;br /&gt;|* 4 | INDEX RANGE SCAN | EMP_EMP_ID_PK | 3 | | 1 (0)| 00:00:01 |&lt;br /&gt;| 5 | TABLE ACCESS BY INDEX ROWID| JOBS | 1 | 25 | 1 (0)| 00:00:01 |&lt;br /&gt;PLAN_TABLE_OUTPUT&lt;br /&gt;----------------------------------------------------------------------------------------------------&lt;br /&gt;|* 6 | INDEX UNIQUE SCAN | JOB_ID_PK | 1 | | 0 (0)| 00:00:01 |&lt;br /&gt;| 7 | TABLE ACCESS BY INDEX ROWID | DEPARTMENTS | 1 | 14 | 1 (0)| 00:00:01 |&lt;br /&gt;|* 8 | INDEX UNIQUE SCAN | DEPT_ID_PK | 1 | | 0 (0)| 00:00:01 |&lt;br /&gt;-----------------------------------------------------------------------------------------------&lt;br /&gt;Predicate Information (identified by operation id):&lt;br /&gt;---------------------------------------------------&lt;br /&gt;4 - access("E"."EMPLOYEE_ID"&amp;lt;103)&lt;br /&gt;6 - access("E"."JOB_ID"="J"."JOB_ID")&lt;br /&gt;8 - access("E"."DEPARTMENT_ID"="D"."DEPARTMENT_ID")&lt;br /&gt;Neste outro exemplo, o outer loop recupera todas as linhas da tabela de employees.&lt;br /&gt;Para cada linha da tabela employees recuperada pelo outer loop, o inner loop recupera a linha associada na tabela jobs.&lt;br /&gt;&lt;br /&gt;Outer loop&lt;br /&gt;Nesse exemplo a consulta abaixo seria equivalente ao que o outer loop executa com uma tabela de conducao.&lt;br /&gt;SELECT e.employee_id, e.salary&lt;br /&gt;FROM employees e&lt;br /&gt;WHERE e.employee_id &amp;lt; 103;&lt;br /&gt;&lt;br /&gt;Inner loop&lt;br /&gt;O plano de execução mostra o inner loop sendo iterado para cada linha obtida&lt;br /&gt;a partir do outer loop, como segue:&lt;br /&gt;SELECT j.job_title&lt;br /&gt;FROM jobs j&lt;br /&gt;WHERE e.job_id = j.job_id ;&lt;br /&gt;&lt;br /&gt;É muito importante garantir que a tabela interna é conduzida a partir da da tabela externa.&lt;br /&gt;Se o caminho de acesso a tabela interna é independente da tabela externa e em seguida as mesmas linhas são recuperadas para cada iteração de outer loop o desempenho vai cair consideravelmente.&lt;br /&gt;Em tais casos, operaçoes de *hash joins juntam duas fontes independentes com um melhor desempenho.&lt;br /&gt;&lt;br /&gt;*Hash join será abordado brevemente&lt;br /&gt;&lt;br /&gt;Em operações de acesso a pelo menos duas fontes de dados que estão envolvidos joins com um NESTED LOOPS, vai ocorrer um acesso na tabela de condução(tabela principal) e um acesso normalmente baseado em índice da tabela dirigida .&lt;br /&gt;Os métodos de acesso de dados mais comuns usados são o TABLE ACCESS FULL, TABLE ACCESS BY INDEX ROWID e INDEX-SCAN eles retornam os registros para às operações sucessivas logo que um registro for encontrado, eles não esperam por todo o conjunto de registros selecionados. Porque essas operações podem fornecer o primeiro conjunto de linhas rapidamente para os usuários, Nested Loops são comumente usados para joins que são freqüentemente executados por usuários online.&lt;br /&gt;Ao implementar joins com NESTED LOOPS, você precisa considerar o tamanho da tabela de condução. Se a tabela de condução é grande e é lida através de um FULL TABLE SCAN, então o FULL TABLE SCAN realizado pode afetar negativamente o desempenho da consulta. Se os índices estão disponíveis em ambos os lados do join o Oracle vai selecionar uma tabela de condução para a consulta e o otimizador irá verificar a estatísticas do tamanho das tabelas e a *seletividade dos índices para escolher o caminho com o menor custo global.&lt;br /&gt;&lt;br /&gt;* A seletividade é um valor entre 0 e 1 que representa a fração de linhas filtradas por uma operação.&lt;br /&gt;Por exemplo, se uma operação de leitura lê 120 linhas de uma tabela e depois de aplicar um filtro(where) retorna 18 linhas, a seletividade é de 0,15 (18/120). A seletividade também pode ser expressa como um percentual de 0,15 que é expresso como 15 por cento.&lt;br /&gt;&lt;br /&gt;Ao juntar três tabelas, o Oracle realiza dois joins distintos: O join de duas tabelas para gerar um conjunto de registros e em seguida um join entre o conjunto de registros e a terceira tabela.&lt;br /&gt;Se NESTED LOOP são utilizados a ordem na qual as tabelas são unidas é crítica.&lt;br /&gt;A saída do primeiro join gera um conjunto de registros e esse conjunto de registros é usado como uma tabela de condução da segunda junção.&lt;br /&gt;O Tamanho do conjunto de registros retornado pelo primeiro join impacta no desempenho do segundo join e assim tem um impacto significativo sobre o desempenho da consulta geral. Você deve tentar unir as tabelas mais seletivas primeiro para que o impacto desses proximos joins sejam insignificantes.&lt;br /&gt;Se tabelas grandes sao unidas no primeir join de uma consulta multijoin, o tamanho das tabelas terá um impacto sucessivos no join e irá impactar negativamente o desempenho global da consulta.&lt;br /&gt;O otimizador deve escolher o caminho adequado para executar o join ,você pode confirmar os custos e o caminho gerado pelo plano de execução.&lt;br /&gt;NESTED LOOPS são úteis quando se criam joins com tabelas de tamanhos diferente assim você pode usar a menor tabela como a tabela de condução e selecione na tabela maior com um acesso baseados em índices.&lt;br /&gt;Quanto mais seletivo o índice, mais rápido a consulta será concluída.&lt;br /&gt;&lt;br /&gt;Um join com quatro Tabelas&lt;br /&gt;&lt;br /&gt;O plano de execução que se segue é um exemplo de uma árvore típica de profundidade à esquerda, implementado com NESTED LOOP .&lt;br /&gt;Observe como cada tabela é acessada por meio de índices.&lt;br /&gt;O exemplo também mostra como forçar um loop aninhado usando hints ordered e use_nl.&lt;br /&gt;O exemplo especifica o acesso as tabelas na mesma ordem em que aparecem na cláusula FROM.&lt;br /&gt;O último especifica qual método join é usado para juntar as outras tabelas para a primeira tabela .&lt;br /&gt;&lt;br /&gt;SELECT /*+ ordered use_nl(t2 t3 t4) */ t1.*, t2.*, t3.*, t4.*&lt;br /&gt;FROM t1, t2, t3, t4&lt;br /&gt;WHERE t1.id = t2.t1_id&lt;br /&gt;AND t2.id = t3.t2_id&lt;br /&gt;AND t3.id = t4.t3_id&lt;br /&gt;AND t1.n = 19;&lt;br /&gt;-------------------------------------------------------------------------------------------&lt;br /&gt;| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |&lt;br /&gt;-------------------------------------------------------------------------------------------&lt;br /&gt;| 0 | SELECT STATEMENT | | 1000 | 238K| 1218 (1)| 00:00:15 |&lt;br /&gt;| 1 | NESTED LOOPS | | 1000 | 238K| 1218 (1)| 00:00:15 |&lt;br /&gt;| 2 | NESTED LOOPS | | 100 | 18000 | 116 (0)| 00:00:02 |&lt;br /&gt;| 3 | NESTED LOOPS | | 10 | 1180 | 12 (0)| 00:00:01 |&lt;br /&gt;| 4 | TABLE ACCESS BY INDEX ROWID| T1 | 1 | 57 | 2 (0)| 00:00:01 |&lt;br /&gt;|* 5 | INDEX RANGE SCAN | T1_N | 1 | | 1 (0)| 00:00:01 |&lt;br /&gt;| 6 | TABLE ACCESS BY INDEX ROWID| T2 | 10 | 610 | 10 (0)| 00:00:01 |&lt;br /&gt;|* 7 | INDEX RANGE SCAN | T2_T1_ID | 10 | | 0 (0)| 00:00:01 |&lt;br /&gt;| 8 | TABLE ACCESS BY INDEX ROWID | T3 | 10 | 620 | 11 (0)| 00:00:01 |&lt;br /&gt;|* 9 | INDEX RANGE SCAN | T3_T2_ID | 10 | | 1 (0)| 00:00:01 |&lt;br /&gt;| 10 | TABLE ACCESS BY INDEX ROWID | T4 | 10 | 640 | 11 (0)| 00:00:01 |&lt;br /&gt;|* 11 | INDEX RANGE SCAN | T4_T3_ID | 10 | | 1 (0)| 00:00:01 |&lt;br /&gt;-------------------------------------------------------------------------------------------&lt;br /&gt;Predicate Information (identified by operation id):&lt;br /&gt;---------------------------------------------------&lt;br /&gt;5 - access("T1"."N"=19)&lt;br /&gt;7 - access("T1"."ID"="T2"."T1_ID")&lt;br /&gt;9 - access("T2"."ID"="T3"."T2_ID")&lt;br /&gt;11 - access("T3"."ID"="T4"."T3_ID")&lt;br /&gt;&lt;br /&gt;O Processamento deste tipo de plano de execução pode ser resumido da seguinte forma&lt;br /&gt;&lt;br /&gt;1.A primeira linha é obtida , não quando a consulta é analisada ou executada, o processamento começa por obter a primeira linha que atende o filtro t1.n = 19 da tabela t1.&lt;br /&gt;2.Com base nos dados encontrados na tabela t1, a tabela t2 é procurada. Perceba que o Oracle aproveita a condição do join t1.id = t2.t1_id para acessar a tabela t2. Na verdade, nenhuma restrição é aplicada a essa tabela. Apenas a primeira linha que atende a condição do join é restituída à operação principal.&lt;br /&gt;3.Com base nos dados encontrados na tabela t2, a tabela t3 é procurada. Também neste caso, o oracle tira proveito de uma condição de join, t2.id = t3.t2_id, para acessar a tabela T3. Apenas a primeira linha que preenche a condição de join é devolvida para a operação pai.&lt;br /&gt;4.Com base nos dados encontrados na tabela t3, a tabela t4 é procurada. Aqui novamente o Oracle se aproveita de uma condição de join, t3.id = t4.t3_id, para acessar a tabela T4. A primeira linha que cumpre a condição de join é imediatamente devolvida ao cliente.&lt;br /&gt;5.Quando as linhas subseqüentes são buscadas, as mesmas ações são realizadas para as buscar as seguintes.&lt;br /&gt;&lt;br /&gt;Obviamente, o processo é reiniciado a partir da posição do ultimo resultado (que poderia ser a segunda linha que corresponde na tabela t4, se houvesse). É essencial destacar que os dados são devolvidos assim que uma linha que atende à solicitação é encontrada. Em outras palavras, não é necessária à plena execução do join antes de retornar a primeira linha.&lt;br /&gt;No próximo post eu vou abordar como os MERGE JOIN são realizados.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6771588576061782619-8127041701091750684?l=hudsonsantosdba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hudsonsantosdba.blogspot.com/feeds/8127041701091750684/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hudsonsantosdba.blogspot.com/2011/01/metodos-de-joins-no-oracle-parte-i.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6771588576061782619/posts/default/8127041701091750684'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6771588576061782619/posts/default/8127041701091750684'/><link rel='alternate' type='text/html' href='http://hudsonsantosdba.blogspot.com/2011/01/metodos-de-joins-no-oracle-parte-i.html' title='Métodos de Joins no Oracle Parte I'/><author><name>H.S</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-UD8iU2mgk7k/Tvi2-aMIOMI/AAAAAAAAAKA/2DcsYtFvO0I/s220/perfil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6771588576061782619.post-1243605801632924256</id><published>2010-08-09T14:37:00.000-07:00</published><updated>2010-08-09T14:40:35.796-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='recuperação de tabela mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql 5.5'/><category scheme='http://www.blogger.com/atom/ns#' term='repair table'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql 5.5.3'/><category scheme='http://www.blogger.com/atom/ns#' term='manutenção de tabelas mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='DBA'/><category scheme='http://www.blogger.com/atom/ns#' term='replicação no mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='optmização de tabela mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='LOCK'/><category scheme='http://www.blogger.com/atom/ns#' term='optimize table'/><category scheme='http://www.blogger.com/atom/ns#' term='analyze table'/><title type='text'>Manutenção em Tabelas no MySQL - Parte II</title><content type='html'>&lt;div style="margin-bottom: 0in;"&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;/div&gt;Continuando o post anterior hoje voufalar das ferramentas utilizadas para a manutenção de tabelas doMySQL.&lt;br /&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;b&gt;CHECK TABLE&lt;/b&gt; &lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=6771588576061782619&amp;amp;postID=1243605801632924256" name="result_box"&gt;&lt;/a&gt; A instruçãoCHECK TABLE executa uma verificação de integridade de conteúdo eestrutura da tabela. Ele funciona para tabelas MyISAM eInnoDB,ARCHIVE, and CSV. Para tabelas MyISAM, ele também atualiza asestatísticas de índice. Se a tabela é uma view, CHECK TABLEverifica a definição da view. Se a saída de CHECK TABLE indica queuma tabela possui problemas, a tabela deve ser reparada.&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;mysql&amp;gt; check tables action;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;+---------------------+-------+----------+----------+&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;| Table               | Op    |Msg_type | Msg_text |&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;+---------------------+-------+----------+----------+&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;| qb3_migracao.action | check | status  | OK       |&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;+---------------------+-------+----------+----------+&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;1 row in set (15.93 sec)&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;Para maiores informações consulte olink :&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;http://dev.mysql.com/doc/refman/5.5/en/check-table.html&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;b&gt;REPAIR TABLE&lt;/b&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=6771588576061782619&amp;amp;postID=1243605801632924256" name="result_box1"&gt;&lt;/a&gt;O REPAIRTABLE corrige problemas em uma tabela que foi corrompida. &lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;Ele só funciona para tabelasMyISAM,ARCHIVE, and CSV.&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;Para executa-lo é necessário terprivilégios de Select e insert sobre a tabela.&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;È extremamente importante antes deexecutar um repair table, que seja feito um backup dos dados.&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=6771588576061782619&amp;amp;postID=1243605801632924256" name="result_box2"&gt;&lt;/a&gt;Se o servidorfalhar durante a execução do  REPAIR TABLE, é essencial depois dereiniciá-lo de que você execute imediatamente outro REPAIR TABLE natabela antes de executar quaisquer outras operações sobre ela. Napior das hipóteses, você pode ter um novo arquivo de índice limposem informações sobre o arquivo de dados e, em seguida, a próximaoperação de executar poderia substituir o arquivo de dados. Este éum cenário improvável, mas possível que ressalta o valor de fazerum backup primeiro.&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;Obs: O Comando Repair table por defaultescreve no log binario e se for um servidor master de uma replicação,vai replicar a instrução para todos os slaves, então nesse caso énecessario que se rode a opção NO_WRITE_TO_BINLOG.&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;Maiores informações acesse :&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;http://dev.mysql.com/doc/refman/5.5/en/repair-table.html&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;b&gt;ANALYZE TABLE&lt;/b&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;O ANALYZE TABLE atualiza a tabela comas informações sobre a distribuição das chaves da tabela. Essasinformações são usadas pelo optmizador para fazer melhoresescolhas sobre os planos de execução das consultas SQL.&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;Para executa-lo é necessário terprivilégios de Select e insert sobre a tabela.&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;Obs: O Analyze  table por defaultescreve no log binario e se for um servidor master de uma replicação,vai replicar a instrução para todos os slaves, então nesse caso énecessario que se rode a opção NO_WRITE_TO_BINLOG.&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=6771588576061782619&amp;amp;postID=1243605801632924256" name="result_box3"&gt;&lt;/a&gt;O MySQLutiliza a distribuição de chaves para decidir a ordem em que astabelas devem ser unidas quando você executar um join em algumacoisa que não seja uma constante. Além disso, a distribuição daschaves podem ser usadas para decidir quais os índices de uma tabela será utilizado dentro de uma consulta.&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;mysql&amp;gt; analyze table action;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;+---------------------+---------+----------+----------+&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;| Table               | Op      |Msg_type | Msg_text |&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;+---------------------+---------+----------+----------+&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;| qb3_migracao.action | analyze |status   | OK       |&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;+---------------------+---------+----------+----------+&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;1 row in set (0.00 sec)&amp;nbsp;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;Maiores informações acesse :&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;http://dev.mysql.com/doc/refman/5.5/en/analyze-table.html &lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;b&gt;OPTIMIZE TABLE&lt;/b&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;A instrução optimize table efetua adesfragmentação de uma tabela MyISAM. Ela recupera o espaço nãoutilizado, causado pela fragmentação das operações delete eupdate. Optimize table table classifica as paginas e as estatisticasdo indices.&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;Optimize table também funciona emtabelas innodb, porém não efetua a desfragmentação das tabelas,para isso é necessario que se execute um ALTER TABLE nome_da_tabelaengine=innodb;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;È interessante ressaltar que essaoperação é extremamente custosa, bloqueia as tabelas, e se forfeita em produção, é necessario que seja realizado em um horárioque que não seja o de pico.&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;Obs: O optimize Table por defaultescreve no log binario e se for um servidor master de uma replicação,vai replicar a instrução para todos os slaves, então nesse caso énecessario que se rode a opção NO_WRITE_TO_BINLOG.&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;mysql&amp;gt;  OPTIMIZE TABLE action;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;+---------------------+----------+----------+----------+&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;| Table               | Op       |Msg_type | Msg_text |&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;+---------------------+----------+----------+----------+&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;| qb3_migracao.action | optimize |status   | OK       |&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;+---------------------+----------+----------+----------+&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;1 row in set (0.04 sec)&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;Maiores informações acesse :&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;http://dev.mysql.com/doc/refman/5.5/en/optimize-table.html &lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;Agora que falei das ferramentas voumostrar uma procedure para automatizar esses recursos:&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;A procedure abaixo realiza um optimizeem todas as tabelas do banco que você especificar, e dependendo dasua demanda você pode transforma-la em um evento do mysql, ou aindacriar um script para chama-la de tempo em tempo.&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;DELIMITER &amp;amp;&amp;amp;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;CREATE PROCEDURE OPTIMIZE_TABLES()&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;BEGIN&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;DECLARE v_nome_table varchar(60);&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;DECLARE done INT DEFAULT 0;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;DECLARE cur1 CURSOR FOR selecttable_name from information_schema.columns wheretable_schema='NOME_DO_BANCO' ;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;DECLARE CONTINUE HANDLER FOR NOT FOUNDSET done = 1;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;OPEN cur1;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;REPEAT&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;FETCH cur1 INTO v_nome_table;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;IF NOT done THEN&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;SET @v_comando := concat("OPTIMIZETABLES nome_do_banco.", v_nome_table, ";");&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;PREPARE stmt FROM @v_comando;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;EXECUTE stmt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;DEALLOCATE PREPARE stmt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;end if;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;UNTIL done END REPEAT;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;CLOSE cur1;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;END&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&amp;amp;&amp;amp;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;DELIMITER ; &lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6771588576061782619-1243605801632924256?l=hudsonsantosdba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hudsonsantosdba.blogspot.com/feeds/1243605801632924256/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hudsonsantosdba.blogspot.com/2010/08/manutencao-em-tabelas-no-mysql-parte-ii.html#comment-form' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6771588576061782619/posts/default/1243605801632924256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6771588576061782619/posts/default/1243605801632924256'/><link rel='alternate' type='text/html' href='http://hudsonsantosdba.blogspot.com/2010/08/manutencao-em-tabelas-no-mysql-parte-ii.html' title='Manutenção em Tabelas no MySQL - Parte II'/><author><name>H.S</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-UD8iU2mgk7k/Tvi2-aMIOMI/AAAAAAAAAKA/2DcsYtFvO0I/s220/perfil.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6771588576061782619.post-7733061064479968188</id><published>2010-08-03T08:24:00.000-07:00</published><updated>2010-08-03T08:31:35.749-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='recuperação de tabela mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='repair table'/><category scheme='http://www.blogger.com/atom/ns#' term='manutenção de tabelas mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='check table'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='myisam'/><category scheme='http://www.blogger.com/atom/ns#' term='innodb'/><category scheme='http://www.blogger.com/atom/ns#' term='optmização de tabela mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='desfragmentação mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='optimize table'/><category scheme='http://www.blogger.com/atom/ns#' term='analyze table'/><title type='text'>Manutenção em Tabelas no MySQL - Parte I</title><content type='html'>&lt;div class="docText"&gt;&lt;br /&gt;&lt;div style="color: black;"&gt;Hoje eu vou falar sobre operações que fazem parte da vida de um DBA MySQL, que são as manutenções de tabelas, que é um processo extremamente necessário para o desempenho e integridade do seu banco de dados, dividi esse assunto em dois posts no qual vou explicar cada processo de manutenção com suas suas devidas observações e scripts para automatizar esse processo.&lt;/div&gt;&lt;div style="color: black;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: black;"&gt;Manutenção nas tabelas do mysql são necessarias para identificar e corrigir problemas de integridade, ocasionados por diversos fatores como bugs, problemas no disco e no servidor e também para fornecer mais velocidade ao MySQL, veremos o porquê&lt;span class="long_text" id="result_box"&gt;&lt;span style="background-color: white;" title=""&gt;, a seguir os tipos de manutenção que podemos realizar:&lt;/span&gt;&lt;/span&gt;&lt;span class="medium_text" id="result_box"&gt;&lt;span style="background-color: #e6ecf9;" title=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: black;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul style="color: black;"&gt;&lt;li&gt;&lt;span class="medium_text" id="result_box"&gt;&lt;span style="background-color: #e6ecf9;" title=""&gt;&lt;b&gt;A Ferramenta check&lt;/b&gt; realiza uma verificação de integridade para se certificar de que a estrutura da tabela e o conteúdo não têm problemas. &lt;/span&gt;&lt;span style="background-color: white;" title=""&gt;Esta operação poderá ser realizada em tabelas MyISAM e InnoDB.&lt;/span&gt;&lt;/span&gt;&lt;span class="medium_text" id="result_box"&gt;&lt;span style="background-color: #e6ecf9;" title=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul style="color: black;"&gt;&lt;li&gt;&lt;span class="medium_text" id="result_box"&gt;&lt;span style="background-color: #e6ecf9;" title=""&gt;&lt;b&gt;A Ferramenta repair&lt;/b&gt; corrige problemas de integridade para restaurar a tabela para um estado conhecido utilizável. &lt;/span&gt;&lt;span title=""&gt;Esse comando só tem suporte para tabelas MyISAM.&lt;/span&gt;&lt;/span&gt;&lt;span class="long_text" id="result_box"&gt;&lt;span title=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul style="color: black;"&gt;&lt;li&gt;&lt;span class="long_text" id="result_box"&gt;&lt;span title=""&gt;&lt;b&gt;A Ferramenta analyze&lt;/b&gt;, atualiza as estatísticas sobre a distribuição dos valores de índice de chave. &lt;/span&gt;&lt;span style="background-color: white;" title=""&gt;Esta é uma informação que o otimizador pode usar para gerar melhores planos de execução para consultas sobre as tabelas .Esse comando pode&lt;/span&gt;&lt;span style="background-color: white;" title=""&gt; ser feito tanto em tabelas MyISAM como em tabelas InnoDB.&lt;/span&gt;&lt;/span&gt;&lt;span class="medium_text" id="result_box"&gt;&lt;span title=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul style="color: black;"&gt;&lt;li&gt;&lt;span class="medium_text" id="result_box"&gt;&lt;span title=""&gt;&lt;b&gt;A Ferramenta optimize&lt;/b&gt; reorganiza uma tabela para que seu conteúdo pode ser acessado de forma mais eficiente. Esse comando pode ser feito em &lt;/span&gt;&lt;span style="background-color: white;" title=""&gt;tabelas MyISAM ,InnoDB e Archive, mas com limitações que variam entre essas storages engines.&lt;/span&gt;&lt;/span&gt;&lt;span class="medium_text" id="result_box"&gt;&lt;span style="background-color: white;" title=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="color: black;"&gt;&lt;span class="medium_text" id="result_box"&gt;&lt;span style="background-color: white;" title=""&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="docText" style="color: black;"&gt;&lt;/div&gt;&lt;div class="docText" style="color: black;"&gt;&lt;span class="medium_text" id="result_box"&gt;&lt;span title=""&gt;As Ferramentas analyze e optimize são operações que você pode executar periodicamente para manter suas tabelas com sua melhor performance:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="docText" style="color: black;"&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="long_text" id="result_box"&gt;&lt;span style="background-color: white;" title=""&gt;Quando o MySQL analisa uma tabela MyISAM ou InnoDB, ele atualiza as estatísticas de índice. &lt;/span&gt;&lt;span style="background-color: white;" title=""&gt;O otimizador usa essas estatísticas ao processar consultas para tomar melhores decisões sobre a melhor forma de procurar registros na tabela e na ordem em que ele precisa ler tabelas em um join.&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: white;" title=""&gt; &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="background-color: white;" title=""&gt;Quando o MySQL Otimiza uma tabela MyISAM, ele desfragmenta o datafile para recuperar o espaço não utilizado, classifica os índices e atualiza as estatísticas de índice. &lt;/span&gt;&lt;span style="background-color: white;" title=""&gt;Periódicamente a desfragmentação é necessária para acelerar o acesso as tabelas que contêm colunas de comprimento variável como VARCHAR, VARBINARY, BLOB, ou TEXT. &lt;/span&gt;&lt;span style="background-color: white;" title=""&gt;Inserções e exclusões podem resultar em muitas lacunas em tais tabelas, particularmente aqueles que são modificados com freqüência. &lt;/span&gt;Desfragmentando elimina essas lacunas.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div style="color: black;"&gt;No próximo post vou falar detalhadamente das ferramentas, com exemplos e scripts de automação.&lt;/div&gt;&lt;div style="color: black;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="docText" style="color: black;"&gt;&lt;/div&gt;&lt;div class="docText"&gt;&lt;span class="medium_text" id="result_box" style="color: black;"&gt;&lt;span title=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class="medium_text" id="result_box"&gt;&lt;span style="background-color: white;" title=""&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6771588576061782619-7733061064479968188?l=hudsonsantosdba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hudsonsantosdba.blogspot.com/feeds/7733061064479968188/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hudsonsantosdba.blogspot.com/2010/08/manutencao-em-tabelas-no-mysql-parte-i.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6771588576061782619/posts/default/7733061064479968188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6771588576061782619/posts/default/7733061064479968188'/><link rel='alternate' type='text/html' href='http://hudsonsantosdba.blogspot.com/2010/08/manutencao-em-tabelas-no-mysql-parte-i.html' title='Manutenção em Tabelas no MySQL - Parte I'/><author><name>H.S</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-UD8iU2mgk7k/Tvi2-aMIOMI/AAAAAAAAAKA/2DcsYtFvO0I/s220/perfil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6771588576061782619.post-4710974525530591371</id><published>2010-07-19T12:05:00.000-07:00</published><updated>2010-07-19T12:19:12.856-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql 5.5'/><category scheme='http://www.blogger.com/atom/ns#' term='replicação no mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='slave'/><category scheme='http://www.blogger.com/atom/ns#' term='replication'/><category scheme='http://www.blogger.com/atom/ns#' term='replicação'/><category scheme='http://www.blogger.com/atom/ns#' term='new features'/><category scheme='http://www.blogger.com/atom/ns#' term='Semisynchronous replication'/><category scheme='http://www.blogger.com/atom/ns#' term='master'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql 5.5.3'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='ROLLBACK'/><category scheme='http://www.blogger.com/atom/ns#' term='asynchronous'/><category scheme='http://www.blogger.com/atom/ns#' term='Replicação Semi Sincronizada'/><title type='text'>Configurando Replicação Semi – Sincronizada no Mysql</title><content type='html'>&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Hoje vou explicar como configurar uma replicação semi sincornizada no mysql, no post &lt;a href="http://hudsonsantosdba.blogspot.com/2010/05/replicacao-semi-sincronizada-no-mysql.html"&gt;Replicação Semi Sincornizada &lt;/a&gt;eu expliquei o que era essa nova feature do mysql , e as vantagens dela em relação a replicação normal contida na versão 5.1 e anteriores.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Na realidade demorei para publicar esse post, porque não podia falar dela sem testa-la, eu precisei configura-la em uma ambiente de produção web, e após 2 meses a replicação se encontra totalmente estavél. Com a segurança de um ambiente de produção de um grande portal, com mais de 300 consultas por segundo, vou explicar agora como configurar a replicação semi sincronizada &lt;br /&gt;utilizando o mysql 5.5.3.&lt;br /&gt;&lt;br /&gt;Meu cenário foram de 3 servidores com o mysql 5.5.3 em uma rede Gigabyte, utilizando o CentOS 5.5.&lt;br /&gt;&lt;br /&gt;A Primeira coisa a ser realizada é a instalação dos plugins necessários.&lt;br /&gt;&lt;br /&gt;Os plugins da replicação semi-síncronizada já estão incluídos com a distribuição MySQL. Atualmente, os plugins só estão disponíveis para Linux. Em outras plataformas são ainda não é suportado.&lt;br /&gt;&lt;br /&gt;No master instale o seguinte plugin:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;semisync_master.so&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;mysql &amp;gt;; INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';&lt;br /&gt;&lt;br /&gt;No Slave instale o seguinte plugin:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;semisync_slave.so&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;mysql &amp;gt;; INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';&lt;br /&gt;&lt;br /&gt;Caso na hora da instalação do plugin , ocorra o erro abaixo :&lt;br /&gt;&lt;br /&gt;ERROR 1126 (HY000): Can't open shared library&lt;br /&gt;'/usr/local/mysql/lib/plugin/semisync_master.so' (errno: 22 libimf.so: cannot open&lt;br /&gt;shared object file: No such file or directory)&lt;br /&gt;&lt;br /&gt;Será necessário o download da libmf em :&lt;br /&gt;http://dev.mysql.com/downloads/os-linux.html. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Para verficar os plugins instalados você pode dar um show plugins ou ainda efetuar a consulta SELECT * FROM&amp;nbsp; INFORMATION_SCHEMA.PLUGINS.&lt;br /&gt;&lt;br /&gt;Após a instalação os plugin são ativados por default, é importante a instalação dos plugins tanto no master quanto no slave, caso contrario a replicação será assincrona.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Configuração no Master&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;No banco master é necessário a configuração das seguintes variaveis no arquivo de configuração do Mysql (Quando instalado em distribuições rpm, fica localizado em /etc/my.cnf)&lt;br /&gt;&lt;br /&gt;Entre os servidores que compoem o esquema de replicação, cada servidor deve possuir um id único, o id do servidor é estabelecido pelo parâmetro :&lt;br /&gt;&lt;br /&gt;--server-id=x ( Onde x é o id do servidor)&lt;br /&gt;&lt;br /&gt;Caso ocorra duplicação desse valor entre os servidores, ocorrera problemas na replicação.&lt;br /&gt;&lt;br /&gt;Habilite a Replicação Semi-Sincronizada com as variaveis:&lt;br /&gt;&lt;br /&gt;rpl_semi_sync_master_enabled=1&lt;br /&gt;Essa variavel determina o tempo de resposta do slave ( Maiores informações leia meu post sobre replicação semi sincronizada)&lt;br /&gt;&lt;br /&gt;rpl_semi_sync_master_timeout=10&lt;br /&gt;O Log binário deve estar habilitado no master porque o log binário é a base para o envio de dados das alterações do master para seus escravos. Se o log binário não estiver habilitado, a replicação não será possível.&lt;br /&gt;&lt;br /&gt;Exemplo&lt;br /&gt;log-bin&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;= &amp;nbsp;&amp;nbsp;&amp;nbsp; /var/lib/mysql/mysql-bin-database-01.log &lt;br /&gt;log-bin-index = /var/lib/mysql/mysql-bin-database-01.log.index &lt;br /&gt;&lt;br /&gt;Para uma maior durabilidade e consistência possível em uma configuração de replicação usando InnoDB com transações, configure as seguintes variaveis:&lt;br /&gt;&lt;br /&gt;usar innodb_flush_log_at_trx_commit = 1 &lt;br /&gt;sync_binlog = 1 &lt;br /&gt;&lt;br /&gt;Para estabelecer que a replicação ocorra para um unico banco utilize a varivavel a seguir:&lt;br /&gt;&lt;br /&gt;binlog-do-db = nome_do_banco&lt;br /&gt;&lt;br /&gt;Para estabelecer o numero de dias de vida dos logs binários utilize a seguinte variavel :&lt;br /&gt;&lt;br /&gt;expire_logs_days = (número de dias)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Configuração no Slave&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Configure o id do servidor com :&lt;br /&gt;&lt;br /&gt;--server-id=x ( Onde x é o id do servidor)&lt;br /&gt;&lt;br /&gt;Habilite a replicação semi sincronizada&lt;br /&gt;rpl_semi_sync_slave_enabled=1&lt;br /&gt;&lt;br /&gt;Configure o Relay Log&lt;br /&gt;&lt;br /&gt;O relay log consiste em ler os eventos do log binário do master e escrito pela&amp;nbsp; thread de I/O do Slave. Eventos no relay log são executadas no slave, como parte da linha SQL.&lt;br /&gt;&lt;br /&gt;Exemplo:&lt;br /&gt;relay-log=relay-bin-server2&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Obs: Após as alterações no arquivo de configuração my.cnf é necessário o restart do mysql.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Crie um usuário para a Replicação&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;È necessário que você crie um usuário no servidor master, com permissão de acesso das outros servidores presentes na arquitetura de replicação&lt;br /&gt;Esse usuário precisa de grant de replicação.&lt;br /&gt;&lt;br /&gt;Use esse comando para conceder grant ao usuário.&lt;br /&gt;&lt;br /&gt;GRANT REPLICATION SLAVE ON *.* TO 'user'@'%';&lt;br /&gt;&lt;br /&gt;Verifique a necessidade de segurança do seu banco de dados, para verificar os privilégios adequado a esse usuário.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Ativando a Replicação.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Se você seguiu todos os passos corretamente nesse momento o master já esta registrando gerando as informações no log binário, então agora é o momento de ligar a replicação.&lt;br /&gt;Existe duas formas de ligar a replicação, uma é atraves de variaveis do my.cnf, outra é com o comando change master to, por considerar o comando change master to mais seguro escolhi essa opção:&lt;br /&gt;&lt;br /&gt;No master execute o comando:&lt;br /&gt;&lt;br /&gt;Show master status;&lt;br /&gt;Você deve ter uma resposta parecida com essa:&lt;br /&gt;mysql&amp;gt; show master status;&lt;br /&gt;+------------------+-----------+--------------+------------------+&lt;br /&gt;| File&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | Position&amp;nbsp; | Binlog_Do_DB | Binlog_Ignore_DB |&lt;br /&gt;+------------------+-----------+--------------+------------------+&lt;br /&gt;| mysql-bin.000005 | 153469228 | qb3_migracao |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&lt;br /&gt;+------------------+-----------+--------------+------------------+&lt;br /&gt;&lt;br /&gt;No slave execute o seguinte comando :&lt;br /&gt;&lt;br /&gt;use as informações obtidas no comando show master status;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;CHANGE MASTER TO&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MASTER_HOST='nome_do_servidor_master',&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MASTER_USER='usuario_para_replicacao',&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MASTER_PASSWORD='senha_do_usuario',&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MASTER_LOG_FILE='nome_do_log_binario',&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MASTER_LOG_POS=0;&lt;br /&gt;Agora execute o comando:&lt;br /&gt;&lt;br /&gt;mysql&amp;gt; STOP SLAVE IO_THREAD; START SLAVE IO_THREAD;&lt;br /&gt;&lt;br /&gt;Pronto , você acabou de configurar uma replicação semi sincronizada no Mysql.&lt;br /&gt;&lt;br /&gt;Para verificar o status execute o comando:&lt;br /&gt;&lt;br /&gt;show slave status\G;&lt;br /&gt;&lt;br /&gt;Verifique no log do servidor slave as seguintes linhas:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;[Note] Slave I/O thread: Start semi-sync replication to master 'slave-01@qb-database-main-01:3306' in log 'mysql-bin.000005' at position 001&lt;br /&gt;&lt;br /&gt;Embora a versão 5.5 do mysql ainda não seja uma versão&amp;nbsp; Generally Available (GA) ,&lt;br /&gt;hoje tenho servidores em produção com essa versão e tenho obtido ganhos relavantes a versão&amp;nbsp; 5.1, e a feature&amp;nbsp; replicação semi sincronizada , é uma das que mais tem me agradado, é mais segura , eu acompanho via log qualquer problema que possa ocorrer.&lt;br /&gt;&lt;br /&gt;Nos proximos posts , irei abordar sobre as novas features do innodb.&lt;br /&gt;&lt;br /&gt;Abraços !&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6771588576061782619-4710974525530591371?l=hudsonsantosdba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hudsonsantosdba.blogspot.com/feeds/4710974525530591371/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hudsonsantosdba.blogspot.com/2010/07/configurando-replicacao-semi.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6771588576061782619/posts/default/4710974525530591371'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6771588576061782619/posts/default/4710974525530591371'/><link rel='alternate' type='text/html' href='http://hudsonsantosdba.blogspot.com/2010/07/configurando-replicacao-semi.html' title='Configurando Replicação Semi – Sincronizada no Mysql'/><author><name>H.S</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-UD8iU2mgk7k/Tvi2-aMIOMI/AAAAAAAAAKA/2DcsYtFvO0I/s220/perfil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6771588576061782619.post-8703023165202903821</id><published>2010-06-23T12:04:00.000-07:00</published><updated>2010-06-23T12:04:48.934-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='salvar banco de dados'/><category scheme='http://www.blogger.com/atom/ns#' term='archives'/><category scheme='http://www.blogger.com/atom/ns#' term='DBA'/><category scheme='http://www.blogger.com/atom/ns#' term='_allow_resetlogs_corruption'/><category scheme='http://www.blogger.com/atom/ns#' term='backup'/><category scheme='http://www.blogger.com/atom/ns#' term='perda de archives'/><category scheme='http://www.blogger.com/atom/ns#' term='perda de backup'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>A Luz no fim do túnel ... no Oracle</title><content type='html'>Perdeu os archives ???&lt;br /&gt;Perdeu o backup ???&lt;br /&gt;Não tem mais jeito ???&lt;br /&gt;Demissão ???&lt;br /&gt;&lt;br /&gt;È pessoal pode ser que ainda exista a última esperança.&lt;br /&gt;&lt;br /&gt;_allow_resetlogs_corruption = true&lt;br /&gt;&lt;br /&gt;Com esse parametro no spfile, pode ser que&amp;nbsp; o banco abra resetando os logs , ai você recupera os dados e reza, mas raza muito pra ninguém descobrir o que realmente aconteceu.&lt;br /&gt;&lt;br /&gt;Bem não preciso nem dizer que esse é um parâmetro não documentado, que a chance de dar errado é grande, e se você ferrou seu ambiente de produção pra testar se ele funciona, boa demissão!!!&lt;br /&gt;&lt;br /&gt;Sem brincadeiras, já testei o parâmetro em um ambiente de testes, fiz o backup, deletei todos os archives e exclui alguns datafiles, acrescentei ele no spfile e dei um alter database open resetlogs e ele subiu.&lt;br /&gt;&lt;br /&gt;Já presenciei outra situação na qual ele também funcionou, mas espero que nem eu nem vocês nunca tenham que usá-lo pra valer.&lt;br /&gt;Abraços!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6771588576061782619-8703023165202903821?l=hudsonsantosdba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hudsonsantosdba.blogspot.com/feeds/8703023165202903821/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hudsonsantosdba.blogspot.com/2010/06/luz-no-fim-do-tunel.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6771588576061782619/posts/default/8703023165202903821'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6771588576061782619/posts/default/8703023165202903821'/><link rel='alternate' type='text/html' href='http://hudsonsantosdba.blogspot.com/2010/06/luz-no-fim-do-tunel.html' title='A Luz no fim do túnel ... no Oracle'/><author><name>H.S</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-UD8iU2mgk7k/Tvi2-aMIOMI/AAAAAAAAAKA/2DcsYtFvO0I/s220/perfil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6771588576061782619.post-708068886384045641</id><published>2010-06-13T07:52:00.000-07:00</published><updated>2010-06-13T07:52:47.046-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cache de Hit Hatio'/><category scheme='http://www.blogger.com/atom/ns#' term='buffers'/><category scheme='http://www.blogger.com/atom/ns#' term='Hit Ratio'/><category scheme='http://www.blogger.com/atom/ns#' term='Go Horse Process'/><category scheme='http://www.blogger.com/atom/ns#' term='buffer cache'/><category scheme='http://www.blogger.com/atom/ns#' term='database buffer cache'/><category scheme='http://www.blogger.com/atom/ns#' term='blocos'/><category scheme='http://www.blogger.com/atom/ns#' term='Go Horse'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>Cache Hit Ratio Oracle</title><content type='html'>A Buffer Cache é um recurso compartilhado, acessível por todos os usuários.&lt;br /&gt;Quando um usuário emite uma consulta , O Oracle antes de ir nosdatafiles buscar os blocos necessários para retornar o resultado,primeiro olha para os blocos de dados na buffer cache.&lt;br /&gt;Se os dados colocados no cache são retornados para o solicitante imediatamente .&lt;br /&gt;Ocorre o famoso Hit Ratio .&lt;br /&gt;Quando os dados não forem encontrados, um cache miss ocorre e oprocesso do usuário irá lêr os dados do disco para um buffer disponívelno cache.&lt;br /&gt;A taxa de acerto do cache é a percentagem total de solicitações de dados que são servidos diretamente a partir da buffer cache.&lt;br /&gt;No Oracle, o buffer cache hit ratio normalmente é calculado utilizando a seguinte fórmula:&lt;br /&gt;Cache Hit Ratio = 100 * (1 - leituras físicas / lógicas leituras)&lt;br /&gt;Nesta fórmula, "leituras físicas", corresponde à falta de cache e'leituras lógicas "corresponde ao total de solicitações de dados.&lt;br /&gt;Ajustando o buffer cache para optimizar o desempenho normalmenteocorre a adição de buffers no cache até que a taxa de acerto foimaximizada.&lt;br /&gt;O número de buffers no cache é especificado pelo parâmetro de inicialização DB_BLOCK_BUFFERS.&lt;br /&gt;Abraços !!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6771588576061782619-708068886384045641?l=hudsonsantosdba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hudsonsantosdba.blogspot.com/feeds/708068886384045641/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hudsonsantosdba.blogspot.com/2010/06/cache-hit-ratio.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6771588576061782619/posts/default/708068886384045641'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6771588576061782619/posts/default/708068886384045641'/><link rel='alternate' type='text/html' href='http://hudsonsantosdba.blogspot.com/2010/06/cache-hit-ratio.html' title='Cache Hit Ratio Oracle'/><author><name>H.S</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-UD8iU2mgk7k/Tvi2-aMIOMI/AAAAAAAAAKA/2DcsYtFvO0I/s220/perfil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6771588576061782619.post-8531063046247163894</id><published>2010-06-02T07:30:00.001-07:00</published><updated>2010-06-02T07:30:47.678-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DBWN'/><category scheme='http://www.blogger.com/atom/ns#' term='tempo'/><category scheme='http://www.blogger.com/atom/ns#' term='recuperação'/><category scheme='http://www.blogger.com/atom/ns#' term='I/O'/><category scheme='http://www.blogger.com/atom/ns#' term='blocos'/><category scheme='http://www.blogger.com/atom/ns#' term='actual_redo_blocks'/><category scheme='http://www.blogger.com/atom/ns#' term='V$Instance_Recovery'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>Tempo de Recuperação e outros parâmetros no Oracle</title><content type='html'>Fala Pessoal,&lt;br /&gt;A visão V$Instance_Recovery merece destaque nesse assunto, as principais colunas são:&lt;br /&gt;&lt;b&gt;recovery_estumated_ios&lt;/b&gt; - &amp;gt;&amp;nbsp;O número de operações de i/o nos datafiles que seriam necessárias para a&amp;nbsp;&amp;nbsp; recuperação se a instância falhasse.&lt;br /&gt;&lt;b&gt;actual_redo_blocks&lt;/b&gt; - &amp;gt; O número de blocos de redo do sistema operacional que se precisariam ser aplicados aos datafiles para a recuperaçõ se a intância falhasse agora.&lt;br /&gt;&lt;b&gt;estimated_mttr&lt;/b&gt; - &amp;gt; O número de segundos necessários para abrir o banco de dados caso ele falhasse agora.&lt;br /&gt;&lt;b&gt;writes_mttr&lt;/b&gt; -&amp;gt; O número de vezes que o DBWn teve de gravar, além das gravações que ele normalmente faria, para atingir a meta do mttr.&lt;br /&gt;Enfim uma mão na roda......&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6771588576061782619-8531063046247163894?l=hudsonsantosdba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hudsonsantosdba.blogspot.com/feeds/8531063046247163894/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hudsonsantosdba.blogspot.com/2010/06/tempo-de-recuperacao-e-outros.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6771588576061782619/posts/default/8531063046247163894'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6771588576061782619/posts/default/8531063046247163894'/><link rel='alternate' type='text/html' href='http://hudsonsantosdba.blogspot.com/2010/06/tempo-de-recuperacao-e-outros.html' title='Tempo de Recuperação e outros parâmetros no Oracle'/><author><name>H.S</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-UD8iU2mgk7k/Tvi2-aMIOMI/AAAAAAAAAKA/2DcsYtFvO0I/s220/perfil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6771588576061782619.post-575571434286278735</id><published>2010-05-30T16:08:00.000-07:00</published><updated>2010-05-30T16:12:10.582-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql 5.5'/><category scheme='http://www.blogger.com/atom/ns#' term='COMMIT'/><category scheme='http://www.blogger.com/atom/ns#' term='ROLLBACK'/><category scheme='http://www.blogger.com/atom/ns#' term='replicação no mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='replicação'/><category scheme='http://www.blogger.com/atom/ns#' term='new features'/><category scheme='http://www.blogger.com/atom/ns#' term='novas caracteristicas'/><title type='text'>Replicação Semi Sincronizada no Mysql 5.5</title><content type='html'>&lt;br /&gt;Fala Pessoal, estava meio afastado mas hoje vou falar das novas caracteristicas de replicação no Mysql 5.5&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;MySQL 5.5 suporta uma interface de replicação semi-síncronas, além da embutida replicação assíncrona.&lt;br /&gt;&lt;br /&gt;A replicação do MySQL, por padrão é assíncrona. O mestre grava eventos em seu log binário, mas não sabe se ou quando um escravo tem recuperado e transformado-los. Com a replicação assíncrona se o máster&amp;nbsp; falhar, as operações de que tenham sido comitadas não poderiam ser&amp;nbsp; transmitidas a um escravo. Consequentemente esse failover de um mestre a escravo neste caso pode resultar em failover para um servidor que está faltando operações relativas ao mestre.&lt;br /&gt;&lt;br /&gt;A Replicação semi-síncronas pode ser usada como uma alternativa para a replicação assíncrona:&lt;br /&gt;&lt;br /&gt;· Um Escravo indica se ele esta semi sincronizado quando se conecta ao master&lt;br /&gt;&lt;br /&gt;· Se a replicação semi-síncronas está habilitada, no lado mestre e há pelo menos um escravo semi-síncronizado , uma thread que executa uma operação de commit em um master&amp;nbsp; cria um bloqueio após o commit&amp;nbsp; ser realizado ,então o master espera até que pelo menos um escravo semi-síncronizado reconheça que tenha recebido todos os eventos da operação, ou até um tempo limite .&lt;br /&gt;&lt;br /&gt;· O escravo reconhece a recepção de eventos de uma transação somente após que esses eventos foram gravados em seu relay log e sofrerem flush para o disco.&lt;br /&gt;&lt;br /&gt;·&amp;nbsp; Se um tempo limite ocorre sem que qualquer escravo tenha reconhecido a operação, o master volta a replicação assíncrona. Quando pelo menos um escravo alcança o nivel semi-síncronizado, o mestre retorna à replicação semi-síncrona..&lt;br /&gt;&lt;br /&gt;· A Replicação semi-síncronas deve ser ativada em ambos os lados e dominar a escrava. se a replicaçãosemi-síncronas está desabilitado no master, ou habilitado no master mas não escravos, o mestre usa replicação assíncrona.&lt;br /&gt;&lt;br /&gt;Enquanto o master está bloqueando (Esperando confirmação de um escravo, após ter efetuado um commit), ele não irá retornar para a sessão que realizou a transação. Quando o bloqueio termina, o máster retorna à sessão, que pode então proceder para executar outras instruções. Neste ponto, a transação foi comittada no lado mestre, e a recepção de seus eventos foram reconhecidas por pelo menos um escravo.&lt;br /&gt;&lt;br /&gt;O bloqueio também ocorre após rollbacks que são escritas no log binário, que ocorrem quando uma operação que modifica as tabelas não transacionais é revertida. A transação rolled-back é registrada, mesmo que não tem nenhum efeito para tabelas transacionais porque as modificações nas tabelas não transacionais não podem ser revertidas e devem ser enviados para os escravos.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;As instruções que não ocorrem em contexto transacional (ou seja, quando nenhuma transação tenha sido iniciado com START TRANSACTION ou SET autocommit = 0), O autocommit é ativado e cada declaração compromete implicitamente. Com a replicação semi-síncronas, O master é bloqueado após o commit da instrução, da mesma forma que ocorreria para uma transação com um commit explicito.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Para entender o que o "semi"&amp;nbsp; "da replicação semi-síncrona" significa,&amp;nbsp; vamso compar a replicação assíncrona e totalmente sincronizada:&lt;br /&gt;&lt;br /&gt;·&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Com a replicação assíncrona, o master grava eventos em seu log binário e escravos requisitam quando eles estiverem prontos. Não há garantia de que qualquer evento jamais chegar a qualquer escravo.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;·&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Com a replicação totalmente sincronizada, quando um master efetua um commit de uma transação, todos os escravos terão o commit da transação antes do retorno do mestre para a sessão que realizou a transação. A desvantagem desta situação é que pode haver muita demora para completar uma transação.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;·&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A Replicação semi-síncrona cai entre replicação assíncrona e totalmente sincronizada. O Master aguarda após o commit apenas até, pelo menos, um escravo tem recebido e registrado os eventos. Ele não espera que todos os escravos confirmem a recepção, e ele exige apenas a recepção, não que os eventos tenham sido integralmente executados e empenhados no lado escravo.&lt;br /&gt;&lt;br /&gt;Comparado a replicação assíncrona, a replicação semi-síncronas proporciona maior integridade dos dados. Quando um commit é retornado com sucesso, sabe-se que os dados existem, em pelo menos, dois lugares (no mestre e pelo menos em um escravo). Mas se ocorre um crash no&amp;nbsp; master enquanto o ele está esperando a confirmação de um escravo, é possível que a operação possa não ter alcançado nenhum escravo.( Ai Chora!!! )&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;A Replicação semi-síncronas tem algum impacto no desempenho porque os commits são mais lentos devido à necessidade de esperar pelo os escravos. O dilema para a aumentar a integridade dos dados é o tempo de resposta do TCP / IP para enviar a confirmação para o escravo e aguardar a confirmação da recepção pelo escravo. Isto significa que a replicação semi-síncronas funciona melhor para os servidores que fecham comunicação através de redes rápidas, e o pior para os servidores distantes se comunicando por redes lentas.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6771588576061782619-575571434286278735?l=hudsonsantosdba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hudsonsantosdba.blogspot.com/feeds/575571434286278735/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hudsonsantosdba.blogspot.com/2010/05/replicacao-semi-sincronizada-no-mysql.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6771588576061782619/posts/default/575571434286278735'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6771588576061782619/posts/default/575571434286278735'/><link rel='alternate' type='text/html' href='http://hudsonsantosdba.blogspot.com/2010/05/replicacao-semi-sincronizada-no-mysql.html' title='Replicação Semi Sincronizada no Mysql 5.5'/><author><name>H.S</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-UD8iU2mgk7k/Tvi2-aMIOMI/AAAAAAAAAKA/2DcsYtFvO0I/s220/perfil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6771588576061782619.post-7071339689386043301</id><published>2010-05-12T12:47:00.000-07:00</published><updated>2010-05-12T12:47:03.569-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DBWN'/><category scheme='http://www.blogger.com/atom/ns#' term='checkpoint'/><category scheme='http://www.blogger.com/atom/ns#' term='FAST_START_MTTR_TARGET'/><category scheme='http://www.blogger.com/atom/ns#' term='I/O'/><category scheme='http://www.blogger.com/atom/ns#' term='shutdown abort'/><category scheme='http://www.blogger.com/atom/ns#' term='falha de instância'/><category scheme='http://www.blogger.com/atom/ns#' term='SMON'/><category scheme='http://www.blogger.com/atom/ns#' term='MTTR'/><category scheme='http://www.blogger.com/atom/ns#' term='instância'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>Tempo médio de recuperação de uma Instância - MTTR- Oracle</title><content type='html'>Fala Pessoal,&lt;br /&gt;Hoje eu vou falar sobre falha e recuperação de uma instância.&lt;br /&gt;Dizemos que um banco de dados esta corrompido quando o banco é finalizado por uma falha ou um shutdown abort , armazenando transações sem commit. Quando ocorre isso na hora da inicialização da instância o oracle irá aplicar o conteudo dos Redo logs para recuperar a instância, vai usar o conteúdo dos arquivos de redo log para reconstruir o cache do banco de dados para o estado que ele estava antes da falha.&lt;br /&gt;&lt;div mce_style="text-align: center" style="text-align: center;"&gt;&lt;b&gt;O MTTR (mean time to recover)&amp;nbsp; - Tempo médio de recuperação &lt;/b&gt;&lt;/div&gt;&lt;div mce_style="text-align: center" style="text-align: center;"&gt; &lt;/div&gt;&lt;div mce_style="text-align: left" style="text-align: left;"&gt;A Recuperação da instância garante corrupção zero, mas até todas as alterações dos arquivos de Redo tenham sido aplicadas nos blocos de undo e nos blocos de dados, vamos ter um custo de I/O referente aos arquivos de dados a medida que o redo é aplicado. Esses fator pode ser controlado pelo checkpoint.&lt;/div&gt;&lt;div mce_style="text-align: left" style="text-align: left;"&gt;O Checkpoint , vai garantir que apartir de uma certa hora, as alterações dos dados, que compõem um SCN específico tenham sido aplicadas nos datafiles pelo DBWn. Quanto mais atualizada esta a posição do checkpoint, mais rápida vai ser a recuperação da instância, porque não há necessidade de aplicar o redo nas transações que sofreram commit antes de uma falha.&lt;/div&gt;&lt;div mce_style="text-align: left" style="text-align: left;"&gt;Avançamos a posição do checkpoint quando gravamos gravamos os blocos alterados no disco, o que gera I/O . Porém se DBWn ficar muito atrasado de uma forma com que caso ocorra um falha SMOn tenha que fazer um I/O muito grande nos datafiles para aplicar as alterações do redo,isso vai gerar um tempo de recuperação da instância muito grande, ou seja o MTTR vai subir.&lt;/div&gt;&lt;div mce_style="text-align: left" style="text-align: left;"&gt;Para ajudar a controlar essa questão temos o parâmetro FAST_START_MTTR_TARGET. Esse parâmetro é especificado&amp;nbsp; em segundos e&amp;nbsp; ajuda a controlar o tempo de recuperação de uma instância. Esse parâmetro vem configurado como default 0, caso esse valor seja modificado , vai ser ativado o autoajuste do checkpoint, o que força uma analise das estatísticas sobre os recursos e utilização da máquina, e caso houver capacidade extra , esta será usada para gravar os buffers sujos adicionais do database buffer cache, fazendo assim a posição do checkpoint subir.&lt;/div&gt;&lt;div mce_style="text-align: left" style="text-align: left;"&gt; &lt;/div&gt;&lt;div mce_style="text-align: left" style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6771588576061782619-7071339689386043301?l=hudsonsantosdba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hudsonsantosdba.blogspot.com/feeds/7071339689386043301/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hudsonsantosdba.blogspot.com/2010/05/tempo-medio-de-recuperacao-de-uma.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6771588576061782619/posts/default/7071339689386043301'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6771588576061782619/posts/default/7071339689386043301'/><link rel='alternate' type='text/html' href='http://hudsonsantosdba.blogspot.com/2010/05/tempo-medio-de-recuperacao-de-uma.html' title='Tempo médio de recuperação de uma Instância - MTTR- Oracle'/><author><name>H.S</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-UD8iU2mgk7k/Tvi2-aMIOMI/AAAAAAAAAKA/2DcsYtFvO0I/s220/perfil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6771588576061782619.post-8359715553398727416</id><published>2010-05-07T07:18:00.000-07:00</published><updated>2010-05-07T07:18:24.429-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='etl'/><category scheme='http://www.blogger.com/atom/ns#' term='dba.o que um dba deve saber'/><category scheme='http://www.blogger.com/atom/ns#' term='sql server'/><category scheme='http://www.blogger.com/atom/ns#' term='conhecimento'/><category scheme='http://www.blogger.com/atom/ns#' term='threads'/><category scheme='http://www.blogger.com/atom/ns#' term='administrador de banco de dados'/><category scheme='http://www.blogger.com/atom/ns#' term='processos'/><category scheme='http://www.blogger.com/atom/ns#' term='data warehouse'/><category scheme='http://www.blogger.com/atom/ns#' term='dw'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='db2'/><category scheme='http://www.blogger.com/atom/ns#' term='aprendizado'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='sistema operacional'/><title type='text'>O que um DBA deve saber ....</title><content type='html'>Certa vez lendo algum artigo na internet achei essas recomendações ....&lt;br /&gt;Para que o DBA possa exercer adequadamente o seu papel e cumprir com suas responsabilidades é importante que ele detenha algumas competências:&lt;br /&gt;*Conhecimentos em Sistemas Operacionais: Um banco de dados é totalmente dependente do sistema operacional onde está instalado.&lt;br /&gt;É fundamental que o DBA conheça conceitos ligados ao sistema operacional (processos, threads, gerenciamento de memória, paginação, sistema de arquivos, etc)&lt;br /&gt;para poder adequar o máximo possível o sistema operacional ao banco de dados utilizado.&lt;br /&gt;*Conhecimentos em Redes: É desejável que o DBA conheça características da rede (capacidade de tráfego, protocolos, etc). &lt;br /&gt;*Compreensão em arquitetura em banco de dados: Entender como funciona um banco de dados é um pouco mais do que conhecer uma tecnologia específica&lt;br /&gt;(ORACLE, DB2, SQL Server, etc). &lt;br /&gt;Entender alguns dos andamentos de banco de dados (algoritmos de indexação, concorrência, transações, etc) podem ser tão valiosos quanto conhecer&lt;br /&gt;as implementações de um produto específico.&lt;br /&gt;*Noções do sistema de armazenamento: É importante ao DBA ter conhecimento dos princípios que são utilizados nos sistemas de armazenamento (RAID, SAN, etc).&lt;br /&gt;Esse conhecimento pode ajudar o DBA a utilizar a infra-estrutura de armazenamento para um projeto físico eficiente.&lt;br /&gt;*Manuseio do XML: Esse padrão já possui uma forte aceitação e cada vez mais os profissionais de banco de dados têm de conviver com ele.&lt;br /&gt;É importante que o DBA conheça XML e suas tecnologias correlatas (XSD, Web Services, etc).&lt;br /&gt;*Noções de ETL (Extract, Transform, Load*.*): Com o crescente mercado de Business Inteligence é esperado o aumento de bases multidimensionais utilizando diversas tecnologias&lt;br /&gt;de banco de dados (XML, Flat Files, banco de dados relacionais, banco de dados orientados a objeto, etc). &lt;br /&gt;É importante ao DBA conhecer meios para dar suporte a rotinas de extração, transformação e carga no projeto de Data Warehouse além de monitoramento das consultas.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6771588576061782619-8359715553398727416?l=hudsonsantosdba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hudsonsantosdba.blogspot.com/feeds/8359715553398727416/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hudsonsantosdba.blogspot.com/2010/05/o-que-um-dba-deve-saber.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6771588576061782619/posts/default/8359715553398727416'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6771588576061782619/posts/default/8359715553398727416'/><link rel='alternate' type='text/html' href='http://hudsonsantosdba.blogspot.com/2010/05/o-que-um-dba-deve-saber.html' title='O que um DBA deve saber ....'/><author><name>H.S</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-UD8iU2mgk7k/Tvi2-aMIOMI/AAAAAAAAAKA/2DcsYtFvO0I/s220/perfil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6771588576061782619.post-2922884851218442945</id><published>2010-05-03T09:22:00.001-07:00</published><updated>2010-05-03T09:23:21.991-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mecanismo'/><category scheme='http://www.blogger.com/atom/ns#' term='COMMIT'/><category scheme='http://www.blogger.com/atom/ns#' term='scn oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='processo'/><category scheme='http://www.blogger.com/atom/ns#' term='scn'/><category scheme='http://www.blogger.com/atom/ns#' term='processo de commit'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>O Processo de Commit</title><content type='html'>&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;/code&gt;Fala Pessoal,estava lendo um artigo sobre performance o qual explicava sobre o processo de commit e explicava o conceito do termo SCN, achei interessante e resolvi publicar aqui no blog.&lt;br /&gt;O Banco de Dados Oracle usa um rapido mecanismo de de commit o qual garante que as mudanças efetivadas possam ser recuperadas em caso de falhas da instância.&lt;br /&gt;&lt;h3 style="font-weight: normal;"&gt;&amp;nbsp;SCN (System Change Number) Número de mudança do Sistema.&lt;/h3&gt;&amp;nbsp;Sempre que uma transação sofre commit, o banco de dados Oracle atribui SCN para a transação. O SCN é constantemente incrementado e é único dentro do banco de dados. Ele é usado pelo banco de dados Oracle como um carimbo de tempo interno para sincronizar os dados e fornecer consistência de leitura quando os dados são obtidos a partir dos arquivos de dados. Usando o SCN habilitamos o banco de dados oracle para executar verificações de consistência sem depender da data e da hora do sistema operacional.&lt;br /&gt;Quando o commit é emitido, as seguintes etapas são realizadas:&lt;br /&gt;&lt;ol&gt;&lt;li&gt; Processo do servidor coloca um registro de commit, com o SCN, no buffer redo log. &lt;/li&gt;&lt;li&gt;O Processo de background Log Writer (LGWR) realiza uma constante escrita de todo Redo Log buffer até e inclusive o registro de commit para os arquivos de Redo Log .Após esse ponto o banco de dados já pode garantir que as alterações não serão perdidas mesmo se houver uma falha na instancia. &lt;/li&gt;&lt;li&gt;O Processo do servidor fornece um retorno ao usuário sobre o processo de realização da transação. &lt;/li&gt;&lt;/ol&gt;&amp;nbsp;Em Algumas vezes o Processo de background DBWR&amp;nbsp; escreve as reais mudanças de volta para o disco baseado&amp;nbsp; em um próprio sistema de temporalização interno.&lt;br /&gt;Fonte :Oracle Database 10g :SQL Tuning - Priya Vennapusa&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6771588576061782619-2922884851218442945?l=hudsonsantosdba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hudsonsantosdba.blogspot.com/feeds/2922884851218442945/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hudsonsantosdba.blogspot.com/2010/05/o-processo-de-commit.html#comment-form' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6771588576061782619/posts/default/2922884851218442945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6771588576061782619/posts/default/2922884851218442945'/><link rel='alternate' type='text/html' href='http://hudsonsantosdba.blogspot.com/2010/05/o-processo-de-commit.html' title='O Processo de Commit'/><author><name>H.S</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-UD8iU2mgk7k/Tvi2-aMIOMI/AAAAAAAAAKA/2DcsYtFvO0I/s220/perfil.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6771588576061782619.post-209932283037190453</id><published>2010-05-01T16:05:00.000-07:00</published><updated>2010-05-01T17:02:00.619-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql'/><category scheme='http://www.blogger.com/atom/ns#' term='soft parse'/><category scheme='http://www.blogger.com/atom/ns#' term='hard parsing'/><category scheme='http://www.blogger.com/atom/ns#' term='variaveis de ligação'/><category scheme='http://www.blogger.com/atom/ns#' term='Instrução'/><category scheme='http://www.blogger.com/atom/ns#' term='parse'/><category scheme='http://www.blogger.com/atom/ns#' term='Instruções sql'/><category scheme='http://www.blogger.com/atom/ns#' term='variaveis bind'/><category scheme='http://www.blogger.com/atom/ns#' term='soft parsing'/><category scheme='http://www.blogger.com/atom/ns#' term='bind'/><category scheme='http://www.blogger.com/atom/ns#' term='parsing'/><category scheme='http://www.blogger.com/atom/ns#' term='cache de biblioteca'/><category scheme='http://www.blogger.com/atom/ns#' term='hard parse'/><category scheme='http://www.blogger.com/atom/ns#' term='library cache'/><category scheme='http://www.blogger.com/atom/ns#' term='analise'/><title type='text'>Processamento das Instruções SQL no Oracle</title><content type='html'>&lt;div align="center"&gt;&lt;br /&gt;&lt;/div&gt;Fala Pessoal,&lt;br /&gt;&lt;br /&gt;Um Bom entendimento de como as instruções SQL são processadas no banco é fundamental para uma criação otimizada de instruções SQL. No Processamento de Instruções SQL, existem quatro fases Importantes as quais vou relatar ao longo dos meus posts e que são elas:&lt;br /&gt;Parsing,binding,Executing and Fetching. Nesse post irei começar falando da fase de parse.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Fase de Parse (Análise)&lt;/b&gt;&lt;br /&gt;A Fase de Parsing é um dos estágios que ocorre no processamento das instruções SQL. Quando uma aplicação emite uma instrução SQL, , ela na realidade emite uma chamada para o banco de dados e durante essa chamada para o banco analisar essa instrução, ou seja verificar se realmente é possível extrair resultados dela, e nessa fase de analise, o Oracle:&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Verifica a instrução sql, sua sintaxe e&amp;nbsp; valida a sua semântica&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Determina se o processo de emissão da instrução SQL tem a devida permissão para executá-la.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Aloca uma área privada para a instrução SQL&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;O Oracle primeiramente verifica se já existe uma analise (parse) dessa instrução SQL no cachê de biblioteca. Se já existir uma analise dessa instrução no cachê de biblioteca, essa instrução é executada imediatamente porém se a mesma não existir, o Oracle irá gerar uma analise dessa instrução e o processo do usuário ira alocar uma área de SQL compartilhada para a instrução no cachê de biblioteca após esse procedimento a instrução será analisada nesta área.&lt;br /&gt;A Operação de Parse (análise) do Oracle sempre aloca uma área compartilhada para uma instrução SQL. Depois dessa área compartilhada ter sido alocada para essa instrução, a mesma já pode ser executada novamente repetitivamente(varias vezes) sem precisar ser analisada , ou seja sem precisar passar pela fase de Parse. O processo de Analise pode ser "caro" em relação a execução, pode ter um alto custo dos requisitos disponíveis, por isso essa etapa deve ser minimizada sempre que possível. O Ideal é que a instrução deva ser analisada uma vez e executada varias vezes sem a necessidade de uma nova análise para cada execução.&lt;br /&gt;&lt;b&gt;Existem dois Tipos de Operação de Parse (Analise):&lt;/b&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Hard Parsing : Dizemos que existe uma operação de Hard Parse quando uma instrução Sql é executada pela primeira vez e ela não se encontrada na shared pool. Esse tipo de parse é a fase que mais consome recurso intensivamente do banco de dados, porque quando isso ocorre é necessario executar todas as operações necessárias da fase de parse.&lt;/li&gt;&lt;li&gt;Soft Parsing: Dizemos que existe uma operação de Soft Parse quando uma instrução executada já existe na shared pool..Quando uma instrução sql já esta armazenada no cache de biblioteca temos um ganho de performance.No entando, até mesmo na fase de parse temos ainda um consumo de recursos, pois mesmo a instrução já estando armazenada o banco ainda precisa verificar os parâmetros de segunça e a sintaxe da instrução e isso consome recursos do sistema.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Quando as variáveis bind (ligação) são usadas de modo correto, a operação de sof parsing ocorre mais vezes no banco da dados, reduzindo assim a operação de hard parsing e mantendo as instruções analisadas na cachê de biblioteca por um tempo maior.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6771588576061782619-209932283037190453?l=hudsonsantosdba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hudsonsantosdba.blogspot.com/feeds/209932283037190453/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hudsonsantosdba.blogspot.com/2010/05/processamento-das-instrucoes-sql.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6771588576061782619/posts/default/209932283037190453'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6771588576061782619/posts/default/209932283037190453'/><link rel='alternate' type='text/html' href='http://hudsonsantosdba.blogspot.com/2010/05/processamento-das-instrucoes-sql.html' title='Processamento das Instruções SQL no Oracle'/><author><name>H.S</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-UD8iU2mgk7k/Tvi2-aMIOMI/AAAAAAAAAKA/2DcsYtFvO0I/s220/perfil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6771588576061782619.post-2881077016099906042</id><published>2010-04-30T09:12:00.001-07:00</published><updated>2010-05-01T16:02:55.590-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='V$LOCKED_OBJECT'/><category scheme='http://www.blogger.com/atom/ns#' term='DADOS'/><category scheme='http://www.blogger.com/atom/ns#' term='COMMIT'/><category scheme='http://www.blogger.com/atom/ns#' term='CONCORRÊNCIA DE DADOS'/><category scheme='http://www.blogger.com/atom/ns#' term='ROLLBACK'/><category scheme='http://www.blogger.com/atom/ns#' term='TRANSAÇÃO'/><category scheme='http://www.blogger.com/atom/ns#' term='PMON'/><category scheme='http://www.blogger.com/atom/ns#' term='LOCKS'/><category scheme='http://www.blogger.com/atom/ns#' term='LOCK'/><category scheme='http://www.blogger.com/atom/ns#' term='CONCORRÊNCIA'/><category scheme='http://www.blogger.com/atom/ns#' term='DEADLOCK'/><category scheme='http://www.blogger.com/atom/ns#' term='UNDO'/><title type='text'>Concorrência e Consistência dos Dados (Locks) Oracle</title><content type='html'>Olá&lt;br /&gt;Nesse primeiro Post, tenho a intenção de mostrar de forma resumida, prática e simples o conceito de concorrência e consistência de dados, enfim os nossos locks de cada dia.&lt;br /&gt;Se os banco de dados tivessem apenas um único usuário, muitos dos nossos problemas seriam resolvidos (Tudo bem que criaríamos muitos outros, mas isso não vem ao caso agora), os dados poderiam sofrer modificações em diversas horas e até ao mesmo tempo. Porém como dois corpos não ocupam o mesmo lugar no espaço, em bancos de dados "multi usuário", as transações podem tentar atualizar os mesmos dados ao mesmo tempo. Então por isso os bancos de dados devem ter e possuem um controle de concorrência afim de manter a consistência dos dados, para os outros usuários.&lt;br /&gt;Concorrência de Dados quer dizer que os usuários(vários) podem acessar os mesmos dados ao mesmo tempo. Já Consistência de dados quer dizer que os usuários podem ter uma visão consistente sólida e real dos dados, incluindo as alterações que o próprio usuário esta realizando e as alterações feitas por outros usuários.&lt;br /&gt;&lt;b&gt;Help_1&lt;/b&gt;: Caso algum iniciante tenha a seguinte dúvida:&lt;br /&gt;-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Se algum usuário estiver atualizando uma tabela, eu vou ver os valores antigos ou os alterados ?&lt;br /&gt;Resposta : &lt;i&gt;Em primeiro lugar, caso você tenha essa dúvida é sinal que está na hora de aprender sobre segmentos de UNDO&lt;/i&gt;, mas &lt;strike&gt;clareando&lt;/strike&gt; respondendo a dúvida, sempre quando vamos atualizar,deletar ou inserir algum dado em alguma tabela, o Oracle usa os segmentos de UNDO para armazenar os blocos de dados antigos e como resultado, fornecem os valores anteriores das linhas para qualquer usuário que emite uma instrução select antes de a transação sofrer commit.Então se alguém estiver fazendo alguma modificação, quando outra pessoa executar uma instrução select, essa somente verá os dados armazenados no segmento de UNDO ou seja os antigos, até que o commit, seja executado.( Vale a Pena pesquisar sobre o assunto).&lt;br /&gt;Mecanismo de Locks (Ou bloqueio)&lt;br /&gt;Os SGBDs tem por default um mecanismo de lock(bloqueio) para resolver os problemas realcionados a integridade, consistência e concorrência de dados. Os Locks são mecanismos que impedem que transações atualizem os mesmos dados ao mesmo tempo.&lt;br /&gt;-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Controlam o acesso concorrente ao banco de dados&lt;br /&gt;-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Impede atualizações simultâneas do mesmo dado&lt;br /&gt;-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; È liberado ao final de cada transação (COMMIT,ROLLBACK)&lt;br /&gt;&lt;h2&gt;Tempo de Duração&lt;/h2&gt;Todos os bloqueios adquiridos pelas declarações dentro de uma transação são mantidos para a duração da operação, impedindo a interferência destrutiva, incluindo leituras sujas e perda de atualizações. As alterações introduzidas pelas instruções SQL de uma transação só se tornam visíveis para outras transações que começam após que a primeira transação seja confirmada (Commit).&lt;br /&gt;O Oracle libera todos os bloqueios adquiridos pelas declarações dentro de uma transação quando você confirmar ou desfazer a transação. A Oracle também libera os bloqueios adquiridos após um ponto de salvamento(savepoint) quando existe reversão para o ponto de salvamento.&lt;br /&gt;&lt;h3&gt;DEADLOCK&lt;/h3&gt;Um deadlock ocorre quando dois ou mais segmentos do controle estão bloqueadas, cada um à espera de um recurso mantido por outro segmento.Elas ficam aguardando que uma libere um determinado recurso para que outra o utilize. Existe outras fontes na internet os quais detalham melhor esse conceito e os tipos de Lock.&lt;br /&gt;( &lt;a href="http://profissionaloracle.com.br/blogs/drbs/page/2/" mce_href="http://profissionaloracle.com.br/blogs/drbs/page/2/"&gt;http://profissionaloracle.com.br/blogs/drbs/page/2/&lt;/a&gt;)&lt;br /&gt;&lt;h2&gt;&lt;span style="color: blue;"&gt; &lt;b&gt;A Nível de Teste vamos forçar o acontecimento de Locks.&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;&lt;b&gt; &lt;/b&gt;&lt;b&gt;1_Vamos Criar e popular a&amp;nbsp; tabela HT_LOCK.&lt;/b&gt;&lt;br /&gt;SQL&amp;gt; CREATE TABLE HT_LOCK (&lt;br /&gt;ID_LOCK VARCHAR2(1),&lt;br /&gt;COD_LOCK VARCHAR2(1));&lt;br /&gt;Table created.&lt;br /&gt;SQL&amp;gt; INSERT INTO &amp;nbsp;HT_LOCK VALUES (1,'A');&lt;br /&gt;SQL&amp;gt; INSERT INTO &amp;nbsp;HT_LOCK VALUES (2, 'B');&lt;br /&gt;SQL&amp;gt; INSERT INTO &amp;nbsp;HT_LOCK VALUES (3, 'C');&lt;br /&gt;SQL&amp;gt; INSERT INTO &amp;nbsp;HT_LOCK VALUES (4, 'D');&lt;br /&gt;4&amp;nbsp; row created.&lt;br /&gt;SQL&amp;gt; SELECT * FROM HT_LOCK;&lt;br /&gt;ID_LOCK&amp;nbsp; COD_LOCK&lt;br /&gt;---&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ---&lt;br /&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A&lt;br /&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; B&lt;br /&gt;3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; C&lt;br /&gt;4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; D&lt;br /&gt;4 rows selected.&lt;br /&gt;SQL&amp;gt; commit ;&lt;br /&gt;Commit complete.&lt;br /&gt;&lt;b&gt;2_Vamos efetuar um UPDATE nessa Tabela com usuários diferentes;&lt;/b&gt;&lt;br /&gt;SQL&amp;gt;UPDATE HT_LOCK SET ID_LOCK='0' WHERE ID_LOCK='4';&lt;br /&gt;&lt;b&gt;1 linha atualizada.&lt;/b&gt;&lt;br /&gt;SQL&amp;gt; UPDATE HUDSON.HT_LOCK SET ID_LOCK='9' WHERE ID_LOCK='2';&lt;br /&gt;&lt;b&gt;1 linha atualizada.&lt;/b&gt;&lt;br /&gt;&lt;b&gt;3_Agora vamos verificar quais usuários estão gerando algum tipo de lock.&lt;/b&gt;&lt;br /&gt;&lt;b&gt; &lt;/b&gt;&lt;br /&gt;SQL&amp;gt;&amp;nbsp; SELECT OBJECT_ID,SESSION_ID,ORACLE_USERNAME FROM&amp;nbsp; V$LOCKED_OBJECT;&lt;br /&gt;OBJECT_ID SESSION_ID ORACLE_USERNAME&lt;br /&gt;---------- ---------- ------------------------------&lt;br /&gt;19996&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 14&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HUDSON&lt;br /&gt;19996&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 21&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SYSTEM&lt;br /&gt;&lt;b&gt;2 linhas selecionadas.&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Help_2&lt;/b&gt; A Visão V$LOCKED_OBJECT listas todos os bloqueios adquiridos por todas as transações no sistema. Isso mostra que as sessões estão mantendo bloqueios DML em que objetos e de que modo.&lt;br /&gt;Então Temos dois Usuários com locks em um objeto de mesmo ID, logo se trata do mesmo objeto..&lt;br /&gt;Agora vamos descobrir que objeto é esse ;&lt;br /&gt;SQL&amp;gt; SELECT OBJECT_NAME, OBJECT_TYPE,OBJECT_ID FROM DBA_OBJECTS WHERE&amp;nbsp; OBJECT_ID &amp;nbsp;= 19996;&lt;br /&gt;OBJECT_NAME&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OBJECT_TYPE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OBJECT_ID&lt;br /&gt;------------------------------ ------------------- ------&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ----&lt;br /&gt;HT_LOCK&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TABLE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 19996&lt;br /&gt;Agora sabemos que esse lock é realizado na Tabela HT_LOCK .&lt;br /&gt;Eu mostrei como localizar quais são os usuários os quais estão gerando lock em alguma tabela e quais tabelas são essas de forma separada para melhor entendimento, mas isso também poderia ser feito de uma forma só com o select abaixo :&lt;br /&gt;SQL&amp;gt;SELECT A.OBJECT_ID, A.SESSION_ID, A.ORACLE_USERNAME, B.OBJECT_NAME , B.OBJECT_TYPE FROM v$locked_object A , DBA_OBJECTS B&lt;br /&gt;WHERE A.OBJECT_ID = B.OBJECT_ID;&lt;br /&gt;OBJECT_ID&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SESSION_ID ORACLE_USERNAME&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OBJECT_NAME&lt;br /&gt;--------------- --------------- ------------------------------ ----------------------------------&lt;br /&gt;19996&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 21&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SYSTEM&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HT_LOCK&lt;br /&gt;19996&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 14&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HUDSON&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HT_LOCK&lt;br /&gt;Agora se um sessão de um usuário gerar um lock em alguma tabela e se a mesma&amp;nbsp; for mal finalizada&amp;nbsp; ela ira ficar com o status de inativa no banco de dados, e esse lock somente irá sumir quando o processo de segundo plano ou background PMON aplicar rollback na transação, e assim remover os locks nas linhas afetadas.&lt;br /&gt;Mas caso por algum problema PMON demorar para aplicar o rollback e remover os locks, você pode matar essa sessão pendente e assim retirar o lock, da seguinte forma.&lt;br /&gt;SQL&amp;gt; SELECT SID,SERIAL#,USERNAME,STATUS FROM V$SESSION WHERE SID =&amp;nbsp; 14&amp;nbsp; --(ESSE VALOR É EQUIVALENTE AO VALOR DO CAMPO SESSION_ID DA VISÃO v$locked_object)&lt;br /&gt;SID&amp;nbsp;&amp;nbsp;&amp;nbsp; SERIAL# USERNAME&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; STATUS&lt;br /&gt;-------- ---------- ------------------------------ --------&lt;br /&gt;14&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 61&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HUDSON&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; INACTIVE&lt;br /&gt;Após obter o SID, e o SERIAL# de sessão vamos forçar a sua finalização com o comando :&lt;br /&gt;ALTER SYSTEM KILL SESSION '301,9797' IMMEDIATE;&lt;br /&gt;A Minha intenção nesse Post foi mostrar como ocorre um lock e como entender o processo de identificação e finalização :&lt;br /&gt;Porém existem scripts que podem fazer tudo, ou andar um bom caminho segue esse script do Rodrigo Almeida publicado em 06 novembro 2005&amp;nbsp; ás&amp;nbsp; 15:03 no link :&lt;br /&gt;&lt;a href="http://forum.imasters.uol.com.br/index.php?/topic/153638-monitoracao-de-objetos-em-lock/" mce_href="http://forum.imasters.uol.com.br/index.php?/topic/153638-monitoracao-de-objetos-em-lock/"&gt;http://forum.imasters.uol.com.br/index.php?/topic/153638-monitoracao-de-objetos-em-lock/&lt;/a&gt;&lt;br /&gt;SET LINESIZE 500&lt;br /&gt;SET PAGESIZE 1000&lt;br /&gt;SET VERIFY OFF&lt;br /&gt;COLUMN owner FORMAT A20&lt;br /&gt;COLUMN username FORMAT A20&lt;br /&gt;COLUMN object_owner FORMAT A20&lt;br /&gt;COLUMN object_name FORMAT A30&lt;br /&gt;COLUMN locked_mode FORMAT A15&lt;br /&gt;SELECT b.session_id AS sid,&lt;br /&gt;NVL(b.oracle_username, '(oracle)') AS username,&lt;br /&gt;a.owner AS object_owner,&lt;br /&gt;a.object_name,&lt;br /&gt;Decode(b.locked_mode, 0, 'None',&lt;br /&gt;1, 'Null (NULL)',&lt;br /&gt;2, 'Row-S (SS)',&lt;br /&gt;3, 'Row-X (SX)',&lt;br /&gt;4, 'Share (S)',&lt;br /&gt;5, 'S/Row-X (SSX)',&lt;br /&gt;6, 'Exclusive (X)',&lt;br /&gt;b.locked_mode) locked_mode,&lt;br /&gt;b.os_user_name&lt;br /&gt;FROM&amp;nbsp;&amp;nbsp; dba_objects a,&lt;br /&gt;v$locked_object b&lt;br /&gt;WHERE&amp;nbsp; a.object_id = b.object_id&lt;br /&gt;ORDER BY 1, 2, 3, 4;&lt;br /&gt;SET PAGESIZE 14&lt;br /&gt;SET VERIFY ON&lt;br /&gt;Bibliografia utilizada :&lt;br /&gt;-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Oracle Database 11g /Bob Byla e Kevin Loney&lt;br /&gt;-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dominando o Oracle 9i Damaris Fanderuff&lt;br /&gt;-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href="http://download.oracle.com/docs/cd/B19306_01/server.102/b14220/consist.htm#i5704" mce_href="http://download.oracle.com/docs/cd/B19306_01/server.102/b14220/consist.htm#i5704"&gt;http://download.oracle.com/docs/cd/B19306_01/server.102/b14220/consist.htm#i5704&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6771588576061782619-2881077016099906042?l=hudsonsantosdba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hudsonsantosdba.blogspot.com/feeds/2881077016099906042/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hudsonsantosdba.blogspot.com/2010/04/concorrencia-e-consistencia-dos-dados.html#comment-form' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6771588576061782619/posts/default/2881077016099906042'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6771588576061782619/posts/default/2881077016099906042'/><link rel='alternate' type='text/html' href='http://hudsonsantosdba.blogspot.com/2010/04/concorrencia-e-consistencia-dos-dados.html' title='Concorrência e Consistência dos Dados (Locks) Oracle'/><author><name>H.S</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-UD8iU2mgk7k/Tvi2-aMIOMI/AAAAAAAAAKA/2DcsYtFvO0I/s220/perfil.jpg'/></author><thr:total>1</thr:total></entry></feed>
