zoukankan      html  css  js  c++  java
  • Oracle HA 之 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=>'dbkapp',consumer_group=>'app_group');

    PL/SQL 过程已成功完成。

    SQL> exec dbms_resource_manager.set_consumer_group_mapping(attribute=>dbms_resource_manager.service_name,value=>'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;

  • 相关阅读:
    Restful接口传入多参数
    map转换成JSON的3种方式
    项目打包后执行start.sh提示“no such file or directory”解决办法,linux中给文件增加权限
    如何将一个a表a1字段与b表b1字段的笛卡尔积插入到e表中
    get、set方法的取代注释之lombok插件
    推荐 33 个 IDEA 最牛配置转(Java技术栈)
    mysql-----group by 对多个字段进行分组
    mysql获取某段时间内每一天的统计数据
    发票流水号生成方式
    postman之post请求传参
  • 原文地址:https://www.cnblogs.com/wcwen1990/p/6661655.html
Copyright © 2011-2022 走看看