Re: [oracle_br] Re: Recuperação em modo noarchivelog sem backup

2014-05-28 Por tôpico carlos silva carlos_nsi...@yahoo.com.br [oracle_br]

Muito obrigado pela resposta Chiappa, tirou as minhas duvidas.



--
Em qua, 28 de mai de 2014 22:55 BRT jlchia...@yahoo.com.br [oracle_br] escreveu:

>Tudo jóia ? Então, no RDBMS Oracle o conceito é simples : recuperação se faz 
>aplicando-se nos datafiles em disco os redo logs (os logs de transação, que 
>registram as alterações havidas) sequencialmente - ora, se vc está em modo 
>noarchive significa que quando o log file sendo usado encheu, vc ** não tem ** 
>uma cópia dele, ele é reusado portanto vc PERDE os logs todos que houveram no 
>passado, só tem os logs mais recentes, online...
>  Sendo assim, vc só poderá fazer o recover ** SE ** , por uma sorte incrível, 
> as alterações necessárias para trazer o(s) datafile(s) a recuperar ainda 
> estão presentes no redo log file online, é isso Na prática num ambiente 
> produtivo isso é muito, muito, MUITO DiFÍCIL de acontecer (tranquilamente vc 
> pode precisar aplicar alterações/logs de horas atrás em caso de falha e 
> muitas vezes o redo log online enche em poucos minutos), então eu nem conto 
> com isso, ok ? 
>   Na real a regra é : quem coloca o database em noarchivelog tá indicando que 
> o database pode ser perdido (digamos, é um armazém de dados, que em tese pode 
> ter os dados recuperados dos databases online), e QUANDO isso acontecer (não 
> é SE, é QUANDO), ou se assumirá o ônus de trazer os dados dos databases 
> online OU se recuperará o último backup e os dados daí pra frente são 
> descartados
>SE não tiver backup E não há de onde trazer os dados E está em modo 
> noarchive, basicamente vc VAi ter perda de dados : nem mais, nem menos
>
>[]s
>
>  Chiappa
>  
>OBS : 
>
> a) estamos falando aqui de recuperação de crash/atualização de 
> datafiles/prevenção de perda de dados : é Claro, se o banco está OK e vc só 
> quer ter os dados como estavam nalgum ponto do passado, outros recursos de 
> recuperação (como FLASHBACK QUERY) normalmente dependem de UNDO e não de redo 
> log, então há chances disso ser possível
>
> b) outras opções de recuperação de uma falha voltando o database no tempo até 
> antes da falha (como o FLASHBACK DATABASE, por exemplo) dependem de setup 
> extra (FLASHBACK LOGs no caso) : Dificilmente isso é o caso de estar 
> presente...


[oracle_br] Re: Recuperação em modo noarchivelog sem backup

2014-05-28 Por tôpico jlchia...@yahoo.com.br [oracle_br]
Tudo jóia ? Então, no RDBMS Oracle o conceito é simples : recuperação se faz 
aplicando-se nos datafiles em disco os redo logs (os logs de transação, que 
registram as alterações havidas) sequencialmente - ora, se vc está em modo 
noarchive significa que quando o log file sendo usado encheu, vc ** não tem ** 
uma cópia dele, ele é reusado portanto vc PERDE os logs todos que houveram no 
passado, só tem os logs mais recentes, online...
  Sendo assim, vc só poderá fazer o recover ** SE ** , por uma sorte incrível, 
as alterações necessárias para trazer o(s) datafile(s) a recuperar ainda estão 
presentes no redo log file online, é isso Na prática num ambiente produtivo 
isso é muito, muito, MUITO DiFÍCIL de acontecer (tranquilamente vc pode 
precisar aplicar alterações/logs de horas atrás em caso de falha e muitas vezes 
o redo log online enche em poucos minutos), então eu nem conto com isso, ok ? 
   Na real a regra é : quem coloca o database em noarchivelog tá indicando que 
o database pode ser perdido (digamos, é um armazém de dados, que em tese pode 
ter os dados recuperados dos databases online), e QUANDO isso acontecer (não é 
SE, é QUANDO), ou se assumirá o ônus de trazer os dados dos databases online OU 
se recuperará o último backup e os dados daí pra frente são descartados
SE não tiver backup E não há de onde trazer os dados E está em modo 
noarchive, basicamente vc VAi ter perda de dados : nem mais, nem menos

[]s

  Chiappa
  
OBS : 

 a) estamos falando aqui de recuperação de crash/atualização de 
datafiles/prevenção de perda de dados : é Claro, se o banco está OK e vc só 
quer ter os dados como estavam nalgum ponto do passado, outros recursos de 
recuperação (como FLASHBACK QUERY) normalmente dependem de UNDO e não de redo 
log, então há chances disso ser possível

 b) outras opções de recuperação de uma falha voltando o database no tempo até 
antes da falha (como o FLASHBACK DATABASE, por exemplo) dependem de setup extra 
(FLASHBACK LOGs no caso) : Dificilmente isso é o caso de estar presente...

[oracle_br] Recuperação em modo noarchivelog sem backup

2014-05-28 Por tôpico carlos silva carlos_nsi...@yahoo.com.br [oracle_br]
Boa noite pessoal,
 
Sou iniciante em Oracle e gostaria de saber se é possível fazer a recuperação 
de um banco de dados funcionando em modo noarchivelog e sem backup. Isso é 
possível? Como? 
 
 
 
 
 
Att,
Carlos


Re: [oracle_br] Re: Desafio SQL

2014-05-28 Por tôpico flavio_brune...@yahoo.com [oracle_br]
Olha o que achei... para todos os gostos, vale como estudo. 

 ORACLE-BASE - String Aggregation Techniques 
http://www.oracle-base.com/articles/misc/string-aggregation-techniques.php 
 
 http://www.oracle-base.com/articles/misc/string-aggregation-techniques.php 
 
 ORACLE-BASE - String Aggregation Techniques 
http://www.oracle-base.com/articles/misc/string-aggregation-techniques.php 
ORACLE-BASE - String Aggregation Techniques
 
 
 
 Visualizar em www.oracle-bas... 
http://www.oracle-base.com/articles/misc/string-aggregation-techniques.php 
 Visualização pelo Yahoo 
 
 
  


 



Re: [oracle_br] Re: Desafio SQL

2014-05-28 Por tôpico Vitor Junior vitorj...@gmail.com [oracle_br]
O Thiagão ainda comentou:
[14:00:14] Thiago dos santos leite: acho que no 10g tem um WM_CONCAT e
STRAGG, só tem que testar.



Att,/Regards,


Vitor Jr.
Infraestrutura / Infrastructure Team
Oracle 11g DBA Certified Professional - OCP
Oracle Certified Expert, Oracle Real Application Clusters 11g and Grid
Infrastructure Administrator - OCE
Oracle Database 11g Performance Tuning Certified Expert - OCE
Oracle Exadata 11g Certified Implementation Specialist
Oracle Certified Associate, MySQL 5
mail, gtalk e msn: vitorj...@gmail.com
http://certificacaobd.com.br/
skype: vjunior1981
https://mybizcard.co/vitor.jr.385628


Em 28 de maio de 2014 14:39, flavio_brune...@yahoo.com [oracle_br] <
oracle_br@yahoogrupos.com.br> escreveu:

>
>
> Usando a dica do Thiago dos Santos Leite (colega do Vitor Junior), segue
> outra solução, que funcionou bem no Oracle 10. O exemplo do Thiago funciona
> no Oracle 11 em diante.
>
> select e.id, e.produto, e.situacao, wm_concat(s.descricao) lista
> from   estoque e
> join   situacao s on bitand(e.situacao, s.id) > 0
> group  by e.id, e.produto, e.situacao
> order  by e.id;
>
> Abs
>
>  
>


Re: [oracle_br] Re: Desafio SQL

2014-05-28 Por tôpico flavio_brune...@yahoo.com [oracle_br]
Usando a dica do Thiago dos Santos Leite (colega do Vitor Junior), segue outra 
solução, que funcionou bem no Oracle 10. O exemplo do Thiago funciona no Oracle 
11 em diante. 

 select e.id, e.produto, e.situacao, wm_concat(s.descricao) lista
 from   estoque e
 join   situacao s on bitand(e.situacao, s.id) > 0
 group  by e.id, e.produto, e.situacao
 order  by e.id;
 

 Abs

 



Re: [oracle_br] Re: Desafio SQL

2014-05-28 Por tôpico 'Milton Bastos Henriquis Jr.' miltonbas...@gmail.com [oracle_br]
O Thiago usou exatamente a função BITAND, que o André já tinha dado a dica
em um e-mail anterior!

Ótima solução, código limpo e bem curto!




Em 28 de maio de 2014 14:02, Vitor Junior vitorj...@gmail.com [oracle_br] <
oracle_br@yahoogrupos.com.br> escreveu:

>
>
> Dica do colega Thiago dos Santos Leite, aqui da empresa. Segundo o Milton
> funcionou e simplificou:
>
>   1  select distinct e.id, e.produto, e.situacao, LISTAGG(s.descricao, '
> | ') WITHIN GROUP (order by s.id) over (partition by e.id) lista
>   2 from   estoque e
>   3 join   situacao s on bitand(e.situacao,
> s.id) > 0
>   4* order by e.id
> 13:56:16 dsv11g>/
>
> ID PRODUTO
>SITUACAO
> --
> 
> --
>  LISTA
>
> 
>  1 Cerveja
>   2
> Produto bloqueado manualmente
>
>  2 Picanha
>   5
> Produto vencido | Produto bloqueado para inventário
>
>  3 Alcatra
>   9
> Produto vencido | Produto bloqueado por avaria
>
>  4 Maminha
>   7
> Produto vencido | Produto bloqueado manualmente | Produto bloqueado para
> inventário
>
>
> 4 linhas selecionadas.
>
>
>
> Att,/Regards,
>
>
> Vitor Jr.
> Infraestrutura / Infrastructure Team
> Oracle 11g DBA Certified Professional - OCP
> Oracle Certified Expert, Oracle Real Application Clusters 11g and Grid
> Infrastructure Administrator - OCE
> Oracle Database 11g Performance Tuning Certified Expert - OCE
> Oracle Exadata 11g Certified Implementation Specialist
> Oracle Certified Associate, MySQL 5
> mail, gtalk e msn: vitorj...@gmail.com
> http://certificacaobd.com.br/
> skype: vjunior1981
> https://mybizcard.co/vitor.jr.385628
>
>
> Em 28 de maio de 2014 11:02, flavio_brune...@yahoo.com [oracle_br] <
> oracle_br@yahoogrupos.com.br> escreveu:
>
>
>>
>> Legal, que bom que gostou.
>> Particularmente eu utilizaria a solução com função por ser mais simples e
>> de fácil  manutenção. Mas, sempre é bom ter uma outra forma na manga.
>> Abraços
>>
>>
>  
>


Re: [oracle_br] Re: Desafio SQL

2014-05-28 Por tôpico Vitor Junior vitorj...@gmail.com [oracle_br]
Dica do colega Thiago dos Santos Leite, aqui da empresa. Segundo o Milton
funcionou e simplificou:

  1  select distinct e.id, e.produto, e.situacao, LISTAGG(s.descricao, ' |
') WITHIN GROUP (order by s.id) over (partition by e.id) lista
  2 from   estoque e
  3 join   situacao s on bitand(e.situacao, s.id)
> 0
  4* order by e.id
13:56:16 dsv11g>/

ID PRODUTO
   SITUACAO
--

--
LISTA

 1 Cerveja
  2
Produto bloqueado manualmente

 2 Picanha
  5
Produto vencido | Produto bloqueado para inventário

 3 Alcatra
  9
Produto vencido | Produto bloqueado por avaria

 4 Maminha
  7
Produto vencido | Produto bloqueado manualmente | Produto bloqueado para
inventário


4 linhas selecionadas.



Att,/Regards,


Vitor Jr.
Infraestrutura / Infrastructure Team
Oracle 11g DBA Certified Professional - OCP
Oracle Certified Expert, Oracle Real Application Clusters 11g and Grid
Infrastructure Administrator - OCE
Oracle Database 11g Performance Tuning Certified Expert - OCE
Oracle Exadata 11g Certified Implementation Specialist
Oracle Certified Associate, MySQL 5
mail, gtalk e msn: vitorj...@gmail.com
http://certificacaobd.com.br/
skype: vjunior1981
https://mybizcard.co/vitor.jr.385628


Em 28 de maio de 2014 11:02, flavio_brune...@yahoo.com [oracle_br] <
oracle_br@yahoogrupos.com.br> escreveu:

>
>
> Legal, que bom que gostou.
> Particularmente eu utilizaria a solução com função por ser mais simples e
> de fácil  manutenção. Mas, sempre é bom ter uma outra forma na manga.
> Abraços
>
>  
>


Re: [oracle_br] Re: Exportar dados de um banco com o datafile sysaux01.dbf corrompido

2014-05-28 Por tôpico Evandro Giachetto evandrogiache...@gmail.com [oracle_br]
Olha, eu confesso que peguei o bonde andando e não lí o primeiro e-mail da
thread.. mas pelo que pude entender, seu banco está com a sysaux zuada e,
aparentemente o banco não está em modo archive.

Minha pergunta é.

Datapump está funcionando?

Eu tive um problema parecido, mas a sysaux não estava "corrompida". Apenas
não era possível modificar a tablespace que era pre-requisito para upgrade
de 10g para 11g.

O banco era muito grande (cerca de 10Tera) então, a solução que usei nessa
ocasião foi:

Criar um banco 11g "From scratch" (com uma sysaux integra).
Exportar apenas os objetos PL/SQL do banco de origem, 10g.
"Instalar" todos os recursos que seu banco 10g utilizava, como por exemplo,
Java ou XML.
Criar todos os usuários no banco 11g e importar os objetos PL/SQL (mesmo
que todos fiquem inválidos neste momento)
Em seguida, coloquei todas as outras tablespaces do banco 10g, excluindo a
sysaux, system, temp e undo, em read-only e as exportei como Transportable
Tablespace.
Baixei o banco 10g e importei essas transportable tablespace no novo banco
11g.

Tanto o export como o import foram bem rápidos pois o datapump vai,
simplesmente, "Plugar" meus datafiles do banco 10g no meu novo banco 11g.
Não vai exportar dados.

Em seguida, no banco 11g, vc muda as tablespaces para read-write e roda o
utlrp para recompilar seus objetos inválidos.

Obviamente, falei bem por cima os passos que segui naquela ocasião. Vale
uma leitura pelo google afora para maiores detalhes sobre este processo.


Se não for possível rodar o datapump por causa de sua sysaux, me perdoe,
mas o que escreví alí acima pode ser útil para mais alguém.

Forte abraço

Evandro Giachetto
Oracle DBA
evandrogiache...@gmail.com



Em 28 de maio de 2014 13:26, jlchia...@yahoo.com.br [oracle_br] <
oracle_br@yahoogrupos.com.br> escreveu:

>
>
> Sim, veja lá na minha resposta que eu cito : existem N maneiras de se
> recuperar uma tablespace corrupta/incompleta/não-atualizada (entre elas,
> FLASHBACK DATABASE, Block recover do RMAN, o RECOVER da tablespace (ie,
> aplicação dos logs de alteração em cima de último backup reconhecidamente
> íntegro, entre outras) , mas TODAS exigem que ou o banco esteja em modo de
> archive e vc tenha os archived redo logs todos e/ou que existam backups
> próprios e/ou que vc tenha flashback logs/FRA ativos... Pelo que vc
> descreve , se nem dump de dados neguim tinha aí nesse coiso, quanto mais
> esperar por coisas como essas que cito... Dá uma pesquisada aí pra ver se
> causalmente vc tem algo assim mas eu sinceramente duvido...
>
>  []s
>
>Chiappa
>  
>


Re: [oracle_br] Re: Exportar dados de um banco com o datafile sysaux01.dbf corrompido

2014-05-28 Por tôpico jlchia...@yahoo.com.br [oracle_br]
Sim, veja lá na minha resposta que eu cito : existem N maneiras de se recuperar 
uma tablespace corrupta/incompleta/não-atualizada (entre elas, FLASHBACK 
DATABASE, Block recover do RMAN, o RECOVER da tablespace (ie, aplicação dos 
logs de alteração em cima de último backup reconhecidamente íntegro, entre 
outras) , mas TODAS exigem que ou o banco esteja em modo de archive e vc tenha 
os archived redo logs todos e/ou que existam backups próprios e/ou que vc tenha 
flashback logs/FRA ativos... Pelo que vc descreve , se nem dump de dados neguim 
tinha aí nesse coiso, quanto mais esperar por coisas como essas que cito... Dá 
uma pesquisada aí pra ver se causalmente vc tem algo assim mas eu sinceramente 
duvido...

 []s

   Chiappa

Re: [oracle_br] Re: Exportar dados de um banco com o datafile sysaux01.dbf corrompido

2014-05-28 Por tôpico jlchia...@yahoo.com.br [oracle_br]
Bem, ** sempre ** que se fala em Automatizar uma tarefa de DBA longa e 
complexa, aonde Não Há a menor possibilidade de fazer click-click numa GUI 
devido ao tamanho da coisa, a primeira coisa em que se deve pensar é a técnica 
que é a sua/minha/nossa melhor amiga, basicamente é o cachorro do DBA - o SQL 
gerando SQL No caso, vc tanto poderia gerar os n exports necessários (um 
para cada tabela) quanto poderia gerar uma LISTA das tabelas a exportar : testa 
aí se a opção de gerar uma lista (o chamado PARFILE do exp, veja a sintaxe dele 
na documentação Oracle) é aceito aí nesse seu ambiente baleado...
 No meu exemplo abaixo, vou gerar um shell script que já terá os n comandos de 
export, um pra cada tabela...
 Seria criar num editor de texto o script sqlplus tipo o abaixo (** ALTERANDO 
** os detalhes de spool e caracteres de fim de linha se for o caso) :

set term off feedback off verify off pages 0 lines 500 trimspool on head off
spool roda_exports.sh
select 'exp system/oracle file=exp_' || owner || '_' || table_name || '.dmp 
indexes=n direct=y log=' || owner || '_' || table_name || '.exp'
 ||'recordlength=65535 record=n triggers=n statistics=none constraints=n'
3from dba_tables
   where owner in ('SCOTT', 'DMCOMUM')
   order by owner, table_name;
spool off
exit

e aí executá-lo com :

sqlplus system/oracle @nomedoscript.sql

 e kaput, magicamente vai ser gerado o shell script roda_exports.sh que faz o 
que vc precisa, yes ?? Executa no prompt do SO o roda_exports.sh... para 
importar a mesma coisa, gera um shell script que faça o import...

 []s

  Chiappa

 OBS : 

  óbvio#1, para vc poder importar os dados lá no servidor destino o 
database-destino TEM que já existir e estar ativo, as 
tablespaces/usuários/privilégios já devem estar ok... Vc pode gerar os DDLs 
necessários pra isso com um scriptzinho tipo o acima que execute DBMS_METADATA 
para cada obj necessário...

  óbvio#2, o export acima está exportando DADOS apenas : após o import dos 
dados, vc Terá que criar os índices e constraints... testa aí no seu ambiente 
se com a sysaux baleada vc consegue fazer um export com rows=n indexes=y 
constraints=n e um outro com constraints=y indexes=n ignore=y , se conseguir 
blz usa isso num import, se não conseguir é gerar o DDL dos índices e 
conestraints, via DBMS_METADATA ou similares

  óbvio#3, se vc não quiser gerar arquivos vc sempre tem a opção de SQL 
dinâmico dentro do script sqlplus : eu não gosto muito dessa derivação, acho 
melhor ter mesmo um log do que faço, mas fyi é possível

Re: [oracle_br] Re: Exportar dados de um banco com o datafile sysaux01.dbf corrompido

2014-05-28 Por tôpico Amilcar de Jesus Moreti ajmor...@yahoo.com.br [oracle_br]
Chiappa, existe uma maneira de corregir esse tablespace sysaux?



Em Quarta-feira, 28 de Maio de 2014 12:01, "Amilcar de Jesus Moreti 
ajmor...@yahoo.com.br [oracle_br]"  escreveu:
 


  

entendi a solução seria entao, levar somente os dados para o outro servidor, o 
unico problema que vejo agora,vou ter que pensar numa solução seria como fazer 
isso de uma maneira mais pratica, pois o banco tem 22 mil tabelas, é grande.

obrigado pela dica.



Em Terça-feira, 27 de Maio de 2014 23:07, "jlchia...@yahoo.com.br [oracle_br]" 
 escreveu:
 


  
Tudo jóia, colega ? Então, a primeira coisa que pega aí é que a sua versão é 
11g, e a nota metalink 'SYSAUX New Mandatory Tablespace in Oracle 10g and 
higher' (Doc ID 243246.1) demanda CLARAMENTE que no 10g e posteriores a 
tablespace SYSAUX  não é mais * Opcional, ela é uma extensão da 
tablespace SYSTEM, então um banco com SYSAUX corrompida/offline em tese deveria 
ser considerado tão inapropriado, baleado e corrompido quase tanto quanto se 
fosse a tablespace SYSTEM O ** CORRETO ** seria vc recuperar a tablespace, 
seja com BLOCK RECOVER do RMAN, seja voltando backup, mas pelo que vc diz o tal 
banco estava ao deus-dará, sem backup de nenhum tipo, sem archives 
(provavelmente rodando em modo noarchive), então estamos numa situação anômala 
e não recomendada...
 Neste cenário :
 
 a) com ABSOLUTA certeza datapump/expdp vc não deve conseguir mesmo, pois
 afaik o expdp tenta gravar/ler objetos na SYSAUX seja qual for o modo de 
export usado
 
 b) na SYSAUX residem complementos aos metadados de tablespaces e de usuários, 
então mesmo que não grave nada lá o exp (a ferramenta de exportação 
tradicional) precisaria ler dados na SYSAUX se o exp se refere à esse nível de 
objetos 
 
 ==> Um work-around possível seria executar o exp em modo de tabelas - essa 
informação está na SYSTEM (mais exatamente na OBJ$ e quetais) , então em tese 
deve funcionar , mas vai ser sacal pra automatizar Um exemplo demonstrando 
a possibilidade :
 
 
=> vou por a tablespace SYSAUX offline, como vc está :

[oracle@localhost ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.2.0 Production on Tue May 27
 22:45:32 2014

Copyright (c) 1982, 2010, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SYS:AS SYSDBA@orcl:SQL>alter tablespace sysaux offline;

Tablespace altered.

SYS:AS SYSDBA@orcl:SQL>exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 
Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

=> faço o export tradicional, a nível de TABELAs e ** NECESSARIAMENTE ** não 
pedindo para compactar extents, não registrar nada, só exp dos dados mesmo :

[oracle@localhost ~]$ exp system/oracle buffer=10485760 file=exp_hr.dmp 
compress=n indexes=n direct=y log=exp_hr.exp tables=HR.REGIONS,HR.LOCATIONS 
recordlength=65535 record=n triggers=n statistics=none constraints=n

Export: Release 11.2.0.2.0 - Production on Tue May 27 22:45:51 2014

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.


Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 
Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Export done in US7ASCII character set and AL16UTF16 NCHAR character set
server uses AL32UTF8 character set (possible charset conversion)
Note: indexes on tables will not be exported
Note: constraints on tables
 will not be exported

About to export specified tables via Direct Path ...
Current user changed to HR
. . exporting table    REGIONS  4 rows exported
. . exporting table  LOCATIONS 23 rows exported
Export terminated successfully without warnings.
[oracle@localhost ~]$ 


c.q.d. 

 []s
 
   Chiappa
   
OBS : torno a
 insistir que isso é um WORk-AROUND, um QUEBRA-GALHO, TOTALMENTE NÃO SUPORTADO 
e NÃO RECOMENDADO, e que PODE ou NÃO funcionar no seu ambiente, okdoc ? O 
certo, correto e que funciona SEMPRE seria corrigir a corrupção...




Re: [oracle_br] Re: Exportar dados de um banco com o datafile sysaux01.dbf corrompido

2014-05-28 Por tôpico Amilcar de Jesus Moreti ajmor...@yahoo.com.br [oracle_br]

entendi a solução seria entao, levar somente os dados para o outro servidor, o 
unico problema que vejo agora,vou ter que pensar numa solução seria como fazer 
isso de uma maneira mais pratica, pois o banco tem 22 mil tabelas, é grande.

obrigado pela dica.



Em Terça-feira, 27 de Maio de 2014 23:07, "jlchia...@yahoo.com.br [oracle_br]" 
 escreveu:
 


  
Tudo jóia, colega ? Então, a primeira coisa que pega aí é que a sua versão é 
11g, e a nota metalink 'SYSAUX New Mandatory Tablespace in Oracle 10g and 
higher' (Doc ID 243246.1) demanda CLARAMENTE que no 10g e posteriores a 
tablespace SYSAUX  não é mais * Opcional, ela é uma extensão da 
tablespace SYSTEM, então um banco com SYSAUX corrompida/offline em tese deveria 
ser considerado tão inapropriado, baleado e corrompido quase tanto quanto se 
fosse a tablespace SYSTEM O ** CORRETO ** seria vc recuperar a tablespace, 
seja com BLOCK RECOVER do RMAN, seja voltando backup, mas pelo que vc diz o tal 
banco estava ao deus-dará, sem backup de nenhum tipo, sem archives 
(provavelmente rodando em modo noarchive), então estamos numa situação anômala 
e não recomendada...
 Neste cenário :
 
 a) com ABSOLUTA certeza datapump/expdp vc não deve conseguir mesmo, pois afaik 
o expdp tenta gravar/ler objetos na SYSAUX seja qual for o modo de export usado
 
 b) na SYSAUX residem complementos aos metadados de tablespaces e de usuários, 
então mesmo que não grave nada lá o exp (a ferramenta de exportação 
tradicional) precisaria ler dados na SYSAUX se o exp se refere à esse nível de 
objetos 
 
 ==> Um work-around possível seria executar o exp em modo de tabelas - essa 
informação está na SYSTEM (mais exatamente na OBJ$ e quetais) , então em tese 
deve funcionar , mas vai ser sacal pra automatizar Um exemplo demonstrando 
a possibilidade :
 
 
=> vou por a tablespace SYSAUX offline, como vc está :

[oracle@localhost ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.2.0 Production on Tue May 27 22:45:32 2014

Copyright (c) 1982, 2010, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SYS:AS SYSDBA@orcl:SQL>alter tablespace sysaux offline;

Tablespace altered.

SYS:AS SYSDBA@orcl:SQL>exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 
Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

=> faço o export tradicional, a nível de TABELAs e ** NECESSARIAMENTE ** não 
pedindo para compactar extents, não registrar nada, só exp dos dados mesmo :

[oracle@localhost ~]$ exp system/oracle buffer=10485760 file=exp_hr.dmp 
compress=n indexes=n direct=y log=exp_hr.exp tables=HR.REGIONS,HR.LOCATIONS 
recordlength=65535 record=n triggers=n statistics=none constraints=n

Export: Release 11.2.0.2.0 - Production on Tue May 27 22:45:51 2014

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.


Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 
Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Export done in US7ASCII character set and AL16UTF16 NCHAR character set
server uses AL32UTF8 character set (possible charset conversion)
Note: indexes on tables will not be exported
Note: constraints on tables will not be exported

About to export specified tables via Direct Path ...
Current user changed to HR
. . exporting table    REGIONS  4 rows exported
. . exporting table  LOCATIONS 23 rows exported
Export terminated successfully without warnings.
[oracle@localhost ~]$ 


c.q.d. 

 []s
 
   Chiappa
   
OBS : torno a insistir que isso é um WORk-AROUND, um QUEBRA-GALHO, TOTALMENTE 
NÃO SUPORTADO e NÃO RECOMENDADO, e que PODE ou NÃO funcionar no seu ambiente, 
okdoc ? O certo, correto e que funciona SEMPRE seria corrigir a corrupção...


Re: [oracle_br] Re: Desafio SQL

2014-05-28 Por tôpico flavio_brune...@yahoo.com [oracle_br]
Legal, que bom que gostou. Particularmente eu utilizaria a solução com função 
por ser mais simples e de fácil  manutenção. Mas, sempre é bom ter uma outra 
forma na manga.
 Abraços


Re: [oracle_br] Re: Desafio SQL

2014-05-28 Por tôpico 'Milton Bastos Henriquis Jr.' miltonbas...@gmail.com [oracle_br]
Flavio, SENSACIONAL cara!

Eu imaginava que nem fosse possível fazer isso apenas com SELECT, mas você
arrebentou na função analítica, parabéns!

Mandou bem demais!

Vou levar um bom tempo pra conseguir entender teu código, mas o fato é que
realmente funcionou.


Obrigado!


2014-05-27 19:15 GMT-03:00 flavio_brune...@yahoo.com [oracle_br] <
oracle_br@yahoogrupos.com.br>:

>
>
> Pessoal
>
> De qualquer forma, segue duas soluçõezinhas que poderiam ser utilizadas
> para resolver o problema, uma utilizando função e outra somente com SELECT.
> A segunda é mais complexa porém resolve caso não seja possível criar uma
> function (por motivos de grant mesmo).
>
> Criação das tabelas:
> drop table situacao;
> create table situacao
> (
>idnumber(10)   constraint pk_situacao primary key,
>descricao varchar2(50) not null
> );
>
> drop table estoque;
> create table estoque
> (
>id   number(10)constraint pk_estoque primary key,
>produto  varchar2(100) not null,
>situacao number(10)not null
> );
>
> insert into situacao (id,descricao) values (1,'Produto vencido');
> insert into situacao (id,descricao) values (2,'Produto bloqueado
> manualmente');
> insert into situacao (id,descricao) values (4,'Produto bloqueado para
> inventário');
> insert into situacao (id,descricao) values (8,'Produto bloqueado por
> avaria');
>
> insert into estoque (id,produto,situacao) values (1,'Cerveja',2);
> insert into estoque (id,produto,situacao) values (2,'Picanha',5);
> insert into estoque (id,produto,situacao) values (3,'Alcatra',9);
> insert into estoque (id,produto,situacao) values (4,'Maminha',7);
>
> commit;
>
> Solução 1: Com Function
> create or replace function traz_situacao (psituacao in number) return
> varchar2 is
>vret varchar2(2000);
> begin
>for r in (select s.descricao from situacao s where bitand(s.id,psituacao)
> > 0 order by s.id) loop
>   vret := vret || r.descricao || '|';
>end loop;
>if length(vret) > 1 then
>   vret := substr(vret,1,length(vret)-1);
>end if;
>return vret;
> end;
> /
>
> select e.id, e.produto, e.situacao, traz_situacao(e.situacao)
> todas_situacoes
> from   estoque e;
>
>
> Solução 2: Sem Function
> select v3.id, v3.produto, v3.situacao, substr(v3.todas_situacoes,2)
> todas_situacoes
> from   (
>  select v2.id, v2.produto, v2.situacao, v2.todas_situacoes, v2.lv,
> max(v2.lv) over (partition by v2.id) max_lv
>  from   (
>   select v1.id, v1.produto, v1.situacao,
>  sys_connect_by_path(v1.descricao, '|')
> todas_situacoes,
>  level lv
>   from   (
>select e.id, e.produto, e.situacao,
> s.descricao, rownum rn,
>   lead(rownum) over (partition by e.idorder by
> s.id) lead_rn
>from   estoque e
>join   situacao s on bitand(e.situacao, s.id)
> > 0
>  ) v1
>   connect by prior v1.lead_rn = v1.rn
> ) v2
>) v3
> where  v3.lv = v3.max_lv;
>
> Abraços
>
>
>
>
>  
>