CS_SESSION 程序包
CS_SESSION
软件包提供了一个用于切换现有会话的数据库服务和使用者组的接口。
注意:
Oracle Database 19c(从版本 19.28 开始)和 Oracle Database 23ai(从版本 23.9 开始)中提供了对 CS_SESSION 软件包的支持。与 Autonomous Database 建立连接后,会为该会话分配一个使用者组。例如,可以使用与 Autonomous Database 的 LOW 服务的连接来创建会话。您可能希望将使用者组从 LOW 切换到 HIGH。CS_SESSION
软件包提供了用于交换的 API。有关详细信息,请参阅自治数据库的预定义数据库服务名称。
使用者组确定并发性和并行度 (DOP)。例如,建立到 LOW 数据库服务的连接上的语句将串行运行。建立到 HIGH 数据库服务的连接的语句并行运行。如果工作负荷需要串行语句处理,并且需要切换到 HIGH 使用者组来执行一些语句,则可以使用 CS_SESSION
软件包进行切换。
SWITCH_SERVICE 过程
此过程将切换当前会话的数据库服务和使用者组。
语法
CS_SESSION.SWITCH_SERVICE(service_name IN varchar2);
参数
Parameter (参数) | 说明 |
---|---|
service_name |
指定要更新的使用者组。 根据工作量,有效值为: |
使用说明
调用时,该过程会将会话切换到指定服务和相关使用者组。如果指定的服务在该数据库中不存在,则会提供错误消息。例如,如果在数据仓库工作量上将 'TP' 指定为服务名,则错误会指明它不是有效的服务名。如果当前服务和指定服务相同,则不会报告任何错误。
该过程不会重置会话属性。在调用此过程之前,用户为其会话设置的任何内容都将按原样继续。例如,如果修改了会话参数,然后会话切换到其他服务,则该参数值将保持不变。
范例
BEGIN
CS_SESSION.SWITCH_SERVICE('HIGH');
END;
/
安全性和访问权限
使用 GRANT OPTION
为 ADMIN
用户授予对 CS_SESSION
的 EXECUTE
权限。该权限也授予 DWROLE
而不授予 GRANT OPTION
。
其他安全注意事项
如果向用户授予对此过程的 EXECUTE
特权,并且您不希望该用户切换到特定服务,则可以使用 AFTER SET CONTAINER
触发器阻止该操作。这是通过创建 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;
/
Error Messages
下表介绍了 CS_SESSION
的例外
错误 | 消息 | 原因 |
---|---|---|
20001 | 服务名无效。有效值为 HIGH、MEDIUM、LOW。 | 对于数据仓库工作量,指定了除 'HIGH'、'MEDIUM' 和 'LOW' 之外的值。 |
20001 | 服务名无效。有效值为 HIGH、MEDIUM、LOW、TP、TPURGENT。 | 对于事务处理工作量,指定了除“HIGH”、“MEDIUM”、“LOW”、“TP”和“TPURGENT”之外的值。 |
20002 | 服务切换失败。 | 无法切换到新服务。 |
For information about Oracle's commitment to accessibility, visit the Oracle Accessibility Program website at http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc.
获得 Oracle 支持
Oracle 客户访问和使用 Oracle 支持服务将遵循其适用服务的 Oracle 订单中规定的条款和条件。