oracle有三种状态:
(1)nomount
(2)mount
(3)open
在数据库启动的时候,首先读取的是参数文件,然后是控制文件最后在挂载打开数据库文件。
我们首先了解一下什么是参数文件:
(一)遗留的init.orawe文件
遗留的init.ora文件时一个结构相当简单的文件,这是一系列可变的键/值对,以下是一个init.ora文件示例:
所在默认目录:
[oracle@felix dbs]$ pwd
$ORACLE_HOME/dbs
[oracle@felix dbs]$ cat init.ora | grep -v '#'
db_name='ORCL'
memory_target=1G
processes = 150
audit_file_dest='
audit_trail ='db'
db_block_size=8192
db_domain=''
db_recovery_file_dest='
db_recovery_file_dest_size=2G
diagnostic_dest='
dispatchers='(PROTOCOL=TCP)(SERVICE=ORCLXDB)'
open_cursors=300
remote_login_passwordfile='EXCLUSIVE'
undo_tablespace='UNDOTBS1'
control_files = (ora_control1,ora_control2)
compatible ='11.2.0'
而现在主要用的是服务器参数文件:spfile文件
spfile文件时oracle做出的一个重大改变,有了spfile可以消除传统文件存在的两个问题:
(1)杜绝参数文件的繁殖。spfile文件总是存储在数据库服务器上,必须位于服务器主机本身,不能放在客户机上,对于参数文件设置来说,这样就可以只有一个”信息来源“。
(2)无需再数据库之外使用文本编辑器手动的维护参数文件(实际上,更确切的说法是不能手动的维护)。利用ALTER SYSTEM 命令,完全可以直接将值写入spfile。管理员不必再手动的查找和维护所有参数文件。
spfile文件是一个二进制文件,不能直接用vi编辑。
1.转化spfile即转成pfile(pfile是一个文本文件,可以直接用vi打开和编辑)
01:34:07 sys@felix SQL>show parameterspfile
NAME TYPE VALUE
---------------------------------------------------------- ------------------------------
spfile string /u01/app/oracle/product/11.2.0
/db_1/dbs/spfilefelix.ora
为了更容易读取和可视化要求,可以将spfile文件进行转化:
01:49:37 sys@felix SQL>create pfile fromspfile;
File created.
默认创建目录在:$ORACLE_HOME/dbs下,名称为pfile
查看pfile文件内容:
[oracle@felix dbs]$ cat initfelix.ora
felix.__db_cache_size=92274688
felix.__java_pool_size=4194304
felix.__large_pool_size=4194304
felix.__oracle_base='/u01/app/oracle'#ORACLE_BASEset from environment
felix.__pga_aggregate_target=146800640
felix.__sga_target=272629760
felix.__shared_io_pool_size=0
felix.__shared_pool_size=159383552
felix.__streams_pool_size=4194304
*.audit_file_dest='/u01/app/oracle/admin/felix/adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='/u01/app/oracle/oradata/felix/control01.ctl','/u01/app/oracle/fast_recovery_area/felix/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='felix'
*.db_recovery_file_dest='/u01/app/oracle/fast_recovery_area'
*.db_recovery_file_dest_size=4322230272
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP)(SERVICE=felixXDB)'
*.memory_target=417333248
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.undo_tablespace='UNDOTBS1'
(二)如何设置spfile文件的值:
使用alter system命令,语法如下:(<>中的部分是可选的,其中(|)便是“取候选列表中的一个选项”)
Alter system set parameter=value
Context:设置与此参数相关的可选注释
Deferred:制定系统修改是否支对以后的会话生效。
可以使用以下查询来查看哪些参数要求必须使用deferred:
sys@felix SQL>select name fromv$parameter where issys_modifiable='DEFERRED';
NAME
----------------------------------------
backup_tape_io_slaves
recyclebin
audit_file_dest
object_cache_optimal_size
object_cache_max_size_percent
sort_area_size
sort_area_retained_size
olap_page_pool_size
8 rows selected.
Scope=memery:只在实例中修改,数据库重启之后将不再保存
Scope=spfile只修改spfile中的值。数据库重启并再次处理spfile之前,这个修改不会生效。有些参数
Scope=both:表示在内存和spfile中都会完成参数修改
(三)取消spfile中的值得设置
Alter system reset parameter scope=
所以举例来说,如果我们想删除sort_area_size,以允许使用此前指定的默认值,可以这样做
Alter system reset sort_area_sizescope=spfile;
注意:在之前的版本中(在10g R2以及更早的版本中),与现在的做法不同SID=子句不是可选的,在那些版本中,必须在alter system命令的最后加上SID=’*’,为spfile中的所有实例重置参数,或者要对单个实例指定SID=’some_sid’来完成设置;
(四)spfile损坏修正
之前有可以重建pfile文件,spfile文件也可建:命令如下:
Create spfile from pfile=’$ORACLE_HOME/dbs/init
现在我们遇到spfile文件丢失了,怎么办??
我们可以从alter告警日志里找到spfile文件信息,
告警文件目录:
$ORACLE_BASE/diag/rdbms/felix/felix/trace
会有如下信息:
Using parameter settings in client-sidepfile /u01/app/oracle/admin/felix/pfile/init.ora on machine felix
System parameters with non-default values:
processes = 150
memory_target = 400M
control_files ="/u01/app/oracle/oradata/felix/control01.ctl"
control_files ="/u01/app/oracle/fast_recovery_area/felix/control02.ctl"
db_block_size = 8192
compatible = "11.2.0.0.0"
db_recovery_file_dest ="/u01/app/oracle/fast_recovery_area"
db_recovery_file_dest_size= 4122M
undo_tablespace ="UNDOTBS1"
remote_login_passwordfile= "EXCLUSIVE"
db_domain =""
dispatchers = "(PROTOCOL=TCP)(SERVICE=felixXDB)"
audit_file_dest ="/u01/app/oracle/admin/felix/adump"
audit_trail ="DB"
db_name ="felix"
open_cursors = 300
diagnostic_dest ="/u01/app/oracle"
然后把一下信息创建成pfile文件,再转化成spfile文件