[20141202]关于参数的修改问题.txt
--昨天在做dataguard时遇到修改参数的一些小问题,自己在测试环境做一次:
SYS@test> @ ver
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
--建立pfile参数文件,并且关闭数据库。
create pfile from spfile ;
$cd /u01/app/oracle11g/product/11.2.0/db_2/dbs
$mv spfiletest.ora spfiletest.ora.xxx
--修改文件名,避免使用spfile文件启动数据库。
修改参数文件inittest.ora,加入如下:
*.instance_name='testaa'
*.instance_name='testbb'
*.instance_name='testaa'
*.instance_name='testcc'
*.service_names='b'
*.service_names='a'
*.service_names='test.com'
*.service_names='A'
*.service_names='a'
SYS@test> startup nomount
ORACLE instance started.
Total System Global Area 1603411968 bytes
Fixed Size 2228784 bytes
Variable Size 1023413712 bytes
Database Buffers 570425344 bytes
Redo Buffers 7344128 bytes
SYS@test> show parameter service_name
NAME TYPE VALUE
-------------------- ----------------- -----------------------------------
service_names string test.com, b, a, test.com, A, a
SYS@test> show parameter instance_name
NAME TYPE VALUE
-------------------- ----------------- -----------------------------------
instance_name string testcc
--可以发现instance_name='testcc',仅仅最后一个参数有效。
--而service_names='test.com, b, a, test.com, A, a',也就是支持多个参数的,可以1行1行的写。
--看看保存spfile文件的情况。
SYS@test> create spfile='/tmp/aaa.ora' from pfile ;
File created.
$ strings /tmp/aaa.ora | egrep -i 'service_name|instance_name'
*.instance_name='testaa','testbb','testaa','testcc'
*.service_names='test.com','b','a','test.com','A','a'
--可以发现参数文件里面参数instance_name有3个,而实际上仅仅最后1个有效。也就是spfile文件并不管参数是否合理,全部连接在一起。
--再来看看service_name参数,这个参数里面我的定义存在重复的,oracle不管如何全部放在一起,所以看到的结果是service_names='test.com, b, a, test.com, A, a';
--可以得出一个结论:
1.如果参数仅仅支持1个,取最后一个。
2.参数可以1行1行的写。
3.oracle不管是否重复,全部连接在一起。
--真的像第3点讲的那样吗?再修改参数如下:
...
*.instance_name='testbb'
*.instance_name='testaa'
*.instance_name='testcc'
*.service_names='test.com'
*.service_names='b'
*.service_names='a'
*.service_names='test.com'
*.service_names='A'
*.service_names='a'
*.instance_name='testaa'
--说明把第1行移到最后看看。重新启动看看:
SYS@test> show parameter instance_name
NAME TYPE VALUE
------------------------------------ ---------------------------------------- ---------------------------------------
instance_name string testaa
SYS@test> show parameter service_name
NAME TYPE VALUE
------------------------------------ ---------------------------------------- ---------------------------------------
service_names string test.com, b, a, test.com, A, a
SYS@test> create spfile='/tmp/bbb.ora' from pfile ;
File created.
$ strings /tmp/bbb.ora | egrep -i 'service_name|instance_name'
*.instance_name='testaa'
*.service_names='test.com','b','a','test.com','A','a'
--昏!*.instance_name='testaa',前面的testbb,testcc没有看到。
--看来还要增加一个结论:
1.如果参数仅仅支持1个,取最后一个。
2.相同参数可以1行1行的写,最好写在一起。
3.oracle不管是否重复,全部连接在一起。
4.相同的参数最好写在一起,如果中间隔开1行,后面定义的参数会覆盖前面的定义。
不知道这些结论是否正确?