Com o passar dos anos a Oracle foi adicionando várias features para facilitar a administração do banco de dados, uma delas é a FRA, ou Fast Recovery Area. Ela é usada basicamente para armazenar arquivos de backups e alguns outros arquivos arquivos do banco, como cópias do redo e control file.
A maior parte dos bancos de dados existentes no mercado possuem uma funcionalidade chamada Identity, basicamente um Auto incremento para campos numéricos.
Para implementarmos tal funcionalidade no Oracle 11g e anteriores era necessário usar uma sequence e chamar seu método “next_val” por meio de uma trigger, ou chamando diretamente no comando (eg. insert). Mas não havia nada automático.
Temos novidades no 12c ?
Se tentarmos criar um índice numa coluna já indexada no Oracle 11g vamos receber o seguinte erro:
ORA-01408: such column list already indexed
No Oracle 12c isso não acontece.
O 12c trouxe inúmeras features e uma delas é a possibilidade de criar mais de um índice numa mesma coluna.
Mas por que alguém faria isso ?
Disponibilidade e performance.
Como assim ?
Durante uma migração, alteração na aplicação ou criação de novas constraints, eventualmente podemos receber:
ORA-02298: cannot validate (SYS.FK_CHILD_PID) - parent keys not found
Isso acontece quando o registro na tabela filha tenta fazer referência a um registro não existente na tabela pai, ou seja, uma violação de integridade referencial.
De certa forma esse erro é bom, afinal, ele protege e evita dados inconsistentes.
Se o erro acima acontecer durante um insert, é fácil identificar o problema, afinal, temos todos os dados do insert e podemos facilmente (teóricamente) analisar a situação.
Mas supondo que você levou o erro acima ao criar ou ativar um constraint, como identificar quais registros da tabela estão nessa situação ? Podem ser milhares de registros…
Como temos dito em vários posts, o Oracle tem um poderoso otimizador de consultas, e dentre suas inúmeras funcionalidades, ele também é capaz de reescrever uma consulta para torná-la mais performática.
Ele tem várias técnicas de reescrita que eu pretendo descrever em outros posts.
Mas hoje eu gostaria de mostrar como verificar se um comando foi reescrito pelo Oracle, e como ficou o comando final.
No último post falei que era preciso aplicar um patch para resolver o erro “error in invoking target “agent nmhs” of makefile “ins_emagent.mk”“
Mas ao aplicá-lo, ou mesmo ao aplicar outro patch, talvez você receba vários warnings:
OPatch found the word "warning" in the stderr of the make command. Please look at this stderr. You can re-run this make command. Stderr output: ins_emagent.mk:113: warning: overriding recipe for target `nmosudo' ins_emagent.mk:52: warning: ignoring old recipe for target `nmosudo' /u01/app/oracle/product/11.2.0.4/db_1/sysman/lib/ins_emagent.mk:113: warning: overriding recipe for target `nmosudo' /u01/app/oracle/product/11.2.0.4/db_1/sysman/lib/ins_emagent.mk:52: warning: ignoring old recipe for target `nmosudo'
Podemos simplesmente ignorá-los ?
Ao instalar o Oracle 11.2.0.4 no Oracle Linux 7 você talvez receba a seguinte mensagem:
O que fazer ?
Eu particularmente prefiro instalar o Oracle usando o instalador em inglês, mas vez por outra você chama o runInstaller no Linux e:
Sim, em português.
Mas por que isso acontece ?
Toda vez que instalo o Oracle 11g no Oracle Linux (OL) 6 ou 7 eu recebo a mensagem que os seguintes pacotes estão faltando:
– elfultils-libelf-devel-0.97
– pdksh-5.2.14
Normalmente ignoro a mensagem, mas será que tem algum problema em ignorar esses warnings ? E por que isso acontece ?