oracle随记——spfile和pfile的区别,生成,加载和修复

本文深入解析了Oracle数据库的配置文件,包括pfile和spfile的区别、配置文件的加载顺序、如何生成和切换配置文件,以及修复配置文件的方法。提供了一套完整的指导方案,帮助读者更好地理解和管理数据库配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

oracle数据库的配置文件指的是系统在启动到“nomount”阶段需要加载的文件,也叫做pfile或者spfile,但是其实pfile和spfile是不同的文件。
不同的数据库配置文件是不同的,但是格式大体是近似的,默认地址是oracle安装目录下database 文件夹,例如:“c:\app\Administrator\product\11.2.0\dbhome_1\database”。
前面提到,配置文件分两种,一种叫pfile,一种叫spfile,区别在于spfile是二进制文件,给机器看的,pfile是文本文件,给用户看的,但是oracle启动的时候只会加载其中一个文件,当然最好是加载二进制的spfile,速度更快。
虽然配置文件分两种,但是文件里的配置,或者说文件想表达的内容是一样的,所以这两个文件是可以相互转换的,以sysdba身份进入sqlplus(以下不做特殊申明,默认表示已经以sysdba身份登录了):
sqlplus / as sysdba;
1. 首先先看看系统加载的spfile信息
show parameter spfile(或者show parameter pfile,显示的结果是一样的)
结果1
name显示的是spfile,value是加载的spfile文件地址,即表示当前加载的是spfile文件。
spfile文件命名规则:” SPFILE” +sid. ora;例如SPFILEORCL.ORA
pfile文件命名规则:” INIT”+ sid. ora;例如INITorcl.ORA
2. pfile和spfile文件的相互转换
可能大多数朋友发现,在存放配置文件的文件夹里,只有spfile,没有pfile,本人电脑上的数据库是刚安装的64位oracle,也是没有,那么想要数据库用文本文件启动,或者想用文本文件查看下配置文件的参数,却又没有这个文件怎么办呢,命令oracle以spfile文件的配置生成一个pfile就可以了,输入以下命令:
create pfile from spfile;
提示文本文件已创建。
再次查看文件夹会发现已存在pfile文件
C:\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\DATABASE\INITorcl.ORA
3. 让oracle加载pfile或者spfile
系统默认用二进制文件启动,但是有的朋友喜欢用文本文件启动,方便查看实时的参数。这里说明下,系统无法修改用哪种参数文件启动(个人猜测是因为参数文件是oracle启动时加载的第一个文件,如果这个文件可以随意配置,会导致无法启动等故障)。但是oracle对参数文件有一个加载顺序,优先查找加载spfile,找不到再去找pfile,所以我们可以生成了pfile后将spfile文件删除,这样系统就自动加载pfile了 ,这时候再去执行spfile命令,查到的结果就是空(加载的一定是pfile文件 ,如果没有加载任何文件的话,数据库无法启动)
结果2
4. spfile加载顺序
这里详细提一下配置文件的加载顺序
1) SPFILE.ORA
2) SPFILE.ORA
3) INIT.ora
4) startup pfile=’’
startup pfile=’’是以指定的pfile文件去启动数据库,按理说这个应该排在第一,但是oracle在加载的时候,即便指定了pfile文件,也依然会去查找有没有符合条件的pfile文件,如果有,就加载,如果都没有,才会去加载指定的pfile文件。
第一个找的是以PFILE开头,接sid的名称,以ora结尾的文件;如果没有,再找SPFILE.ORA这个文件;如果还是没有再找以INIT开头,接sid名称,以ora结尾的文件;这三个都没有的情况下,再去加载指定的pfile文件;如果指定的文件也没有,那就无法启动数据库了。
如果有前三种文件中任意一个,再指定加载一个pfile,那么oracle也会报错,无法启动。

结果3
5. 修复配置文件
如果配置文件坏了怎么办,数据库无法启动怎么办?有很多种方法,这里介绍一个最简单的。
如果坏了,丢失了,彻底删除了,备份数据也不行了,各种绝望了,可以试试这样,随便找一个pfile(一定要是文本文件,方便修改),将文件里相关地址或者数据文件的信息,根据实际数据库的信息做修改,或者增加相应的文件夹,并把文件里的sid改成实际数据库的sid,例如这些参数:
*.control_files=’C:\app\Administrator\oradata\orcl\control01.ctl’,’C:\app\Administrator\flash_recovery_area\orcl\control02.ctl’
改成自己项目里对应的controller文件,然后启动数据库,如果报错,就根据保存信息删除多余的参数,直到可以启动为止。。。
只要数据库启动了,万事好商量。
执行这条语句:
create pfile from memory;
从内存中生成一个spfile文件,这样下次启动就不需要再指定pfile了。
6. 替换文件的某个参数
假如因为一个spfile文件的某个参数的原因,数据库不能启动,没有备份,没有pfile,各种蛋疼的没有,怎么办?新建一个ora文件,文件内容如下:
spfile=C:\app\Administrator\product\11.2.0\dbhome_1\database\11SPFILEORCL.ORA
参数名=参数值
startup pfile=’’
这表示用指定的pfile文件启动,这个pfile文件包含了C:\app\Administrator\product\11.2.0\dbhome_1\database\11SPFILEORCL.ORA文件的所有数据,并且还有后面的那些参数,后面的参数会将前面的参数覆盖掉,顺利启动后,生成一个新的spfile即可。

如有错误,还望指出,共同进步;手敲累抽搐,装载注出处。

### 如何在Excel中生成指定方向的随机数据 #### 使用RANDRANDBETWEEN函数生成数值型随机数据 为了生成数值类型的随机数据,可以使用`RAND()`或`RANDBETWEEN(bottom, top)`这两个内置函数。前者返回0到1之间的均匀分布浮点数;后者则允许设定上下限来获取整数范围内的随机值。 对于创建一维数组形式的随机序列(即单行或多列),只需在一个单元格输入相应公式并向下或向右拖动填充柄即可复制该公式至相邻位置[^1]。 ```excel =RAND() ' 生成介于0与1之间的小数 =RANDBETWEEN(1, 100) ' 生成1到100间的任意整数 ``` #### 利用INDEX-MATCH组合实现定向抽取 当涉及到按照一定规则筛选符合条件的数据项时,则可能需要用到更复杂的逻辑结构。比如通过结合`INDEX/MATCH`函数配合其他辅助条件判断语句如`IF`等,可以从现有表格里挑选满足特定标准的信息片段形成新的有序列表[^2]。 假设有一个包含姓名、年龄两字段的工作表A,现在希望基于此构造一份仅保留成年人群体的新清单B: | A | B | |--|--| | Name Age | Adult Names Only | | Alice 28 | Alice | | Bob 17 | | | Carol 34 | Carol | 此时可以在新工作表的目标区域内键入如下公式,并沿垂直方向拉伸以覆盖整个待处理区间: ```excel =IFERROR(INDEX($A$2:$A$10,MATCH(TRUE,$B$2:$B$10>=18,0)),"") ``` 这里采用的是错误捕捉机制(`IFERROR`)包裹住核心查询部分——先定位所有大于等于18岁的记录索引号(MATCH),再据此检索对应的名称字符串(INDEX)。 #### 构建自定义VBA宏程序完成复杂任务 如果需求更加个性化或者频繁重复执行相似操作的话,编写一段简单的Visual Basic for Applications (VBA) 宏代码不失为一种高效解决方案。下面给出了一段示范性的脚本,它能依据给定概率权重分配不同类别标签给选定区域内的每一个元素[^4]: ```vba Sub AssignRandomCategory() Dim rng As Range Set rng = Selection For Each cell In rng Dim randValue As Double randValue = Rnd() If randValue < 0.3 Then cell.Value = "Type A" ElseIf randValue >= 0.3 And randValue < 0.6 Then cell.Value = "Type B" Else cell.Value = "Type C" End If Next cell End Sub ``` 这段宏会遍历当前选中的单元格集合,并根据预设的概率比例为其赋予不同的分类标记。“Type A”, “Type B” “Type C”的出现几率分别为30%,30%以及剩余的40%。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值