GPO ( Grupo de Profissionais Oracle )
A maior comunidade Oracle do Brasil !

SELECT sem usar o Banco

É possível, nas plataformas Unix / Linux, recuperar dados dos DATAFILEs mesmo com a Instância Oracle parada, diretamente pelo Shell, sem usar SQL*Plus.

Sabendo-se qual o DATAFILE e bloco onde o dado está, basta usar o comando dd como abaixo.
Não é exatamente um SELECT, e para recuperar os dados, é necessário saber em que DATAFILE e bloco ele está. Mas nada impede que você, adaptando esta técnica, recupere todos os dados de um DATAFILE, e com a Instância parada !

Para saber qual bloco estão os dados de uma coluna, use este SELECT:

SQL> SELECT DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) BLOCK FROM CUSTOMER WHERE CUSTOMER_NAME = 'Portilho';

BLOCK
_ _ _ _
134

De posse do número do Bloco, retornado pro este SELECT, basta executar no shell:

dd if=/u02/oradata/ORCL/users.dbf ibs=8192 skip=142 count=1 | strings

1+0 records in
142+0 records out
Ricardo Portilho Proni

Sendo que…
ibs é o tamanho do BLOCK_SIZE de seu Banco de Dados. No 10g, o padrão é 8192 bytes.
skip é o número do bloco recuperado no SELECT anterior, mais 8, que é a quantidade de blocos que compõe o HEADER do DATAFILE. Como os dados que eu quero estão no bloco 134, irei procura-los no bloco 142 (134 + 8).

Share

You may also like...

Deixe um comentário

O seu endereço de e-mail não será publicado.