Gostaria de descartar todas as entidades de uma instância do Oracle. Desejo excluir todas as tabelas, usuários, índices e assim por diante, como se fosse uma instância recém-criada. O resultado deve parecer, ou pelo menos se aproximar do ponto de vista dos clientes, como se eu tivesse excluído completamente e reinstalado a instância com as mesmas configurações.
Fazer isso com uma limpeza/reinstalação completa é lento e não é facilmente automatizável. Estou procurando melhores opções, mas é uma solução possível, se não houver.
Descartar os esquemas não é suficiente, porque algumas entidades ainda permanecem no local (por exemplo, usuários).
Existe uma maneira fácil de largar tudo, para atingir o estado inicial limpo e vazio, mas mais rapidamente?
Há tantas coisas no banco de dados além dos dados do usuário que a verificação de todas elas levaria um tempo considerável. Além disso, existem algumas partes que não deveriam ser removidas, por exemplo, o histórico de recursos usados (para auditoria de licença).
Claro, você pode tentar verificar todas as configurações não padrão ou executar novamente os scripts de catálogo (mas qual é o objetivo disso? Criar um novo banco de dados faz exatamente isso). É mais fácil soltar e recriar em 15 a 30 minutos, dependendo dos componentes selecionados.
PS: não há reinstalação envolvida na eliminação e recriação de um banco de dados.
No Oracle, um esquema normalmente é vinculado a um usuário. Portanto, se você descartar um usuário e especificar o
CASCADE
parâmetro, todos os objetos relacionados a esse usuário serão descartados.Você pode consultar a tabela de usuários com a seguinte consulta:
Isso irá gerar uma lista de comandos para usuários que não são criados pelo sistema (Oracle) e que ao serem executados irão dropar todos os usuários e seus objetos relacionados. Exemplo:
Você fica com uma instância do Oracle bastante limpa.
Existem objetos que serão mantidos pela instância do Oracle e que podem levar mais tempo para serem removidos.
Referência: DROP USER (Oracle | Referência da linguagem SQL do banco de dados)
Para Oracle 12c+, recomendo que você descarte o PDB e o recrie.