[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='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行,后面定义的参数会覆盖前面的定义。

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

上一篇:Android 4.2官方文档chm格式下载


下一篇:《深入剖析Nginx》一第1章 源码分析的准备工作