Pergunta

Suponha que uma instância Oracle tem de ser recuperado após um desastre. Fazer seqüências obter redefinido para o estado inicial, ou o último estado salvo, ou são valores em cache preservada?

Muito obrigado. : -)

Foi útil?

Solução

Os valores sequnce são armazenados no SYSTEM.SEQ $ (eu acho) mesa, e um cache é mantido em memória dos próximos valores a serem utilizados, com o tamanho do cache do que ser dependente do valor CACHE para a seqüência .

Quando o cache está esgotado a SEQ $ tabela é atualizada para um novo valor (de forma não-consistente -. Ou seja, sem controle transacton da sessão do usuário da aplicação) e os valores próximo digamos 100 (se CACHE = 100) são ler a partir da memória.

Vamos supor que você está usando uma seqüência com um tamanho de cache de 20. Quando você seleciona um determinado valor da seqüência, digamos 1400, a tabela de SEQ $ é atualizado para um valor de 1420. Mesmo se você reverter a transação a SEQ $ ainda tem esse valor até que os próximos 20 valores da sequência têm sido utilizados, no momento em que SEQ $ é atualizado para 1440. Se você então apenas utilizado o valor 1423 e um acidente instância ocorre, em seguida, quando o sistema reinicia o próximo valor a ser lido a partir do sequnce será 1440.

Então, sim a integridade da sequência será preservado e números não será "reeditado". Note-se que o mesmo se aplica a um desligamento normal - quando você reiniciar você vai ter um novo valor de 1440 no exemplo acima. Seqüências não são garantidos para ser lacuna livre, na prática, por essa razão (também porque o uso de um valor e, em seguida, rolando para trás não restaurar esse valor ao cache).

Outras dicas

Não que eu tenha alguma experiência com isso, mas eu muito assumir que uma recuperação para um estado número de alteração do sistema consistente também retornaria a seqüência para o último estado salvo. Qualquer outra coisa seria bastante inútil em termos de recuperação.

Quanto aos valores em cache, esses são (pode ser) perdeu mesmo quando os baixos exemplo fecha de uma forma ordenada (*): instâncias de cache uma série de valores de seqüência na memória (SGA) em vez de ir para o banco de dados de cada vez. valores não utilizados seqüência que a instância reservou pode "desaparecer", deixando-o com lacunas na sequência.

(*) documentação 8i menciona que isso pode acontecer com instâncias paralelas (RAC), caso em que a sequência pode até não ser estritamente crescente (mas ainda único), docs 10g dizer que isso acontece no caso de uma falha da instância.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top