拓扑园

  • O&M
    • Universal部署
    • PHP+VUE+Laravel相关
  • Oracle性能优化
  • Oracle项目案例
    • Oracle近期项目案例(目录)
    • Oracle实战问题解析(目录)
    • Oracle数据库名变更流程(2种方式)
    • Oracle数据库目录更换流程(使用Oracle的clone工具)
    • Oracle数据库迁移方案(目录)
    • 标准化文档系列
  • Oracle基础知识
    • LLL的Oracle培训(分类)
    • LLL的docker培训(分类)
    • 标准化文档系列--(分类)
    • Oracle核心经典分析(分类)
    • 图灵小队----(分类并包含以下文章)
    • --MySQL8.0/Oracle/Memcached/Redis等安装配置于RHEL/OL6/7/8.X系列-运行环境最优配置
    • --PG安装配置于RHEL/9X系列-运行环境最优配置
    • --自动维护任务详解-开启、关闭信息统计收集(统计信息)
    • --图灵小队—Oracle/PostgreSQL下创建一个用户测试表(自行定义数据行)
    • --图灵小队-Oracle存储过程导出表的明细_UTL_FILE(文章)
    • --图灵小队-Oracle数据库删除/卸载操作指南(文章)
    • --图灵小队-Oracle常用性能查询SQL语句(文章)
    • --图灵小队-Oracle数据库上线前检查(文章)
    • --图灵小队-Oracle常用SQL语句(文章)
    • --图灵小队—Linux/Oracle脚本/MySQL合集(持续更新)
    • --图灵小队-Oracle技巧记录(文章)
    • ADG
    • RAC
    • ASM
    • OGG
    • RMAN
    • EXPDP/IMPDP
    • 工厂数据导入导出系列
  • MySQL
    • MySQL数据库规范
    • MySQL项目案例
    • MySQL安装配置
    • MYSQL集群项目
    • MySQL常见处理
    • MySQL-Sysbench专题
    • MySQL-Percona Toolkit专题
  • Linux
    • Shell编程
    • kubernetes
    • docker
    • Linux
    • PHP
    • Nginx
    • haproxy
    • mail
    • 网站
    • 域名
    • 网址收藏
  • 数据中心
    • 新框架系统集合
    • 工作文档
    • EBS数据文件扩容
    • VMware虚拟化
    • EBS系列
    • 大数据
    • SVN
    • zabbix
    • SAP
    • 备份相关
    • FC交换机
    • SVN
  • K-Studing
    • D8-Python学习
    • Oracle/MySQl等面试题
    • LG-MySQL
    • LG-Docker/K8S
    • LG-PostgreSQL
    • LG-ORACLE_BBED
    • LG-ORACLE
    • LG-Elasticsearch(ES)+ELK
    • Oracle-19C-OCP
    • WERN_ORACLE培训
    • redis数据库
    • Nginx培训学习系列
  • 其他
    • 外研英语4年级下册-听力
    • 影视系列
    • 如何使用iTunes软件通过抓包下载旧版本的ios的app
天高任鸟飞
Oracle/MySQL数据库恢复/数据迁移/生产规范报告技术交流:TEL:18562510581(微信同号);加微信入群
  1. 首页
  2. Oracle
  3. 正文

ORACLE的SPFILE与PFILE(搜索顺序——spfile--spfile.ora--init.ora)

2019年10月17日 721点热度 0人点赞 0条评论

RACLE中的参数文件是一个包含一系列参数以及参数对应值的操作系统文件,可以分为两种类型。它们是在数据库实例启动时候加载的,决定了数据库的物理结构、内存、数据库的限制及系统大量的默认值、数据库的各种物理属性、指定数据库控制文件名和路径等信息,是进行数据库设计和性能调优的重要文件。

初始化参数文件(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为数据文件。

image.png

很多人有个很纳闷的疑问,为什么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'

复制代码

大家把这个文件用文本编辑器打开,就会发现确实是二进制文件,如下图所示:

image.png

    2:SPFILE的修改是可以通过SQL命令在线修改,不再需要通过手工修改,对于动态参数所有更改可以立即生效,而PFILE的修改必须重启实例才能生效。

    3:手动创建数据库而不是通过DBCA,则开始创建数据库时,只能定义PFILE。

 

修改spfile参数的三种模式:


scope=both      
立即并永久生效,(默认模式)

scope=spfile     下次启动才能生效。

scope=memory     立即生效但下次启动时失效

 

2: 如何查看SPFILE与PFILE的目录位置?

 

     2.1 方法一

方法1

1.  SELECT NAME, VALUE, DISPLAY_VALUE FROM V$PARAMETER WHERE NAME ='spfile';

2.   

3.   

    2.2 方法二

方法2

1.  SQL> show parameter spfile

2.   

3.          NAME                 TYPE            VALUE

4.  ------------------------ ----------- ------------------------------

5.        spfile                 string      /database/product/dbhome_1/dbs/spfilewgods.ora

6.   

7.  SQL> show parameter pfile

8.   

9.          NAME                   TYPE          VALUE

10.------------------------ ----------- ------------------------------

11.      spfile                   string   /database/product/dbhome_1/dbs/spfilewgods.ora

 

注意:如果数据库使用spfile参数文件,那么用show parameter spfile与 show parameter pfile的结果一致,如果数据库使用pfile参数文件,那么上面命令得到的结果都是空,这是为什么呢?

 

Code Snippet

1.  SQL> show parameter spfile;

2.   

3.       NAME                TYPE     VALUE

4.  -------------------------------- ----------- -----------

5.       spfile             string

6.  SQL> show parameter pfile;

7.   

8.       NAME                TYPE     VALUE

9.  -------------------------------- ----------- -----------

10.     spfile             string

11.SQL>

我们可以通过SQL_TRACE跟踪查看具体原因:

 

Code Snippet

1.  SQL> ALTER SESSION SET SQL_TRACE=TRUE;

2.   

3.  Session altered.

4.   

5.  SQL> show parameter spfile;

6.   

7.       NAME        TYPE                VALUE

8.  ------------ ----------- ------------------------------

9.       spfile      string  /u01/app/oracle/product/dbhome_1/dbs/spfilegsp.ora

10.                          

11. 

12.SQL> ALTER SESSION SET SQL_TRACE=FALSE;

13. 

14.Session altered.

15. 

16.SQL> SELECT T.VALUE || '/' || LOWER(RTRIM(I.INSTANCE, CHR(0))) || '_ora_' ||

17.            P.SPID || '.trc' TRACE_FILE_NAME

18.      FROM

19.      ( SELECT P.SPID

20.        FROM V$MYSTAT M, V$SESSION S, V$PROCESS P

21.        WHERE M.STATISTIC# =1

22.          AND S.SID = M.SID

23.          AND P.ADDR = S.PADDR

24.      ) P,

25.      ( SELECT T.INSTANCE

26.        FROM V$THREAD T, V$PARAMETER V

27.        WHERE V.NAME ='thread'

28.        AND(V.VALUE = 0 OR T.THREAD# = TO_NUMBER(V.VALUE))

29.      ) I,

30.    (SELECT VALUE FROM V$PARAMETER WHERE NAME='user_dump_dest') T;

31.TRACE_FILE_NAME

32.--------------------------------------------------------------------------------

33./u01/app/oracle/admin/orcl/udump/gsp_ora_3010.trc

34. 

35.SQL>

此时查看/u01/app/oracle/admin/orcl/udump/gsp_ora_3010.trc可以得知,其实show parameter命令本质是通过转换成下面的SQL语句执行的

Code Snippet

1.  SELECT NAME NAME_COL_PLUS_SHOW_PARAM,

2.         DECODE(TYPE,1,'boolean',2,'string',3,'integer',

3.                4,'file',5,'number',  

4.                6,'big integer', 'unknown') TYPE,

5.         DISPLAY_VALUE VALUE_COL_PLUS_SHOW_PARAM

6.  FROM V$PARAMETER WHERE UPPER(NAME) LIKE UPPER('%spfile%')

7.  ORDER BY NAME_COL_PLUS_SHOW_PARAM,ROWNUM

 

所以show parameter pfile转化为如下SQL语句

Code Snippet

1.  SELECT NAME NAME_COL_PLUS_SHOW_PARAM,

2.         DECODE(TYPE,1,'boolean',2,'string',3,'integer',

3.                4,'file',5,'number',  

4.                6,'big integer', 'unknown') TYPE,

5.         DISPLAY_VALUE VALUE_COL_PLUS_SHOW_PARAM

6.  FROM V$PARAMETER WHERE UPPER(NAME) LIKE UPPER('%pfile%')

7.  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,

 

参数类型

spfile

memory

both

deferred

静态参数

可以,重启服务器生效

不可以

不可以

不可以

动态参数(issys_modifiable为immediate

可以,重启服务器生效

可以,立即生效,重启服务失效

可以,立即生效,重启服务器仍然有效果

可以

动态参数(issys_modifiable为deferred)

 

 

参考资料:[深入解析Oracle.DBA入门进阶与诊断案例].盖国强

作者:潇湘隐者

出处:http://www.cnblogs.com/kerrycode/


如果你真心觉得文章写得不错,而且对你有所帮助,那就不妨小小打赏一下吧,如果囊中羞涩,不妨帮忙“推荐"一下,您的“推荐”和”打赏“将是我最大的写作动力!


本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接.

 

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: 暂无
最后更新:2019年10月17日

admin

这个人很懒,什么都没留下

打赏 点赞
< 上一篇
下一篇 >

文章评论

您需要 登录 之后才可以评论

COPYRIGHT © 2022 拓扑园. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

鲁ICP备2021020523号

鲁ICP备2021020523号