day06_ 客户端、参数文件故障,pfile,spfile

----------------------------------安装客户端--------------------------------------

讲PLSQL如何安装使用







############################参数文件################################

数据库启动到nomount  加载 spfile 【作用:加载实例后,数据库的一些环境参数在这设置】

spfile文件位置:$ORACLE_HOME/dbs 

spfile  命名规则:spfileSID.ora【oracle默认优先使用】

pfile  命名规则:initSID.ora  【它可以看成spfile的备胎】


使用规则:
             if(spfile存在) then 使用spfile
             
              else if 使用pfile
              else  库出错;

编辑规则:
          spfile 二进制文件,不能直接vi修改(在库打开的状态:alter system  set 参数=值 scope=both/spfile)
           pfile 文本文件,可以直接vi修改



查看当前参数文件使用情况:  show parameter spfile;


创建pfile:create pfile from spfile;  【查看一下】

创建spfile:create spfile from pfile;  【查看一下】

【实验一、模拟spfile损坏】

会话1:用spfile 创建 pfile、

会话2:找到新创建的pfile并改名、删除spfile

会话1:startup force; 【看报错????】  exit退出

会话2:找到新创建的pfile并改名,修改成原来正确的名称

会话1:startup   【恢复正常了】   show parameter spfile;【spfile没有了,默认使用pfile】 create spfile from pfile;

会话2:进入 $ORACLE_HOME/dbs 目录,查看spfile回来了

总结:当数据库正常的情况下,可以备份一份pfile,当参数文件出现问题时,可以再还原回来!!!!







【实验二、模拟spfile和pfile全损坏】

会话2:进入 $ORACLE_HOME/dbs 目录  删除spfile和pfile

会话1:startup force; 【看报错????】 exit; 退出吧 








【问题来了,现在spfile和pfile全没了,还没有备份,怎么办????】

1、在网上找一份 pfile文件,然后 vi pfile文件,自己修改一下,把网上找的参数配置到里面!

2、进入 bdump目录,找到alert日志 【数据库每次启动加载,都会记录参数文件的配置参数】/oracle/app/admin/ecom/bdump

回到 $ORACLE_HOME/dbs ,手工vi pfile文件,把alert日志中的参数粘入


processes                = 150
  __shared_pool_size       = 83886080
  __large_pool_size        = 4194304
  __java_pool_size         = 4194304
  __streams_pool_size      = 0
  sga_target               = 285212672
  control_files            = /oracle/app/oradata/ecom/control01.ctl, /oracle/app/oradata/ecom/control02.ctl, /oracle/app/oradata/ecom/control03.ctl
  db_block_size            = 8192
  __db_cache_size          = 188743680
  compatible               = 10.2.0.1.0
  db_file_multiblock_read_count= 16
  db_recovery_file_dest    = /oracle/app/flash_recovery_area
  db_recovery_file_dest_size= 2147483648
  undo_management          = AUTO
  undo_tablespace          = UNDOTBS1
  remote_login_passwordfile= EXCLUSIVE
  db_domain                =   ----------------------------------------------【删除不报错】
  dispatchers              = (PROTOCOL=TCP) (SERVICE=ecomXDB)----------------【删除不报错】
  job_queue_processes      = 10
  background_dump_dest     = /oracle/app/admin/ecom/bdump
  user_dump_dest           = /oracle/app/admin/ecom/udump
  core_dump_dest           = /oracle/app/admin/ecom/cdump
  audit_file_dest          = /oracle/app/admin/ecom/adump
  db_name                  = ecom
  open_cursors             = 300
  pga_aggregate_target     = 94371840



会话1:
startup force; 【能启动不???】

 ORA-01078:failure in processing system parameters
 LRM-00116:syntax error at 'dispatchers' following '='    【根据提示去pfile中查看】
 
 
 
startup force; 【正常了,现在当前使用的是pfile】





面试:人家会问pfile什么用???

新版本中10g以后,默认使用spfile,修改库相关参数: alter system  set 参数=值
正常运行情况下,pfile是没啥大用。
但是数据库出问题了,不能进入数据库了,如何修改数据库的一些值呢?只能依靠pfile了
所以pfile的地位还是重要的









【实验三、spfile无意中修改错了、pfile不存在了】
会话1:
 show parameter spfile;【spfile没有,默认使用pfile】

create spfile from pfile;

startup force;

alter system set processes=10;【ORA-02095: specified initialization parameter cannot be modified  不可动态修改】
原因:当前使用的是spfile,processes被动态加载了,正在被使用中,不让你去更新!!!

alter system set processes=10 scope=spfile;【processes被修改到spfile中,但当前的值没有修改,重启数据库后才能生效】

 show parameter processes;【验证结果,当前有没有修改???】



会话2:

 $ORACLE_HOME/dbs   删除pfile文件


会话1:

startup force;  【启动不了,上面把进程数据修改成10了,实例启动后只能加载10个进程!!!默认oracle启动的进程就会超过10个,所以启动不了】



会话2:strings spfile 【查看 processes 设置值】 


问题???如何解决,修改 processes值就成了!!! 可是spfile二进制不能修改啊???这时pfile的作用又体现了!!!


解决:

回到 $ORACLE_HOME/dbs ,手工vi pfile文件,把alert日志中的参数粘入

  processes                = 150
  __shared_pool_size       = 79691776
  __large_pool_size        = 4194304
  __java_pool_size         = 4194304
  __streams_pool_size      = 0
  sga_target               = 285212672
  control_files            = /oracle/app/oradata/TEST/control01.ctl, /oracle/app/oradata/TEST/control02.ctl, /oracle/app/oradata/TEST/control03.ctl
  db_block_size            = 8192
  __db_cache_size          = 192937984
  compatible               = 10.2.0.1.0
  db_file_multiblock_read_count= 16
  db_recovery_file_dest    = /oracle/app/flash_recovery_area
  db_recovery_file_dest_size= 2147483648
  undo_management          = AUTO
  undo_tablespace          = UNDOTBS1
  remote_login_passwordfile= EXCLUSIVE
  db_domain                =   ----------------------------------------------【删除不报错】
  dispatchers              = (PROTOCOL=TCP) (SERVICE=TESTXDB) ---------------【删除不报错】
  job_queue_processes      = 10
  background_dump_dest     = /oracle/app/admin/TEST/bdump
  user_dump_dest           = /oracle/app/admin/TEST/udump
  core_dump_dest           = /oracle/app/admin/TEST/cdump
  audit_file_dest          = /oracle/app/admin/TEST/adump
  db_name                  = TEST
  open_cursors             = 300
  pga_aggregate_target     = 94371840


会话1:

exit;

startup; 【还是报错啊????  因为当前默认使用的是spfile,把spfile删除】

exit;

startup force; 


总结:
spfile和pfile文件中修改的参数,还有很多,以后大家会学到更多!!!

好了, 这就是pfile和spfile的作用!!!





原文地址:https://www.cnblogs.com/xiaoxiao5ya/p/c86ed662c0dbd104c205b4e2bad0833a.html