oracle 从停止状态到nomount状态,首先需要参数文件,给oracle分配内存,来启动进程
而这些参数文件都是什么呢?
参数文件分为两种:
pfile和spfile
pfile/spfile区别
pfile 默认的名称为“init+例程名.ora”文件路径:/u01/app/oracle/product/11.2.0/db_home1/dbs,这是一个文本文件,可以用任何文本编辑工具打开。
spfile 默认的名称为“spfile+例程名.ora”文件路径:/u01/app/oracle/product/11.2.0/db_home1/dbs以二进制文本形式存在,不能用vi编辑器对其中参数进行修改。
两个文件可以用命令 CREATE PFILE FROM SPFILE或CREATE SPFILE FROM PFILE来互相创建
区别:
1、启动次序 SPfile优先于Pfile。
2、PFILE是静态文件,修改之后不会马上生效,数据库必须重新启动读取这个文件才行。
3、SPFILE是动态参数文件,是二进制文件,不可以直接用记事本等等程序做修改,可以用ALTER命令做修改,不用重起数据库也能生效。
修改方法:
#查看参数信息
sql>show parameter;
#修改参数
sql>alter system set 参数名=值 scope=参数2;
参数2取值有如下三种:
1. scope=spfile: 对参数的修改记录在服务器初始化参数文件中,修改后的参数在下次启动DB时生效。适用于动态和静态初始化参数。
2. scope=memory: 对参数的修改记录在內存中,对于动态初始化参数的修改立即生效。在重启DB后会丟失,会复原为修改前的参数值。
3. scope=both: 对参数的修改会同时记录在服务器参数文件和內存中,对于动态参数立即生效,对静态参数不能用这个选项。
如果使用了spfile文件,则在执行alter system语句时,scope=both是default的选项。
如果沒有使用spfile文件,而在执行alter system语句时指定scope=spfile|both都会出错。
oracle启动时,读取参数文件的顺序是:
1.spfile$ORACLE_SID.ORA(创建数据库时创建的spfile)
2.spfile.ora(oracle缺省spfile文件)
3.init$ORACLE_SID.ora(创建数据库时创建的pfile)
4.init.ora(oracle缺省pfile文件)
如何判断使用的是spfile还是静态参数文件?
SYS@abc> show parameter spfile
NAME TYPE VALUE
--------------------------------- ----------- -----------------------------------------------------------------------
spfile string /u01/app/oracle/product/11.2.0/db/dbs/spfileorcl11g.ora
如果是null值,就是pfile启动的。
指定初始参数文件启动数据库:startup pfile='/$ORACLE_HOME/dbs/init$ORACLE_SID.ora'
但是请注意,只能指定pfile,不 能指定spfile。
参数文件之间的转换:
1、通过服务器参数文件spfile文件,创建静态参数文件pfile
SYS@orcl11g> create pfile from spfile;
SYS@orcl11g> create pfile='/home/oracle/init.ora' from spfile;
[oracle@db253 dbs]$ ls $ORACLE_HOME/dbs/initorcl11g.ora
/u01/app/oracle/product/11.2.0/db/dbs/initorcl11g.ora
[oracle@db253 dbs]$ file initorcl11g.ora
initorcl11g.ora: ASCII text
2、还可以通过对应的静态参数文件构建对应的spfile参数文件
SYS@orcl11g> shutdown immediate;
ORA-01507: database not mounted
ORACLE instance shut down.
SYS@orcl11g> create spfile from pfile;
3、还可以通过内存的状态,创建一个参数文件:(oracle 11g的功能)
SYS@orcl11g> create pfile from memory;
SYS@orcl11g> create spfile from memory;
通过一个简单的参数文件就能启动一个实例:
一个参数的参数文件
[oracle@db253 dbs]$ vi initabc.ora
[oracle@db253 dbs]$ cat initabc.ora
db_name=abc
[oracle@db253 dbs]$ export ORACLE_SID=abc
[oracle@db253 dbs]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on Thu Jun 13 09:59:26 2013
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Connected to an idle instance.
SYS@abc> startup nomount;
ORACLE instance started.
Total System Global Area 167395328 bytes
Fixed Size 1343640 bytes
Variable Size 113250152 bytes
Database Buffers 50331648 bytes
Redo Buffers 2469888 bytes
SYS@abc>
能够在nomount查看哪些信息?
V$PARAMETER / V$SPPARAMETER / V$SGA
V$SGASTAT / V$BH / V$INSTANCE / V$OPTION
V$VERSION / V$PROCESS / V$SESSION
SYS@orcl11g>select name,value,isses_modifiable,issys_modifiable from v$parameter where name='nls_date_format';
NAME VALUE ISSES ISSYS_MOD
--------------------- -------------------- ----- ---------
nls_date_format (null) TRUE FALSE
SYS@orcl11g>desc v$parameter;
ISSES_MODIFIABLE VARCHAR2(5): -- 表示能否使用alter session修改这个参数,会话级别的参数修改(true/false)
ISSYS_MODIFIABLE VARCHAR2(9): -- 表示这个参数能够在实例级别进行修改alter system
■ IMMEDIATE -- 表示可以修改,并且立即生效
■ DEFERRED -- 表示可以修改,但是下一个会话生效,或是重启实例生效(alter system set..deferred)
■ FALSE -- 表示使用scope=spfile选项修改,但是下一次实例启动才生效
通过上述方式,来查看哪些参数可以使用会话级别修改,还是系统(实例)级别来修改,
需要查看 ISSES_MODIFIABLE,ISSYS_MODIFIABLE 在v$parameter里确定
SYS@orcl11g> alter system reset nls_date_format scope=spfile; --将参数改回默认值
spfile和pfile参数文件内容是一样的,下面是他们的意思
*下面的参数描述了实例相关池的分配情况*/
orcl.__db_cache_size=251658240
orcl.__java_pool_size=4194304
orcl.__large_pool_size=4194304
orcl.__shared_pool_size=142606336
orcl.__streams_pool_size=0
*.audit_file_dest='/u01/app/oracle/admin/orcl/adump' /*警告日志路径*/
*.background_dump_dest='/u01/app/oracle/admin/orcl/bdump' /*后台进程日志路径*/
*.compatible='11.2.0.3.0' /*版本兼容号*/
*.control_files='/u01/app/oracle/oradata/orcl/control01.ctl' /*控制文件的信息*/
*.core_dump_dest='/u01/app/oracle/admin/orcl/cdump' /*服务器进程相关的日志路径*/
*.db_block_size=8192 /*内存块的大小*/
*.db_create_file_dest='/u01/app/oracle/oradata/orcl' /*tablespace ,datafile路径*/
*.db_create_online_log_dest_1='/u01/app/oracle/disk1' /*联机日志文件路径*/
*.db_create_online_log_dest_2='/u01/app/oracle/disk2' /*联机日志文件路径*/
*.db_domain='' /域名/
*.db_file_multiblock_read_count=16 /*一次可读取块的大小:*8k = 128kb*/
*.db_name='orcl' /数据库标识符/
*.db_recovery_file_dest='/u01/app/oracle/flash_recovery_area' /*闪回路径*/
*.db_recovery_file_dest_size=2147483648 /*闪回区可使用的大小GB*/
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)' /*共享服务器的配置参数*/
*.job_queue_processes=10 /*当前作业进程数*/
*.open_cursors=600 /*可打开的游标数*/
*.pga_aggregate_target=135266304 /*服务器进程大小*/
*.processes=250 /*描述当前可以运行的进程数*/
*.remote_login_passwordfile='EXCLUSIVE' /*远程登陆是否要用密码文件*/
*.sga_target=406847488 /*定义了sga的大小*/
*.undo_management='AUTO' /*Undo表空间的管理方式为自动管理*/
*.undo_tablespace='UNDOTBS1' /*指定使用哪一个undo表空间*/
*.user_dump_dest='/u01/app/oracle/admin/orcl/udump' /*用户进程的调试追踪文件路径*/