本帖最后由 sunyunyi 于 2018-11-10 10:33 编辑
目前就职海天起点,服务于电力行业,致力于帮助客户解决生产过程中出现的问题,提高生产效率, 爱好书法,周易!愿结交志同道合之士!共同进步! 微信号:sunyunyi_sun
Oracle Service
Oracle Service 向客户端提供一个统一的服务名,Service位置透明,一个Service能定义多个数据库实例,一个数据库实例可以属于多个Service。
Oracle Service 服务分为默认服务和自定义的集群管理服务
默认服务定义为 DB_UNIQUE_NAME or DB_NAME or PDB_NAME,SYS$BACKGROUND(后台进程使用)和 SYS$USERS (默认用户session),Oracle
默认服务oracle内部管理,不能被禁用,不能被计划停止服务,不能故障转移到ORACLE DATA GUARD。Oracle强烈建议不要使用默认Service给
client提供服务,但是我遇到的几乎所有在运数据库使用默认Service向外提供服务,这样配置使用好像也没存在性能问题,故障转移负载均衡一切运作正常。
那为什么Oracle强力建议使用自定义Service向客户提供服务
1:默认Service存在许多限制,不能管理,缺少灵活性
2:可依据用户应用类型建立不同Service分类管理应用
3:可动态灵活分配主要实例和可用实例给每个Service,以及动态迁移Service到其他实例
4:可以计划禁用Service满足计划停机事件
5:可依据应用定义链接时负载均衡和运行时负载均衡
基于以上好处强烈建议使用自定义Service提供服务
下面我们看看自定义服务的建立和相关重要属性:
用户可使用EM和srvctl建立、修改、禁用、启动、停止、查询这里我们只讨论srvctl的使用方法,下面是12C的使用方法,注意12C和11G以及
10G的使用方法差异巨大,10G的Service特性较少,11G的Service功能强大但是参数使用方法和12C完全不同,12C在11G基础增加功能,列出12C的参数:
Usage: srvctl add service -db -service
[-role [PRIMARY][,PHYSICAL_STANDBY][,LOGICAL_STANDBY][,SNAPSHOT_STANDBY]] [-policy {AUTOMATIC | MANUAL}]
[-notification {TRUE | FALSE}] [-clbgoal {SHORT | LONG}] [-rlbgoal {NONE | SERVICE_TIME | THROUGHPUT}]
[-failovertype {NONE | SESSION | SELECT | TRANSACTION}] [-failovermethod {NONE | BASIC}][-failoverretry ] [-failoverdelay ]
[-failover_restore {NONE | LEVEL1}]
[-edition ] [-pdb ] [-global ] [-maxlag ] [-sql_translation_profile ]
[-commit_outcome {TRUE | FALSE}] [-retention ] [replay_init_time ] [-drain_timeout ]
[-stopoption ] [-session_state {STATIC | DYNAMIC}] [-force]
-db Unique name for the database
-service Service name
-role Role of the service (primary, physical_standby, logical_standby, snapshot_standby)
-policy Management policy for the service (AUTOMATIC or MANUAL)
-failovertype (NONE | SESSION | SELECT | TRANSACTION) Failover type
-failovermethod (NONE | BASIC) Failover method
-failoverdelay Failover delay (in seconds)
-failoverretry Number of attempts to retry connection
-failover_restore Option to restore initial environment for Application Continuity and TAF (NONE or LEVEL1)
-edition Edition (or "" for empty edition value)
-pdb Pluggable database name
-maxlag Maximum replication lag time in seconds (Non-negative integer, default value is 'ANY')
-clbgoal (SHORT | LONG) Connection Load Balancing Goal. Default is LONG.
-rlbgoal (SERVICE_TIME | THROUGHPUT | NONE) Runtime Load Balancing Goal
-notification (TRUE | FALSE) Enable Fast Application Notification (FAN) for OCI connections
-global Global attribute (TRUE or FALSE)
-sql_translation_profile Specify a database object for SQL translation profile
-commit_outcome (TRUE | FALSE) Commit outcome
-retention Specifies the number of seconds the commit outcome is retained
-replay_init_time Seconds after which replay will not be initiated
-session_state Session state consistency (STATIC or DYNAMIC)
-drain_timeout Service drain timeout specified in seconds
-stopoption Options to stop service (e.g. TRANSACTIONAL or IMMEDIATE)
-force Force the add operation even though a listener is not configured for a network
-verbose Verbose output
-help Print usage
这里我们看看主要的几个参数:
-policy : Service Management Policy 默认为AUTOMATIC,srvctl start database 自动启动service,建议默认。
-preferred :定义优先的实例列表。
-available :定义可用的实例列表,当优先的实例不可用时使用。
-cardinality:Server Pool Assignment(资源池分配) You can define the service as either UNIFORM (running on all instances in the serverpool) or SINGLETON (running on
only one instance in the server pool) using the -cardinality parameter
-rlbgoal:定义Run-time Connection Load Balancing,默认为NONE,SERVICE_TIME:基于单个事务处理效率向客户提供最好的服务质量,OLTP使用。THROUGHPUT:基于长时间查询和单个完整
工作完成效率向客户提供最大吞吐量,OLAP使用。
-clbgoal:定义Connection Load Balancing Goal,默认值为LONG:如果 -rlbgoal 参数不为NONE,Service定义为SINGLETON也就是只在一个服务器上运行则使用session count进行负载评判.
如果Service定义为uniform在所以服务器上运行则使用run queue length进行评判。
另外一个值为short: 如果 -rlbgoal 参数不为NONE,则使用GOODNESS进行判断提供负载均衡。
12C新增功能:
Creating Services for Application Continuity and Transaction Guard
1:Creating Services for Application Continuity
-replay_init_time: 单位秒,默认值300s,定义replay初始化时间
-retention:单位秒,默认值86400(1 day),commit outcome信息保存时间。
-failoverretry:链接重试次数,建议30
-failoverdelay:每次重试延迟,建议10s
-notification: FAN is highly recommended—set this value to TRUE to enable FAN for OCI and ODP.Net clients.
对数据库 racdb 新增service app2 资源池 Srvpool1 的示例:
srvctl add service -db racdb -service app2 -serverpool Srvpool1
-failovertype TRANSACTION -commit_outcome TRUE -replay_init_time 1800
-retention 86400 -notification TRUE -rlbgoal SERVICE_TIME -clbgoal SHORT
-failoverretry 30 -failoverdelay 10
Creating Services for Transaction Guard,启动事务保护
To enable Transaction Guard, but not Application Continuity, create the service using
SRVCTL and set only -commit_outcome TRUE.
修改示例:
$ srvctl modify service -db racdb -service app2 -commit_outcome TRUE -retention 86400 -notification TRUE
另外必须 GRANT EXECUTE ON DBMS_APP_CONT;
其他操作:
Starting and Stopping Services with SRVCTL:
$ srvctl start service -db db_unique_name [-service service_name_list][-instance inst_name] [-startoption start_options]
$ srvctl stop service -db db_unique_name -service service_name_list [-instance inst_name] [-startoption start_options]
Enabling and Disabling Services with SRVCTL:
$ srvctl enable service -db db_unique_name -service service_name_list [-instance inst_name]
$ srvctl disable service -db db_unique_name -service service_name_list [-instance inst_name]
Relocating Services with SRVCTL:
The following command relocates the crm service from instance apps1 to instance apps3:
$ srvctl relocate service -db apps -service crm -oldinst apps1 -newinst apps3
The following command relocates the crm service from node1 to node3 using node
$ srvctl relocate service -db apps -service crm -currentnode node1 -targetnode node3
Obtaining the Status of Services with SRVCTL:
$ srvctl status service -db dbname
Obtaining the Configuration of Services with SRVCTL:
$ srvctl config service -db dbname -service service_name