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;