Encontrei alerta sobre bloco corrompido no log de alerta. O bloco corrompido pertencia à tabela chamada DOCS. Como não tenho nenhum backup desse banco de dados, decidi recriar a tabela DOCS para resolver a corrupção. E aqui está um problema.
Gerou todos os scripts:
1. DDL for table.
2. DDL for constraints,triggers,indexes on the table.
3. DDL for the constraints that references this table.
4. Saved grants on this table.
Agora eu quero descartar a tabela, mas deixar suas dependências e, em seguida, recriar a tabela com suas restrições, gatilhos, índices.
Como eu posso fazer isso?
------------------------Editar
Parece ser muito simples.
- Salvar dados desta tabela
criar tabela new_table como select * from my_table;
- Salvar DDL para tabela e seus comentários
- DDL para índices nesta tabela
- DDL para restrições nesta tabela
- DDL para chaves estrangeiras que fazem referência a esta tabela
- Salve subsídios nesta tabela
- Eliminar eliminação da tabela
- Recrie tabela, comentários, restrições, índices, chaves estrangeiras que fazem referência a esta tabela
- Dar subsídios
inserir dados
insira em my_table como select * from new_table
Esta solução funciona para recriar a tabela (é uma maneira correta de recriar uma tabela). Mas a corrupção não resolveu, durante a inserção na tabela no Alert.log gerou o mesmo erro sobre a corrupção do bloco.
Nos comentários @Mindaugas Riauba escreveu uma solução e funcionou. Eu só quero saber por que minha solução sobre mesa de recriação não funcionou e a solução de @Mindaugas Riauba funcionou?
Obrigado @Mindaugas Riauba novamente!
Aparentemente você já derrubou o objeto. Agora, para acalmá-lo - os blocos corrompidos agora provavelmente estão no espaço livre e não causam danos. Eles apenas o incomodam durante os backups. Para verificar isso:
Se realmente aparecer aqui, você tem duas opções. Você pode simplesmente ignorá-lo. Assim que o bloco for atribuído a algum objeto, ele será reformatado e a corrupção desaparecerá. Se você quiser consertar blocos corrompidos, terá que criar o objeto que ocuparia seus blocos corrompidos.
Digamos que seu bloco corrompido exista em tablespace
USERS
e datafile/ora/users01.dbf
. Primeiro, você deve tornar os arquivos de dados do espaço de tabela não autoextensíveis. Isso não é para aumentar o tamanho do arquivo de dados. E então você criará a tabela de preenchimento.Então você tem que estender o segmento da tabela para que incorpore blocos corrompidos:
Desta forma você pode adicionar várias extensões ajustando seus tamanhos. Depois de verificar que os blocos corrompidos agora pertencem ao espaço livre, você pode preencher a tabela:
Primeiro inserir/selecionar vai de dba_objects então é mais rápido inserir/selecionar da própria tabela de preenchimento.
Agora você só precisa verificar o arquivo de dados usando o RMAN:
E solte a tabela de preenchimento:
Fácil. :)