首页 > 代码库 > SERVICE和DRM实战

SERVICE和DRM实战

第一部分:service实战

--oracle 11gR2中创建service的方法:db console和srvctl两种方法。

--db console创建service方法-略

--srvctl创建service方法

[oracle@node1 admin]$ srvctl add service -d dbking -s dbkt02 -r dbking1,dbking2
[oracle@node1 admin]$ srvctl start service -d dbking -s dbkt02

--查看数据库的所有service信息:

[oracle@node1 admin]$ srvctl config service -d dbking
Service name: dbkt01
Service is enabled
Server pool: dbking_dbkt01
Cardinality: 2
Disconnect: false
Service role: PRIMARY
Management policy: AUTOMATIC
DTP transaction: false
AQ HA notifications: false
Failover type: NONE
Failover method: NONE
TAF failover retries: 0
TAF failover delay: 0
Connection Load Balancing Goal: LONG
Runtime Load Balancing Goal: NONE
TAF policy specification: NONE
Edition:
Preferred instances: dbking1,dbking2
Available instances:
Service name: dbkt02
Service is enabled
Server pool: dbking_dbkt02
Cardinality: 2
Disconnect: false
Service role: PRIMARY
Management policy: AUTOMATIC
DTP transaction: false
AQ HA notifications: false
Failover type: NONE
Failover method: NONE
TAF failover retries: 0
TAF failover delay: 0
Connection Load Balancing Goal: LONG
Runtime Load Balancing Goal: NONE
TAF policy specification: NONE
Edition:
Preferred instances: dbking1,dbking2
Available instances:
[oracle@node1 admin]$

[oracle@node1 admin]$ srvctl config service -d dbking -s dbt01

--启动start、关闭stop、修改modify service

启动服务:[oracle@node1 admin]$ srvctl start service -d dbking -s dbkt02

关闭服务:[oracle@node1 admin]$ srvctl stop service -d dbking -s dbkt02
      [oracle@node1 admin]$ srvctl stop service -d dbking -s dbkt02 -n node1
      [oracle@node1 admin]$ srvctl stop service -d dbking -s dbkt02 -i dbking2

修改服务属性:[oracle@node1 admin]$ srvctl modify service -d dbking -s dbkt02 -i dbking1 -n

relocate操作:dba手动将service从可用实例调回首选实例。
srvctl relocate service -d dbname -s srvname [-c fromnode -n tonode | -i frominstance -t toinstance] [-f]

##########################################################################################################################################

第二部分:DRM实战

--准备工作

[oracle@node1 ~]$ srvctl add service -d dbking -s dbkapp -r dbking1,dbking2
[oracle@node1 ~]$ srvctl add service -d dbking -s dbkboss -r dbking1,dbking2
[oracle@node1 ~]$ srvctl start service -d dbking -s dbkboss                  
[oracle@node1 ~]$ srvctl start service -d dbking -s dbkapp

SQL> show parameter resource_limit

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
resource_limit                       boolean     FALSE

SQL> show parameter resource_manager_plan

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
resource_manager_plan                string

--命令行方式实现DRM,图形界面方式-略

1)创建一个工作区

SQL> exec dbms_resource_manager.create_pending_area();

PL/SQL 过程已成功完成。

2)创建2个使用者组

SQL> exec dbms_resource_manager.create_consumer_group(consumer_group=>‘app_group‘,comment=>‘普通使用者‘);

PL/SQL 过程已成功完成。

SQL> exec dbms_resource_manager.create_consumer_group(consumer_group=>‘boss_group‘,comment=>‘boss团‘);

PL/SQL 过程已成功完成。

3)创建消费计划

SQL> exec dbms_resource_manager.create_plan(plan=>‘srv_drm_test01‘,comment=>‘访问资源计划‘);

PL/SQL 过程已成功完成。

4)创建计划细节

SQL> exec dbms_resource_manager.create_plan_directive(plan=>‘srv_drm_test01‘,group_or_subplan=>‘boss_group‘,mgmt_p1=>50,comment=>‘1‘);

PL/SQL 过程已成功完成。

SQL> exec dbms_resource_manager.create_plan_directive(plan=>‘srv_drm_test01‘,group_or_subplan=>‘app_group‘,mgmt_p1=>20,comment=>‘2‘);

PL/SQL 过程已成功完成。

SQL> exec dbms_resource_manager.create_plan_directive(plan=>‘srv_drm_test01‘,group_or_subplan=>‘other_groups‘,mgmt_p1=>5,comment=>‘3‘);

PL/SQL 过程已成功完成。

5)创建服务和使用者之间的映射关系

SQL> exec dbms_resource_manager.set_consumer_group_mapping(attribute=>dbms_resource_manager.service_name,value=http://www.mamicode.com/>‘dbkapp‘,consumer_group=>‘app_group‘);

PL/SQL 过程已成功完成。

SQL> exec dbms_resource_manager.set_consumer_group_mapping(attribute=>dbms_resource_manager.service_name,value=http://www.mamicode.com/>‘dbkboss‘,consumer_group=>‘boss_group‘);

PL/SQL 过程已成功完成。

6)校验工作区

SQL> exec dbms_resource_manager.validate_pending_area();

PL/SQL 过程已成功完成。

SQL> exec dbms_resource_manager.submit_pending_area();

PL/SQL 过程已成功完成。

7)给某个用户赋予能切换到消费组的权限:

SQL> exec dbms_resource_manager_privs.grant_switch_consumer_group(‘SCOTT‘,‘app_group‘,false);

PL/SQL 过程已成功完成。

SQL> exec dbms_resource_manager_privs.grant_switch_consumer_group(‘SCOTT‘,‘boss_group‘,false);

PL/SQL 过程已成功完成。

**授予所有用户可以使用public

8)启动消费计划

SQL> alter system set resource_manager_plan=‘srv_drm_test01‘ scope=both sid=‘*‘;

系统已更改。

9)启动资源限制

SQL> alter system set resource_limit=true scope=both sid=‘*‘;

系统已更改。

******包装一下以上的代码既可以写成脚本*******

--验证生效与否:客户端分别以scott身份登录,通过以下脚本验证。

SQL> select inst_id,username,resource_consumer_group,service_name from gv$session where username=‘SCOTT‘;

   INST_ID USERNAME        RESOURCE_CONSUMER_GROUP          SERVICE_NAME
---------- --------------- -------------------------------- ---------------
         1 SCOTT           BOSS_GROUP                       dbkboss
         1 SCOTT           APP_GROUP                        dbkapp

10)检查参数是否生效

SQL> show parameter resource_manager_plan

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
resource_manager_plan                string      test
SQL> show parameter resource_limit

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
resource_limit                       boolean     TRUE

--测试DRM是否生效

1)编写测试脚本:cpu密集型脚本

>PL/SQL脚本如下:

begin
  declare
    m number;
  begin
    for i in 1 .. 1000000 loop
      for j in 1 .. 1000000 loop
        m := sqrt(4567);
      end loop;
    end loop;
  end;
  /

>shell脚本如下:

#!/bin/bash
source /home/oracle/.bash_profile
step=1
while [ $step -lt 6 ]
do
nohup sqlplus scott/oracle @test.sql &
let "step+=1"
echo $step
done

2)检查生效的资源计划是否在管理cpu:

SQL> select name,cpu_managed from v$rsrc_plan where is_top_plan=‘TRUE‘;

NAME                             CPU
-------------------------------- ---
TEST                             ON

3)检查资源计划是如何定义的:

SQL> select group_or_subplan,max_utilization_limit,mgmt_p1 from dba_rsrc_plan_directives where plan=(select name from v$rsrc_plan where is_top_plan=‘TRUE‘);

GROUP_OR_SUBPLAN               MAX_UTILIZATION_LIMIT    MGMT_P1
------------------------------ --------------------- ----------
BOSS_GROUP                                                   50
APP_GROUP                                                    20
OTHER_GROUPS                                                  5

4)登录两个实例分别查询执行结果:

select to_char(m.begin_time, ‘hh:mi‘) time,
       m.consumer_group_name,
       trunc(m.cpu_consumed_time / 60000, 2) avg_runing_sessions,
       trunc(m.cpu_wait_time / 60000, 2) avg_wait_sessions,
       d.mgmt_p1 * (select value from v$parameter where name = ‘cpu_count‘) / 100 allocation
  from v$rsrcmgrmetric_history m, dba_rsrc_plan_directives d, v$rsrc_plan p
where m.consumer_group_name = d.group_or_subplan
   and p.NAME = d.plan
order by m.begin_time, m.consumer_group_name;

SERVICE和DRM实战