Author =Wain=Ynmc 欢迎转载,请保留作者信息
^1^ PARAMETER
修改系统参数,系统参数是不能在spfile里面直接修改的,可以在数据库运行时通过sql修改。
show parameter 可以查看系统的参数。
alter system set XXX=XXXX scope= memory|spfile|both,选both就是二者皆选,memory是作用于当前实例,spfile应用于参数文件,修改将在下次生效,但是某些静态参数只能选择spfile。
如:在Oracle9i中,sql_trace是不能scope=memory或是both的,但是在Oracle10g中却可以。
1. 在当前实例中修改
SQL> show parameter sql_trace
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
sql_trace boolean TRUE
SQL> alter system set sql_trace=false scope=memory;
系统已更改。
SQL> show parameter sql_trace
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
sql_trace boolean FALSE
2.在spfile中修改,只能在下次实例运行时生效.
SQL> alter system set sql_trace=true scope=spfile;
系统已更改。
SQL> show parameter sql_trace
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
sql_trace boolean FALSE
3.Both,同时生效.
SQL> alter system set sql_trace=true scope=both;
系统已更改。
SQL> show parameter sql_trace
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
sql_trace boolean TRUE
实际上,sql_trace这个参数在Oracle10g中已经被deprecated(废弃)了,对这个参数进行设置会导致数据库在启动时报错:ora-32004. 另外一篇文章http://o.cnblogs.com/archive/2005/11/23/282783.html<ORA-32004 与 Deprecated 参数 in Oracle10g >会专门介绍解决办法.在这里并不影响我们理解修改系统参数.
^2^ spfile与pfile
spfile和pfile都是数据库的参数文件,pfile是到8i为止的主要参数文件,从9i开始,Oracle采用了一个spfile文件,这种文件不像pfile,它是一个不能用文本编辑器编辑的二进制文件,pfile则可以直接用notepad编辑。这样做的好处当然是提高了安全性。
数据库在启动时,调用参数文件的顺序为:
a. spfile${ORACLE_SID}.ora
缺省目录 UNIX: ${ORACLE_HOME}/dbs/
NT: ${ORACLE_HOME}\database
b. spfile.ora
缺省目录 UNIX: ${ORACLE_HOME}/dbs/
NT: ${ORACLE_HOME}\database
c. init${ORACLESID}.ora
缺省目录 UNIX: ${ORACLE_HOME}/dbs/
NT: ${ORACLE_HOME}\database or ${ORACLE_HOME}\admin\db_name\pfile\
可以通过show parameter pfile|spfile 查看当前的参数文件,不过用pfile和spfile查出来的都是同一个参数,因为一次只能用一个参数文件.
SQL> show parameter spfile;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string F:\ORACLE\PRODUCT\10.2.0\DB_1\
DATABASE\SPFILEYN.ORA
SQL> show parameter pfile;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string F:\ORACLE\PRODUCT\10.2.0\DB_1\
DATABASE\SPFILEYN.ORA
修改spfile一般来说麻烦一些,有2种常用的办法:
1. 通过pfile修改spfile
在pfile里面可以制定spfile作为参数文件,这保持了向下的兼容性.我们可以在数据库启动的时候选择自定义的pfile进行启动:
SQL>startup pfile='f:\XXXXXX\initSID.ora'
但是不能直接制定spfile做参数文件,只能在pfile里面加上一句:
SPFILE= 'E:\Oracle\Ora9iR2\database\SPFILEEYGLEN.ORA'就可以了.
在Oracle10g下,可以在数据库运行的时候用语句生成pfile或是spfile.在较早一点的版本中,好像只能在shutdown状态下运行这两条命令.
create spfile='XX' from pfile='XX';
create pfile='XX' from spfile='xx';
语句中'XX'不是必须要制定的,如果omit,则在默认的位置生成或查找文件.通过这个方法,使得spfile与pfile联系在了一起.
2.通过修改parameter达到修改spfile
这个方法正如开始说的一样,在sql直接修改parameter,而让数据库系统帮你修改,这个方法也是官方推荐的办法,一是安全性好,它会在你修改参数的时候进行检查;二是有助于理解参数的意义.