Chinaunix首页 | 论坛 | 博客
  • 博客访问: 479018
  • 博文数量: 83
  • 博客积分: 2570
  • 博客等级: 少校
  • 技术积分: 901
  • 用 户 组: 普通用户
  • 注册时间: 2007-06-19 12:05
文章分类

全部博文(83)

文章存档

2012年(1)

2011年(1)

2010年(8)

2009年(14)

2008年(45)

2007年(14)

我的朋友

分类: Oracle

2010-04-26 17:02:23

一、资源管理概述:
资源管理器有三个部件组成:资源用户组(Resource consumer group )、资源规划(Resource plan )、资源分配方法(Resource allocation method)及资源计划目录(Resource plan directives) 。它们的功能如下:
部件 说明
资源用户组: 根据数据库资源处理需求,将用户会话分成组
资源规划: 指定哪些资源分配给资源用户的命令
资源分配方法: 数据库资源管理器分配特殊资源时采用的方法,由资源用户组和资源规划来使用。
资源规划命令: 管理员使用这些命令将资源用户组与特殊规划连接起来,并在资源用户组之间分配资源。
数据库资源管理器可以完成:
.确保某些用户处理少量的资源,不考虑对系统的加载和用户的数量。
.按比例将CPU时间分配给不同的用户和程序,分配有效的处理资源。
.限制一组用户可以使用的并行度。
.对实例进行配置,使其能使用特殊的资源分配方法。例如,DBA不用关闭数据库实例就可以动态地改变这些配置方法。

二、配置资源管理器:
用户必须有ADMINISTER_RESOURCE_MANAGER权限。一般的ADMIN都有这样的权限。
ADMINISTER_RESOURCE_MANAGER是一个程序包,它包括有下面的过程:

过程 描述
CREATE_PLAN 命名资源规划并指定分配的方法
UPDATE_PLAN 更新资源规划的注释
DELETE_PLAN 删除资源规划及命令
DELETE_PLAN_CASCADE 删除资源规划及所有分支
CREATE_CONSUMER_GROUP 命名资源用户组并指定其分配方法
UPDATE_CONSUMER_GROUP 更新资源用户组的注释
DELETE_CONSUMER_GROUP 删除资源用户组
CREATE_PLAN_DIRECTIVE 指定一个规划中或多级规划模式命令
UPDATE_PLAN_DIRECTIVE 更新规划命令
DELETE_PLAN_DIRECTIVE 删除规划命令
CREATE_PENDING_AREA 在建立规划中挂起
VALIDATE_PENDING_AREA 确定挂起的规划
CLEAR_PENDING_AREA 清除挂起的规划
SUBMIT_PENDING_AREA 提交所有的规划模式
SET_INITIAL_CONSUMER_GROUP 为用户设置初始化用户组
SWITCH_CONSUMER_GROUP_FOR_SESS 切换指定会话的用户组
SWITCH_CONSUMER_GROUP_FOR_USES 切换属于指定用户的所有会话的用户组

三、建立和管理资源规划
一旦将系统的适当权限分配给了用户,则接下来就是用数据库资源管理器来创建数据库的对象(元素)。即创建:

资源用户组
资源规划命令
这些规划建立完后,规划信息被存放在数据字典的表中。

为创建规划模式使用挂起区域
为创建和修改规划模式,用户首先要创建挂起区域。这是一个临时的区域,在该区域里允许用户进行变化。
创建一个挂起区域:
使用下面语句创建一个挂起的区域:
EXEC DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA;
用户可以激活挂起的区域,并将所有现存的、活动规划模式加载到挂起的区域。这样可以实现更新或增加新的规划。活动规划模式是那些已由数据库管理器存储在数据字典中准备执行的模式。也就是说,用户得先激活挂起的区域才能更新规划或增加规划。规划的活动情况可以从数据库视图中查到。

验证变化(validating changes):
当用户挂起区域的所有改变时,可以用下面过程来进行验证:
EXEC DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA;
例子:
SQL>; EXEC DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA;
PL/SQL procedure successfully completed.
SQL>; exec dbms_resource_manager.validate_pending_area;
PL/SQL procedure successfully completed.

提交变化:
在验证变化没有问题之后,可以用提交过程来将变化进行提交:
EXEC DBMS_RESOURCE_MANAGER_SUNMIT_PENDING_AREA;
提示:提交也需要验证,所以一般可以与其他的操作一起验证。

清除挂起区域:
一般用户在重新进行改变前都需要清除挂起区域。它有下面过程来实现:
EXEC DBAMS_RESOURCE_MANAGER.CLEAR_PENDING_AREA;

1.1.创建资源使用者组:
BEGIN
//清除挂起区域
dbms_resource_manager.clear_pending_area();
//创建一挂起区域
dbms_resource_manager.create_pending_area();
//创建用户组
dbms_resource_manager.create_consumer_group(consumer_group => 'sdl', comment => '软件试验室', cpu_mth => 'ROUND-ROBIN');
//提交变化
dbms_resource_manager.submit_pending_area();

1.2.添加使用者到资源组:
BEGIN
dbms_resource_manager_privs.grant_switch_consumer_group('JOSEN', 'sdl', false);
END;
END;

1.3.从资源组中删除用户:
BEGIN
dbms_resource_manager_privs.revoke_switch_consumer_group('JOSEN', 'GROUPSDL');
END;

1.4.更新一个用户组:
使用UPDATE_CONSUMER_GROUP 过程实现更新一个资源用户组的信息。如:
EXEC DBMS_RESOURCE_MANAGER.UPDATE_CONSUMER_GROUP(
Comment=>;’retail and wholesale sales !!’);

1.5.删除一个用户组:
使用DELETE_CONSUMER_GROUP 过程实现删除一个资源用户组的信息。


1.6改变资源用户组
有两种改变的操作:
切换会话:
可以用SWITCH_CONSUMER_GROUP_FOR_SESS过程来将某个会话立即切换到指定的资源用户组上,以实现提高或降低优先权。
例:将sid=7,serial#=1234 的会话切换到high_prioity用户组上:
EXEC DBMS_RESOURCE_MANAGER.SWITCH_CONSUMER_GROUP_FOR_SESS(‘7’,’1234’,
‘High_priority’ ) ;
为用户切换会话:
同样可以用SWITCH_CONSUMER_GROUP_FOR_SESS过程来将某个用户的会话切换到指定的资源用户组上。如:
例:
EXEC DBMS_RESOURCE_MANAGER.SWITCH_CONSUMER_GROUP_FOR_SESS(
‘scott’,’low_group’);

1.7授予用户“切换权限”:
BEGIN
//撤消用户
dbms_resource_manager_privs.revoke_switch_consumer_group('JOSEN', 'SDL');
//添加用户并授于切换特权选项
dbms_resource_manager_privs.grant_switch_consumer_group('JOSEN', 'SDL', true);
END;

1.8取消切换特权

BEGIN
dbms_resource_manager_privs.revoke_switch_consumer_group('JOSEN', 'GROUPSDL');
dbms_resource_manager_privs.grant_switch_consumer_group('JOSEN', 'GROUPSDL', false);
END;

2.指定资源规划指令
资源规划指令可为用户组指定资源规划和资源参数。在指定资源规划时可以用下面参数来为用户指定参数:

2.1 创建资源规划
BEGIN
dbms_resource_manager.clear_pending_area();
dbms_resource_manager.create_pending_area();
dbms_resource_manager.create_plan( 'SDL', 'sdltest');
dbms_resource_manager.create_plan_directive( //指定资源规划
plan => 'SDL',//资源规划名称
group_or_subplan => 'MYGROUP1',//资源消费组或子规划名称
comment => '',//任何注释
cpu_p1 => NULL, cpu_p2 => 20, cpu_p3 => NULL, cpu_p4 => NULL,
cpu_p5 => NULL, cpu_p6 => NULL, cpu_p7 => NULL, cpu_p8 => NULL, //指出px级CPU的百分比
parallel_degree_limit_p1 => NULL,//设置对任何操作并行程度的限制
active_sess_pool_p1 => NULL, //为一个消费用户组指定最大的并发活动会话数.default null
queueing_p1 => NULL,//指定的队列中作业作业的超时时间(秒) default 无限
switch_group => '', //指定如果转换标准满足时,这会话要被转换到的消费的消费用户组 default null
switch_time => NULL, //指定一会话在转换到的消费用户组前它执行的时间(秒), default 无限
switch_estimate => false, //如果为TRUE,告诉ORACLE使用在自动转换到的消费用户组前它估计的执行时间.default null
max_est_exec_time => NULL, //指定允许一会话最大的执行时间(秒)default 无限
undo_pool => NULL, //由一个消费组产生的撤消的全部数量的最大值,default 无限
max_idle_time => NULL,
max_idle_blocker_time => NULL,
switch_time_in_call => NULL
);
dbms_resource_manager.create_plan_directive(
plan => 'SDL',
group_or_subplan => 'MYGROUP2',
comment => '',
cpu_p1 => NULL, cpu_p2 => 80, cpu_p3 => NULL, cpu_p4 => NULL,
cpu_p5 => NULL, cpu_p6 => NULL, cpu_p7 => NULL, cpu_p8 => NULL,
parallel_degree_limit_p1 => NULL,
active_sess_pool_p1 => NULL,
queueing_p1 => NULL,
switch_group => '',
switch_time => NULL,
switch_estimate => false,
max_est_exec_time => NULL,
undo_pool => NULL,
max_idle_time => NULL,
max_idle_blocker_time => NULL,
switch_time_in_call => NULL
);
dbms_resource_manager.create_plan_directive(
plan => 'SDL',
group_or_subplan => 'OTHER_GROUPS',
comment => '',
cpu_p1 => NULL, cpu_p2 => NULL, cpu_p3 => 100, cpu_p4 => NULL,
cpu_p5 => NULL, cpu_p6 => NULL, cpu_p7 => NULL, cpu_p8 => NULL,
parallel_degree_limit_p1 => NULL,
active_sess_pool_p1 => NULL,
queueing_p1 => NULL,
switch_group => '',
switch_time => NULL,
switch_estimate => false,
max_est_exec_time => NULL,
undo_pool => NULL,
max_idle_time => NULL,
max_idle_blocker_time => NULL,
switch_time_in_call => NULL
);
dbms_resource_manager.create_plan_directive(
plan => 'SDL',
group_or_subplan => 'SYS_GROUP',
comment => '',
cpu_p1 => 100, cpu_p2 => NULL, cpu_p3 => NULL, cpu_p4 => NULL,
cpu_p5 => NULL, cpu_p6 => NULL, cpu_p7 => NULL, cpu_p8 => NULL,
parallel_degree_limit_p1 => NULL,
active_sess_pool_p1 => NULL,
queueing_p1 => NULL,
switch_group => '',
switch_time => NULL,
switch_estimate => false,
max_est_exec_time => NULL,
undo_pool => NULL,
max_idle_time => NULL,
max_idle_blocker_time => NULL,
switch_time_in_call => NULL
);
dbms_resource_manager.submit_pending_area();
END;

2.2更新资源规划组指令:
可以用DBMS_RESOURCE_MANAGER.UPDATE_PLAN_DIRECTIVE来更新资源规划的信息。如:
EXEC DBMS_RESOURCE_MANAGER.UPDATE_PLAN_DIRECTIVE(
PLAN=>;’great bread’,
GROUP_OR_SUBPLAN=>;’develop’, NEW_CPU_P1=15 );

2.3删除资源规划组指令:

可以用DBMS_RESOURCE_MANAGER.DELETE_PLAN_DIRECTIVE来删除资源规划的信息。

2.4激活规划:
BEGIN
dbms_resource_manager.switch_plan( plan_name => 'SDL_PLAN', sid => 'sdl' );
END;

2.5停止规划:
BEGIN
dbms_resource_manager.switch_plan( plan_name => '', sid => 'sdl' );
END;



3与数据库资源管理器有关的数据字典有:
视图 描述
DBA_RSRC_CONSUMER_GROUP_PRIVS 所有资源用户组和用户及授权给它们的角色
DBA_RSRC_CONSUMER_GROUPS 数据库中所有资源用户组
DBA_RSRC_MANAGER_SYSTEM_PRIVS 所有授予数据库资源权限的用户和角色
DBA_RSRC_PLAN_DIRECTIVES 数据库中所有资源规划指令
DBA_RSRC_PLANS 数据库中所有资源规划信息
DBA_USERS 数据库中所有用户信息
USER_RSRC_CONSUMER_GROUP_PRIVS 授权给用户的资源用户组
USER_RSRC_MANAGER_SYSTEM_PRIVS 授予数据库资源权限的用户和角色
USER_USERS 当前用户的有关信息
V$PARALLEL_DEGREE_LIMIT_MTH 有效的并行度限制
V$RSRC_CONSUMER_GROUP 调整活动资源用户组的有关信息
V$RSRC_CONSUMER_GROUP_CPU_MTH 所有有效的CPU资源的分配方法
V$RSRC_PLAN 当前活动的资源规划的名称
V$RSRC_PLAN_CPU_MTH 资源规划的所有有效CPU资源的分配方法
V$SESSION 当前每个会话的信息
阅读(1233) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~