Utilizando Oracle Secure File para LOB´s
Interlocução:
DBA -> Diretor! Diretor! O espaço no servidor de Produção está acabando!
Diretor -> E o que podemos fazer para arrumar isto?
DBA -> Comprar mais disco para este servidor e aumentar as tablespaces!
Diretor -> Gastar dinheiro? Nosso orçamento esta apertado! Dá seus pulos, se vira!
DBA -> Mas Diretor?
Diretor -> Sem más, se vira!!!!!
DBA -> Ohhh e agora, quem poderá me ajudar???
Oracle11G -> EUUUU!!!
DBA -> Noooooooooooooooossaaaaaaaaaaaaaa… É o Oracle 11GGGGGGGG!!!!!!
Oracle11G -> Seu DBA, você conhece o Segure File ?
DBA -> O que é isto Capitão 11G?
Oracle11G -> É uma nova features que tenho, para armazenamento de campos LOB, esta features possui criptografia e deduplication, alem de possuir compressão de dados só que minha maior compressão é com campos do tipo CLOB.
Tahh.. tah.. chega de conversinha e vamos colocar a mão a massa..!!!
Salve Galera..!! Ehh.. enfeitei demais o post.. mas vai agradar a muitos..!! Como eu já havia dito no post anterior, uma das palestras no Guob Tech Day, foi sobre compressão de dados e hoje venho demonstrar a vocês uma destas compressões que é o Oracle Secure File, utilizado para armazenar dados em campos LOB (CLOB e BLOB), a basica diferença entre BLOB e CLOB é que BLOB armazena arquivos binários (.pdf, .doc, .mid, .mp3, etc) e CLOB armazena textos muito grandes.. muito grandes mesmo..
O exemplo que vou dar é com dados armazenados em campo BLOB, pois em meus estudos vi muita gente falando que a compressão somente funciona em campos CLOB, esta “afirmação” esta 50% correta, na verdade a compressão é MUITO maior em campos CLOB do que em campo BLOB..
Bom.. vamos ao estudo de caso..!! Pois nada melhor do que tirar as dúvidas com testes reais..
Primeiro:
Criaremos uma tablespace que será a tablespace Default e criaremos um usuário no banco de dados e daremos algumas permissões básicas a ele..!!
Agora daremos mais algumas permissões a este usuário.. Algo simples..!!
Segundo:
Conectado com o usuário criado, criaremos uma tabela com este usuário que será a nossa cobaia.. !!!
Terceiro:
Agora iremos dar inicio ao procedimento de população desta tabela.. inserindo dados e imagem na mesma..!!
O passo a passo para fazer insert dentro de campos BLOB vocês podem encontrar com mais detalhe em outro post que eu fiz.. INSERINDO BLOB
Criamos um diretório no servidor, copiamos uma imagem para este diretório..!!
Criando diretório no Oracle e dando Permissão de acesso..
Quarto:
Agora iremos popular nossa tabela com os dados..!! A instrução usada foi feita de forma meio grosseira.. mas o estudo de caso aqui é o SecureFile e não esta instrução.. heheh..!!
Primeiro vou inserir apenas 10000 linhas…. Vamos lá..!
Agora vamos verificar o tamanho do nosso seguimento de LOB.. !!
Hum.. oq acham ? Pouco né… ?? Tbm acho.. muito pouco…. Bora inserir mais dados.. vamos judiar do banco de dados..!!!
Aeeeeeeeeeeeeeee.. aconteceu o que eu esperava.. acabou o espaço.. na tablespace.. tadinha dela.. e coitado do DBA.. hauaha..!!!
Olhem como ficou nossa tablespace agora..!!!
Ehh.. realmente não temos mais espaço..!!
Agora vamos as mágicas..!!!!!
Para armazenar os dados LOB eu criei uma outra tablespace, a criação é normal, não tem nenhum comando a mais nesta tablespace… é uma tablespace basica.. apenas para armazenar os LOBS…
Agora vamos criar uma outra tabela com a opção de SecureFile..
Ahh.. Por default a criação dos LOBS é BasicFiles.. Outra coisa.. deem uma olhada no parametro DB_SECUREFILE.. por default ele fica como PERMITTED.. e por isto os lobs são criados como BasicFiles.. se alterarmos para SECUREFILES, todos os campos LOBS serão criados automaticamente com SecureFiles..!!
DBA -> Mas e agora.. terei que fazer um Insert into as select ???
Oracle11G -> Seu DBA! Seu DBA! Você está duvidando do meu poder seu DBA ??? O Sr está de piadinha!!!!!
Opa.. agora vem uma surpresinha.. 2 posts em 1..
Irei ensinar como fazer migração dados de uma tabela para outra utilizando o DBMS_REDEFINITION..!! Uma otima ferramenta.. e pode ser efetuado online..!! Onde ele pega os dados da tabela ORIGEM e insere em uma tabela INTERIN TABLE.. que é a nova tabela..
A vantagem de utilizar o DBMS_REDEFINITION é o fato de que não precisamos ficar renomenando nada.. ele faz isto para nós.. ao final.. a Interim Table será renomeada para nossa tabela Original e a Original será renomeada para a Interim Table.. A unica coisa que precisam lembrar.. é de anotar os indices e constraints para que possam alterar o nome deles.. pois com o Redefinition.. eles fica como SYS_XXXXX.. Mas isto somente se houver necessidade..!!!
Bom.. vamos lá.. o DBMS_REDEFINITION só exige uma coisa..!! A tabela ORIGINAL precisa ter obrigatoriamente uma PK… então bora criar a PK..!!
Opa.. agora uma outra coisa.. para que possamos utilizar o DBMS_REDEFINITION.. o usuário precisa de alguns privilégios adicionais.. segue abaixo estes privilégios concedidos..!!!
Privilégio de executar a procedure DBMS_REDEFINITION..
Privilégios necessários..!
Agora.. vamos aos procedimentos para fazer a REDEFINIÇÃO..!!! São apenas 3 processos.. e no final.. eu DROPO a INTERIN TABLE que foi criada.. pois a tabela original agora já está com o SecureFile habilitado..!!
Ahh.. outra coisa.. antes de Dropar a INTERIN TABLE.. eu verifiquei qual foi o espaço ocupado nos datafiles.. !! Vejam a Mágica.. VOILÁÁÁÁÁÁÁÁÁÁÁÁÁ!!!
E agora como ficaram nossas Tablespaces após o DROP da tabela..!!!
Que maravilha heim..!! houve uma redução de 60% no nosso espaço usado.. e olha que é como falei antes.. a compressão funciona MUITO melhor em campos CLOB.. chega a reduzir em torno de 80% do espaço usado..!!!
Bom.. eu estava devendo este POST para o David Siqueira.. pois haviamos conversado sobre isto.. e ele me pediu para postar isto..!!
Fala Mano David.. ta ai..!! Espero que tenha gostado..!!
É como eu falei no Post Anterior, ir no Guob Tech Day, renovou minha vontade de estudar e aprender mais sobre SGDB Oracle..!!!! Tanto que neste POST vocês aprenderam a utilizar 2 funcionálidades do Oracle.. O Oracle Secure File e o DBMS_REDEFINITION.. !!!
Queria agradecer ao pessoal que sempre me ajuda quando preciso..!!! São eles.. Marcos Santos, David Siqueira, Rodrigo Almeida, Ricardo Portilho, Lilian Barroso e Luciano Melo..!!!
E a minha familia Amo Vocês..!!! Pai, Te Amo.. Mãe, saudade! Te Amo!!!
É isto ai galera.. Espero que tenham gostado.. ficarei muito feliz se comentarem e derem suas opiniões..!!!
Abraços a todos..!!!
Cara, foi 10. estava atrás disso há algum tempo.
Trabalhei com 7, 8, 8i e 9i. Não fiz atualização no 10g. Já vi que perdi muito.
Mas agora estou me recuperando aprendendo o 11g.
Tenho visto features que são super interessantes.
Parabéns e Sucesso !
Parabens pelo trabalho Regis.
Regis,
Muito bom o post cara! Não conhecia essa funcionalidade. Parabéns!
Regis, boa tarde!
Existe alguma forma de salvar um arquivo local(máquina de um usuário), num campo BLOB?
Desde já, grato pela atenção.
Regis.
Muito bom cara, parabéns… show de bola!!!
Parabéns pelo post, estou iniciando em Oracle e estou muito animado..valeu
Regis,
boa tarde!
O seu post foi muito bom mesmo, explicou tudo e ainda por cima aprendi outra coisa no Oracle 10g que foi o DBMS_REDEFINITION.
Surgiu uma duvida, em relacao a performance no servidor com esta nova funcionalidade do 11g de compactacao de clobs e lobs.
Por exemplo: Processador.
um grande abra’co e parabens pelo post acima.
att,
Rodrigo Siqueira Carvalho
PDCase Inform’atica Ltda – Belo Horizonte.