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

<channel>
	<title>Profissionais TI - Pra quem respira informação &#187; Oracle</title>
	<atom:link href="http://www.profissionaisti.com.br/tag/oracle/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.profissionaisti.com.br</link>
	<description>Pra quem respira informação</description>
	<lastBuildDate>Fri, 10 Feb 2012 16:02:41 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Instalação do Oracle 11GR2 Express Edition + SQL Developer 3.0</title>
		<link>http://www.profissionaisti.com.br/2012/02/instalacao-do-oracle-11gr2-express-edition-sql-developer-3-0/</link>
		<comments>http://www.profissionaisti.com.br/2012/02/instalacao-do-oracle-11gr2-express-edition-sql-developer-3-0/#comments</comments>
		<pubDate>Fri, 03 Feb 2012 11:06:25 +0000</pubDate>
		<dc:creator>Fábio Prado</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Utilidades]]></category>
		<category><![CDATA[Banco de Dados]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[SQL Developer]]></category>

		<guid isPermaLink="false">http://www.profissionaisti.com.br/?p=20825</guid>
		<description><![CDATA[Olá pessoal, Na postagem de hoje não vou publicar um artigo, farei algo diferente, vou compartilhar um vídeo em que eu demonstro a instalação do Oracle Database 11GR2 Express Edition + instalação do SQL Developer 3.0, em um Sistema Operacional Windows. Além da instalação, no vídeo faço vários comentários sobre as vantagens e desvantagens da [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Olá pessoal,</p>
<p style="text-align: justify;">Na postagem de hoje não vou publicar um artigo, farei algo diferente, vou compartilhar um vídeo em que eu demonstro a instalação do <em>Oracle Database 11GR2 Express Edition</em> + instalação do <em>SQL Developer 3.0, </em>em um Sistema Operacional Windows. Além da instalação, no vídeo faço vários comentários sobre as vantagens e desvantagens da versão <em>Express </em>do Oracle Database e sobre características do <em>SQL Developer </em>e mostro no final, como se conectar no Banco de Dados utilizando o SQL Developer.</p>
<div style="text-align: justify;">
<p>O vídeo está no Youtube, dividido em 2 partes (por causa de limitações do Youtube, que permitem postar vídeos com tempo somente de até 15 minutos):</p>
<p style="text-align: center;"><iframe frameborder="0" height="395" src="http://www.youtube.com/embed/ql6ovb16tyQ" width="480"></iframe></p>
<p style="text-align: center;"><iframe frameborder="0" height="395" src="http://www.youtube.com/embed/yqjEmAy-Yrc" width="480"></iframe></p>
<p>[]s</p>
<p>Fábio Prado<br />
Fonte: <a href="http://www.fabioprado.net/2012/01/instalacao-do-oracle-11gr2-express.html" target="_blank">http://www.fabioprado.net/2012/01/instalacao-do-oracle-11gr2-express.html</a></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.profissionaisti.com.br/2012/02/instalacao-do-oracle-11gr2-express-edition-sql-developer-3-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Qual é o melhor Banco de Dados: ORACLE ou SQL SERVER?</title>
		<link>http://www.profissionaisti.com.br/2012/01/qual-e-o-melhor-banco-de-dados-oracle-ou-sql-server/</link>
		<comments>http://www.profissionaisti.com.br/2012/01/qual-e-o-melhor-banco-de-dados-oracle-ou-sql-server/#comments</comments>
		<pubDate>Tue, 31 Jan 2012 11:17:20 +0000</pubDate>
		<dc:creator>Fábio Prado</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Mercado]]></category>
		<category><![CDATA[Opinião]]></category>
		<category><![CDATA[Banco de Dados]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[SQL Server]]></category>

		<guid isPermaLink="false">http://www.profissionaisti.com.br/?p=20827</guid>
		<description><![CDATA[Olá pessoal, Estou escrevendo este artigo para fazer um comparativo e comentar sobre algumas vantagens e recursos dos 2 bancos de dados (BDs) mais utilizados nas grandes empresas do Brasil: Oracle e SQL Server, conforme pesquisa realizada em 2005 pelo Grupo Impacta (ver Figura 1). Embora a pesquisa de 2005 não seja tão recente, ela [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Olá pessoal,</p>
<p style="text-align: justify;">Estou escrevendo este artigo para fazer um comparativo e comentar sobre algumas vantagens e recursos dos 2 bancos de dados (BDs) mais utilizados nas grandes empresas do Brasil: <strong>Oracle</strong> e <strong>SQL Server</strong>, conforme pesquisa realizada em 2005 pelo <em>Grupo Impacta</em> (ver Figura 1). Embora a pesquisa de 2005 não seja tão recente, ela foi a mais confiável e concisa que eu encontrei para demonstrar a <em>nossa realidade</em> (o que temos nas empresas brasileiras).</p>
<p style="text-align: center;"><a href="http://1.bp.blogspot.com/-EOdAradIrlU/TvzHGjDLSCI/AAAAAAAAASs/I8K5BN2yqx0/s1600/bds_mais_utlilizados_mundo.jpg"><img src="http://1.bp.blogspot.com/-EOdAradIrlU/TvzHGjDLSCI/AAAAAAAAASs/I8K5BN2yqx0/s400/bds_mais_utlilizados_mundo.jpg" alt="" width="400" height="272" border="0" /></a><br />
Figura 1 &#8211; BDs mais utilizados nas grandes empresas brasileiras (Grupo Impacta 2005)</p>
<p style="text-align: justify;">Conheço os 2 BDs que vou comentar neste artigo, porém conheço muito melhor o BD <a href="http://www.profissionaisti.com.br/tag/oracle">Oracle</a>, por isso gostaria que os profissionais que estiverem lendo este artigo, deixem comentários que possam acrescentar mais detalhes sobre o SQL Server e recursos que existem nele e que não tenham itens correspondentes no Oracle.</p>
<p style="text-align: justify;">Seguem abaixo as principais características de cada BD:</p>
<p style="text-align: justify;"><strong><span style="text-decoration: underline;">SQL Server</span></strong>:</p>
<p style="text-align: justify;">- SGBD comercializado atualmente pela Microsoft. Nasceu em 1988, a partir de uma parceria entre <a href="http://www.profissionaisti.com.br/category/microsoft/">Microsoft</a>, Sybase e Aston-Tate;</p>
<p style="text-align: justify;">- Última versão: SQL Server 2008;</p>
<p style="text-align: justify;">- Custo de uma licença da versão Enterprise por CPU: aprox. U$ 28.000 por CPU;</p>
<p style="text-align: justify;">- Pode ser instalado somente em SO Windows;</p>
<p style="text-align: justify;">- Possui ferramentas de administração com interface gráfica excelentes, que possibilitam um gerenciamento mais fácil e produtivo. Ex.: SQL Server Management Studio 2008;</p>
<p style="text-align: justify;">- Como toda ferramenta Microsoft, o BD SQL Server em geral, é mais fácil de administrar e de programar do que em Oracle.</p>
<p style="text-align: justify;">- 2 recursos que acho bastante interessantes em SQL Server e que não existem correspondência no Oracle, são:</p>
<p style="text-align: justify;">a) Divisão lógica de uma instância contendo vários BDs. No Oracle temos apenas vários <em>schemas. </em>O SQL Server possui uma camada extra onde cada BD pode conter vários usuários ou schemas. Desse modo, podemos organizar e gerenciar melhor schemas correlacionados, pertencentes a uma mesma aplicação, em um BD isolado dos demais schemas do BD;</p>
<p style="text-align: justify;">b)  Possui um schema do sistema chamado MODEL que serve como template para schemas de usuários. Se por exemplo, o schema MODEL tiver 2 tabelas e uma visão, ao criar um novo schema de usuário, ele será criado com estes mesmos objetos.</p>
<p style="text-align: justify;"><strong><span style="text-decoration: underline;">Oracle</span></strong>:</p>
<p style="text-align: justify;">-  SGBD comercializado atualmente pela Oracle, que nasceu em 1979 e que foi o primeiro BD relacional comercializado no mundo;</p>
<p style="text-align: justify;">- Última versão: Oracle Database 11G;</p>
<p style="text-align: justify;">- Custo de uma licença da versão Enterprise por CPU: U$ 47.500 (até 2 core);</p>
<p style="text-align: justify;">- Pode ser instalado em múltiplas plataformas desde 1985. Entre as principais, podemos citar: Unix, Linux, HP/UX, BIM AIX, IBM VMS e Windows;</p>
<p style="text-align: justify;">- Possui ferramentas de administração com interface gráfica menos amigáveis que as do SQL Server. Isso vem mudando e melhorando a cada nova versão do Oracle. No 10G, o <em>Enterprise Manager</em> possui muitos recursos e sua interface gráfica evoluiu muito, mas ainda acho que as ferramentas da Microsoft são mais intuitivas e mais produtivas. No Oracle o DBA costuma gerenciar muitas atividades do BD através de conjuntos de scripts;</p>
<p style="text-align: justify;">- Possui uma documentação muito bem detalhada, o que de início até assusta, mas permite que você conheça muito bem o BD e todos os seus recursos;</p>
<p style="text-align: justify;">- Possui mais recursos de segurança e performance que o SQL Server. Exemplos:</p>
<p style="text-align: justify;">a) Por padrão, o Oracle não <em>commita</em> transações. Isso permite que você desfaça as alterações de uma instrução SQL, caso ela tenha sido submetido erroneamente. No SQL, por padrão as intruções SQL são auto-commitadas, o que facilita o trabalho geral dos desenvolvedores, mas que dificulta o trabalho de recuperação por danos acidentais e o controle transacional;</p>
<p style="text-align: justify;">b) Por padrão, o Oracle permite efetuar <strong>leitura consistente de dados</strong>. Esse recurso permite que um usuário &#8220;B&#8221; leia os dados de uma linha de uma tabela, no mesmo momento em que ela está sendo alterada por um usuário &#8220;A&#8221;, sem que o usuário &#8220;B&#8221; visualize os dados que estão sendo alterados pelo &#8220;A&#8221;. Não há bloqueio de leitura nem risco do usuário &#8220;B&#8221; visualizar os dados que ainda não foram commitados pelo usuário &#8220;A&#8221;. No SQL Server esse não é o comportamento padrão do BD, portanto, desenvolvedores inexperientes poderão desenvolver aplicações com sérios problemas de performance no acesso concorrente, se não tiverem os conhecimentos necessários para contornar bloqueios de leitura aos dados;</p>
<p style="text-align: justify;">c) Arquitetura mais flexível e com mais recursos para otimização de performance. No Oracle é possível criar e gerenciar diversas estruturas de memória no BD. É possível, por exemplo, definir estruturas de armazenamento com tamanhos de blocos que podem variar de 2k à 32k. No SQL Server só é possível criar estruturas de armazenamento de 8k. Em Oracle, sistemas OLAP e índices em geral, são otimizados com tamanhos de blocos maiores (32k);</p>
<p style="text-align: justify;">d) Possui <strong>Packages</strong>, que são objetos que permitem (entre diversos outros benefícios) agrupar e encapsular código de stored procedures e funções;</p>
<p style="text-align: justify;">e) Possui <strong>Sequences </strong>(que já li em alguns blogs que será implementado no SQL Server 2012). Sequences possuem muito mais recursos do que colunas de auto-incremento, existentes em SQL Server, para definir valores de chaves-primárias. Um exemplo que posso citar é o <em>cache</em> de Sequences, que permite otimizar a performance de inserções que necessitam de um valor único para compor a chave-primária (ver artigo <a href="http://www.fabioprado.net/2010/09/cache-em-oracle-sequences.html" target="_blank">http://www.fabioprado.net/2010/09/cache-em-oracle-sequences.html</a>;</p>
<p style="text-align: justify;">f) O <a href="http://www.profissionaisti.com.br/tag/oracle/">Oracle</a> possui mais tipos de índices que o SQL Server. Índices permitem otimizar consultas em BD. 2 exemplos que vou citar no Oracle que não existem itens correspondentes no SQL Server são: índices <span style="color: #274e13;"><strong>BITMAP</strong></span> (que permitem otimizar consultas em colunas com baixa cardinalidade) e índices <span style="color: #274e13;"><strong>Baseados em função</strong> </span>(que permitem indexar funções em colunas);</p>
<p style="text-align: justify;">g) Permite criar um ou mais processos chamados <strong>listeners, </strong>que são utilizados para conectar clientes remotos ao BD. Uma das vantagens de ter este tipo de processo é que a conexão ao BD pode ser distribuída entre diversos listeners, ou seja, podemos configurar múltiplos <em>listeners</em> para grupos menores de usuários, para <em>ouvir</em> em portas diferentes, com o objetivo de evitar gargalos de conexão ao BD quando temos muitos usuários (normalmente mais de 200 conexões por segundo) se conectando ao mesmo tempo;</p>
<p style="text-align: justify;">h) O Oracle possui um modelo de controle de acesso concorrente chamado <em>multiversion read consistency</em> (<em>MVRC</em>) que é um dos melhores modelos do mercado para permitir um controle de acesso concorrente com menor contenção de linhas e consequentemente, melhor performance quando há acesso concorrente aos dados. No Oracle o controle de bloqueios é realizado através da gravação de indicadores de bloqueio no nível das linhas, já no SQL Server existe um componente chamado <em>Lock Manager</em> para fazer o mesmo trabalho. No Lock Manager há uma sobrecarga maior para gerenciar uma grande qtde. de bloqueios, que consequentemente pode degradar a performance de atualizações e acessos concorrentes.</p>
<p style="text-align: justify;"><strong><span style="text-decoration: underline;">CONCLUSÃO</span></strong>:</p>
<p style="text-align: justify;">A percepção que eu tenho é que a <a href="http://www.profissionaisti.com.br/category/microsoft/">Microsoft</a> tem um histórico de manter o foco na entrega de produtos mais fáceis de se utilizar e de gerenciar. A Oracle, por sua vez, tem foco na entrega de produtos com mais segurança e com vasta gama de recursos.</p>
<p style="text-align: justify;">Ambos são ótimos BDs e cada um tem suas vantagens e desvantagens. <span style="color: #274e13;"><strong>O SQL Server tem a principal vantagem de ter um custo menor</strong></span>, aproximadamente metade do preço de um Oracle. no SQL Server existem algumas funcionalidades (Ex.: Particionamento de tabelas) que também existem no Oracle, mas que no SQL Server não precisa de licença adicional, enquanto que, no Oracle, é necessário adquirir licenças adicionais (Options), o que torna o produto Oracle mais caro ainda. <span style="color: #274e13;"><strong>Outra vantagem do SQL Server é a facilidade de uso e gerenciamento. </strong></span><span style="color: #000000;">Eu, particularmente, quando comecei a trabalhar com Oracle, achava tudo muito difícil. As ferramentas do SQL Server eram mais produtivas e mais intuitivas.</span></p>
<p style="text-align: justify;"><span><strong>O Oracle</strong></span> tem um custo mais alto que o SQL Server e é mais difícil de administrar, porém é um produto que <strong><span style="color: #274e13;">possui mais recursos de segurança e performance</span></strong>, que podem ser muito importantes e cruciais para empresas que possuem aplicações críticas e que possuem muitos dados e muitos usuários concorrentes, em geral.</p>
<p style="text-align: justify;">Para finalizar, vou responder agora a questão que é o título deste artigo: <strong><span style="color: #ff0000;"><span style="color: #274e13;">Qual é o melhor BD: Oracle ou SQL Server?</span> </span></strong></p>
<p style="text-align: justify;"><span style="color: #ff0000;"><strong>R.: Bom&#8230; isso depende da necessidade! </strong></span><span style="color: #000000;"> De um modo geral, acredito que o SQL Server é mais indicado para pequenas e médias empresas ou pequenas e médias aplicações, devido ao custo menor desse BD e porque normalmente as aplicações que são executadas nestes ambientes possuem menor quantidade e complexidade de requisitos. O Oracle, por sua vez, é mais indicado para grandes empresas ou grandes aplicações, que possuem requisitos de negócios mais complexos e críticos, e que possuem <em>grana</em> para pagar pelos recursos de segurança e performance adicionais que este BD oferece.</span></p>
<p style="text-align: justify;">Por hoje é só! Deixem seus comentários!</p>
<p style="text-align: justify;">Referências:</p>
<ul style="text-align: justify;">
<li><a href="http://www.linhadecodigo.com.br/artigo/2412/An%C3%83%C2%A1lise-de-desempenho-entre-os-bancos-de-dados-SQL-Sever-x-Oracle.aspx" target="_blank">http://www.linhadecodigo.com.br/artigo/2412/AnÃ¡lise-de-desempenho-entre-os-bancos-de-dados-SQL-Sever-x-Oracle.aspx</a></li>
<li><a href="http://www.dba-oracle.com/t_sql_server_vs_oracle_terminology.htm" target="_blank">http://www.dba-oracle.com/t_sql_server_vs_oracle_terminology.htm</a></li>
<li><a href="http://stackoverflow.com/questions/2322260/basic-differences-between-oracle-and-sql-server">http://stackoverflow.com/questions/2322260/basic-differences-between-oracle-and-sql-server</a></li>
<li><a href="http://pt.wikipedia.org/wiki/Oracle_%28banco_de_dados">http://pt.wikipedia.org/wiki/Oracle_(banco_de_dados</a>)</li>
<li><a href="http://msdn.microsoft.com/pt-br/library/ms175049.aspx">http://msdn.microsoft.com/pt-br/library/ms175049.aspx</a></li>
<li><a href="http://en.wikipedia.org/wiki/Microsoft_SQL_Server">http://en.wikipedia.org/wiki/Microsoft_SQL_Server</a></li>
</ul>
<p style="text-align: justify;">[]s</p>
<p style="text-align: justify;">Fonte: <a href="http://www.fabioprado.net/2012/01/qual-e-o-melhor-banco-de-dados-oracle.html">http://www.fabioprado.net/2012/01/qual-e-o-melhor-banco-de-dados-oracle.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.profissionaisti.com.br/2012/01/qual-e-o-melhor-banco-de-dados-oracle-ou-sql-server/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Oracle: otimizando a performance de aplicações com stored procedures</title>
		<link>http://www.profissionaisti.com.br/2012/01/oracle-otimizando-a-performance-de-aplicacoes-com-stored-procedures/</link>
		<comments>http://www.profissionaisti.com.br/2012/01/oracle-otimizando-a-performance-de-aplicacoes-com-stored-procedures/#comments</comments>
		<pubDate>Thu, 12 Jan 2012 10:25:56 +0000</pubDate>
		<dc:creator>Fábio Prado</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Utilidades]]></category>
		<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Stored Procedures]]></category>

		<guid isPermaLink="false">http://www.profissionaisti.com.br/?p=20397</guid>
		<description><![CDATA[Olá pessoal, No artigo de hoje vou escrever sobre um assunto que eu comento e demonstro em mais detalhes nos meus treinamentos de Tuning de SQL em Oracle 10G/11G, que é a performance das stored procedures (SPs) nas aplicações. O uso de stored procedures, em substituição ao uso de instruções SQL, pode otimizar drásticamente a performance de aplicações [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Olá pessoal,</p>
<p style="text-align: justify;">No artigo de hoje vou escrever sobre um assunto que eu comento e demonstro em mais detalhes nos meus treinamentos de <a href="http://www.fabioprado.net/p/treinamentos.html" target="_blank">Tuning de SQL em Oracle 10G/11G</a>, que é a performance das stored procedures (SPs) nas aplicações. O uso de <strong><span style="color: #274e13;">stored procedures</span></strong>, em substituição ao uso de <span style="color: #ff0000;">instruções SQL</span>, pode otimizar drásticamente a performance de aplicações que acessam/atualizam bancos de dados (BDs).</p>
<p style="text-align: justify;">No exemplo deste artigo as regras de negócio estão dentro da SPs. Muita gente é contra esta prática, pois aprendemos em arquitetura de sistemas que as regras de negócio devem ficar na aplicação e não no BD. Concordo em partes, pois em aplicações críticas, que exigem alta performance, o que é mais importante: uma aplicação filosóficamente melhor (com regras de negócio na aplicação) ou uma aplicação mais rápida?</p>
<p style="text-align: justify;">Vou demonstrar a seguir, um exemplo de uma aplicação bem simples que eu desenvolvi com o <strong>Dot Net Framework 3.5, </strong>para provar o conceito de que SPs podem otimizar a performance das aplicações. A aplicação, chamada <strong>Teste de performance de transações</strong>, poderá ser baixada para testes e é totalmente parametrizável (ver arquivo <em>TesteTransacao.exe.config). </em>Ela simula<em> </em>a realização de simples transferências entre contas bancárias, retirando o valor de uma conta corrente (conta origem) e depositando o respectivo valor em outra conta corrente (conta destino).</p>
<table cellspacing="0" cellpadding="0" align="center">
<tbody>
<tr>
<td><a href="http://4.bp.blogspot.com/-hVX3hDUZosw/TnSZNHBcagI/AAAAAAAAAN8/c2M20jd0Os8/s1600/img1_app.jpg"><img class="aligncenter" src="http://4.bp.blogspot.com/-hVX3hDUZosw/TnSZNHBcagI/AAAAAAAAAN8/c2M20jd0Os8/s320/img1_app.jpg" alt="" width="320" height="296" border="0" /></a></td>
</tr>
<tr>
<td>Figura 1 &#8211; Tela principal da aplicação &#8220;Testes de performance de Transações&#8221;</td>
</tr>
</tbody>
</table>
<p style="text-align: justify;">A operação de transferência ocorre em modo transacional (deve fazer tudo ou nada, se 1 passo falhar, desfaz os passos anteriores), composto por 3 passos:</p>
<p style="text-align: justify;">a) Verificar se a conta origem possui saldo para efetuar a transferência;</p>
<p style="text-align: justify;">b) Retirar (sacar) valor da conta origem;</p>
<p style="text-align: justify;">c) Depositar valor na conta destino;</p>
<p style="text-align: justify;">A aplicação está disponível para download no MEU SKY DRIVE (ver painel direito da página principal do meu blog), pasta <a href="http://www.profissionaisti.com.br/tag/oracle/"><em>Oracle</em></a> -&gt; <em>Scripts</em>, arquivo <em>TesteTransacao.zip. </em>Para efetuar a instalação e utilizá-la, siga os passos abaixo:</p>
<p style="text-align: justify;">1- Descompactar o arquivo <em>TesteTransacao.zip;</em></p>
<p style="text-align: justify;">2- Conectar-se no BD desejado e instalar os objetos de BD (tabela CONTA e package PKG_CONTA) que estão no arquivo <em>Script_BD_Teste_Transacao.sql. </em>Instale os objetos no schema de um usuário que será utilizado pela aplicação para conectar-se no BD.</p>
<p style="text-align: justify;">3- Configurar os valores (<em>values</em>) dos parâmetros<em> (keys) </em>do arquivo <em>TesteTransacao.exe.config, </em>conforme indicações abaixo:</p>
<ol style="text-align: justify;">
<li><strong>instance_name = </strong>Nome da instância do BD onde os objetos foram criados. Especificar nome de uma instância cadastrada no arquivo <em>tnsnames.ora</em> da máquina em que a aplicação irá ser executada;</li>
<li><strong>user_name = </strong>Nome do usuário que a aplicação utilizará para conectar-se no BD;</li>
<li><strong>pwd_user = </strong>Senha<strong> </strong>do usuário que a aplicação utilizará para conectar-se no BD;</li>
<li><strong>idContaOrigem = </strong>Número da conta origem;</li>
<li><strong>idContaDestino = </strong>Número da conta destino;</li>
<li><strong>vlInicialContaOrigem</strong> = Valor inicial da conta origem;</li>
<li><strong>vlInicialContaDestino</strong> = Valor inicial da conta destino;</li>
<li><strong>intTotalInteracoes</strong> = Valor indicando qtde. de operações de transferências que serão realizadas;</li>
<li><strong>vlTransferencia</strong> = Valor da transferência.</li>
</ol>
<p style="text-align: justify;">Para efetuar os testes, basta clicar nos 2 botões existentes na tela principal da aplicação: <em>Transferência Ad hoc</em> e <em>Transferência com SP. </em>O botão <em>Transferência Ad hoc </em>submete instruções SQL para o BD, enquanto que, o botão <em>Transferência com SP, </em>executa uma stored procedure no BD para executar as mesmas instruções SQL.</p>
<p style="text-align: justify;">Vejam abaixo, a performance de testes que eu fiz:</p>
<p style="text-align: justify;"><span style="text-decoration: underline;"><strong>TESTE 1: 1 transferência bancária</strong></span></p>
<p style="text-align: justify;">a) Tempo de Transferência do botão <em>Transferência Ad hoc: </em><strong>0,015s</strong></p>
<table cellspacing="0" cellpadding="0" align="center">
<tbody>
<tr>
<td><a href="http://4.bp.blogspot.com/-a6cZ6ras7sY/TnSdK-gwMQI/AAAAAAAAAOI/DP10sxJBiww/s1600/img4_app.jpg"><img src="http://4.bp.blogspot.com/-a6cZ6ras7sY/TnSdK-gwMQI/AAAAAAAAAOI/DP10sxJBiww/s320/img4_app.jpg" alt="" width="320" height="120" border="0" /></a></td>
</tr>
<tr>
<td>Figura 2 &#8211; Teste de 1 transferência com SQL (ad hoc)</td>
</tr>
</tbody>
</table>
<p style="text-align: justify;">b) Tempo de Transferência do botão <em>Transferência com SP:  </em><strong>0,00s</strong></p>
<table cellspacing="0" cellpadding="0" align="center">
<tbody>
<tr>
<td><a href="http://2.bp.blogspot.com/-7_iH1BHfQrE/TnSdx2NaaTI/AAAAAAAAAOM/lNkLgmIxQIA/s1600/img5_app.jpg"><img src="http://2.bp.blogspot.com/-7_iH1BHfQrE/TnSdx2NaaTI/AAAAAAAAAOM/lNkLgmIxQIA/s320/img5_app.jpg" alt="" width="320" height="136" border="0" /></a></td>
</tr>
<tr>
<td>Figura 3 &#8211; Teste de 1 transferência com SP</td>
</tr>
</tbody>
</table>
<p style="text-align: justify;"><span style="text-decoration: underline;"><strong>TESTE 2: 1000 transferências bancárias</strong></span></p>
<p style="text-align: justify;">a) Tempo de Transferência do botão <em>Transferência Ad hoc: </em><strong>9,90s</strong></p>
<table cellspacing="0" cellpadding="0" align="center">
<tbody>
<tr>
<td><a href="http://3.bp.blogspot.com/-pYR7EO9cwM8/TnSbPTA7fZI/AAAAAAAAAOA/6wXgyHByWlM/s1600/img2_app.jpg"><img src="http://3.bp.blogspot.com/-pYR7EO9cwM8/TnSbPTA7fZI/AAAAAAAAAOA/6wXgyHByWlM/s320/img2_app.jpg" alt="" width="320" height="116" border="0" /></a></td>
</tr>
<tr>
<td>Figura 4 &#8211; Teste de 1000 transferências com SQL (ad hoc)</td>
</tr>
</tbody>
</table>
<p style="text-align: justify;">b) Tempo de Transferência do botão <em>Transferência com SP: </em><strong>0,23s</strong></p>
<div style="text-align: justify;">
<table cellspacing="0" cellpadding="0" align="center">
<tbody>
<tr>
<td><a href="http://2.bp.blogspot.com/-5WKMKjF9-HY/TnSb7Fn_dSI/AAAAAAAAAOE/Vwt3NeLqNF4/s1600/img3_app.jpg"><img src="http://2.bp.blogspot.com/-5WKMKjF9-HY/TnSb7Fn_dSI/AAAAAAAAAOE/Vwt3NeLqNF4/s320/img3_app.jpg" alt="" width="320" height="116" border="0" /></a></td>
</tr>
<tr>
<td>Figura 5 &#8211; Teste de 1000 transferências com SP</td>
</tr>
</tbody>
</table>
</div>
<p style="text-align: justify;"><strong>CONCLUSÃO:</strong></p>
<p style="text-align: justify;"><strong></strong>No Teste 1, de acordo com o tempo de execução da transferência <a href="http://www.profissionaisti.com.br/tag/sql/">SQL</a> e transferência com SP, pudemos verificar que a 2ª (com SP) foi mais rápida, mas o teste com 1 só transferência não foi não tão eficiente para demonstrar o ganho em usar SP (a execução foi tão rápida que não foi possível computar o tempo (0,00s) através da aplicação).</p>
<p style="text-align: justify;">No Teste 2, realizando 1000 transações, conseguimos verificar que o ganho de performance utilizando SP foi brutal. Com SP, pudemos verificar que o tempo das 1000 transferências foi <strong><span style="color: #274e13;">43 vezes mais rápido </span></strong>que as 1000 transferências submetendo <a href="http://www.profissionaisti.com.br/tag/sql/">SQL</a> para a aplicação.</p>
<p style="text-align: justify;">Mais detalhes, sobre a estrutura da aplicação, o porquê da stored procedure apresentar um desempenho superior neste exemplo e sobre a implementação de regras de negócio na aplicação ou na stored procedure, eu explico em meus treinamentos!</p>
<p style="text-align: justify;">Por hoje é só!</p>
<p style="text-align: justify;">[]s</p>
<p style="text-align: justify;">Fonte: <a href="http://www.fabioprado.net/2011/09/otimizando-performance-de-aplicacoes.html" target="_blank">http://www.fabioprado.net/2011/09/otimizando-performance-de-aplicacoes.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.profissionaisti.com.br/2012/01/oracle-otimizando-a-performance-de-aplicacoes-com-stored-procedures/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Benchmark de performance em Bancos de Dados Oracle com o Swingbench</title>
		<link>http://www.profissionaisti.com.br/2011/12/benchmark-de-performance-em-bancos-de-dados-oracle-com-o-swingbench/</link>
		<comments>http://www.profissionaisti.com.br/2011/12/benchmark-de-performance-em-bancos-de-dados-oracle-com-o-swingbench/#comments</comments>
		<pubDate>Tue, 13 Dec 2011 15:07:06 +0000</pubDate>
		<dc:creator>Fábio Prado</dc:creator>
				<category><![CDATA[Infraestrutura]]></category>
		<category><![CDATA[Software Livre]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Swingbench]]></category>

		<guid isPermaLink="false">http://www.profissionaisti.com.br/?p=20396</guid>
		<description><![CDATA[Olá pessoal, No artigo de hoje vou apresentar rapidamente uma ferramenta muito interessante que estou utilizando para executar benchmark de performance em Bancos de Dados Oracle, o Swingbench. Swingbench é um software livre que foi desenvolvido em Java por Dominic Giles (especialista em Banco de dados da Oracle UK), projetado para executar e monitorar cargas de [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Olá pessoal,</p>
<p style="text-align: justify;">No artigo de hoje vou apresentar rapidamente uma ferramenta muito interessante que estou utilizando para executar <em>benchmark</em> de performance em <a href="http://www.profissionaisti.com.br/tag/oracle/">Bancos de Dados Oracle</a>, o <strong>Swingbench.</strong> Swingbench é um software livre que foi desenvolvido em Java por Dominic Giles (especialista em Banco de dados da <em>Oracle UK),</em> projetado para executar e monitorar cargas de dados em Bancos de Dados Oracle 10G e 11G, instâncias standalone ou RAC. Ele pode ser instalado em Windows, Linux e vários outros sistemas operacionais e possui funcionalidades para simulação de 4 tipos de aplicações, entre elas a de <em>Entrada de Pedidos,</em> que funciona bem no Oracle 11G e que será apresentada neste artigo.</p>
<p style="text-align: justify;">Para baixar o Swingbench, entre em <a href="http://www.dominicgiles.com/downloads.html" target="_blank">http://www.dominicgiles.com/downloads.html</a>. Após baixá-lo, se o SO da máquina for Linux, faça a instalação conforme as instruções do link <a href="http://www.dominicgiles.com/installation.html" target="_blank">http://www.dominicgiles.com/installation.html</a>. Se o SO for Windows, substitua no roteiro do link anterior, os processos necessários para efetuar a instalação do Java (se não houver instalação prévia)  e configure as variáveis de ambiente JAVAHOME e SWINGHOME apontando para os diretórios indicados no link.</p>
<p style="text-align: justify;">Para usar a ferramenta é necessário criar antes da primeira utilização, os objetos de BD que serão utilizados para efetuar os testes. Para executar a instalação e iniciar os testes, leia e execute o que está descrito no link <a href="http://www.dominicgiles.com/simplebenchmark.html" target="_blank">http://www.dominicgiles.com/simplebenchmark.html</a>. O script <em>oewizard</em> deverá ser executado uma única vez para criar os objetos de BD. Após a criação destes objetos, execute o script <span style="font-family: Courier New;"><span style="font-family: Times New Roman;"><em>swingbench</em>  </span></span><span style="font-family: Times New Roman;">para inicializar a aplicação e permitir o início dos testes de performance. </span></p>
<p style="text-align: justify;">Eu estou utilizando este software para comparar performance de servidores de desenvolvimento, homogação e produção que eu administro e também utilizarei futuramente para medir performance quando houver <em>upgrade</em> de hardware de servidor de BD ou quando for efetuada uma migração de versão de BD.</p>
<p style="text-align: justify;">Os principais indicadores de peformance que o Swingbench fornece e que eu acho que são os mais interessantes para efetuar as comparações de peformance, são: <strong>Average</strong> <strong>TPM</strong> (média de transações por minuto) e <strong>Average</strong> <strong>TPS</strong> (média de transações por segundo). Seguem abaixo o valor do indicador <strong>Average</strong> <strong>TPM </strong>dos BDs em que eu fiz os testes por um tempo de <span style="color: #ff0000;">2 minutos</span> (configurável na ferramenta) simulando <span style="color: #ff0000;">15 sessões</span> de usuários concorrentes, seguidos por imagens contendo todos os indicadores que a ferramenta disponibiliza em um gráfico de visão geral:</p>
<ol style="text-align: justify;">
<li><strong>Produção (Oracle 10g)</strong>: <strong><span style="color: #0000ff;">657</span><span style="color: #000000;">;</span></strong></li>
<li><strong>Homologação (Oracle 10g): <span style="color: #0000ff;">618</span>;</strong></li>
<li><strong>Desenvolvimento (Oracle 11g): <span style="color: #0000ff;">684</span>.</strong></li>
</ol>
<p style="text-align: center;"><a href="http://4.bp.blogspot.com/-_4xjjuiuimI/Tsu23GG7SbI/AAAAAAAAAPo/i-4jY-Scgeo/s1600/grafico_completo_2m_adm_10G_20111122_1247.JPG"><img class="aligncenter" src="http://4.bp.blogspot.com/-_4xjjuiuimI/Tsu23GG7SbI/AAAAAAAAAPo/i-4jY-Scgeo/s400/grafico_completo_2m_adm_10G_20111122_1247.JPG" alt="" width="400" height="178" border="0" /></a><br />
Imagem 1 &#8211; Teste de performance do servidor de produção</p>
<p style="text-align: center;"><a href="http://1.bp.blogspot.com/-C5_Vjjl2k-c/TsE5cs0DP1I/AAAAAAAAAPQ/EDbUJ-rOI1o/s1600/grafico_completo_2m_admhm_10G.JPG"><img class="aligncenter" src="http://1.bp.blogspot.com/-C5_Vjjl2k-c/TsE5cs0DP1I/AAAAAAAAAPQ/EDbUJ-rOI1o/s400/grafico_completo_2m_admhm_10G.JPG" alt="" width="400" height="175" border="0" /></a><br />
Imagem 2 &#8211; Teste de performance do servidor de homologação</p>
<p style="text-align: center;"><a href="http://1.bp.blogspot.com/-MhYMiWKAB2w/TsE55hLyUNI/AAAAAAAAAPY/HDZi6_sRuLE/s1600/grafico_completo_2m_desenv.JPG"><img class="aligncenter" src="http://1.bp.blogspot.com/-MhYMiWKAB2w/TsE55hLyUNI/AAAAAAAAAPY/HDZi6_sRuLE/s400/grafico_completo_2m_desenv.JPG" alt="" width="400" height="172" border="0" /></a><br />
Imagem 3 &#8211; Teste de performance do servidor de desenvolvimento</p>
<h3 style="text-align: justify;">CONCLUSÃO</h3>
<p style="text-align: justify;">A ferramenta Swingbench  é uma ótima opção para fazer benchmark de performance entre BDs distintos e até mesmo para comparar a performance de um BD, contemplando o estado &#8220;antes&#8221; e &#8220;depois&#8221; de alguma alteração ou atualização.</p>
<p style="text-align: justify;">Nos testes que eu fiz, o servidor de desenvolvimento foi o que apresentou melhor performance, porém, ressalto que ele é o único que eu já atualizei para a versão 11g do Oracle Database (ainda não sei se isso influenciou na performance) e que os BDs de desenvolvimento e homologação estavam ociosos no momento da realização dos testes. Os testes no BD de produção foram realizados em um período que concorreu com atividades de sessões de usuários de outras aplicações.</p>
<p style="text-align: justify;">Por hoje é só!</p>
<p style="text-align: justify;">[]s</p>
<p style="text-align: justify;">Referências: <a href="http://www.dominicgiles.com/swingbench.html" target="_blank">http://www.dominicgiles.com/swingbench.html</a><br />
Fonte: <a href="http://www.fabioprado.net/2011/11/benchmark-de-performance-em-banco-de.html" target="_blank">http://www.fabioprado.net/2011/11/benchmark-de-performance-em-banco-de.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.profissionaisti.com.br/2011/12/benchmark-de-performance-em-bancos-de-dados-oracle-com-o-swingbench/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Exportando dados do MS SQL Server para o Oracle</title>
		<link>http://www.profissionaisti.com.br/2011/12/exportando-dados-do-ms-sql-server-para-o-oracle/</link>
		<comments>http://www.profissionaisti.com.br/2011/12/exportando-dados-do-ms-sql-server-para-o-oracle/#comments</comments>
		<pubDate>Mon, 05 Dec 2011 15:49:33 +0000</pubDate>
		<dc:creator>Fábio Prado</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Utilidades]]></category>
		<category><![CDATA[Banco de Dados]]></category>
		<category><![CDATA[MS SQL Server]]></category>
		<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://www.profissionaisti.com.br/?p=20399</guid>
		<description><![CDATA[Olá pessoal, primeiramente gostaria de informar que este artigo não é de minha autoria. O autor deste artigo é o aluno Diego Melo da turma ORTUN01 do meu treinamento de Tuning de Banco de Dados com ênfase em instruções SQL. Neste artigo a minha participação foi apenas a de revisor de contéudo. Segue abaixo o artigo [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Olá pessoal, primeiramente gostaria de informar que este artigo não é de minha autoria. O autor deste artigo é o aluno Diego Melo da turma ORTUN01 do meu treinamento de <a href="http://www.fabioprado.net/p/treinamentos.html" target="_blank">Tuning de Banco de Dados com ênfase em instruções SQL</a>. Neste artigo a minha participação foi apenas a de revisor de contéudo. Segue abaixo o artigo do Diego Melo (após minhas  alterações e revisões):</p>
<p style="text-align: justify;">Primeiramente, gostaria de agradecer ao Fábio Prado pela oportunidade de escrever este artigo, que tem como objetivo principal apresentar um método fácil e eficiente para exportar dados de tabelas do Banco de Dados MS SQL Server para o Banco de Dados (BD) Oracle.</p>
<p style="text-align: justify;">Utilizaremos para exportação dos dados o <a href="http://www.profissionaisti.com.br/tag/oracle/">Oracle</a> SQL Developer 3.0,  que além de ser free, já é uma ferramenta bem estável e consolidada. Para mais informações, consulte neste blog o post <a href="http://www.fabioprado.net/2011/04/conhecendo-o-novo-oracle-sql-developer.html" target="_blank">Conhecendo o novo Oracle SQL Developer 3.0</a>. Este artigo não ensinará a utilizar o SQL Developer 3.0, portanto, é necessário que você já tenha familiaridade e conhecimentos prévios nesta ferramenta.</p>
<p style="text-align: justify;">Para iniciar a exportação, abra o SQL Developer e configure-o para acessar o Banco de Dados SQL Server, seguindo os passos descritos no link: <a href="http://djiang.wordpress.com/2007/02/27/using-oracle-sqldeveloper-to-access-sqlserver/" target="_blank">http://djiang.wordpress.com/2007/02/27/using-oracle-sqldeveloper-to-access-sqlserver/</a>. Em seguida, crie uma conexão ao BD SQL Server, como no exemplo da Figura 1 (ver abaixo).</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://2.bp.blogspot.com/-ncMa8CjrrF4/TkllNHYobpI/AAAAAAAAALo/TpKk2U1l_DE/s400/figura_1.JPG" alt="" width="400" height="92" border="0" /></p>
<p style="text-align: center;">Figura 1 &#8211; Conexão com o SQL Server</p>
<p style="text-align: justify;">No exemplo utilizado neste artigo, iremos exportar uma tabela chamada CLIENTES, do banco de dados MASTER do SQL Server. Para exportá-la devemos acessar MASTER &gt;&gt; dbo &gt;&gt; Tabelas &gt;&gt; CLIENTES (ver Figura 2).</p>
<div style="text-align: justify;">
<p>Obs.: No SQL Server 1 única instância de Banco de Dados pode ter vários Bancos de Dados, que neste BD são agrupamentos lógicos que representam conjuntos de objetos relacionados e que podem ter configurações customizadas. No Oracle o nível máximo de agrupamento lógico de objetos que podemos ter é um SCHEMA. No SQL Server uma instância pode conter vários Bancos de Dados e cada Banco de Dados pode conter múltiplos schemas.</p>
<p><img class="aligncenter" src="http://4.bp.blogspot.com/-jKy9TSRN3Xk/TkllWwXZc-I/AAAAAAAAALs/72wZ4H9Zz20/s400/figura_2.JPG" alt="" width="400" height="198" border="0" /></p>
<p style="text-align: center;">Figura 2 &#8211; Localizando a tabela CLIENTES no SQL Server</p>
<p>Agora, para executar o passo mais simples do artigo, iremos clicar no botão direito da tabela CLIENTES. Ao aparecer o menu suspenso, clique na opção COPIAR NO ORACLE&#8230; (ver Figura 3).</p>
<p><img class="aligncenter" src="http://3.bp.blogspot.com/-MbwMoIn80FQ/TklmQtl3L3I/AAAAAAAAALw/C_M-RDTDF3c/s320/figura_3.JPG" alt="" width="320" height="200" border="0" /></p>
<p style="text-align: center;">Figura 3 &#8211; Iniciando a cópia da tabela CLIENTES</p>
<p>O SQL Developer irá abrir uma caixa de seleção para permitir selecionar o BD Oracle destino. As opções disponíveis são conexões previamente criadas na ferramenta. Selecione o nome de conexão desejada (neste exemplo a conexão chama-se <a href="http://www.profissionaisti.com.br/tag/oracle/">ORACLE</a>) e selecione a opção Incluir Dados (caso contrário somente a estrutura da tabela será copiada) e clique em Aplicar (ver Figura 4).</p>
<p><img class="aligncenter" src="http://2.bp.blogspot.com/-2OgJO7v3sY4/TklmkHg0MgI/AAAAAAAAAL0/MRM1FFBh5YI/s320/figura_4.JPG" alt="" width="320" height="161" border="0" /></p>
<p style="text-align: center;">Figura 4 &#8211; Selecionando opções de cópia da tabela CLIENTES</p>
<p>Neste momento irá aparecer uma barra de progresso indicando a cópia dos dados no BD Oracle, como no exemplo da Figura 5 (ver abaixo).</p>
<p><img class="aligncenter" src="http://1.bp.blogspot.com/-zq5khWcZm50/Tkl117h2QgI/AAAAAAAAAL4/_PfMfZnr7os/s320/figura_5.JPG" alt="" width="320" height="169" border="0" /></p>
<p style="text-align: center;">Figura 5 &#8211; Copiando a tabela CLIENTES</p>
<p>Quando a cópia dos dados terminar, irá aparecer uma mensagem indicando que ela foi finalizada com sucesso. Clique em OK (ver Figura 6).</p>
<p><img class="aligncenter" src="http://1.bp.blogspot.com/-0jFfZB6EaYE/Tkl3Hm0ulcI/AAAAAAAAAL8/ZuQDxwLUkcc/s320/figura_6.JPG" alt="" width="320" height="164" border="0" /></p>
<p style="text-align: center;">Figura 6 &#8211; Cópia finalizada</p>
<p>Na conexão do Oracle, verifique em Tabelas, se CLIENTES aparece na lista de tabelas (ver figura 7).</p>
<p style="text-align: center;"><img class="aligncenter" src="http://4.bp.blogspot.com/-FL-2lr2r0I0/Tkl3iCmSdqI/AAAAAAAAAMA/k97Cq4qyODU/s320/figura_7.JPG" alt="" width="320" height="168" border="0" /></p>
<p style="text-align: center;">Figura 7 &#8211; Tabela CLIENTES copiada no ORACLE</p>
<p>Se a tabela CLIENTES aparecer, pronto! De forma simples e rápida conseguimos exportar dados de uma tabela do MS SQL Server para o Oracle!</p>
<p>Um abraço a todos e até a próxima.</p>
<p>Fonte: <a href="http://www.fabioprado.net/2011/08/exportando-dados-do-ms-sql-server-para.html" target="_blank">http://www.fabioprado.net/2011/08/exportando-dados-do-ms-sql-server-para.html</a></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.profissionaisti.com.br/2011/12/exportando-dados-do-ms-sql-server-para-o-oracle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Consumindo classes JAVA dentro de um Banco de Dados Oracle</title>
		<link>http://www.profissionaisti.com.br/2011/12/consumindo-classes-java-dentro-de-um-banco-de-dados-oracle/</link>
		<comments>http://www.profissionaisti.com.br/2011/12/consumindo-classes-java-dentro-de-um-banco-de-dados-oracle/#comments</comments>
		<pubDate>Thu, 01 Dec 2011 19:01:55 +0000</pubDate>
		<dc:creator>Fábio Prado</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Utilidades]]></category>
		<category><![CDATA[Banco de Dados]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[PL/SQL]]></category>

		<guid isPermaLink="false">http://www.profissionaisti.com.br/?p=20372</guid>
		<description><![CDATA[Olá pessoal, No artigo de hoje apresentarei um recurso muito interessante e pouco conhecido no Oracle Database, que permite consumir classes desenvolvidas em JAVA dentro de um Banco de Dados (BD) Oracle, para processar ou interagir com dados dentro do próprio BD. As principais vantagens e desvantagens em consumir classes Java dentro de um BD são: VANTAGENS: [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Olá pessoal,</p>
<div style="text-align: justify;">
<p>No artigo de hoje apresentarei um recurso muito interessante e pouco conhecido no Oracle Database, que permite <em>consumir </em><span style="color: #274e13;"><strong>classes</strong></span> desenvolvidas em <span style="color: #274e13;"><strong>JAVA</strong></span> dentro de um Banco de Dados (BD) Oracle, para processar ou interagir com dados dentro do próprio BD.</p>
</div>
<div style="text-align: justify;">
<p>As principais vantagens e desvantagens em consumir classes Java dentro de um BD são:</p>
</div>
<div style="text-align: justify;">
<p><span>VANTAGENS</span>:</p>
</div>
<ul style="text-align: justify;">
<li>Possibilidade de reutilizar programas testados e estáveis, desenvolvidos em classes Java, ao invés de desenvolver algo novo em PL/SQL;</li>
<li>Ganhar tempo utilizando um programa que já está pronto ao invés de desenvolver um novo;</li>
<li>Possibilidade de expandir recursos de programação, pois Java possui muito mais recursos que PL/SQL para interagir, por exemplo, com o SO e programas externos.</li>
</ul>
<div style="text-align: justify;">
<p><span style="text-decoration: underline;">DESVANTAGENS</span>:</p>
</div>
<ul style="text-align: justify;">
<li>A performance é muito menor em relação a um programa PL/SQL puro;</li>
<li>Aumenta-se a dificuldade de gerenciamento do BD, pois neste caso o DBA ou responsável pelo BD precisará gerenciar objetos externos, que normalmente ele não está acostumado a lidar, e isso poderá provocar problemas quando houver migração de BD para outras máquinas ou ambientes em que a classe Java não foi instalada;</li>
<li>Será necessário gerenciar uma área de memória adicional do BD, chamada <em>Java Pool</em>.</li>
</ul>
<div style="text-align: justify;">
<p>Para demonstrar este recurso, utilizaremos como exemplo o <em>bytecode </em>(<span style="color: #38761d;">Idade.class</span>) de uma classe desenvolvida em Java chamada <span style="color: #38761d;">Idade</span><em>,</em> que possui uma função para calcular idade, chamada <span style="color: #38761d;">getIdade</span><em>,</em> que possui as seguintes características:</p>
</div>
<ul style="text-align: justify;">
<li>Aceita como entrada um valor alfanumérico correspondente à data de nascimento de uma pessoa;</li>
<li>Retorna um valor numérico correspondente à idade atual da pessoa.</li>
</ul>
<div style="text-align: justify;">
<p>A função é bem simples e foi criada por <span style="color: #444444;"><strong>Igor Ribeiro</strong></span> (que trabalha comigo há aproximadamente 1 ano) apenas para executarmos os testes deste artigo. Ele foi o principal responsável por implementar e testar todos os passos deste artigo. Eu só ajudei na parte em que tinha que criar as funções e código PL/SQL para efetuar os testes de performance.</p>
</div>
<div style="text-align: justify;">
<h3 style="text-align: left;">ROTEIRO PASSO-A-PASSO P/ CRIAR E TESTAR A FUNÇÃO JAVA</h3>
</div>
<div style="text-align: justify;">
<p> <strong><span style="text-decoration: underline;">Pré-requisitos</span></strong>:</p>
</div>
<div style="text-align: justify;">
<p>a) No host do servidor de BD, configure a variável ORACLE_SID com o nome da instância de BD em que você irá carregar e testar a classe Java para executar o Passo 1.</p>
</div>
<div style="text-align: justify;">
<p> <strong><span style="text-decoration: underline;">Passo 1- Carregando a classe Java no BD</span></strong>:</p>
</div>
<div>
<p>Execute o utilitário loadjava, localizado na pasta <em>$ORACLE_HOME/bin</em>, informando nome de usuário e senha de BD de um schema onde a classe será carregada + nome do arquivo bytecode da classe Java, como no exemplo abaixo:</p>
</div>
<div style="text-align: justify;">
<p><span style="font-family: Courier New;"><span style="color: #0000ff;">loadjava.bat -user <span style="color: #444444;">user</span>/<span style="color: #666666;">password</span> Idade.class</span></span></p>
<p><em>Obs.: Para seguir o exemplo deste arquivo, baixe o arquivo Idade.class a partir do Meu Sky Drive (ver blog <a href="http://www.fabioprado.net/" target="_blank">www.fabioprado.net</a>), pasta Oracle -&gt; Java.</em></p>
</div>
<div style="text-align: justify;">
<p><span style="font-family: inherit;"><strong><span style="text-decoration: underline;">Passo 2- Verificando se a classe foi carregada com sucesso:</span></strong></span></p>
</div>
<div style="text-align: justify;">
<p><span style="font-family: inherit; color: #000000;">Conectando-se no SQL Plus, SQL Developer ou qualquer outra ferramenta similar, execute a query abaixo para verificar se o objeto foi criado com sucesso:</p>
<p><span style="color: #0000ff;">  SELECT OBJECT_NAME, OBJECT_TYPE, CREATED<br />
from   ALL_OBJECTS<br />
where  upper(OBJECT_NAME) = upper(&#8216;Idade&#8217;);</span></span></p>
</div>
<div style="text-align: justify;">
<p><span>Se a query acima retornar uma linha, significa que o objeto foi criado com sucesso. Se a query não retornar linha(s), repita o passo anterior e/ou identifique o que pode ter falhado no procedimento de execução do utilitário loadjava.</span></p>
</div>
<div style="text-align: justify;">
<p><span style="font-family: inherit; color: #000000;"><strong><span style="text-decoration: underline;">Passo 3- Criando uma função PL/SQL p/ consumir a função da classe Java:</span></strong></span></p>
</div>
<div style="text-align: justify;">
<p><span style="font-family: inherit; color: #000000;">Conectando-se no SQL Plus, SQL Developer ou qualquer outra ferramenta similar, execute o código abaixo para criar uma função PL/SQL que irá consumir a função Java para retornar uma Idade, que será calculada após fornecermos uma string (parâmetro de entrada) correspondente a uma data qualquer:</span></p>
</div>
<div style="text-align: justify;">
<p><span style="font-family: inherit; color: #0000ff;">create or replace FUNCTION RetornarIdade_Java(st IN VARCHAR2) RETURN NUMBER AS<br />
LANGUAGE JAVA NAME &#8216;Idade.getIdade(java.lang.String) return int&#8217;;</span></p>
</div>
<p style="text-align: justify;"><span style="text-decoration: underline;"><strong>Passo 4- Executando a função:</strong></span></p>
<div style="text-align: justify;">
<p>Para executar a função criada no passo anterior, iremos utilizar dados da tabela HR.EMPLOYEES (mais informações, ver artigo Instalando o schema de exemplo HR) como parâmetro de entrada, para retornar o nome e tempo de trabalho (ao invés de idade) de cada empregado:</p>
<p><span style="color: #0000ff;">SELECT  E. FIRST_NAME || &#8216; &#8216; || E.LAST_NAME AS NAME,<br />
RETORNARIDADE_JAVA(TO_CHAR(HIRE_DATE,&#8217;DD/MM/YYYY&#8217;)) as worktime<br />
FROM    hr.employees e;</span></p>
</div>
<div style="text-align: justify;">
<p><strong>Obs.: </strong>Ao  final do passo 4 do roteiro anterior, se tudo correu bem, pudemos verificar que a gente conseguiu consumir uma função da classe Java dentro do BD. Iniciaremos agora um teste de performance para comparar o desempenho de um cálculo de idade da função Java e um cálculo de idade de uma função nova, desenvolvida somente com código PL/SQL.</p>
</div>
<div style="text-align: justify;">
<h3 style="text-align: left;">ROTEIRO PARA EFETUAR OS TESTES DE PERFORMANCE ENTRE FUNÇÃO JAVA x FUNÇÃO PL/SQL</h3>
</div>
<div style="text-align: justify;">
<p> <span style="text-decoration: underline;"><strong> Passo 1- Criando uma função PL/SQL p/ calcular a idade (sem código Java):</strong></span></p>
<p>Conectando-se no SQL Plus, SQL Developer ou qualquer outra ferramenta similar, execute o código abaixo para criar uma função PL/SQL (sem consumir função de classe Java) que irá retornar uma Idade, calculada após fornecermos uma string (parâmetro de entrada) correspondente a uma data qualquer:</p>
<p>C<span style="color: #0000ff;">REATE OR REPLACE FUNCTION RetornarIdade_PLSQL(ST IN VARCHAR2) RETURN NUMBER AS<br />
STR_DATA DATE;<br />
STR_ANO NUMBER;<br />
STR_MES NUMBER;<br />
STR_DIA NUMBER;</p>
<p>SYS_DATA DATE;<br />
SYS_ANO NUMBER;<br />
SYS_MES NUMBER;<br />
SYS_DIA NUMBER;</p>
<p>IDADE NUMBER;<br />
DIFERENCA_MES NUMBER;<br />
DIFERENCA_DIA NUMBER;<br />
BEGIN<br />
STR_DATA := TO_DATE(st, &#8216;DD/MM/YYYY&#8217;);<br />
STR_ANO := TO_NUMBER(TO_CHAR(STR_DATA,&#8217;YYYY&#8217;));<br />
STR_MES := TO_NUMBER(TO_CHAR(STR_DATA,&#8217;MM&#8217;));<br />
STR_DIA := TO_NUMBER(TO_CHAR(STR_DATA,&#8217;DD&#8217;));</p>
<p>SYS_DATA := SYSDATE;<br />
SYS_ANO := TO_NUMBER(TO_CHAR(SYS_DATA,&#8217;YYYY&#8217;));<br />
SYS_MES := TO_NUMBER(TO_CHAR(SYS_DATA,&#8217;MM&#8217;));<br />
SYS_DIA := TO_NUMBER(TO_CHAR(SYS_DATA,&#8217;DD&#8217;));</p>
<p>DIFERENCA_MES := SYS_MES &#8211; STR_MES;<br />
DIFERENCA_DIA := SYS_DIA &#8211; STR_DIA;<br />
IDADE := SYS_ANO &#8211; STR_ANO;</p>
<p>IF (DIFERENCA_MES &lt; 0 OR (DIFERENCA_MES = 0 AND DIFERENCA_DIA &lt; 0)) THEN<br />
IDADE := IDADE &#8211; 1;<br />
END IF;<br />
RETURN IDADE;<br />
END;</span></p>
<p><strong><span style="text-decoration: underline;">Passo 2- Testando as funções JAVA x PL/SQL</span></strong>:</p>
<p>Conectando-se no SQL Plus, SQL Developer ou qualquer outra ferramenta similar, execute o código abaixo para testarmos a performance das funções Java (RetornarIdade_Java) e PL/SQL (RetornarIdade_PLSQL), já criadas ao longo do artigo:</p>
<p><span style="color: #0000ff;">SET SERVEROUTPUT ON<br />
DECLARE<br />
IDADE       NUMBER;<br />
L_START     NUMBER;<br />
BEGIN<br />
L_START := DBMS_UTILITY.GET_TIME;<br />
FOR Y IN (SELECT HIRE_DATE FROM HR.EMPLOYEES) LOOP<br />
SELECT RETORNARIDADE_Java(TO_CHAR(Y.HIRE_DATE,&#8217;DD/MM/YYYY&#8217;)) INTO IDADE FROM DUAL;<br />
END LOOP;<br />
DBMS_OUTPUT.PUT_LINE(&#8216;Tempo para execução da função JAVA: &#8216; || ROUND((DBMS_UTILITY.GET_TIME &#8211; L_START)/100,2) || &#8216;s&#8217;);<br />
L_START := DBMS_UTILITY.GET_TIME;<br />
FOR X IN (SELECT HIRE_DATE FROM HR.EMPLOYEES) LOOP<br />
SELECT RETORNARIDADE_plsql(TO_CHAR(X.HIRE_DATE,&#8217;DD/MM/YYYY&#8217;)) INTO IDADE FROM DUAL;<br />
END LOOP;<br />
DBMS_OUTPUT.PUT_LINE(&#8216;Tempo para execução da função PL/SQL: &#8216; || ROUND((DBMS_UTILITY.GET_TIME &#8211; L_START)/100,2) || &#8216;s&#8217;);<br />
END;</span></p>
</div>
<div style="text-align: justify;">
<p><span style="text-decoration: underline;"><strong>Resultado</strong></span>:</p>
<ul>
<li>Tempo para execução da função JAVA:    <span style="color: #ff0000;"><strong>0,09s</strong></span></li>
<li>Tempo para execução da função PL/SQL:   <span style="color: #38761d;"><strong>0,01s</strong></span></li>
</ul>
</div>
<div style="text-align: justify;">
<p><strong><span style="text-decoration: underline;">Conclusão</span></strong>:</p>
<p>Consumir classes Java dentro do BD para executar tarefas complexas na interação com os dados pode ser uma boa alternativa para não ter que desenvolver algo novo em PL/SQL ou até mesmo para conseguir resolver um problema que seria impossível de ser resolvido somente com código PL/SQL. Porém, devemos ter muito cuidado ao utilizar este recurso. Além do código em Java consumido dentro do BD ser muito lento em relação ao código <a title="PL/SQL: o que é e quando usar?" href="http://www.profissionaisti.com.br/2011/10/plsql-o-que-e-e-quando-usar/">PL/SQL</a> puro, o gerenciamento das classes Java (externas ao BD) pode se tornar uma tarefa difícil para os DBAs.</p>
<p>Por hoje é só!</p>
<p>Fonte: <a href="http://www.fabioprado.net/2011/11/consumindo-classes-java-dentro-de-um.html" target="_blank">http://www.fabioprado.net/2011/11/consumindo-classes-java-dentro-de-um.html</a><br />
Referências: <a href="http://glufke.net/oracle/viewtopic.php?t=257" target="_blank">http://glufke.net/oracle/viewtopic.php?t=257</a></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.profissionaisti.com.br/2011/12/consumindo-classes-java-dentro-de-um-banco-de-dados-oracle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Certificação OCA e OCP no Oracle Database 10G e 11G</title>
		<link>http://www.profissionaisti.com.br/2011/11/certificacao-oca-e-ocp-no-oracle-database-10g-e-11g/</link>
		<comments>http://www.profissionaisti.com.br/2011/11/certificacao-oca-e-ocp-no-oracle-database-10g-e-11g/#comments</comments>
		<pubDate>Thu, 24 Nov 2011 14:52:56 +0000</pubDate>
		<dc:creator>Fábio Prado</dc:creator>
				<category><![CDATA[Carreira]]></category>
		<category><![CDATA[Certificação]]></category>
		<category><![CDATA[OCA]]></category>
		<category><![CDATA[OCP]]></category>
		<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://www.profissionaisti.com.br/?p=20266</guid>
		<description><![CDATA[Olá pessoal, No artigo de hoje compartilharei com vocês 2 apresentações que montei sobre as Certificações OCA e OCP nos Bancos de Dados Oracle 10G e 11G. Cada apresentação contempla uma versão (10G ou 11G) do Oracle Database e comenta sobre os principais pontos que devem ser considerados no processo de preparação para a certificação: [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Olá pessoal,</p>
<p style="text-align: justify;">No artigo de hoje compartilharei com vocês 2 apresentações que montei sobre as Certificações <strong>OCA</strong> e <strong>OCP</strong> nos Bancos de Dados Oracle 10G e 11G. Cada apresentação contempla uma versão (10G ou 11G) do Oracle Database e comenta sobre os principais pontos que devem ser considerados no processo de preparação para a certificação:</p>
<ul style="text-align: justify;">
<li>Caminho para obter a certificação;</li>
<li>Exames necessários;</li>
<li>Como efetuar o agendamento e pagamento dos exames;</li>
<li>Conhecimentos necessários;</li>
<li>Treinamentos indicados;</li>
<li>Dicas para estudos.</li>
</ul>
<p style="text-align: justify;">As apresentações estão disponíveis para download no blog <a href="http://www.fabioprado.net">www.fabioprado.net</a>, <em>Meu Sky Drive</em> (ver painel direito superior do blog), pasta <em>Oracle</em> -&gt; <em>Apresentacoes</em>, arquivos <span style="color: #ff0000;"><strong>Certificacao_OCA_OCP_10G</strong>.pdf</span> e <strong><span style="color: #ff0000;">Certificacao_OCA_OCP_11G.pdf</span></strong>.</p>
<p style="text-align: justify;">Estou negociando uma parceria com a empresa Capitani IT Solutions (<a href="http://www.capitani.com.br">www.capitani.com.br</a>) para fazer palestras gratuitas (com duração aproximada de 3 horas) sobre Certificação no Oracle Database a partir do ano de 2012. Também escrevi um artigo bem mais detalhado sobre este assunto para a revista SQL Magazine, que deverá ser publicado na edição do mês 12/2011. Empresas que tiverem interesse em assistir uma apresentação IN-COMPANY, entrem em contato no e-mail <a href="mailto:fbifabio@gmail.com">fbifabio@gmail.com</a>.</p>
<p style="text-align: justify;">[]s</p>
<p style="text-align: justify;">Referência: <a href="http://www.fabioprado.net/2011/11/certificacao-oca-e-ocp-no-oracle.html">http://www.fabioprado.net/2011/11/certificacao-oca-e-ocp-no-oracle.html</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.profissionaisti.com.br/2011/11/certificacao-oca-e-ocp-no-oracle-database-10g-e-11g/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>PL/SQL: o que é e quando usar?</title>
		<link>http://www.profissionaisti.com.br/2011/10/plsql-o-que-e-e-quando-usar/</link>
		<comments>http://www.profissionaisti.com.br/2011/10/plsql-o-que-e-e-quando-usar/#comments</comments>
		<pubDate>Fri, 14 Oct 2011 11:38:15 +0000</pubDate>
		<dc:creator>Fábio Prado</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Utilidades]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[PL/SQL]]></category>

		<guid isPermaLink="false">http://www.profissionaisti.com.br/?p=19766</guid>
		<description><![CDATA[Olá pessoal, No artigo de hoje vou falar um pouco sobre PL/SQL, a linguagem procedural do Oracle Database. Todos os SGBDs (Sistemas Gerenciadores de Banco de Dados) que eu conheço possuem uma linguagem de programação própria, que estende comandos e instruções não contempladas em SQL. Como exemplos, podemos citar o Oracle Database, que possui a [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Olá pessoal,</p>
<p style="text-align: justify;">No artigo de hoje vou falar um pouco sobre <strong>PL/SQL</strong>, a linguagem procedural do <a href="http://treinaweb.com.br/curso/oracle/" target="_blank">Oracle Database</a>.</p>
<p style="text-align: justify;">Todos os <em>SGBDs</em> (Sistemas Gerenciadores de Banco de Dados) que eu conheço possuem uma linguagem de programação própria, que estende comandos e instruções não contempladas em <em>SQL</em>. Como exemplos, podemos citar o <em>Oracle Database</em>, que possui a linguagem <strong>PL/SQL</strong>, o <em>SQL Server</em> que possui a linguagem <strong>Transaction SQL</strong> e o <em>DB2</em> que possui a linguagem <strong>SQL PL</strong>. Essas linguagens foram criadas para atender a necessidade de se criar programas dentro do próprio banco de dados e são extremamente úteis para executar tarefas de manutenção e para otimizar transações das aplicações que acessam o banco. No meu blog você encontrará vários artigos que usam código PL/SQL dentro destes cenários de manutenção e otimização, como por exemplo:</p>
<p style="text-align: justify;"><span style="font-family: inherit;"><em> &#8211; Otimizando a performance de aplicações com stored procedures: </em><br />
</span><a href="http://www.fabioprado.net/2011/09/otimizando-performance-de-aplicacoes.html" target="_blank"><span style="font-family: inherit;">http://www.fabioprado.net/2011/09/otimizando-performance-de-aplicacoes.html</span></a></p>
<p style="text-align: justify;"><span style="font-family: inherit;"> <em>- PL/SQL mais rápido: Quando usar CURSORES ou collections (BULK COLLECT em NESTED TABLES)? </em> </span><a href="http://www.fabioprado.net/2011/05/plsql-mais-rapido-quando-usar-cursores.html"><span style="font-family: inherit;"><br />
</span></a><a href="http://www.fabioprado.net/2011/05/plsql-mais-rapido-quando-usar-cursores.html" target="_blank"><span style="font-family: inherit;">http://www.fabioprado.net/2011/05/plsql-mais-rapido-quando-usar-cursores.html</span></a></p>
<p style="text-align: justify;"><span style="font-family: inherit;"> <em> &#8211; Recompilando objetos inválidos no Oracle Database:</em> </span><a href="http://www.fabioprado.net/2011/05/recompilando-objetos-invalidos-no.html"><span style="font-family: inherit;"><br />
</span></a><a href="http://www.fabioprado.net/2011/05/recompilando-objetos-invalidos-no.html" target="_blank"><span style="font-family: inherit;">http://www.fabioprado.net/2011/05/recompilando-objetos-invalidos-no.html</span></a></p>
<p style="text-align: justify;"><span style="font-family: inherit;">Uma das principais vantagens da linguagem PL/SQL é permitir que você escreva programas que ficam armazenados no banco de dados e que podem ser reutilizados por qualquer aplicação/usuário que acesse o banco. Segundo <em>Thomas Kyte</em>, um dos maiores especialistas em Oracle do mundo, PL/SQL é a forma mais rápida de processar dados em Bancos de Dados Oracle. Entenda &#8220;processar dados&#8221; como não apenas submeter instruções SQL (UPDATE, SELECT, INSERT e DELETE) para o banco, mas sim, efetuar transações que consistem de várias estruturas de decisão, loops e outros tipos de processamento. </span></p>
<p style="text-align: justify;"><span style="font-family: inherit;"> Como qualquer linguagem de programação, em PL/SQL é possível escrever código bom ou ruim. Para evitar enganos e não escrever código ruim, que também podem ser cometidos em qualquer outra linguagem, é necessário entender bem a estrutura do código PL/SQL, os detalhes de sua implementação e até mesmo como ele interage com código <a href="http://www.profissionaisti.com.br/tag/sql/">SQL</a>.</span></p>
<p style="text-align: justify;">Bom, hoje eu paro por aqui! Se quiserem conhecer melhor a linguagem PL/SQL e escrever código bem estruturado e com boa performance, eu ensino estes itens no meu <a href="http://www.fabioprado.net/p/treinamentos.html" target="_blank">treinamento de PL/SQL</a>.</p>
<p style="text-align: justify;">[]s</p>
]]></content:encoded>
			<wfw:commentRss>http://www.profissionaisti.com.br/2011/10/plsql-o-que-e-e-quando-usar/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Como obter a certificação Oracle Certified Professional (OCP)?</title>
		<link>http://www.profissionaisti.com.br/2011/09/como-obter-a-certificacao-oracle-certified-professional-ocp/</link>
		<comments>http://www.profissionaisti.com.br/2011/09/como-obter-a-certificacao-oracle-certified-professional-ocp/#comments</comments>
		<pubDate>Wed, 21 Sep 2011 11:55:55 +0000</pubDate>
		<dc:creator>Fábio Prado</dc:creator>
				<category><![CDATA[Carreira]]></category>
		<category><![CDATA[Certificação]]></category>
		<category><![CDATA[Dicas]]></category>
		<category><![CDATA[OCP]]></category>
		<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://www.profissionaisti.com.br/?p=19287</guid>
		<description><![CDATA[Olá pessoal, Antes de lerem este artigo, sugiro que leiam outro artigo que escrevi sobre como obter as certificações Oracle Database 10G (Entendendo o Programa de Certificação Oracle Database 10G). Atualmente ele é o artigo mais lido e mais comentado no meu blog, que orienta sobre o caminho completo para obter as certificações OCA, OCP e OCM, [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Olá pessoal,</p>
<p style="text-align: justify;">Antes de lerem este artigo, sugiro que leiam outro artigo que escrevi sobre como obter as certificações Oracle Database 10G (<a href="http://www.profissionaisti.com.br/2011/04/entendendo-o-programa-de-certificacao-oracle-database-10g/">Entendendo o Programa de Certificação Oracle Database 10G</a>). Atualmente ele é o artigo mais lido e mais comentado no meu blog, que orienta sobre o caminho completo para obter as certificações OCA, OCP e OCM, e que contém várias dicas de materiais de estudo.</p>
<p style="text-align: justify;">Decidi escrever este artigo agora porque passei no exame <strong>1Z0-043</strong>, por isso <strong>este</strong> é o melhor momento para eu escrever sobre como obter a certificação <strong>OCP Database 10G</strong>. Ressalto que ainda não sou OCP, pois tenho que aguardar uma resposta de aprovação da Oracle, sobre o último passo para tirar esta certificação que é a submissão de um formulário (através do site da <a href="http://www.vue.com/oracle" target="_blank">VUE</a>) informando que eu fiz um treinamento oficial Oracle.</p>
<div style="text-align: justify;">
<p>O que vou escrever abaixo é um pouco da minha experiência, alguns comentários e o que fiz para alcançar esta certificação.</p>
</div>
<div style="text-align: justify;">
<p>Não quero assustar ninguém, mas meu primeiro comentário sobre a certificação <strong>OCP Database 10G </strong>é que esta foi a certificação <em>mais difícil</em> que eu já obtive até hoje. Se vocês olharem na página <a href="http://www.fabioprado.net/p/sobre-mim.html" target="_blank">SOBRE</a> do meu blog verão que possuo algumas certificações <em>Microsoft</em> e para mim nenhuma delas foi tão difícil quanto a de OCP. O exame para a certificação de MCP no Windows Server 2003 (08/2006), por exemplo, eu fiz sem ter nenhuma experiência com Windows Server 2003 e ainda assim acho que ele foi mais fácil que o exame 1Z0-043.</p>
</div>
<div style="text-align: justify;">
<p><em> </em>Minha primeira dica para quem está buscando a certificação OCP é: estude muito! <em>Não economize esforços em estudos</em>. De preferência não busque esta <a href="http://www.profissionaisti.com.br/certificacoes/">certificação</a> sem ter experiência com administração de Bancos de Dados <a href="http://www.treinaweb.com.br/curso/oracle" target="_blank">Oracle</a>. Se você não tem experiência, o caminho para a certificação OCA não é tão difícil, pois podemos comparar os conhecimentos necessários para fazer os exames de OCA como os conhecimentos de um <strong>DBA Júnior</strong>. Porém, para obter a certificação OCP, é mais díficil passar no exame 1Z0-043 sem ter experiência prévia, pois podemos comparar os conhecimentos necessários para este exame com os conhecimentos de um <strong>DBA Sênior.</strong><strong> </strong><strong> </strong></p>
</div>
<div style="text-align: justify;">
<p><strong> </strong>Segue abaixo um resumo do meu caminho e conhecimentos que adquiri para obter a certificação OCP:</p>
</div>
<ol style="text-align: justify;">
<li><strong> </strong>Estou trabalhando há 4 anos com Administração de Bancos de Dados Oracle;</li>
<li><strong></strong>Há pouco mais de 1 ano tirei a Certificação <strong>OCA</strong> e comecei a dar aulas de Administração de Bancos de Dados <a href="http://www.treinaweb.com.br/curso/oracle" target="_blank">Oracle</a>;</li>
<li><strong></strong>Leio quase todos os dias a documentação online da Oracle em <a href="http://tahiti.oracle.com/" target="_blank">http://tahiti.oracle.com/</a> e muitos artigos sobre Oracle que pesquiso aleatóriamente no Google;</li>
<li><strong></strong>Estudei apostilas da Self Test Software (1Z0-042 e 1Z0-043) e o guia de estudos da Sybex <em>OCP: Oracle 10g Administration II.</em></li>
</ol>
<div style="text-align: justify;"></div>
<div style="text-align: justify;">
<p>Quanto aos exames da Oracle, um alerta: muitas questões são bem complexas, algumas são quase <em>pegadinhas</em>!  O exame 1Z0-043 possui 70 questões que devem ser respondidas em 90  minutos. Existem muitas questões sobre recuperação de dados com RMAN,  Flashback e recuperações não-críticas, tais como recuperar um logfile  (não atual) e um tablespace temporário. Eu terminei o exame faltando  menos de 5 minutos para o tempo final. Este tempo restante acabei usando  para fazer revisões em algumas questões que eu respondi com dúvidas!</p>
<p><em> </em>Bom pessoal, já falei um pouco sobre o que eu queria compartilhar e aproveito para informar que a partir de agora vou escrever um artigo bem completo sobre este assunto, que provavelmente será publicado na <em>SQL Magazine 92</em>. Por hoje é só!</p>
<p>[]s</p>
<p>Fonte: <a href="http://www.fabioprado.net/2011/08/certificacao-ocp-como-obter-esta.html" target="_blank">http://www.fabioprado.net/2011/08/certificacao-ocp-como-obter-esta.html</a></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.profissionaisti.com.br/2011/09/como-obter-a-certificacao-oracle-certified-professional-ocp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oracle: criptografando tabelas com o TDE</title>
		<link>http://www.profissionaisti.com.br/2011/05/oracle-criptografando-tabelas-com-o-tde/</link>
		<comments>http://www.profissionaisti.com.br/2011/05/oracle-criptografando-tabelas-com-o-tde/#comments</comments>
		<pubDate>Mon, 23 May 2011 15:48:51 +0000</pubDate>
		<dc:creator>Fábio Prado</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Segurança]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[TDE]]></category>

		<guid isPermaLink="false">http://www.profissionaisti.com.br/?p=17194</guid>
		<description><![CDATA[Pessoal, Neste artigo apresentarei o recurso de segurança do Oracle Database (existente a partir da versão 10G release 2) chamado Transparent Data Encryption (TDE). Este recurso permite proteger dados confidenciais de colunas e índices de tabelas, criptografando os dados e armazenando-os de modo seguro (criptografados) nos arquivos de dados do Sistema Operacional. Aos consultar estes dados (criptografados), eles são decriptografados antes [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Pessoal,</p>
<p style="text-align: justify;">Neste artigo apresentarei o recurso de segurança do <a href="http://treinaweb.com.br/curso/oracle/" target="_blank">Oracle Database</a> (existente a partir da versão 10G release 2) chamado <strong>Transparent Data Encryption (TDE). </strong>Este recurso<strong> </strong>permite proteger dados confidenciais de colunas e índices de tabelas, <strong>criptografando</strong> os dados e armazenando-os de modo seguro (criptografados) nos arquivos de dados do Sistema Operacional. <span class="768002020-10102007" style="font-family: inherit;">Aos consultar estes dados (criptografados), eles são <strong>decriptografados</strong> antes de serem apresentados para o usuário final. A criptografia e decriptografia dos dados ocorre de forma <strong>transparente</strong>, sem necessidade de linhas de código adicionais na aplicação ou no banco de dados.</span></p>
<p style="text-align: justify;">Com TDE, ao criptografar os dados de uma coluna de uma tabela, é gerada uma chave de criptografia para a tabela, que é armazenada no Dicionário de Dados (D.D.) para posterior decriptografia. Por sua vez, a chave de criptografia da tabela também é criptografada por outra chave, que é chamada <strong>chave mestra </strong>e que é armazenada fora do Banco de Dados, em um local seguro chamado Oracle <strong>Wallet</strong>.</p>
<p style="text-align: justify;">Quando um usuário do Banco de Dados altera ou inclui dados (dados de entrada) em uma coluna criptografada, o Oracle Database recupera a chave mestra do Wallet, decriptografa a chave da tabela (recuperada no D.D.) e usa esta chave para criptografar os dados de entrada, antes de armazená-los no Banco de Dados. Nos dados, antes da criptografia, são adicionadas palavras extras chamadas <strong>SALT, </strong>que alteram os dados originais e que ajudam a dificultar &#8220;ataques hackers&#8221; de decriptografia. SALT é adicionado por padrão no TDE e pode ser utilizado somente ao criptografar tabelas. Índices não podem conter SALT.<br />
Com TDE os dados podem ser criptografados utilizando um dos quatro seguintes algoritmos de criptografia:  <em>3DES168</em>, <em>AES128</em>, <em>AES192</em> e <em>AES256</em>. <span style="text-decoration: underline;">AES192</span> é o algoritmo padrão.</p>
<p style="text-align: justify;">É importante ressaltar que ao utilizar TDE nas tabelas, há um custo de performance para criptografar e decriptografar as colunas. Em testes do artigo <em>Transparent Data Encryption (TDE) in Oracle 10g Database Release 2 (<a href="http://www.oracle-base.com/articles/10g/TransparentDataEncryption_10gR2.php" target="_blank">http://www.oracle-base.com/articles/10g/TransparentDataEncryption_10gR2.php</a>)</em>, o tempo de execução das instruções SQL para atualizações e consultas em uma tabela (que possui o total de 2 colunas e somente 1 coluna criptografada) <span style="color: red;">aumentou aproximadamente 40%</span>.</p>
<p style="text-align: justify;">Para utilizar TDE, no Oracle Database 10G Enterprise Edition (versão do Oracle mais utilizada), é necessário obter licensiamento da <em>option</em> <strong>Oracle Advanced Security</strong> (ver <a href="http://download.oracle.com/docs/cd/B19306_01/license.102/b14199/options.htm#CIHJHABF" target="_blank">http://download.oracle.com/docs/cd/B19306_01/license.102/b14199/options.htm#CIHJHABF</a>)<a id="sthref231" name="sthref231" href="http://www.blogger.com/"></a><a id="sthref232" name="sthref232" href="http://www.blogger.com/"></a></p>
<p style="text-align: justify;">Para demonstrar a utilização de TDE, seguiremos os passos abaixo:<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
<em>Para iniciar o passo-a-passo abaixo, é necessário conectar-se previamente no Banco de Dados desejado, através do SQL Plus, com um usuário com privilégios administrativos (usuário contendo a role DBA ou o privilégio de sistema SYSDBA), que não seja o SYS, pois se o passo 2 for executado pelo SYS ele irá falhar (o Oracle Database não permite utilizar TDE em objetos do schema SYS).</em><br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p style="text-align: justify;"><strong> <span style="text-decoration: underline;">PASSO 1: Criando e referenciando o Wallet</span></strong><br />
<strong> </strong><br />
<strong>a)</strong> Acrescente no arquivo <em>sqlnet.ora </em>da pasta <em>network/admin</em> do <strong>Oracle Home</strong> o seguinte bloco:</p>
<p style="text-align: justify;"><span style="color: blue;">ENCRYPTION_WALLET_LOCATION =<br />
(SOURCE=<br />
(METHOD=file)<br />
(METHOD_DATA=<br />
(<span style="color: blue;"><strong>DIRECTORY</strong></span>=\<span style="color: red;">ORACLE_BASE</span>\admin\<span style="color: red;">ORACLE_SID</span>\<span style="color: #6fa8dc;">wallet</span>)))</span></p>
<p style="text-align: justify;"><span style="color: black;"><strong> </strong>O parâmetro <span style="color: blue;"><strong>DIRECTORY</strong></span> do bloco de código acima indica o caminho do arquivo Wallet que será criado no item &#8221;<strong>b)&#8221;</strong> deste passo e está redigido de acordo com os padrões do sistema de arquivos do Windows.  Neste item, substitua os valores: </span><br />
<span style="color: #274e13;"> &#8211; </span><span style="color: red;">ORACLE_BASE: </span><span style="color: black;">pelo diretório correspondente ao Oracle Base em sua instalação de BD.</span><br />
<span style="color: black;"> - <span style="color: red;">ORACLE_SID: </span><span style="color: black;">pelo nome da instância de BD</span>. </span></p>
<p style="text-align: justify;">Obs.: Se o diretório <span style="color: #3d85c6;">wallet</span> não existir, crie-o dentro da pasta \<span style="color: red;">ORACLE_BASE</span>\admin\<span style="color: red;">ORACLE_SID. </span><span style="color: black;">A pasta &#8220;\<span style="color: red;">ORACLE_BASE</span>\admin\<span style="color: red;">ORACLE_SID</span>\<span style="color: blue;"><span style="color: #6fa8dc;">wallet</span>&#8221; </span></span><span style="color: black;">é o caminho padrão de criação de Wallets.</span></p>
<p style="text-align: justify;"><strong>b) </strong>Crie o Wallet e defina a chave mestra na instância de Banco de Dados (BD) em execução:<br />
No prompt do SQL digite:<br />
<span style="color: blue;"> ALTER SYSTEM SET ENCRYPTION KEY AUTHENTICATED BY &#8220;<span style="color: red;">Teste123</span>&#8220;; </span><br />
<span style="color: blue;"> </span><br />
<span style="color: black;"> Obs.: Substitua </span><span style="color: red;">Teste123 </span><span style="color: black;">pela senha desejada. Este item define uma senha mestra e automaticamente cria o Wallet na pasta padrão referenciada no item &#8220;<strong>a)&#8221;.</strong></span></p>
<p style="text-align: justify;"><span style="color: blue;"> </span><span style="color: black;"><strong> <span style="text-decoration: underline;">PASSO 2: Criando e inserindo dados em uma tabela com uma coluna criptografada</span></strong></span></p>
<p style="text-align: justify;">Execute no SQL Plus os comandos abaixo:<br />
<span style="color: blue;"> CREATE TABLE   table_tde_test (<br />
ID           NUMBER,<br />
DATA1  VARCHAR2(40),<br />
DATA2  VARCHAR2(40) ENCRYPT);</span></p>
<p style="text-align: justify;"><span style="color: blue;"> INSERT INTO table_tde_test (ID, DATA1, DATA2) </span><br />
<span style="color: blue;"> VALUES (1, &#8216;Dados NÃO criptogrados na coluna DATA1!&#8217;,'Dados criptogrados na coluna DATA2!&#8217;);</span><br />
<span style="color: blue;"> </span><br />
<span style="color: blue;"> COMMIT;</span></p>
<p style="text-align: justify;"><span style="font-family: &quot;Times New Roman&quot;; font-size: 12pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-font-family: &quot;Times New Roman&quot;; mso-fareast-language: PT-BR;" lang="EN-US"> <span style="color: blue;"> ALTER SYSTEM FLUSH BUFFER_CACHE; &#8211;&gt; força atualização dos dados no arquivo de dados da tabela</span></span></p>
<p style="text-align: justify;"><span style="color: blue;"> </span><strong><span style="color: black;"> <span style="text-decoration: underline;">PASSO 3: Testando o TDE no nível da tabela</span></span></strong></p>
<p style="text-align: justify;"><strong>a)</strong> Execute um SELECT na tabela criada no passo anterior:<br />
<span style="color: blue;"> SELECT * FROM  table_tde_test;</span></p>
<p style="text-align: justify;"><span style="text-decoration: underline;">Resultado</span>:<br />
Todos os dados da tabela serão retornados, inclusive os dados da coluna DATA2, que estão criptografados, pois o Wallet foi criado e está aberto desde o passo 1.</p>
<p style="text-align: justify;"><strong>b)</strong> Feche o Wallet:<br />
<span style="color: blue;"> ALTER SYSTEM SET WALLET CLOSE;</span></p>
<p style="text-align: justify;"><span style="color: blue;"><span style="color: black;"> <span style="text-decoration: underline;">Resultado</span>: </span></span><br />
Wallet fechado.</p>
<p style="text-align: justify;"><strong>c)</strong> Execute novamente o SELECT do item &#8220;<strong>a)</strong>&#8220;:<br />
<span style="color: blue;"> SELECT * FROM  table_tde_test;</span></p>
<p style="text-align: justify;"><span style="text-decoration: underline;">Resultado</span>:<br />
O SELECT irá disparar o erro <em>ORA-28365</em>, pois com o Wallet fechado não é possível recuperar a senha de criptografia da tabela e decriptografar os dados.</p>
<p style="text-align: justify;"><strong>d)</strong> Execute um novo SELECT sem retornar os dados da coluna criptografada (DATA2):<br />
<span style="color: blue;"> SELECT ID, DATA1 FROM table_tde_test;</span></p>
<p style="text-align: justify;"><span style="text-decoration: underline;">Resultado</span>:<br />
A instrução SELECT irá retornar com sucesso pois sem a incluir a coluna DATA2, não é necessário consultar o Wallet.</p>
<p style="text-align: justify;"><span style="color: blue;"> </span><strong><span style="color: black;"> <span style="text-decoration: underline;">PASSO 4: Testando o TDE no nível do arquivo de dados</span></span></strong></p>
<p style="text-align: justify;"><strong>a)</strong> Localize o arquivo de dados em que a tabela foi criada. A query abaixo poderá ser executada para descobrir o caminho completo do arquivo de dados se o usuário conectado tiver privilégios administrativos ou tiver privilégios de SELECT nas visões <span style="color: blue;">DBA_TABLES </span><span style="color: black;">e </span><span style="color: blue;">DBA_DATA_FILES: </span></p>
<p style="text-align: justify;"><span style="color: blue;"> SELECT            F.FILE_NAME<br />
FROM              DBA_TABLES T<br />
INNER JOIN   DBA_DATA_FILES F<br />
ON         T.TABLESPACE_NAME = F.TABLESPACE_NAME<br />
WHERE           T.TABLE_NAME = &#8216;TABLE_TDE_TEST&#8217;;</span><br />
<span style="color: blue;"> </span><br />
<span style="color: blue;"><span style="color: black;"> <strong>b)</strong> Entre na pasta localizada no item anterior:</span></span><br />
<span style="color: blue;"><span style="color: black;"> </span></span><br />
<span style="color: blue;"><span style="color: black;"> &#8211; Se estiver usando SO Linux digite no prompt de comandos:</span></span><br />
<span style="color: blue;"><strong> </strong>strings <span style="color: red;">FILE.DBF</span> | grep<strong> &#8220;</strong>criptogrados na coluna DATA&#8221; </span><br />
<span style="color: blue;"> </span><br />
<span style="color: black;"> Obs.: Substitua <span style="color: red;">FILE.DBF</span> pelo nome do arquivo de dados identificado no item anterior.</span></p>
<div style="text-align: justify;">- Se estiver usando SO Windows, abra o arquivo identificado no item anterior em um editor de texto qualquer e faça uma pesquisa (CTRL + F) pela seguinte frase: criptogrados na coluna DATA</div>
<p style="text-align: justify;"><strong>Resultado:</strong></p>
<p style="text-align: justify;">Você encontrará no arquivo DBF o valor &#8220;criptogrados na coluna DATA&#8221; apenas 1 vez, pois este é o valor da coluna DATA1. Se os dados da coluna DATA2 não estivessem criptografados, a pesquisa encontraria 2 vezes a frase pesquisada dentro do arquivo.</p>
<p style="text-align: justify;">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p style="text-align: justify;"><strong>CONCLUSÃO</strong></p>
<p style="text-align: justify;">Apesar de degradar a performance da tabela, utilizar TDE para criptografar e decriptografar dados transparentemente é um ótimo recurso para proteger dados confidenciais, tais como salários ou números de cartões de crédito, pois eles só serão acessados por usuários ou aplicações que conheçam previamente a senha do Wallet.</p>
<p style="text-align: justify;">Além de proteger os dados no nível lógico (conectado no banco de dados), TDE também protege os dados no nível físico, pois nos testes do Passo 4 podemos verificar que os dados aparecem em &#8220;texto limpo&#8221; no arquivo de dados do sistema operacional e podem ser lidos claramente por qualquer usuário que tenha acesso a ele.</p>
<p style="text-align: justify;">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<strong> </strong></p>
<p style="text-align: justify;"><strong>Comandos e instruções SQL úteis:</strong></p>
<ul style="text-align: justify;">
<li>Para consultar tabelas que possuem colunas criptografadas com TDE:<br />
<span style="color: #0000ff;">select * from DBA_ENCRYPTED_COLUMNS;</span></li>
<li> Para somente abrir o Wallet:<br />
<span style="color: #0000ff;">ALTER SYSTEM SET WALLET OPEN IDENTIFIED BY &#8220;Password&#8221;;</span> &#8211;&gt; substituir Password pela senha master do Wallet.</li>
</ul>
<p style="text-align: justify;"><strong>Referências:</strong></p>
<ul style="text-align: justify;">
<li><a href="http://www.oracleflash.com/26/Oracle-10g--Transparent-Data-Encryption-examples.html">http://www.oracleflash.com/26/Oracle-10g&#8211;Transparent-Data-Encryption-examples.html</a></li>
<li><a href="http://www.oracle-base.com/articles/10g/TransparentDataEncryption_10gR2.php">http://www.oracle-base.com/articles/10g/TransparentDataEncryption_10gR2.php</a></li>
<li><a href="http://download.oracle.com/docs/cd/E11882_01/license.112/e10594/options.htm#CIHFDJDG">http://download.oracle.com/docs/cd/E11882_01/license.112/e10594/options.htm#CIHFDJDG</a></li>
<li>Material do curso oficial da Oracle: Oracle Database 10G Administration Workshop II.</li>
</ul>
<p style="text-align: justify;">Fonte: <a href="http://www.fabioprado.net/2011/02/implementando-seguranca-com-o-tde.html" target="_blank">Blog Fabio Prado</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.profissionaisti.com.br/2011/05/oracle-criptografando-tabelas-com-o-tde/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

