- 最后登录
- 2017-5-4
- 在线时间
- 81 小时
- 威望
- 999
- 金钱
- 2391
- 注册时间
- 2013-9-11
- 阅读权限
- 150
- 帖子
- 1124
- 精华
- 5
- 积分
- 999
- UID
- 1220
|
2#
发表于 2013-10-11 00:02:22
使用 EM 配置服务和资源管理器
Oracle Enterprise Manager (EM) 通过“Consumer Group Mapping(使用者组映射)”页提供 GUI,以便自动将会话映射到使用者组。可以通过单击“Server(服务器)”页上的“Consumer Group Mapping(使用者组映射)”链接访问此页。
使用“Consumer Group Mapping(使用者组映射)”页的“General(常规信息)”标签页,可以将使用服务名称连接的会话映射到使用者组(如幻灯片右侧所示)。
通过按服务、模块和操作将会话映射到使用者组的功能,可以更加灵活地管理不同应用程序工作量的性能。
使用“Resource Consumer Group Mapping(资源使用者组映射)”页的“Priorities(优先级)”标签页,可为在“General(常规信息)”标签页上设置的映射更改优先级。映射选项与 V$SESSION 中的列相对应。如果多个映射列包含值,则设置的优先级会确定将会话分配给使用者组的优先顺序。
注:也可以从“Create Service(创建服务)”页直接将服务映射到使用者组(如幻灯片左侧所示)。
服务和资源管理器:示例
exec DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA;
exec DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(
CONSUMER_GROUP => 'HIGH_PRIORITY',
COMMENT => 'High priority consumer group');
exec DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING(
ATTRIBUTE => DBMS_RESOURCE_MANAGER.SERVICE_NAME,
VALUE => 'AP',
CONSUMER_GROUP => 'HIGH_PRIORITY');
exec DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA;
exec - DBMS_RESOURCE_MANAGER_PRIVS.GRANT_SWITCH_CONSUMER_GROUP(-
GRANTEE_NAME => 'PUBLIC',
CONSUMER_GROUP => 'HIGH_PRIORITY',
GRANT_OPTION => FALSE);
服务和资源管理器:示例
假定您的站点拥有两个使用者组,分别是 HIGH_PRIORITY 和 LOW_PRIORITY。这些使用者组会映射到数据库的资源计划,资源计划反映预期的比率或预期的资源使用情况。
将服务映射到使用者组之前,必须先创建使用者组和这些使用者组的资源计划。资源计划可以基于优先级,也可以基于比率。幻灯片中所示的 PL/SQL 调用用于创建 HIGH_PRIORITY 使用者组,并将 AP 服务映射到 HIGH_PRIORITY 使用者组。可以使用类似的调用创建 LOW_PRIORITY 使用者组,并将 BATCH 服务映射到 LOW_PRIORITY 使用者组。
系统将执行幻灯片中示例的最后一个 PL/SQL 调用,因为会话只会自动分配给已被授予切换权限的使用者组。将对 LOW_PRIORITY 使用者组执行类似的调用。
注:有关数据库资源管理器的详细信息,请参阅《Oracle 数据库管理员指南》和《PL/SQL Packages and Types Reference》。
通过调度程序使用服务
正如在其它环境中一样,RAC 环境中的调度程序也是为每个数据库使用一个作业表,为每个实例使用一个作业协调程序。作业协调程序互相进行通信,以使信息保持为最新。
调度程序可以使用服务,并会利用服务在 RAC 环境中提供的优点。特定作业类使用的服务将在创建该作业类时定义。在执行期间,将作业分配到作业类后,作业类将在服务内运行。使用服务和作业类可以确保能够为工作量管理和性能优化标识调度程序的工作。
例如,作业会继承运行作业的服务的服务器生成的预警和性能阈值。
为了实现高可用性,调度程序将提供服务关联,而不是实例关联。系统不会安排在任何特定实例上运行这些作业,将在服务下运行这些作业。所以,如果实例出现故障,则作业仍可以在集群中任何提供该服务的其他实例上运行。
注:通过指定要运行作业的服务,作业协调程序可以平衡系统上的负载,从而获得更好的性能。
使用 EM 配置服务和调度程序
要将作业配置为在特定的服务下运行,请在“Server(服务器)”页的“Database Scheduler(数据库调度程序)”部分单击“Job Classes(作业类)”链接。此操作将打开“Scheduler Job Classes(调度程序作业类)”页。在“Scheduler Job Classes(调度程序作业类)”页上,可以查看为作业类分配的服务。
单击“Scheduler Job Classes(调度程序作业类)”页上的“Create(创建)”按钮后,会显示“Create Job Class(创建作业类)”页。在此页上,可以输入新作业类的详细资料,包括必须在哪种服务下运行该作业类。
注:同样,可以在“Create Service(创建服务)”页上将服务映射到作业类,如本幻灯片底部所示。
使用 EM 配置服务和调度程序(续)
使用要运行作业类的服务设置作业类之后,就可以创建作业了。
要创建作业,请单击“Server(服务器)”页上的“Jobs(作业)”链接。此时将显示“Scheduler Jobs(调度程序作业)”页,可以在该页上单击“Create(创建)”按钮创建新作业。单击“Create(创建)”按钮后,会显示“Create Job(创建作业)”页。此页包含几个不同的选项卡:“General(常规信息)”、“Schedule(计划)”和“Options(选项)”。使用“General(常规信息)”标签页将作业分配到作业类。
使用“Options(选项)”页(如幻灯片中所示)设置作业的“Instance Stickiness(实例滞留)”属性。此属性主要用于在为其运行作业服务的多个实例上平衡作业负载。作业只能在一个实例上运行。如果“Instance Stickiness(实例滞留)”值设置为默认值 TRUE,则调度程序将在提供该服务的、负载最小的实例上运行作业。如果将“Instance Stickiness(实例滞留)”值设置为 FALSE,则将在提供该服务的第一个可用实例上运行作业。
注:可以使用 DBMS_SCHEDULER PL/SQL 程序包的 SET_ATTRIBUTE 过程设置作业属性,如 INSTANCE_STICKINESS。
服务和调度程序:示例
DBMS_SCHEDULER.CREATE_JOB_CLASS(
JOB_CLASS_NAME => 'HOT_BATCH_CLASS',
RESOURCE_CONSUMER_GROUP => NULL ,
SERVICE => 'HOT_BATCH_SERV' ,
LOGGING_LEVEL => DBMS_SCHEDULER.LOGGING_RUNS,
LOG_HISTORY => 30, COMMENTS => 'P1 batch');
DBMS_SCHEDULER.CREATE_JOB(
JOB_NAME => 'my_report_job',
JOB_TYPE => 'stored_procedure',
JOB_ACTION => 'my_name.my_proc();',
NUMBER_OF_ARGUMENTS => 4, START_DATE => SYSDATE+1,
REPEAT_INTERVAL => 5, END_DATE => SYSDATE+30,
JOB_CLASS => 'HOT_BATCH_CLASS', ENABLED => TRUE,
AUTO_DROP => false, COMMENTS => 'daily status');
服务和调度程序:示例
在此 PL/SQL 示例中,将定义一个由调度程序管理的批次队列 HOT_BATCH_CLASS。将 HOT_BATCH_SERV 服务与 HOT_BATCH_CLASS 队列相关联。假定您已定义了 HOT_BATCH_SERV 服务。
定义了该类之后,就可以定义作业了。在此示例中,MY_REPORT_JOB 作业将在提供 HOT_BATCH_SERV 服务的实例上的 HOT_BATCH_CLASS 作业类中执行。
在此示例中,没有将资源使用者组分配给 HOT_BATCH_CLASS 作业类。不过,使用者组是可以分配给某个类的。这样,无论是什么服务,都可以使用数据库资源管理器将调度程序作业和服务优先级组合在一起。
注:有关调度程序的详细信息,请参阅《Oracle 数据库管理员指南》和《PL/SQL Packages and Types Reference》。
通过并行操作使用服务
对于并行查询和并行 DML 操作,在操作期间,并行查询从属进程将从查询协调程序中继承服务。ERP 是幻灯片中所示示例使用的服务的名称。
默认情况下(从 Oracle RAC 11gR1 起),服务将限制并行查询使用的实例集。如果通过服务建立连接并发出并行查询,则只可以使用属于在连接期间指定的服务的实例。这是通过自动修改反映 SERVICE_NAMES 的 INSTANCE_GROUPS 参数,以及使用用于连接的服务名称来选择进行并行操作的实例组名称(除非为 PARALLEL_INSTANCE_GROUP 指定了不同的值)来实现的。
要覆盖此行为,请设置 INSTANCE_GROUPS 和 PARALLEL_INSTANCE_GROUP 初始化参数的值。如果使用从属进程的查询协调程序是在支持该服务的实例上启动的,则即使在不支持该服务的实例上,从属进程看起来也属于该服务。在执行结束时,从属进程将还原为默认的数据库服务。请注意,INSTANCE_GROUPS 是废弃的初始化参数,保留此参数仅仅是为了实现向后兼容。
通过度量阈值使用服务
可以定义服务级阈值:
ELAPSED_TIME_PER_CALL
CPU_TIME_PER_CALL
违反阈值时会触发服务器生成的预警。
可以对生成的预警采取以下措施:
更改优先级。
重新定位服务。
为服务增加实例。
SELECT service_name, elapsedpercall, cpupercall
FROM V$SERVICEMETRIC;
通过度量阈值使用服务
服务级阈值允许对实际服务级别和所接受的所需最低级别进行比较,这样就可以获得与可以提供协定的服务级别或无法提供协定的服务级别有关的信息。
可为特定实例上的每个服务显式指定两个度量阈值:
调用的响应时间,ELAPSED_TIME_PER_CALL:响应时间目标表明希望最多过多长时间后进行响应。响应时间表示系统时钟时间。这是一个基本的度量,它反映了以该用户的身份阻止调用运行的所有延迟和错误。
调用的 CPU 时间: CPU_TIME_PER_CALL
AWR 会监视服务时间,并在性能超过阈值时发出 AWR 预警。然后,您可以通过更改作业的优先级、停止过载的进程或重新定位、扩展、收缩、启动或停止服务,对这些预警做出响应。使用自动化任务,可以使回应自动化。这样,即使需求出现变化,也可以保证服务质量。
注:幻灯片中所示的 SELECT 语句为您提供了在所用时间内累积的实例统计数据,以及在最近 60 秒间隔内对于每项服务 CPU 使用的度量的累积实例统计数据。有关最近一小时的历史记录,请查看 V$SERVICEMETRIC_HISTORY。
使用 EM 更改服务阈值
可以在“Database Instance Metric and Policy Settings(数据库实例度量和策略设置)”页设置服务的阈值。可从数据库实例主页访问此页,方法是单击“Related Links(相关链接)”部分的“Metric and Policy Settings(度量和策略设置)”链接。
使用“Metric and Policy Settings(度量和策略设置)”页,可以设置服务的“Service CPU Time (per user call)(每个用户调用的服务 CPU 时间)”和“Service Response Time (per user call)(每个用户调用的服务响应时间)”度量。如果在此页上修改了严重值和警告值,则这些阈值将应用于实例的所有服务。如果要为不同的服务设置不同的阈值,请单击该表最后一列中的相应图标,如本幻灯片中所示。此时将打开相应的“Edit Advanced Settings(编辑高级设置)”页。在此页中,可以单击“Add(添加)”在“Monitored Objects(受监视对象)”表中添加行。在此情况下,每行代表一项特定服务。
注:可以直接从“Create Service(创建服务)”页设置服务阈值,如本幻灯片底部所示。
exec DBMS_SERVER_ALERT.SET_THRESHOLD(-
METRICS_ID => dbms_server_alert.elapsed_time_per_call,
WARNING_OPERATOR => dbms_server_alert.operator_ge,
WARNING_VALUE => '500000',
CRITICAL_OPERATOR => dbms_server_alert.operator_ge,
CRITICAL_VALUE => '750000',
OBSERVATION_PERIOD => 15,
CONSECUTIVE_OCCURRENCES => 3,
INSTANCE_NAME => 'I0n',
OBJECT_TYPE => dbms_server_alert.object_type_service,
OBJECT_NAME => 'ERP');
服务和度量阈值:示例
在此示例中,将为 ERP 服务添加 ELAPSED_TIME_PER_CALL 度量的阈值。此度量将评估每次用户调用相应服务时的所用时间。时间必须使用毫秒表示。
只要在 15 分钟的时段内每次调用 ERP 服务的平均所用时间连续三次超过 0.5 秒,服务器就会发出警告预警。
只要在 15 分钟的时段内每次调用 ERP 服务的平均所用时间连续三次超过 0.75 秒,服务器就会发出严重预警。
注:必须为可能支持服务的每个 RAC 实例创建阈值。
服务汇总和跟踪
应始终按服务来汇总统计数据,以评估优化性能的工作量。
可以在更详细的级别上汇总统计数据:
MODULE
ACTION
SERVICE_NAME、MODULE 和 ACTION 的组合
可以在不同的级别上进行跟踪:
SERVICE_NAMES
MODULE
ACTION
SERVICE_NAME、MODULE 和 ACTION 的组合
对于优化使用共享会话的系统,这十分有用。
服务汇总和跟踪
默认情况下,会为属于每项服务的工作收集重要的统计数据和等待事件。应用程序可以通过 MODULE 和 ACTION 名称进一步限定服务,以确定该服务内重要的事务处理。这使您可以为已归类的工作量精确地定位性能较差的事务处理。使用连接池或事务处理监视程序监视系统中的性能时,这尤其重要。在这些系统中,会话是共享的,计算起来非常困难。
SERVICE_NAME、MODULE 和 ACTION 是 V$SESSION 中的实际列。SERVICE_NAME 会在用户登录时自动进行设置。应用程序将使用 DBMS_APPLICATION_INFO PL/SQL 程序包或特殊 OCI 调用设置 ACTION 和 MODULE 的名称。应针对当前正在执行的程序将 MODULE 设置为用户可识别的名称。同样,应将 ACTION 设置为用户正在模块内执行的特定操作或任务,例如输入新客户。
此工作量汇总的另一个作用是按服务进行跟踪。跟踪各个会话的传统方法是使用 SQL 命令生成可跨越工作量执行的跟踪文件。这样,就可以通过确定是否命中的方法来诊断有问题的 SQL 了。利用您提供的条件(SERVICE_NAME、MODULE 或 ACTION),可以将特定的跟踪信息捕获到一组跟踪文件中,然后将它们合并到一个输出跟踪文件中。这样,生成的跟踪文件就包含了与要完成的特定工作量相关的 SQL。
顶级服务性能页
在“Performance(性能)”页中,可以单击“Top Consumers(顶级使用者)”链接访问“Top Consumers(顶级使用者)”页。
“Top Consumers(顶级使用者)”页包含多个选项卡,将数据库显示为单一系统映像。“Overview(概览)”标签页包含四个饼图:“Top Clients(顶级客户机)”、“Top Services(顶级服务)”、“Top Modules(顶级模块)”和“Top Actions(顶级操作)”。每个图都提供了有关数据库中顶级资源使用者的不同方面。
“Top Services(顶级服务)”标签页将显示与数据库中定义的服务的性能有关的信息。使用此页可以在服务级别启用或禁用跟踪,以及查看生成的 SQL 跟踪文件。
服务汇总配置
统计数据的自动服务汇总级别
DBMS_MONITOR 用于粒度更细的服务汇总:
SERV_MOD_ACT_STAT_ENABLE
SERV_MOD_ACT_STAT_DISABLE
其它可能的汇总级别:
SERVICE_NAME/MODULE
SERVICE_NAME/MODULE/ACTION
跟踪服务、模块和操作:
SERV_MOD_ACT_TRACE_ENABLE
SERV_MOD_ACT_TRACE_DISABLE
在实例重新启动时将保留数据库设置
服务汇总配置
在每个实例上,将按服务自动汇总并收集重要的统计数据和等待事件。对于这一点,不必进行任何设置,只需使用要连接的服务与不同的连接字符串进行连接即可。不过,要为服务收集到粒度级别更细的统计信息,则必须使用 DBMS_MONITOR 程序包中的 SERV_MOD_ACT_STAT_ENABLE 过程。此过程支持其它层次组合的 SERVICE_NAME/MODULE 和 SERVICE_NAME/MODULE/ACTION 的统计数据收集。SERV_MOD_ACT_STAT_DISABLE 过程可停止已启用的统计数据收集。
如果在服务内启用了或禁用了统计数据汇总,则这一设置会应用于访问该数据库的每个实例。另外,在实例重新启动时会保留这些设置。
SERV_MOD_ACT_TRACE_ENABLE 过程以下列三种层次组合之一为服务启用跟踪:SERVICE_NAME、SERVICE_NAME/MODULE 和 SERVICE_NAME/MODULE/ACTION。默认设置是跟踪访问该数据库的所有实例。提供的参数会将跟踪限制到已知其性能较差的指定实例。通过此过程,还可以在生成的跟踪文件中捕获相关的等待和绑定变量值。SERV_MOD_ACT_TRACE_DISABLE 将在所有已启用的实例上对给定的服务、模块和操作组合禁用跟踪。与前面提到的统计数据收集类似,在实例重新启动时会保留服务跟踪。
服务汇总:示例
exec DBMS_MONITOR.SERV_MOD_ACT_STAT_ENABLE(-
'AP', 'PAYMENTS');
exec DBMS_MONITOR.SERV_MOD_ACT_STAT_ENABLE(-
'AP', 'PAYMENTS', 'QUERY_DELINQUENT');
exec DBMS_MONITOR.SERV_MOD_ACT_TRACE_ENABLE('AP');
exec DBMS_MONITOR.SERV_MOD_ACT_TRACE_ENABLE(-
'AP', 'PAYMENTS', 'QUERY_DELINQUENT');
服务汇总:示例
示例代码的第一段开始为 AP 服务内的 PAYMENTS 模块收集统计数据。第二个示例只为在 AP 服务下的 PAYMENTS 模块中运行的 QUERY_DELINQUENT 程序收集统计数据。这样便可以为数据库中运行的特定任务收集统计数据了。
在第三个代码框中,将跟踪在 AP 服务下登录的所有会话。无论什么样的模块和操作,都会为使用该服务的每个会话创建一个跟踪文件。为了精确起见,可以只跟踪服务内的特定任务。上一示例中已对此操作进行了介绍,上一示例中对 PAYMENTS 模块内执行 QUERY_DELINQUENT 操作的所有 AP 服务的会话进行跟踪。
通过按服务、模块和操作进行跟踪,可以集中优化特定的 SQL,而不必从不同的程序中筛选包含 SQL 的跟踪文件。只有定义此任务的 SQL 语句会记录在跟踪文件中。这是对按服务、模块和操作收集统计数据的一种补充,因为这样可以确定操作的相关等待事件。
注:有关 DBMS_MONITOR 程序包的详细信息,请参阅《PL/SQL Packages and Types Reference》。
trcsess 实用程序
trcsess 实用程序根据下列几个条件合并所选跟踪文件的跟踪输出:会话 ID、客户机 ID、服务名称、操作名称和模块名称。trcsess 将跟踪信息合并到一个输出文件中之后,可以通过 tkprof 处理该输出文件。
使用 DBMS_MONITOR.SERV_MOD_ACT_TRACE_ENABLE 过程时,跟踪信息存在于多个跟踪文件中,必须使用 trcsess 工具将这些信息收集到一个文件中。
出于性能或调试目的合并特定会话或服务的跟踪信息时,trcsess 实用程序非常有用。
在专用服务器模型中,跟踪特定会话通常不是问题,因为将由一个专用进程在其生存期内处理会话。可以从属于处理会话的专用服务器的跟踪文件中查看该会话的所有跟踪信息。但是,即使在专用服务器模型中,跟踪服务也可能是一项复杂的任务。
而且,在共享服务器配置中,经常由不同的进程处理用户会话。与用户会话有关的跟踪信息分散在属于不同进程的不同跟踪文件中,因此很难全面地了解会话的生存期。
服务性能视图
可以在 V$SESSION 和 V$ACTIVE_SESSION_HISTORY 中查看服务、模块和操作的信息。
可以在 V$SERVICE_STATS、V$SERVICE_EVENT、V$SERVICE_WAIT_CLASS、V$SERVICEMETRIC 和 V$SERVICEMETRIC_HISTORY 中查看调用时间和性能统计数据。
对特定模块和操作启用了统计数据收集后,V$SERV_MOD_ACT_STATS 就会显示每个实例的性能度量。
在 V$SYSSTAT 中可跟踪和显示 300 多项与性能相关的统计数据。其中,有 28 项统计数据与服务有关。要查看有关服务的统计数据,请运行以下查询:SELECT DISTINCT stat_name FROM v$service_stats
在 28 项统计数中,值得一提的是 DB time 和 DB CPU。DB time 是一项评估每个调用的平均响应时间的统计数据,代表完成调用所用的实际时钟时间。DB CPU 是每个调用使用的实际 CPU 时间的平均值。响应时间与 CPU 时间的区别在于服务的等待时间。如果已知等待时间,并且此时间占用了响应时间的较大一部分,则可以在操作级别进行跟踪,以确定等待事件。
注:DBA_ENABLED_AGGREGATIONS 显示有关已启用的按需统计数据汇总的信息。DBA_ENABLED_TRACES 显示有关已启用的跟踪的信息。
启用通用跟踪
EXEC dbms_monitor.DATABASE_TRACE_ENABLE(TRUE,TRUE);
EXEC dbms_monitor.DATABASE_TRACE_DISABLE();
EXEC dbms_monitor.SESSION_TRACE_ENABLE(session_id => 27, serial_num => 60, waits => TRUE, binds => FALSE);
EXEC dbms_monitor.SESSION_TRACE_DISABLE(session_id => 27, serial_num => 60);
启用通用跟踪
可以使用跟踪来调试性能问题。启用跟踪的过程已实现为 DBMS_MONITOR 程序包的一部分。这些过程将为整个数据库启用跟踪。
可以使用 DATABASE_TRACE_ENABLE 过程启用整个实例的会话级别 SQL 跟踪。该过程包含下列参数:
WAITS:指定是否要跟踪等待信息
BINDS:指定是否要跟踪绑定信息
INSTANCE_NAME:指定要为哪个实例启用跟踪。如果省略了 INSTANCE_NAME,则会为整个数据库启用会话级跟踪。
使用 DATABASE_TRACE_DISABLE 过程可为整个数据库或特定实例禁用 SQL 跟踪。
同样,也可以使用 SESSION_TRACE_ENABLE 过程在本地实例上对给定数据库会话标识符 (SID)启用跟踪。可以在 V$SESSION 中找到 SERIAL# 和 SID。
使用 SESSION_TRACE_DISABLE 过程可对给定数据库会话标识符 (SID) 和序列号禁用跟踪。
管理服务
根据要执行的管理任务的类型,可以使用 Oracle Enterprise Manager、DBCA 或 SRVCTL。
以下是与 RAC 环境中的服务有关的管理任务的说明:
禁用服务操作用于禁用所有或指定实例上的指定服务。禁用状态用于停下来进行维护的服务,目的是防止 Oracle Clusterware 不正确地自动重新启动。禁用整个服务会影响所有实例,因为它会禁用每个实例上的该服务。
启用服务操作用于使服务可以在 Oracle Clusterware 下运行,以进行自动重新启动和重新分配。即使某服务已停止也能启用它。Enable 是创建服务时的默认值。如果该服务已经启用,则系统会忽略该命令。可以启动已启用的服务,而无法启动已禁用的服务。启用整个服务会影响该服务在所有实例上的启用,因为它会在每个实例上启用该服务。
启动服务操作用于启动指定实例上的一项或多项服务。只能启动已启用的服务。如果试图在某个实例上启动某服务或当前运行该服务的实例数已达到其基数,则该命令会失败。
停止操作用于停止整个集群数据库或指定实例上的一项或多项服务。只能停止正在启动或已启动的 Oracle Clusterware 服务。在停止了一项要将其保持为停止状态的服务后,应禁用该服务,这是因为,如果只是停止而未禁用该服务,则它可能会因另一个计划的操作而自动重新启动。该操作可强制中断相互影响的会话。
删除服务操作用于从集群数据库中删除该服务在所有或指定实例上的配置。必须首先停止相应的服务,然后才能删除它。只能从特定实例上删除服务。
重新定位服务操作用于将服务从源实例重新定位到目标实例。目标实例必须在该服务的首选实例或可用实例列表中。该操作可强制中断相互影响的会话。重新定位的服务是暂时性的服务,直到永久性地修改相应的配置为止。
修改服务配置操作用于永久性地修改某服务配置。更改将在服务重新启动后生效。这允许您将服务从一个实例移至另一个实例。此外,此命令还会更改将成为某服务的首选实例和可用实例的实例。
显示指定服务的当前状态。
使用 DBCA 添加服务时,DBCA 还会为这些服务配置网络服务项并启动它们。使用 DBCA 删除服务时,DBCA 会停止相应的服务,删除该服务的 Oracle Clusterware 资源以及网络服务项。
使用 SRVCTL 创建了某项服务后,必须使用单独的 SRVCTL 命令启动它。
SRVCTL 不支持对同一对象并发执行多个命令。因此,请一次只为每个数据库、服务或其它对象运行一个 SRVCTL 命令。
注:srvctl stop database 命令隐式执行 srvctl stop services(因为服务依赖于数据库)。不过,后续的 srvctl start database 命令需要执行显式 srvctl start service。
使用 Oracle Enterprise Manager 管理服务
可以使用 Oracle Enterprise Manager 在 GUI 框架内管理服务。本幻灯片中显示的屏幕快照是管理 RAC 中服务的主要页面。它显示了某已定义的服务的一些基本状态信息。
要访问此页,请单击集群数据库“Availability(可用性)”页的“Cluster Managed Database Services(集群管理的数据库服务)”链接。
可以执行简单的服务管理,如启用、禁用、启动、停止和重新定位服务。本幻灯片中显示了所有可能的操作。
如果选择在“Cluster Managed Database Services(集群管理的数据库服务)”页启动某项服务,则 EM 会尝试在每个首选实例上启动该服务。停止该服务会在当前正在运行它的所有实例上停止它。
要重新定位某服务,请选择要管理的服务,从“Actions(操作)”下拉列表中选择“Manage(管理)”选项,然后单击“Go(执行)”。
注:在“Cluster Managed Database Services(集群管理的数据库服务)”页上,可以测试服务的连接。
要访问单个服务的“Cluster Managed Database Services(集群管理的数据库服务)”页,必须从“Cluster Managed Database Services(集群管理的数据库服务)”页中选择某个服务,从“Actions(操作)”下拉列表中选择“Manage(管理)”选项,然后单击“Go(执行)”。
这就是单个服务的“Cluster Managed Database Services(集群管理的数据库服务)”页。它提供的功能与前一页中的相同,只不过此处执行的操作适用于服务的特定实例。
此外,此页还提供将服务重新定位到某个可用实例的新增功能。所谓将某服务从一个实例重新定位到另一个实例,就是先在第一个实例上停止该服务,然后再在第二个实例上启动它。
注:此页还显示为该特定服务设置的 TAF 策略。可以直接编辑该服务的属性,也可以链接到“Top Consumers(顶级使用者)”页。
管理服务:示例
$ srvctl start service –d PROD –s AP
$ srvctl stop service –d PROD –s AP –i RAC03,RAC04
$ srvctl disable service –d PROD –s AP –i RAC04
$ srvctl modify service –d PROD –s AP -i RAC05 –r
管理服务:示例
本幻灯片演示了一些使用 SRVCTL 来管理服务的任务。
假定已经创建了一个 AP 服务,它有四个首选实例:RAC01、RAC02、RAC03 和 RAC04。另外,还为 AP 定义了一个可用实例 RAC05。
在第一个示例中,所有首选实例上都启动了 AP 服务。如果有任何支持 AP 的首选实例或可用实例没有运行但已启用,则将会启动这些实例。
stop 命令会停止 RAC04 和 RAC03 实例上的 AP 服务。这些实例本身不会关闭,并且可能仍保持为运行状态以支持其他服务。AP 服务会继续在 RAC01 和 RAC02 上运行。其目的可能是要在 RAC04 上执行维护,所以在该实例上禁用了 AP 服务,以防止在该实例上自动重新启动该服务。OCR 会记录已为 RAC04 禁用了 AP 这一情况。因此,Oracle Clusterware 不会在 RAC04 上运行 AP,直到将来启用该服务为止。
本幻灯片中的最后一个命令会将 RAC05 从可用实例改为首选实例。这样做可保证始终有 4 个实例运行该服务,因为前面已禁用了 RAC04。
联机修改服务时,请不要执行其他服务操作。
注:有关详细信息,请参阅《Oracle Real Application Clusters Administrator’s Guide》。
管理服务:方案
本幻灯片演示了如何在保持工作量的停机时间为最短的情况下对服务配置进行更改。
假定有一个由 6 个节点构成的集群,该集群上运行了两项服务:DW 和 HR。起初,将 I1 和 I2 实例配置为 DW 的首选实例,将 I3、I4、I5 和 I6 配置为其可用实例。同样,起初将 I3、I4、I5 和 I6 配置为 HR 的首选实例, 将 I1 和 I2 配置为其可用实例。此初始配置与“发薪日”期间相对应(如图形左半部分所示)。
在假日期间,需要更改服务配置,使 DW 在前 4 个实例上运行,而 HR 在其余 2 个实例上运行。
本幻灯片从上到下,依次显示了需要执行哪些命令来切换服务配置。
请注意,srvctl modify service 命令的 –n 选项用于删除服务的初始配置。此更改将在下次重新启动服务时生效。也可以对这些命令使用 –f 选项,这样下一个 stop 命令就会中断相应的会话。此处,您会希望将 –f 选项与 srvctl stop service 命令结合使用,在整个集群内停止该服务。
然后使用 srvctl start service 命令来应用新创建的服务配置。
将分布式事务处理与 RAC 结合使用
当 RAC 与分布式事务处理结合使用(与 XA 标准兼容或经过 Microsoft Distributed Transaction Coordinator 协调)时,同一事务处理中的两个应用程序组件就可能连接到一个 RAC 集群中的不同节点上。这种情况可以出现在支持自动负载平衡的系统上,因为应用程序无法控制分布式事务处理分支会在哪些数据库节点上得到处理。
从 Oracle RAC 11gR1 开始,这些分布式事务处理的类型将由系统通过使用新的后台进程(称为 GTX0…GTXj 自动控制。GLOBAL_TXN_PROCESSES 指定实例中的 GTXn 后台进程的初始编号,其默认值为 1。让数据库自动处理分布式事务处理,对处理繁杂的全局事务处理的系统来说,十分有用。
在 Oracle RAC 中,要通过分布式事务处理提供改进的应用程序性能,可能需要利用专用的服务(称为 DTP service)。使用 DTP 服务,可将分布式事务处理的所有分支定向到集群中的单个实例中。为在集群中进行负载平衡,最好使用几组较小的应用程序服务器,其中每组都将自身事务处理指定到单个服务中(或服务组),而不是使用一个或两个较大的应用程序服务器。本幻灯片中的图形显示的是一种可能的情况。假定有 3 个 RAC 节点:RAC01、RAC02 和 RAC03,其中每个节点都可以为来自中间层的任何非分布式事务处理提供服务。
对于来自其他中间层的分布式事务处理,将通过 Oracle Net Services 将它们静态划分到其中一个节点上。因此,每个节点都将其自身发布为非分布式事务处理的 S0 服务。此外,RAC01 和 RAC03 还将其自身发布为 DTP 服务 S1 和 S2。
如本幻灯片中所示,DTP 服务将其 DTP 标记设置为 TRUE。此外,还应始终将 DTP 服务定义为单例服务(即只有一个首选实例)。
每台中间层客户机都有 Oracle Net Service 名称配置,并通过 Oracle Net 访问 Oracle 数据库。用于分布式事务处理的每项 Oracle Net Service 都配置有一个 DTP 服务。
Oracle 服务器会确保 DTP 服务在该 RAC 集群内的基数为 1,以防在 RAC 数据库中有一个以上的同一 DTP 服务实例运行。这样,每个分布式事务处理都通过 Oracle Net 由一个 DTP 服务处理,该分布式事务处理的所有紧密耦合的分支也会传送到 RAC 数据库的同一个节点。不同的分布式事务处理可以通过不同的 DTP 服务,按照负载平衡的原则分配到不同的 RAC 节点。如果其中某个数据库节点出现故障,Oracle Clusterware 和 RAC 会先自动检测故障,并执行事务处理恢复,然后在可用 RAC 节点上启动相应的 DTP 服务。当该节点重新运行后,可以根据工作量自动将同一 DTP 服务重新定位回来。
受限会话和服务
无论何时将一个集群实例置于受限模式,Oracle Clusterware 都会停止在该受限实例上运行的服务,然后在可用实例(如果存在的话)上启动它们。通过这种方式,监听程序可动态获悉这些变化,之后,它们就不会再尝试将请求传递到该受限实例,无论其当前负载如何,都是如此。实际上,监听程序会将该受限实例排除在它们的连接负载平衡算法之外。
使用这一功能时,有两个非常重要的注意事项:
首先,即使具有 RESTRICTED SESSION 权限的用户也不能通过监听程序远程连接到处于受限模式的实例。他们必须本地连接到支持该实例的节点,并使用继承协议。
其次,仅当受限实例在监听程序上进行了动态注册后,此新功能才起作用。也就是说,即使您在 listener.ora 文件中配置了 SID_LIST 项,但没有使用动态注册,该监听程序也不能阻止与受限实例进行连接的尝试。在这种情况下,由于集群的受限实例仍可访问,而该受限实例最终又将成为负荷最少的实例,因此该监听程序会开始将连接请求传递给该实例。但该实例因处于受限状态而无法接受连接请求,所以会拒绝连接并返回错误。这种情况可能会导致阻止对整个服务的访问。
注:在静态配置前,监听程序将使用动态服务注册信息。
|
|