ORACLE的SPFILE与PFILE
ORACLE中的参数文件是一个包含一系列参数以及参数对应值的操作系统文件,可以分为两种类型。它们是在数据库实例启动时候加载的,决定了数据库的物理 结构、内存、数据库的限制及系统大量的默认值、数据库的各种物理属性、指定数据库控制文件名和路径等信息,是进行数据库设计和性能调优的重要文件。
初始化参数文件(Initialization Parameters Files),Oracle 9i之前,ORACLE一直采用PFILE方式存储初始化参数,该文件为文本文件。
服务器参数文件(Server Parameter Files),从Oracle 9i开始,Oracle引入了SPFILE文件,该文件为二进制格式,不能通过手工修改。
1:PFILE与SPFILE的区别
1:PFILE是文本文件的,而SPFILE是二进制格式的。PFILE文件可以用文本编辑器打开手工配置、而SPFILE不行,只能通过SQL命令在线修改。从操作系统上可以看到这两者的区别,初始化参数文件为ASCII文本文件,SPFILE为数据文件。
很多人有个很纳闷的疑问,为什么SPFILE是二进制文件,但是可以用more命令查看?如下所示
[oracle@DB-Server dbs]$ more spfilewgods.ora _size=3992977408 wgods.__java_pool_size=16777216 wgods.__large_pool_size=16777216 wgods.__shared_pool_size=234881024 wgods.__streams_pool_size=16777216 *.aq_tm_processes=0 *.audit_file_dest=/database/admin/wgods/adump *.background_dump_dest=/database/admin/wgods/bdump *.compatible=10.2.0.1.0 *.control_files=/database/oradata/wgods/control01.ctl, /database/oradata/wgods/control02.ctl, /database/oradata/wgods/control03.ctl *.core_dump_dest=/database/admin/wgods/cdump *.db_block_size=8192 *.db_domain= *.db_file_multiblock_read_count=16 *.db_files=1024 *.db_name=wgods *.db_recovery_file_dest=/database/flash_recovery_area *.db_recovery_file_dest_size=2147483648 *.db_writer_processes=3 *.dispatchers=(PROTOCOL=TCP) (SERVICE=wgodsXDB) *.job_queue_processes=5 *.nls_territory=CHINA *.open_cursors=300 *.pga_aggregate_target=761266176 *.processes=150 *.remote_login_passwordfile=EXCLUSIVE *.sga_max_size=4294967296 *.sga_target=4294967296 *.undo_management=AUTO *.undo_tablespace=UNDOTBS1 *.user_dump_dest=/database/admin/wgods/udump *.utl_file_dir=/database/flash_recovery_area/WGODS/logmnr_dict
大家把这个文件用文本编辑器打开,就会发现确实是二进制文件,如下图所示:
2:SPFILE的修改是可以通过SQL命令在线修改,不再需要通过手工修改,对于动态参数所有更改可以立即生效,而PFILE的修改必须重启实例才能生效。
3:手动创建数据库而不是通过DBCA,则开始创建数据库时,只能定义PFILE。
修改spfile参数的三种模式:
scope=both 立即并永久生效,(默认模式)
scope=spfile 下次启动才能生效。
scope=memory 立即生效但下次启动时失效
2: 如何查看SPFILE与PFILE的目录位置?
2.1 方法一
------------------------ ----------- ------------------------------ spfile string /database/product/dbhome_1/dbs/spfilewgods.ora SQL show parameter pfile NAME TYPE VALUE ------------------------ ----------- ------------------------------ spfile string /database/product/dbhome_1/dbs/spfilewgods.ora
注意:如果数据库使用spfile参数文件,那么用show parameter spfile与 show parameter pfile的结果一致,如果数据库使用pfile参数文件,那么上面命令得到的结果都是空,这是为什么呢?
------------ ----------- ------------------------------ spfile string /u01/app/oracle/product/dbhome_1/dbs/spfilegsp.ora SQL ALTER SESSION SET SQL_TRACE=FALSE; Session altered. SQL SELECT T.VALUE || / || LOWER(RTRIM(I.INSTANCE, CHR(0))) || _ora_ || P.SPID || .trc TRACE_FILE_NAME FROM ( SELECT P.SPID FROM V$MYSTAT M, V$SESSION S, V$PROCESS P WHERE M.STATISTIC# =1 AND S.SID = M.SID AND P.ADDR = S.PADDR ) P, ( SELECT T.INSTANCE FROM V$THREAD T, V$PARAMETER V WHERE V.NAME =thread AND(V.VALUE = 0 OR T.THREAD# = TO_NUMBER(V.VALUE)) ) I, (SELECT VALUE FROM V$PARAMETER WHERE NAME=user_dump_dest) T; TRACE_FILE_NAME -------------------------------------------------------------------------------- /u01/app/oracle/admin/orcl/udump/gsp_ora_3010.trc
此时查看/u01/app/oracle/admin/orcl/udump/gsp_ora_3010.trc可以得知,其实show parameter命令本质是通过转换成下面的SQL语句执行的
SELECT NAME NAME_COL_PLUS_SHOW_PARAM, DECODE(TYPE,1,boolean,2,string,3,integer, 4,file,5,number, 6,big integer, unknown) TYPE, DISPLAY_VALUE VALUE_COL_PLUS_SHOW_PARAM FROM V$PARAMETER WHERE UPPER(NAME) LIKE UPPER(%spfile%) ORDER BY NAME_COL_PLUS_SHOW_PARAM,ROWNUM
SELECT NAME NAME_COL_PLUS_SHOW_PARAM, DECODE(TYPE,1,boolean,2,string,3,integer, 4,file,5,number, 6,big integer, unknown) TYPE, DISPLAY_VALUE VALUE_COL_PLUS_SHOW_PARAM FROM V$PARAMETER WHERE UPPER(NAME) LIKE UPPER(%pfile%) ORDER BY NAME_COL_PLUS_SHOW_PARAM,ROWNUM
而动态视图V$PARAMETER里面没有参数pfile,所以两者结果一致,当数据库以参数pfile启动时,查询结果为空。
3: 判断数据库从SPFILE还是PFILE启动?
方法1:查询动态视图V$PARAMETER,如果VALUE值为非空,则是SPFILE启动,否则是PFILE。
SELECT NAME, VALUE, DISPLAY_VALUE FROM V$PARAMETER WHERE NAME =spfile;
方法2:SHOW PARAMETER命令查看
SQL show parameter spfile;
方法3:通过v$spparameter视图,如果一下查询返回0值,表示你在使用pfile,否则表明你使用的是spfile
SQL SELECT COUNT(1) FROM v$spparameter where value is not null;
COUNT(1)
----------
22
或
SQL select decode(count(1), 1, spfile, pfile) USED
2 from v$spparameter
3 where rownum=1 and isspecified =TRUE;
USED
--------------
spfile
参数文件的搜索顺序
参数文件的搜索顺序如下:
1)spfile sid .ora
Unix/Linux缺省目录 $ORACLE_HOME/dbs/
Windows缺省目录 %ORACLE_HOME%\database
2) spfile.ora
Unix/Linux缺省目录 $ORACLE_HOME/dbs/
Windows缺省目录 %ORACLE_HOME%\database
3) init sid .ora
Unix/Linux缺省目录 $ORACLE_HOME/dbs/
Windows缺省目录 %ORACLE_HOME%\database
重建PFILE或SPFILE
create spfile[=xxxxx] from pfile[=xxxx];
create pfile[=xxxxx] from spfile[=xxxx];
通过spfile创建pfile文件(此时会在$ORACLE_HOME/dbs目录下生成pfile:initwgods.ora),当然你也可以指定参数文件的位置。
SQL create pfile from spfile;
File created.
scope参数说明:
静态参数 必须指定为scope
动态参数issys_modifiable为IMMEDIATE不加scope默认的是 both,而动态参数issys_modifiable为DEFERRED的必须加上scope=spfile 或者 加上derferred,
潇湘隐者 网名潇湘隐者/潇湘剑客、英文名Kerry,兴趣广泛,广泛涉猎,个性随意,不善言辞。执意做一名会写代码的DBA,混迹于IT行业
相关文章
- Oracle数据库使用出现错误-状态: 失败 ORA-01034: ORACLE not available ORA-27101: shared memory realm does not exist
- 【Oracle】Current online Redo 和 Undo 损坏的处理方法
- 《oracle每天一练》Oracle之物化视图
- ORACLE——Instant Client配置SQL*LDR、EXP等命令工具
- ORACLE查看补丁出现“OPatch failed with error code 1”
- ORACLE动态采样分析
- Oracle开窗函数 over()(转)
- cx_Oracle连接oracle数据库
- 【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之RAC 工作原理和相关组件(三)
- MySQL使用SQL实现Oracle Rank函数功能
- ^全^ 获取SQL SERVER2000/2005、MySql、Oracle元数据的SQL语句 [SQL语句来自CodeSmith]
- Oracle spfile
- C# VS2010中,用微软自带的System.Data.OracleClient来连接Oracle数据库
- C# 连接Oracle数据库,免安装oracle客户端
- C# Oracle、Sql Server连接(增、删、改、查)
- Atitit.mysql oracle with as模式临时表模式 CTE 语句的使用,减少子查询的结构性 mssql sql server..
- Oracle中添加虚拟列(emp是oracle自带表)
- Oracle 数据文件管理
- 如何获得 oracle RAC 11g asm spfile S档
- Oracle 跨平台迁移——筑梦之路
- oracle dg坏境主库redolog改动大小
- Oracle闪回恢复
- Oracle 19c LISTAGG 函数中distinct
- Oracle 12c中SQLPlus操作使用(包含实验二ORACLE SQL*PLUS环境与查询的详细操作解释)