Pacote CS_SESSION

O pacote CS_SESSION fornece uma interface para alternar o serviço de banco de dados e o grupo de consumidores da sessão existente.

Quando uma conexão é estabelecida com um Autonomous Database, essa sessão recebe um grupo de consumidores. Por exemplo, uma sessão pode ser criada usando uma conexão com o serviço LOW de um Autonomous Database. Talvez você queira alternar o grupo de consumidores, por exemplo, de LOW para HIGH. O pacote CS_SESSION fornece uma API para alternância. Consulte Nomes de Serviço de Banco de Dados para o Autonomous Database para obter mais informações.

Os grupos de consumidores determinam a simultaneidade e o grau de paralelismo (DOP). Por exemplo, as instruções em uma conexão estabelecida com o serviço de banco de dados LOW são executadas em série. As instruções em uma conexão estabelecida com o serviço de banco de dados ALTO são executadas em paralelo. Se você tiver uma carga de trabalho que exija processamento de demonstrativo serial com a alternância para um grupo de consumidores ALTO para algumas instruções, o pacote CS_SESSION permitirá que você alterne.

SWITCH_SERVICE Procedimento

Este procedimento alterna o serviço de banco de dados e o grupo de consumidores da sessão atual.

Sintaxe

CS_SESSION.SWITCH_SERVICE(service_name IN varchar2);

Parâmetros

Parâmetro Descrição
service_name

Especifica o grupo de consumidores a ser atualizado.

Dependendo da carga de trabalho, os valores válidos são: HIGH, MEDIUM, LOW, TP ou TPURGENT.

Observações de Uso

Quando chamado, o procedimento alterna a sessão para o serviço especificado e o grupo de consumidores relacionado. Se o serviço especificado não existir nesse banco de dados, uma mensagem de erro será fornecida. Por exemplo, se você especificar 'TP' como o nome do serviço em uma carga de trabalho do data warehouse, o erro indicará que ele não é um nome de serviço válido. Nenhum erro será reportado se o serviço atual e o serviço especificado forem idênticos.

O procedimento não redefine os atributos da sessão. Tudo o que o usuário definir para sua sessão antes de chamar este procedimento continuará como está. Por exemplo, se um parâmetro de sessão foi modificado e, posteriormente, a sessão foi alternada para um serviço diferente, o valor do parâmetro permanecerá o mesmo.

Exemplo

BEGIN
  CS_SESSION.SWITCH_SERVICE('HIGH');
END;
/

Segurança e Acesso

O usuário ADMIN recebe o privilégio EXECUTE no CS_SESSION com GRANT OPTION. O privilégio também é concedido ao DWROLE sem o GRANT OPTION.

Considerações Adicionais de Segurança

Se um usuário receber privilégios EXECUTE neste procedimento e você não quiser que ele alterne para um serviço específico, poderá usar um trigger AFTER SET CONTAINER para bloquear a operação. Isso é feito criando um trigger AFTER SET CONTAINER.

CREATE OR REPLACE TRIGGER SESS_SWITCH
AFTER SET CONTAINER ON DATABASE
BEGIN
IF SYS_CONTEXT('USERENV','SESSION_USER') = 'USER' and
   SYS_CONTEXT('USERENV','SERVICE_NAME') = 'serviceexample_low.adwc.oraclecloud.com'
THEN
    NULL;
ELSE
    RAISE_APPLICATION_ERROR(-20001, 'Denied!  You are not allowed to switch service in the database');
END IF;
END;
/

Mensagens de Erro

A tabela a seguir descreve exceções para CS_SESSION

Erro Mensagem Causa
20,001 Nome de serviço inválido. Os valores válidos são HIGH, MEDIUM, LOW. Para uma carga de trabalho do data warehouse, foi especificado um valor diferente de 'HIGH', 'MEDIUM', 'LOW'.
20,001 Nome de serviço inválido. Os valores válidos são HIGH, MEDIUM, LOW, TP, TPURGENT. Para uma carga de trabalho de processamento de transações, foi especificado um valor diferente de 'HIGH', 'MEDIUM', 'LOW', 'TP', 'TPURGENT'.
20,002 Falha na alternância de serviço. Falha ao alternar para o novo serviço.