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, um grupo de consumidores é designado a essa sessão. 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 do 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 HIGH são executadas em paralelo. Se você tiver uma carga de trabalho que exija processamento de instruções em série com alternância para um grupo de consumidores HIGH para algumas instruções, o pacote CS_SESSION permite a alternação.

Procedimento SWITCH_SERVICE

Esse 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 nome do serviço em uma carga de trabalho data warehouse, o erro indicará que 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 atributos de sessão. Tudo o que o usuário definiu para sua sessão antes de chamar esse procedimento continuará como está. Por exemplo, se um parâmetro de sessão tiver sido modificado e, posteriormente, a sessão tiver sido alternada para outro serviço, 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 em CS_SESSION com GRANT OPTION. O privilégio também é concedido a DWROLE sem o GRANT OPTION.

Considerações Adicionais de Segurança

Se um usuário receber privilégios EXECUTE nesse procedimento e você não quiser que esse usuário seja alternado para um serviço específico, poderá usar um trigger AFTER SET CONTAINER para bloquear a operação. Isso é obtido 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 Motivo
20,001 Nome de serviço inválido. Os valores válidos são HIG, MEIO e BAIXO. Para uma carga de trabalho data warehouse, um valor diferente de "HIGH", "MEDIUM" e "LOW" foi especificado.
20,001 Nome de serviço inválido. Os valores válidos são ELEVADO, MÉDIO, BAIXO, ATRAVÉS. Para uma carga de trabalho de processamento de transações, um valor diferente de "HIGH", "MEDIUM", "LOW", "TP" e "TPURGENT".
20,002 Falha ao alternar serviço. Falha ao alternar para o novo serviço.