某某核心生产库近期发现2个计算节点负载不一致,经过调查发现是由于Scheduler Job大多数集中在某一个节点执行,为了均衡节点之间负载,所以需要指定Job在固定节点之间执行,同时也需要做到HA即某一个节点出现问题,另外一个节点可以接管执行,保证业务正常运行。
在RAC环境下,Oracle在调度普通的Scheduler JOB的时候,是随机地分配在两个实例上执行的。
为了均衡两台实例的负载,我们安排Scheduler JOB指定服务名来连接,这样可以指定任务到指定的实例上执行。
这两个Service Name在后面创建JOB_CLASS要用到!
show parameter service_name;
在Oracle用户下执行
srvctl add service -d mmsdb -s srv_1 -r mmsdb1 -a mmsdb2 -P basic
srvctl add service -d mmsdb -s srv_2 -r mmsdb2 -a mmsdb1 -P basic
在Oracle用户下执行
srvctl start service -d mmsdb -s srv_1 -i mmsdb1
srvctl start service -d mmsdb -s srv_2 -i mmsdb2
通过crsctl stat res -t验证
在SQLPLUS下执行
exec dbms_service.modify_service(service_name => 'srv_1',failover_method => 'BASIC',failover_type => 'SELECT',failover_retries => 10,failover_delay => 5);
exec dbms_service.modify_service(service_name => 'srv_2',failover_method => 'BASIC',failover_type => 'SELECT',failover_retries => 10,failover_delay => 5);
在1#生产库服务器上:
show parameter service_name
在2#生产库服务器上:
show parameter service_name
BEGIN
SYS.DBMS_SCHEDULER.CREATE_JOB_CLASS
(
job_class_name => 'JOB_FACTORY1'
,resource_consumer_group => NULL
,logging_level => SYS.DBMS_SCHEDULER.LOGGING_RUNS
,log_history => 30
,comments => NULL
);
END;
/
BEGIN
SYS.DBMS_SCHEDULER.CREATE_JOB_CLASS
(
job_class_name => 'JOB_FACTORY2'
,resource_consumer_group => NULL
,logging_level => SYS.DBMS_SCHEDULER.LOGGING_RUNS
,log_history => 30
,comments => NULL
);
END;
/
begin
sys.dbms_scheduler.create_job(job_name => 'MESINTERFACE.JDE_COST_D_JOB',
job_type => 'STORED_PROCEDURE',
job_action => 'JDE_COST_D',
start_date => to_date('23-02-2016 07:30:00', 'dd-mm-yyyy hh24:mi:ss'),
repeat_interval => 'Freq=Hourly;Interval=24',
end_date => to_date(null),
job_class => 'JOB_FACTORY1[z3] ', enabled => true,
auto_drop => false,
comments => '');
end;
/
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31134212/viewspace-2120192/ ,如需转载,请注明出处,否则将追究法律责任。