1、’alter system set 参数=XX‘这个命令的本质
’altersystem set 参数=XX‘这个命令操作的对象是参数文件,
所以
即使sga_TARGET默认值为0,但是altersystem set sga_TARGET=0修改的结果还是会记录在参数文件中,即参数文件中有一条记录为sga_TARGET=0。
注释:
SQL> alter system set __sga_target=500m;
alter system set __sga_target=500m
*
第 1 行出现错误:
ORA-00911: 无效字符
由此证明
属于AMM机制的参数不能用alter system set命令修改。
2、alter system set sga_TARGET=0;就是相当于alter system set sga_TARGET=0 scope=both;
对于动态参数来说,例如sga_TARGET,
alter system set sga_TARGET=0;就是相当于alter system set sga_TARGET=0 scope=both;
即不仅修改内存里的该参数变量的值,也修改参数文件里的该参数变量的值。
altersystem set sga_TARGET=0 scope=memory;
即仅仅修改内存里的该参数变量的值
altersystem set sga_TARGET=0 scope=spfile;
即仅仅修改参数文件里的该参数变量的值
3、createpfile from spfile;和create pfilefrom memory;的区别在于:
如果参数使用altersystem set sga_TARGET=0 scope=spfile;来修改的话,则
createpfile from spfile;可以显示出该参数修改后的值,而create pfile from memory;不能显示出该参数修改后的值。
如果参数使用altersystem set sga_TARGET=0 scope=memory;来修改的话,则
createpfile from memory;可以显示出该参数修改后的值,而create pfile from spfile;不能显示出该参数修改后的值。
注释:
createpfile from memory;所得的pfile参数文件里还会显示一些隐含参数的值。
4、
v$parameter视图里显示的参数不包括隐含参数和AMM所用的以__开头的参数。
v$parameter视图里的数据是从参数文件读取的或是参数的默认值,具体地说,v$parameter视图里的数据先从参数文件读取,如果参数文件里没有该参数,则读取参数的默认值。修改v$parameter视图(即使用’alter system set 参数=XX‘这个命令)其实本质是更新到参数文件。
5、 在参数文件中,同一类前缀名中 排在后面的一条起作用, 而在SID和*两类前缀名里优先让跟在SID的参数起作用在实例里
pfile参数文件里:
sid.sga_TARGET=1024
sid.sga_TARGET=2000
或是
pfile参数文件里:
*.sga_TARGET=1024
*.sga_TARGET=2000
则 以pfile参数文件 启动实例时,select * from v$parameter where name=‘sga_TARGET’;查到的sga_TARGET值为2000。
而
pfile参数文件里为
sid.sga_TARGET=1024
*.sga_TARGET=2000
则 以pfile参数文件 启动实例时,select * from v$parameter where name=‘sga_TARGET’;查到的sga_TARGET值为1024。
上述实验说明,
同一类前缀名中 排在后面的一条起作用(因为oracle实例进程在参数文件里读取的顺序就是从上到下的), 而在SID和*两类前缀名里优先让跟在SID的参数起作用在实例里。
注释:
pfile参数文件和spfile参数文件的作用是一样的,只不过pfile参数文件的引入是便于人手动的管理修改实例里的参数的值,而spfile参数文件的引入是便于oracle系统管理实例里的参数的值,我们只能间接通过alter system set 参数 命令去修改spfile参数文件里的内容,而不能像pfile参数文件那样除了间接通过alter system set 参数 命令去修改其里的内容,还直接打开该文件来修改,所以spfile参数文件是二进制格式的,pfile参数文件是文本格式的。