11.4.3 如何利用PROFILE对用户使用资源进行控制

对用户使用资源的限制主要包括对连接时间、CPU时间、数据块数量所进行的限制。可以从两个层次对用户使用系统资源进行限制,一个是会话级,另一个是调用级。其中会话级限制指的是,对用户在整个会话范围内所使用资源总和进行的限制。而调用级限制指的是对用户执行的每条命令所使用资源进行的限制。

在默认情况下,即使创建了PROFILE,而且也为用户指定了PROFILE,用户使用CPU的时间、可以访问的数据块还是不受限制的。为了使PROFILE对用户使用系统资源所做的限制起作用,需要在数据库中将初始化参数RESOURCE_LIMIT的值设置为TRUE。


SQL>ALTER SYSTEM set resource_limit=TRUE;


下面列出了可以对用户的一个会话施加的限制:

·SESSIONS_PER_USER:一个用户所允许的并发会话的数目。

·CPU_PER_SESSION:用户在一个会话内所使用的CPU时间的总和,时间单位为0.01秒。·LOGICAL_READS_PER_SESSION:用户在一个会话内所能访问的数据块的数量(这个数量包括物理读和逻辑读的数量)。

·CONNECT_TIME:一个用户会话所能持续的时间,以分钟为单位。超过这个时间,会话将自动断开。

·IDLE_TIME:一个用户会话所允许的连续的空闲时间,以分钟为单位。超过这个时间,会话将自动断开。

·PRIVATE_SGA:如果数据库服务器的连接模式为共享模式,这个参数用来限制为一个用户会话所分配的SGA空间。

下面列出了可以对用户执行的每条命令施加的限制:

·CPU_PER_CALL:用户执行的每条命令所使用的CPU时间,时间单位为0.01秒。

·LOGICAL_READS_PER_CALL:用户执行的每条命令所能访问的数据块的数量。

如果能够对用户消耗CPU时间、访问数据块的数量等这些资源进行限制,那么就可以有效地防止诸如死循环的执行、访问一个大表中的所有数据这类情况的发生。

例如,下面创建的PROFILE用来对一个在会话范围内所使用的CPU时间、能够访问的数据块以及会话的持续时间进行限制:


SQL>CREATE PROFILE p3 LIMIT

SESSIONS_PER_USER 100

LOGICAL_READS_PER_SESSION 500

CONNECT_TIME 5;

SQL>CREATE PROFILE p4 LIMIT

CPU_PER_CALL 10

LOGICAL_READS_PER_CALL 50;