目录
参数文件
spfile与pfile
参数文件有SPFILE和PFILE两种,根据它俩的特点,整理出如下表格。
特点 | SPFILE | PFILE |
版本 | Oracle9i之后 | Oracle9i之前 |
格式 | 二进制 | 普通文本 |
默认名称 | spfile+oracle_sid.ora | init+oracle_sid.ora 或者 init.ora |
名称例子 | spfileorcl.ora | init.ora |
查看方式 | strings spfileorcl.ora | cat init.ora |
创建spfile
如果SPFILE丢失了,What's up !怎么办呢?
如果数据库正在运行中,SPFILE丢失了,此时是不会影响到数据库运行的;因为参数文件的内容已经加载到内存中了。但SPFILE丢失后,下次再启动数据库时,是会启动失败的。
但我们可以先救急启动,再创建SPFILE。
- 强制启动
#强制启动实例
startup force nomount
#上面就相当于用pfile强制启动
startup nomount pfile='/u01/app/oracle/product/19c/db_1/dbs/initorcl.ora'
- 实例启动后,创建spfile
#从内存中创建spfile
create spfile from memory;
#也可以从pfile中创建spfile
create spfile from pfile='/u01/app/oracle/product/19c/db_1/dbs/initorcl.ora'
创建pfile
但大家也发现了,上面创建spfile的一个大前提,就是得先创建好pfile。那么怎么创建嘞?
- 最简单的方法
直接重定向一个文件,但需要注意的是,此方法需要手工调整一下,防止出现换行现象。
strings spfileorcl.ora >> initorcl.ora
- 实例打开时创建
create pfile='/home/oracle/initorcl.ora' from spfile;
参数查看
直接show ~
- 查看所有参数
show parameter --查看所有参数
- 查看某个参数
#可以模糊查询,例如只写个undo,就会把所有的undo参数列出来
SQL> show parameter undo
NAME TYPE VALUE
------------------------------------ --------------------------------- ------------------------------
temp_undo_enabled boolean FALSE
undo_management string AUTO
undo_retention integer 3000
undo_tablespace string UNDOTBS1
#可以指定某个参数的名字,如果您清楚的记得名字的话,例如下面。
SQL> show parameter undo_retention
NAME TYPE VALUE
------------------------------------ --------------------------------- ------------------------------
undo_retention integer 3000
动态性能视图v$parameter
select * from v$prameter;
#name字段就是参数的名字,记不清参数名是啥,就直接模糊查询
select * from v$parameter where name like '%undo%'
参数类型
参数类型从大类上,可以分为动态参数和静态参数。
静态参数
静态参数有3特点:
- 只能在参数文件中更改,改变写入spfile;
- 需要重启实例才能生效;
- scope=spfile
动态参数
动态参数有3特点:
- 可以在内存中修改;
- 可以在系统级、会话级更改;
- scope=both、scope=memory、scope=spfile都可以;
Oracle的参数太多了,我觉得人的精力都是有限的。
要是真死记硬背哪些是静态哪些是动态也太2了。
毕竟有的参数,时间长了理解了也就知道了。
而刚开始呢,我有个方法可以硬刚!:
直接scope=both改,报错不让改的就是静态参数,反之就是静态参数。(●ˇ∀ˇ●)
关于scope
- SCOPE = SPFILE
更改仅应用于服务器参数文件(spfile)。
当前实例未做任何更改。 对于动态和静态参数,更改在下次启动时均有效,并且是永久性的。
这是静态参数唯一允许的SCOPE规范。
- SCOPE = MEMORY
更改仅应用于内存。
更改将对当前实例进行,并立即生效。
对于动态参数,效果是即时的,但不是持久的,因为服务器参数文件未更新。
对于静态参数,不允许使用此规范。
- SCOPE = BOTH
更改同时应用于服务器参数文件和内存。
更改将对当前实例进行,并立即生效。
对于动态参数,效果是持久的,因为服务器参数文件已更新。
对于静态参数,不允许使用此规范。
如果修改参数以后,不写SCOPE=XXX;那么就相当于默认选择了SCOPE=BOTH