Há tempos atrás, fiz um post, sobre como ler dados de um datafile com o utilitário dd, porém, devido recentemente descobri um particularidade 🙂 …
No 1º post que fiz sobre este tema criei uma tabela, inseri alguns dados e obtive os dados com o DD, no entanto, ao voltar a fazer testes, com uma tabela diferente, não conseguia extrair os dados. Como o teste anterior era com a versão da BD anterior era uma 10gR2 e agora estava a usar uma 11gR2, pensei que poderia ter alguma diferença.
Vamos ver os testes:
1 – Com base em uma tabela que eu tinha, fiz o select para obter o Block Id em que os dados das colunas A e B estão armazenados:
2 – Com a informação do block id, vamos ver o que DD nos mostra:
Como podemos ver, os valores das colunas A e B não são apresentados 🙂
3 – Como a coluna B é um varchar2(2), decidi aumentar a capacidade:
4 – Realizei update na linha A=9995 e atualizei o campo B com uma string maior, para poder comparar o comportamento:
5 – Agora se eu fizer o DD novamente 🙂
Agora a string que realizei o update já é visível.
Quando a string é pequena, de alguma forma, a informação não é visível.
6 – Para explorar mais este comportamento, fiz mais alguns updates, para comparar:
Agora com o DD, podemos ver as linhas AAA e MAIOR, porém a linha AA (row 1) não foi retornada.
Com o output, vi que o tamanho de bytes retornado controlado pelo comando strings é o que limita a visualização. E a partir do 3 byte (tamanho da string na BD), com a virgula que aparece forma o 4 byte, que é o default do comando strings, que no fundo, é um interpretador.
http://en.wikipedia.org/wiki/Strings_(Unix)
“Strings are recognized by looking for sequences of at least 4 (by default) printable characters terminating in a NUL character. Some implementations provide options for determining what is recognized as a printable character, which is useful for finding non-ASCII and wide character text.”
Conclusão:
Nada como ler o man dos comandos com alguma atenção 🙂 🙂 🙂