本文的目的是介绍 oracle 数据库中的 ‘service’的基础知识;本文环境为win7+10.2.0.4,请注意版本的区别;
在oracle 8i中,oracle引入了一个新功能:service,它可以为客户端提供一种新的连接方式;Service 是字面翻译是服务,那么在oracle数据库当中,service可以当做是一组客户端或者应用的逻辑组合;每个单独的service 可以设定其自己的属性,以满足不同的需要;
SQL> col name format a10 SQL> select service_id,name from v$services; SERVICE_ID NAME ———- ———- 6 orcl 1 SYS$BACKGROUND 2 SYS$USERS SQL> |
Services的配置要在参数 service_names中设定,同时如果service 要在监听中完成注册,那么一个新建是service 才能够正常使用;在创建service 时首先要确定其名称,然后可以再附加一个domain,如果没有domian,它将采用 db_domain参数的值;service name最多可以有 63个字符;从10g 开始,即使参数 service_names 参数没有设定,数据库也会创建一个默认服务:Db_unique_name+db_domain;并且这个服务总是会注册到监听当中;同时在创建数据库后会产生两个默认的服务:SYS$BACKGROUND、SYS$USERS;后台进程,和连接时使用了 sid 的用户使用这两个服务进行连接;并且这两个服务在监听中是不注册的;下面来看看service的创建:
SQL> select value from v$parameter where name=’db_domain’; VALUE ——————————————————————————– SQL> |
我的数据库是没有设置;创建service 时有几种不同的方法:
在集群中可以使用 SRVCTL 进行创建:
srvctl add service -d db_unique_name -s service_name -r preferred_list [-a available_list] [-P TAF_policy] where -d db_unique_name identifies the unique name for the database -s service_name identifies the service name -r preferred_list identifies the list of preferred instances -a available_list identifies the list of available instances -P TAF_policy identifies the TAF policy (NONE, BASIC, or PRECONNECT). The BASIC and PRECONNECT settings affect the content of the TNS string that Oracle generates automatically when the command is executed |
使用plsql包进行创建,下面是演示:
SQL> execute dbms_service.create_service(service_name => ‘huosi’,network_name => ‘huosi’,goal => dbms_service.g oal_service_time,dtp => false,aq_ha_notifications => true,failover_method =>dbms_service.failover_method_basic, failover_type =>dbms_service.failover_type_select,failover_retries => 180,failover_delay => 5,clb_goal => dbms_ service.clb_goal_long); PL/SQL 过程已成功完成。 SQL> |
创建完成收查看视图是没有信息:
SQL> select service_id,name from v$services; SERVICE_ID NAME ———- ———- 6 orcl 1 SYS$BACKGR OUND 2 SYS$USERS |
重启后:
SQL> startup force ORACLE 例程已经启动。 Total System Global Area 524288000 bytes Fixed Size 1297700 bytes Variable Size 138412764 bytes Database Buffers 377487360 bytes Redo Buffers 7090176 bytes 数据库装载完毕。 数据库已经打开。 SQL> select service_id,name from v$services; SERVICE_ID NAME ———- ———- 6 orcl 1 SYS$BACKGROUND 2 SYS$USERS |
仍然没有;下面再次 设定:
SQL> alter system set service_names=’orcl,huosi’ scope=spfile; 系统已更改。 SQL> startup force ORACLE 例程已经启动。 Total System Global Area 524288000 bytes Fixed Size 1297700 bytes Variable Size 138412764 bytes Database Buffers 377487360 bytes Redo Buffers 7090176 bytes 数据库装载完毕。 数据库已经打开。 SQL> select service_id,name from v$services; SERVICE_ID NAME ———- ———- 12 huosi 6 orcl 1 SYS$BACKGROUND 2 SYS$USERS SQL> |
已经有了
SQL> host lsnrctl stat LSNRCTL for 32-bit Windows: Version 10.2.0.4.0 – Production on 19-3月 -2012 12:08:47 Copyright (c) 1991, 2007, Oracle. All rights reserved. 正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))) LISTENER 的 STATUS ———————— 别名 LISTENER 版本 TNSLSNR for 32-bit Windows: Version 10.2.0.4.0 – Production 启动日期 19-3月 -2012 09:16:46 正常运行时间 0 天 2 小时 52 分 6 秒 跟踪级别 off 安全性 ON: Local OS Authentication SNMP OFF 监听程序参数文件 d:\oracle\product\10.2.0\db_1\network\admin\listener.ora 监听程序日志文件 d:\oracle\product\10.2.0\db_1\network\log\listener.log 监听端点概要… (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521))) (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC0ipc))) 服务摘要.. 服务 “PLSExtProc” 包含 1 个例程。 例程 “PLSExtProc”, 状态 UNKNOWN, 包含此服务的 1 个处理程序… 服务 “huosi” 包含 1 个例程。 例程 “orcl”, 状态 READY, 包含此服务的 1 个处理程序… 服务 “orcl” 包含 1 个例程。 例程 “orcl”, 状态 READY, 包含此服务的 1 个处理程序… 服务 “orcl_XPT” 包含 1 个例程。 例程 “orcl”, 状态 READY, 包含此服务的 1 个处理程序… 命令执行成功 |
注意此时在监听中已经进行了注册;所以创建了service 以后必须在参数中添加才可以正常使用;
Service的用途:使用service可以将不同的应用进行分类,使不同的应用或者客户端连接到不同的服务,这样便于分析各个应用的情况;注意:
Automatic Workload Repository (AWR) manages theperformance of services and records the serviceperformance, including
– SQL execution times – Wait classes – Resources consumed by 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 => ‘APP1′, OBJECT_TYPE => dbms_server_alert.object_type_service, OBJECT_NAME => ‘huosi’); |
使用servcie连接时的配置:tnsname.ora中:
TEST =(DESCRIPTION =(ADDRESS=(PROTOCOL=TCP)(HOST=ACME1)(PORT=1521))(CONNECT_DATA = (SERVICE_NAME = huosi))) |
创建好service后,还可以在以下方面使用,如:创建job:
DBMS_SCHEDULER.CREATE_JOB( JOB_NAME => ‘my_report_job’, JOB_CLASS => ‘HOT_BATCH_CLASS’, ENABLED => TRUE, 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, AUTO_DROP => false, COMMENTS => ‘daily status’); |
如果是在rac中,service的使用还可以执行并行操作,如service,今天rac没有启动,就不演示;使用service 后可以对单独的service进行分类监控,更有利于找出性能存在瓶颈的应用:
DBMS_MONITOR.SERV_MOD_ACT_TRACE_ENABLE( service_name IN VARCHAR2, module_name IN VARCHAR2 DEFAULT ANY_MODULE, action_name IN VARCHAR2 DEFAULT ANY_ACTION, waits IN BOOLEAN DEFAULT TRUE, binds IN BOOLEAN DEFAULT FALSE, instance_name IN VARCHAR2 DEFAULT NULL) |
以下为与service相关的动态视图,通过这些视图可以方便的查询service的相关信息:
Service, module, and action information in: – V$SESSION – V$ACTIVE_SESSION_HISTORY Call times and performance statistics listed in: – V$SERVICE_STATS – V$SERVICE_EVENT – V$SERVICE_WAIT_CLASS – V$SERVICEMETRIC – V$SERVICEMETRIC_HISTORY V$SERV_MOD_ACT_STATS shows performance measures for each instance when statistics are collected by module and actionService, module, and action information in: – V$SESSION – V$ACTIVE_SESSION_HISTORY Call times and performance statistics listed in: – V$SERVICE_STATS – V$SERVICE_EVENT – V$SERVICE_WAIT_CLASS – V$SERVICEMETRIC – V$SERVICEMETRIC_HISTORY V$SERV_MOD_ACT_STATS shows performance measures for each instance when statistics are collected by module and action V$SYSSTAT – Of its 300 performance-related statistics 28 are tracked for services – To see the statistics measured for services, run SELECT DISTINCT stat_name FROM v$service_stats DBA_ENABLED_AGGREGATIONS displays information about enabled on-demand statistic aggregation DBA_ENABLED_TRACES displays information about enabled traces |