Pular para o conteúdo

SELECT sem usar o Banco

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
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:

ShellScript
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).

Ricardo Portilho Proni

Ricardo Portilho Proni

Com 20 anos de experiência profissional, Oracle ACE Member – eleito pela Oracle Corporation um dos maiores especialistas do mundo em Oracle Database- Trabalhou em grande parte dos maiores bancos de dados Oracle do Brasil. Certificado em Oracle, SQL Server, DB2, MySQL, Sybase e Websphere. Conselheiro do GPO e do GUOB, palestrante do ENPO, GUOB Tech Day e Oracle Open World, escritor da Revista SQL Magazine e Instrutor na Nerv.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

plugins premium WordPress