yangtingkun
===========================================================
RAC环境中的SERVICE_NAMES参数(一)
===========================================================

RAC环境中的各个节点的SERVICE_NAMES参数的设置可以不同。


由于SERVICE_NAMES是动态参数,修改这个参数可以不关闭实例随时进行,使得这个参数的设置可以在各个实例上个性化的设置。

SQL> SELECT INSTANCE_NUMBER, INSTANCE_NAME, HOST_NAME
2 FROM V$INSTANCE;

INSTANCE_NUMBER INSTANCE_NAME HOST_NAME
--------------- ---------------- -----------------------------------------
1 testrac1 racnode1

SQL> SELECT INSTANCE_NUMBER, INSTANCE_NAME, HOST_NAME
2 FROM GV$INSTANCE;

INSTANCE_NUMBER INSTANCE_NAME HOST_NAME
--------------- ---------------- -----------------------------------------
1 testrac1 racnode1
3 testrac3 racnode3
2 testrac2 racnode2

这是一个3节点的RAC环境。默认情况下各个节点的SERVICE_NAMES初始化参数是一致的:

SQL> SELECT INST_ID, NAME, VALUE
2 FROM GV$SYSTEM_PARAMETER
3 WHERE NAME = 'service_names';

INST_ID NAME VALUE
---------- ------------------------------ ------------------------------
1 service_names testrac
3 service_names testrac
2 service_names testrac

不过完全可以修改这个参数使得SERVICE_NAMES参数在各个实例上都不相同,比如将各个实例上的SERVICE_NAMES修改为对应的SID

SQL> ALTER SYSTEM SET SERVICE_NAMES = 'testrac1' SCOPE = MEMORY SID = 'testrac1';

系统已更改。

SQL> ALTER SYSTEM SET SERVICE_NAMES = 'testrac2' SCOPE = MEMORY SID = 'testrac2';

系统已更改。

SQL> ALTER SYSTEM SET SERVICE_NAMES = 'testrac3' SCOPE = MEMORY SID = 'testrac3';

系统已更改。

SQL> SELECT INST_ID, NAME, VALUE
2 FROM GV$SYSTEM_PARAMETER
3 WHERE NAME = 'service_names';

INST_ID NAME VALUE
---------- ------------------------------ ------------------------------
1 service_names testrac1
3 service_names testrac3
2 service_names testrac2

初始化参数SERVICE_NAMES的名称是复数形式,说明这个参数支持多个值。为了使得各个实例拥有自己唯一的SERVICE_NAME验证名称,并不需要牺牲RAC实例共同的服务名:

SQL> ALTER SYSTEM SET SERVICE_NAMES = 'testrac,testrac1' SCOPE = MEMORY SID = 'testrac1';

系统已更改。

SQL> ALTER SYSTEM SET SERVICE_NAMES = 'testrac,testrac2' SCOPE = MEMORY SID = 'testrac2';

系统已更改。

SQL> ALTER SYSTEM SET SERVICE_NAMES = 'testrac,testrac3' SCOPE = MEMORY SID = 'testrac3';

系统已更改。

SQL> SELECT INST_ID, NAME, VALUE
2 FROM GV$SYSTEM_PARAMETER
3 WHERE NAME = 'service_names';

INST_ID NAME VALUE
---------- ------------------------------ ------------------------------
1 service_names testrac,testrac1
3 service_names testrac,testrac3
2 service_names testrac,testrac2

这样可以通过服务名TESTRAC指向全部3个实例,也可以通过SID对应的服务器指向单独的实例。

yangtingkun 发表于:2010.02.03 23:08 ::分类: ( ORACLE ) ::阅读:(240次) :: 评论 (5)
re: RAC环境中的SERVICE_NAMES参数(一) [回复]

老大,rac中oracle强调的管理服务名时用srvctl,直接修改service_names是不是不大好?

dbaoracle 评论于: 2010.02.07 09:12
re: RAC环境中的SERVICE_NAMES参数(一) [回复]

srvctl还能管理SERVICE_NAMES初始化参数?

你执行一下EXPDP或IMPDP,就会在后台alert文件中看到,数据泵后台进程会修改SERVICE_NAMES参数,在导入或导出完成后,再修改回来。这个参数本来就是动态参数,修改没有问题的。

yangtingkun 评论于: 2010.02.08 11:12
re: RAC环境中的SERVICE_NAMES参数(一) [回复]

在用srvctl增加或删除服务名后时,用srvctl start 服务时可以在alert.log中看到相应的修改service_names的语句。用dbca管理服务时,也可以看到。如下:
[oracle@node1 ~]$ srvctl add service -d racdb -s test -r "node1"
[oracle@node1 ~]$ srvctl start service -d racdb -s test
下面是alter.log的内容:
Thread 1 advanced to log sequence 32
Current log# 2 seq# 32 mem# 0: /ocfs22/oradata/racdb/redo02.log
Tue Feb 9 10:19:23 2010
ALTER SYSTEM SET service_names='racdb','sales_PRECONNECT','test' SCOPE=MEMORY SID='racdb1';

dbaoracle 评论于: 2010.02.09 10:22
re: RAC环境中的SERVICE_NAMES参数(一) [回复]

通过srvctl添加服务后,执行crs_stat -t 可以看到该服务,直接修改service_names参数后,执行crs_stat -t是看不到该服务的,如下:
SQL> ALTER SYSTEM SET service_names='racdb','sales_PRECONNECT','test','hr';

System altered.
下面是crs_stat的输出,从中可以看出我刚才用srvctl添加的服务test可以看到,可是直接修改service_names参数添加的服务hr则看不到:
[root@node2 ~]# crs_stat -t
Name Type Target State Host
------------------------------------------------------------
ora....E1.lsnr application ONLINE ONLINE node1
ora.node1.gsd application ONLINE ONLINE node1
ora.node1.ons application ONLINE ONLINE node1
ora.node1.vip application ONLINE ONLINE node1
ora....E2.lsnr application ONLINE ONLINE node2
ora.node2.gsd application ONLINE ONLINE node2
ora.node2.ons application ONLINE ONLINE node2
ora.node2.vip application ONLINE ONLINE node2
ora.racdb.db application ONLINE ONLINE node2
ora....b1.inst application ONLINE ONLINE node1
ora....b2.inst application ONLINE ONLINE node2
ora....ales.cs application ONLINE ONLINE node2
ora....db2.srv application ONLINE ONLINE node2
ora....test.cs application ONLINE ONLINE node1
ora....db1.srv application ONLINE ONLINE node1

dbaoracle 评论于: 2010.02.09 10:32
re: RAC环境中的SERVICE_NAMES参数(一) [回复]

哦,这个服务并不仅仅涉及初始化参数了,它是多节点Rac环境用来分隔不同业务而建立的,除了和数据库中、TNSNAMES.ORA中的配置有关外,还要对应操作系统上的进程,而且除了使用srvctl,还可以利用dbca进行配置和管理。

利用服务的功能,应该也可以解决这个问题,不过我还没有仔细过这块。

yangtingkun 评论于: 2010.02.10 16:26

发表评论
标题

在此添加评论
表情符号: smile laughing tongue angry crying sad wassat wink

称呼

邮箱地址(可选)

个人主页(可选)

 authimage


切换风格
新闻聚合
博客日历
文章归档...
最新发表...
最新评论...
最多阅读文章...
最多评论文章...
博客统计...
Blog信息
网站链接...