Olá pessoal,

Espero que estejam bem.

Estava trabalhando para um cliente onde eles possuem um ambiente DR rodando com o ActiveDataGuard, ou seja, um banco de dados standby físico aberto em modo somente leitura (read only mode) enquanto as transações geradas em Produção são aplicadas no DR.

Em alguns momentos eles precisam realizar umas extrações de dados bastante consideráveis, e, acabam usando o DR para evitar impactar a performance do ambiente de Produção. Portanto, toda a CPU e leituras de disco é feita no ambiente de DR.

OK, esse ambiente é um Oracle Database 19.19, rodando em RHEL 7, 64-bit.

Algumas especificações:

  • SGA de 80GB.
  • 24 CPU’s (Intel(R) Xeon(R) CPU E5-2690 v2 @ 3.00GHz).
  • O Storage é um NetApp, o banco de dados está usando dNFS.

O banco de dados serve para uma aplicação SAP CRM.

A query é bastante simples, a tabela possui 2 bilhões de registros, e, o output esperado é em torno de 913 mil registros:

select /*+ parallel(24) */ guid,tr_obj_id,zlic_plate_ctry,zlic_plate_stat, zlic_platetype,zvehicle_class
from sapsr3.crmd_tc_tech_res
where tr_type=’ZV’
group by guid,tr_obj_id,zlic_plate_ctry,zlic_plate_stat,zlic_platetype,zvehicle_class
having count(*)> 1;

Eles estão rodando essa query através do SQL*Plus e gerando o conteúdo em um spool em um arquivo CSV.

Quando eles rodaram a query, a mesma terminou com os seguintes erros:

ORA-12801: error signaled in parallel query server POOD
ORA-03254: unable to execute the sql in read only database

Erro interessante, né?

Geralmente quando um parallel query server morre, nós temos mensagens adicionais às quais podemos ter alguma pista sobre o erro. Nesse caso, temos somente os erros descritos acima.

Alguns fatos:

  • Não há lag entre o banco de dados primário e o standby.
  • Esse não é um problema frequente, acontece apenas com algumas queries que levam mais tempo para serem concluídas.
  • Como dito, o banco de dados está rodando no RU 19.19. Nós sabemos que não estamos rodando no RU mais recente, mas, não podemos dizer que esse RU que estamos rodando o banco de dados é “velho”.

OK, vamos verificar então no Metalink (My Oracle Support)…

Encontramos essa nota:

Frequent ORA-12801 Accompanied By ORA-03254 In Active Data Guard Standby Database (Doc ID 2891154.1)

A causa é relacionada a “influx SCN”.

Há alguns bus relacionados a esse erro quando estamos usando MIRA (Multiple Instance Redo Apply) em configurações RAC onde há mais de uma instância aplicando as transações ao mesmo tempo no banco de dados Standby.

Mas, esse nao é o caso aqui, esse é um banco de dados single instance, portanto, está usando o conceito de SIRA (Single Instance Redo Apply).

No nosso caso, o workaround mencionado na nota funcionou sem problemas. O workaround é:

alter system set “_readable_standby_sync_timeout”=100 scope=spfile;

Depois de alterar esse parâmetro, você precisa reiniciar a instância de banco de dados.

Como eu disse, depois de ter alterado esse parâmetro e reiniciado a instância de banco de dados, a query funcionou sem problemas!

Espero que seja útil!

Um abraço,

Vinicius