参数文件:
spfile<SID>.ora 动态参数文件,是二进制文件,9i以后引入并建议使用
init<SID>.ora 静态参数文件,是文本文件
动态参数,部分参数可以动态修改。建议9i以后就使用spfile。
静态参数文件:在oracle启动时应用到oracle数据库中,数据库启动后就不再使用,会关闭这个文件,如果要修改静态参数文件,只能重启数据库。
动态参数文件:oracle启动时读一下,将参数应用到数据库中,但不关闭这个文件,这个文件可以动态修改。只是部分参数可以动态修改。(可以动态修改,但修改完成后不会马上生效,需要重启),所以数据库一般使用动态参数文件。
[oracle@oracle dbs]$ pwd
/u01/app/oracle/product/11.2.2/db_1/dbs
[oracle@oracle dbs]$ ls
hc_DBUA0.dat init.ora orapwORCL peshm_ORCL_0 spfileORCL.ora
hc_ORCL.dat lkORCL peshm_DBUA0_0 snapcf_ORCL.f
Oracle启动过程中参数文件寻找顺序
通过$ORACLE_SID找到实例名称,通过实例名称在目录(/u01/app/oracle/product/11.2.2/db_1/dbs)下找到spfile$ORACLE_SID.ora的文件.找到这个文件后通过里面的参数来启动数据库实例,如果文件找不到,会查找init$ORACLE_SID.ora静态文件。
动态,静态参数文件的生成
create pfile from spfile; #通过动态参数文件生成静态参数文件
[oracle@oracledbs]$ pwd
/u01/app/oracle/product/11.2.2/db_1/dbs
[oracle@oracledbs]$ ls
hc_DBUA0.dat init.ora lkORCL peshm_DBUA0_0 snapcf_ORCL.f
hc_ORCL.dat initORCL.ora orapwORCL peshm_ORCL_0 spfileORCL.ora
[oracle@oracledbs]$ ll initORCL.ora
-rw-rw-r--. 1 oracleoracle 1196 Oct 14 16:06 initORCL.ora
[oracle@oracledbs]$ date
Sun Oct 1416:06:58 CST 2018
通过spfileORCL.ora生成initORCL.ora文件
create spfile from pfile; #通过静态参数文件生成动态参数文件
用于修改错误配置的spfile
参数的修改:
ALTER SYSTEM SETparameter_name=parameter_value [comment=’注释’] scope=[memory|spfile|both] [sid=’sid’|’*’]
参数:内存中有参数,参数文件里也有。
Scope=memory:表示只修改内存中的参数,并马上生效,不修改参数文件里面的参数.
Scope=spfile:表示修改参数文件,不会在内存中马上生效,重启数据库后生效
Scope=both :表示以上两者的合集
eg:alter system set sga_max_size=2285000000 scope=both;
通过查看v$parameter知道修改的参数是立即生效还是重启后生效:
SYS AS SYSDBA@ORCL>select name,value,ISSYS_MODIFIABLEfrom v$parameter;
一个常见错误的解决流程
错误了的修改了spfile里面的参数,数据库启动失败,因为没有办法直接修改spfile,怎么办?
数据库启动三个阶段:
Startup nomount(找到spfile参数文件并打开,根据参数文件配置参数启动实例,启动内存空间和后台进程)
SYS ASSYSDBA@ORCL>startup nomount
ORACLE instance started.
Total System Global Area 422670336 bytes
Fixed Size 1336960 bytes
Variable Size 356518272 bytes
Database Buffers 58720256 bytes
Redo Buffers 6094848 bytes
#ps –ef | grepORCL
oracle 2045 1 015:52 ? 00:00:00 ora_psp0_ORCL
oracle 2047 1 015:52 ? 00:00:00 ora_dia0_ORCL
oracle 2049 1 015:52 ? 00:00:00 ora_mman_ORCL
oracle 2051 1 015:52 ? 00:00:00 ora_dbw0_ORCL
oracle 2053 1 015:52 ? 00:00:00 ora_dbw1_ORCL
oracle 2055 1 015:52 ? 00:00:00 ora_lgwr_ORCL
oracle 2057 1 015:52 ? 00:00:00 ora_ckpt_ORCL
oracle 2059 1 015:52 ? 00:00:00 ora_smon_ORCL
oracle 2061 1 015:52 ? 00:00:00 ora_reco_ORCL
oracle 2063 1 015:52 ? 00:00:00 ora_mmon_ORCL
[oracle@oracle ~]$ipcs -a
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x1a3ad540 98304 oracle 660 4096 0
------ Semaphore Arrays --------
key semid owner perms nsems
0x64f5b758 327682 oracle 660 154
------ Message Queues --------
key msqid owner perms used-bytes messages
SYS AS SYSDBA@ORCL>showparameter control
NAME TYPE VALUE
------------------------------------ --------------------------------------------------
control_file_record_keep_time integer 7
control_files string /u01/app/oracle/oradata/ORCL/c
ontrol01.ctl, /u01/app/oracle/
flash_recovery_area/ORCL/contr
ol02.ctl
control_management_pack_access string DIAGNOSTIC+TUNING
alter database mount(根据参数文件中记录的控制文件位置打开控制文件)
SYS AS SYSDBA@ORCL>alter database mount;
Database altered.
alter database open(根据控制文件信息打开数据文件,redolog日志文件,open数据库)
SYS AS SYSDBA@ORCL>alter database open;
Database altered.
注:nomount之前就可以根据pfile创建spfile,根据spfile创建pfile.
数据库关闭四种方式:
默认是normal:
1. abort(模拟自然断电,内存被清空,内存中的数据没有写入数据数据文件,事务被立即中断,没有提交,没有回滚。再次启动库时需要实例恢复,万不得已才用这种方式关闭数据库)
2.immediate(强制中断当前正在运行的所有事务,回滚这些事务,回滚完毕,强制中断所有的连接,将实例中的所有数据写入数据文件,所有未提交事物全部回滚,强制断开用户连接,最常使用)
3.transactional(等待正在运行的事务,一直到他们提交或者回滚,所有事务主动结束以后(提交或回滚),强制中断连接,将实例里面的数据写入数据文件,清空缓存,如果有事务一直没有提交或回滚,实例无法关闭,等待事物自动提交或回滚,强制断开用户连接,很少使用)
4.normal(等待事务的主动提交或者回滚,等待用户主动断开连接,如果有一个用户没有断开连接,那么数据库无法关闭,默认shutdown的参数,很少使用)