Pacchetto CS_SESSION

Il pacchetto CS_SESSION fornisce un'interfaccia per cambiare il servizio di database e il gruppo di consumer della sessione esistente.

Nota

Il supporto per il pacchetto CS_SESSION è disponibile in Oracle Database 19c a partire dalla versione 19.28 e in Oracle Database 23ai a partire dalla versione 23.9.

Quando viene stabilita una connessione con un Autonomous Database, alla sessione viene assegnato un gruppo di consumer. Ad esempio, è possibile creare una sessione utilizzando una connessione al servizio LOW di un Autonomous Database. Potrebbe essere necessario cambiare il gruppo di consumer, ad esempio da LOW a HIGH. Il pacchetto CS_SESSION fornisce un'interfaccia API per la commutazione. Per ulteriori informazioni, vedere Nomi dei servizi di database predefiniti per i database autonomi.

I gruppi di consumer determinano la concorrenza e il grado di parallelismo (DOP). Ad esempio, le istruzioni su una connessione stabilita al servizio di database LOW vengono eseguite in modo seriale. Le istruzioni su una connessione stabilita al servizio di database HIGH vengono eseguite in parallelo. Se si dispone di un carico di lavoro che richiede l'elaborazione delle istruzioni seriali con il passaggio a un gruppo di consumer HIGH per alcune istruzioni, il pacchetto CS_SESSION consente di passare a un altro gruppo.

Procedura SWITCH_SERVICE

Questa procedura consente di cambiare il servizio di database e il gruppo di consumer della sessione corrente.

Sintassi

CS_SESSION.SWITCH_SERVICE(service_name IN varchar2);

Parametri

Parametro Descrizione
service_name

Specifica il gruppo di consumer da aggiornare.

A seconda del carico di lavoro, i valori validi sono: HIGH, MEDIUM, LOW, TP o TPURGENT.

Note sull'uso

Quando viene richiamata, la procedura passa la sessione al servizio specificato e al gruppo di consumer correlato. Se il servizio specificato non esiste in tale database, viene fornito un messaggio di errore. Ad esempio, se si specifica 'TP' come nome del servizio in un carico di lavoro del data warehouse, l'errore indica che non si tratta di un nome di servizio valido. Non viene segnalato alcun errore se il servizio corrente e il servizio specificato sono identici.

La procedura non reimposta gli attributi della sessione. Tutto ciò che l'utente ha impostato per la propria sessione prima di chiamare questa procedura continuerà così com'è. Ad esempio, se un parametro di sessione è stato modificato e successivamente la sessione è passata a un servizio diverso, il valore del parametro rimarrà invariato.

Esempio

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

Sicurezza e accesso

All'utente ADMIN viene concesso il privilegio EXECUTE su CS_SESSION con GRANT OPTION. Il privilegio viene concesso anche a DWROLE senza GRANT OPTION.

Considerazioni aggiuntive sulla sicurezza

Se a un utente vengono concessi i privilegi EXECUTE su questa procedura e non si desidera che passi a un servizio specifico, è possibile utilizzare un trigger AFTER SET CONTAINER per bloccare l'operazione. Ciò viene ottenuto creando un 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;
/

Messaggi di errore

Nella tabella seguente vengono descritte le eccezioni per CS_SESSION.

Errore Messaggio Causa
20.001 Nome di servizio non valido. I valori validi sono HIGH, MEDIUM, LOW. Per un carico di lavoro del data warehouse, è stato specificato un valore diverso da 'HIGH', 'MEDIUM', 'LOW'.
20.001 Nome di servizio non valido. I valori validi sono HIGH, MEDIUM, LOW, TP, TPURGENT. Per un carico di lavoro di elaborazione delle transazioni, è stato specificato un valore diverso da 'HIGH', 'MEDIUM', 'LOW', 'TP', 'TPURGENT'.
20.002 Switch del servizio non riuscito. Passaggio al nuovo servizio non riuscito.