天天看点

[20141202]关于参数的修改问题.txt

[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='testcc'

*.service_names='b'

*.service_names='a'

*.service_names='test.com'

*.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

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点讲的那样吗?再修改参数如下:

...

--说明把第1行移到最后看看。重新启动看看:

NAME                                 TYPE                                     VALUE

------------------------------------ ---------------------------------------- ---------------------------------------

instance_name                        string                                   testaa

service_names                        string                                   test.com, b, a, test.com, A, a

SYS@test> create spfile='/tmp/bbb.ora' from pfile ;

$ strings /tmp/bbb.ora | egrep -i 'service_name|instance_name'

--昏!*.instance_name='testaa',前面的testbb,testcc没有看到。

--看来还要增加一个结论:

2.相同参数可以1行1行的写,最好写在一起。

4.相同的参数最好写在一起,如果中间隔开1行,后面定义的参数会覆盖前面的定义。

不知道这些结论是否正确?