初始化文件用来记录oracle数据库的基本配置信息,包括内存分配信息及控制文件等。通常启动数据库时,系统读取初始化文件启动oracle数据库到nomount阶段。参数文件通常在$ORACLE_HOME/dbs/目录下,有两种文件格式保存,如下:
1、pfile:静态参数文件,一般名为init<sid>.ora,文本文件格式,linux下vi编辑器访问及修改内容,所作更改在下次启动时生效,oracle 9i后引进。
2、spfile:服务器参数文件,一般名为spfile<sid>.ora,二进制格式文件,linux下strings命令查看文件内容,所做更改永久有效,不受关闭和启动的影响,永久驻留于服务器端。支持rman备份。
oracle访问参数文件的顺序:
– spfile<SID>.ora --oracle数据库创建时自动建立的spfile文件
– spflie.ora --oracle缺省的spfile文件
– init<SID>.ora --oracle数据库创建时自动建立的pfile文件
– init.ora --oracle缺省的pfile文件
pfile和spfile文件相互转换:
pfile-->spfile:SQL>create spfile[='*****'] from pfile[='******'];
spfile-->pfile:SQL>create pfile[='******'] from spfile[='******'];
11g中的新指令,从memory中生成
create spfile = '<dir>' from memory;
查看系统参数:
SQL>show parameter <parametername>
修改参数文件参数:
pfile:vi编辑器编辑保存,下次启动有效。
spfile:alter system|session set parametername=<parametername>
scope=memory | spfile |both sid=<'sid'>|'*';
附:-- 查询视图:v$parameter
isses_modifiable 可以被alter session修改
isssy_modifiable 可以被alter system修改
-- sid:
sid :只对某一个实例
* :对所有的实例修改
-- 可以从v$parameter视图中来得到哪些可以使用alter system修改,哪些可以使用alter session来修改。
SQL> col name for a40
SQL> select NAME,ISSES_MODIFIABLE,ISSYS_MODIFIABLE from v$parameter
2 where name like 'sql%';
NAME ISSES ISSYS_MOD
---------------------------------------- ----- ---------
sql_trace TRUE IMMEDIATE
sql92_security FALSE FALSE
sql_version TRUE FALSE
sqltune_category TRUE IMMEDIATE
SQL> select distinct issys_modifiable from v$parameter;
ISSYS_MOD
---------
IMMEDIATE /*动态参数,直接修改到内存的参数alter system set <> = <>,后面不需要跟scope*/
FALSE /*静态参数,不能直接修改到内存,alter system set <> = <> scope = spfile*/
DEFERRED /*会话级别参数,直接通过alter session set <> = <>*/
SQL> select distinct isses_modifiable from v$parameter;
ISSES
-----
TRUE
FALSE
删除参数文件:
pfile:可以直接vi或vim修改或删除。
spfile:以下命令进行删除,参数文件将恢复默认值。
SQL>alter system|session reset parametername=<name>
scope= memory | spfile |both sid=<'sid'>|'*';
从指定参数文件启动数据库:
SQL>startup pfile=<dir>
SQL>startup spfile=<dir>
--查看当前使用的哪个参数文件启动的
SQL> select distinct isspecified from v$spparameter;
ISSPEC
------
FALSE
/*
如果第一个值是FALSE还是TRUE,如果是FALSE,则是pfile,否则则是spfile.
也可以尝试修改spfile ,如果报错则可以判断是从pfile启动,当然所修改的参数必须是可以修改的*/
SQL> alter system set sga_target = 200m scope = spfile;
alter system set sga_target = 200m scope = spfile
*
ERROR at line 1:
ORA-32001: write to SPFILE requested but no SPFILE specified at startup
隐藏参数
SQL> desc x$ksppi /*Name列中为隐藏参数的名字*/
Name Null? Type
----------------------------------------- -------- ----------------------------
ADDR RAW(4)
INDX NUMBER
INST_ID NUMBER
KSPPINM VARCHAR2(80)
KSPPITY NUMBER
KSPPDESC VARCHAR2(255)
KSPPIFLG NUMBER
KSPPILRMFLG NUMBER
KSPPIHASH NUMBER
--下面视图中为隐藏参数的值
SQL> desc x$ksppcv
Name Null? Type
----------------------------------------- -------- ----------------------------
ADDR RAW(4)
INDX NUMBER
INST_ID NUMBER
KSPPSTVL VARCHAR2(512)
KSPPSTDVL VARCHAR2(512)
KSPPSTDF VARCHAR2(9)
KSPPSTVF NUMBER
KSPPSTCMNT VARCHAR2(255)
--使用下面的命令来查看系统中的隐藏参数;
SQL> select ksppinm,ksppstvl from x$ksppi a,x$ksppcv b where a.indx = b.indx;
and ksppinm like '%_allow%';
KSPPINM KSPPSTVL
---------------------------------------- ----------
_allow_level_without_connect_by FALSE
_asm_allow_only_raw_disks TRUE
_asm_allow_resilver_corruption FALSE