Pacchetto CS_SESSION

Il package CS_SESSION fornisce un'interfaccia per lo switch del servizio di database e del gruppo di consumer della sessione esistente.

Quando viene stabilita una connessione con un Autonomous Database, a tale sessione viene assegnato un gruppo di consumer. Ad esempio, è possibile creare una sessione utilizzando una connessione al servizio LOW di un Autonomous Database. È possibile cambiare il gruppo di consumer, ad esempio da LOW a HIGH. Il pacchetto CS_SESSION fornisce un'interfaccia API per il passaggio. Per ulteriori informazioni, vedere Nomi dei servizi di database per Autonomous Database.

I gruppi di consumatori 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 serie. 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.

SWITCH_SERVICE Procedura

Questa procedura cambia 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 per 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 visualizzato 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 è un nome di servizio valido. Se il servizio corrente e quello specificato sono identici, non viene segnalato alcun errore.

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.

Ulteriori considerazioni sulla sicurezza

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