参数文件的管理:
1.参数文件的作用:记录数据库的配置的
(1)pfile ---> 文本文件
(2)spfile --->服务器的参数文件(二进制的)
两个参数文件的区别:
pfile
(1)文本文件,可编辑,文件名:init<SID>.ora
spfile
(2)二进制文件,只能放在oracle的服务器端,文件名:spfile<SID>.ora,因为他是二进制文件,所以他可以被rman 备份(因为rman只能备份二进制文件)
两种文件的修改方式不同
pfile 直接用编辑器进行修改
但是spfile 是二进制的,所以他的修改方式是:
alter system|session set parameter_name=values<>;
两种文件的优先级别不同
oracle 启动的时候要使用参数文件
oracle启动的时候
先找spfile<SID>.ora,找不到的时候再找下面的
再找spfile.ora,找不到再找下面的
再找init<SID>.ora 这个是pfile的文本参数文件
都找不到。oracle启动报错
参数文件的位置:
$ORACLE_HOME/dbs/spfile<SID>.ora
init<SID>.ora 的路径: $ORACLE_HOME/dbs/init<SID>.ora
pfile文件的位置 $ORACLE_BASE/admin/$ORACLE_SID/pfile(默认是在这个位置下面的额)
下面有一个init.ora.4122016112837(系统的初始化的文件),这个是初始化第一次用的,以后不会再用了。pfile文件的位置就在这,只是暂时还没有
默认情况下10g及其以后只使用pfile了,不再使用spfile 了,pfile 文件还是在上面的这个位置,只是暂时还没有就是喽
上面说的是参数文件的分类及其位置:
下面说一下,参数文件之间的互相转化:
比说我现在想把spfile 文件转化车pfile 文件
create pfile from spfile
然后就会创建一个pfile 文件到默认的pfile文件的位置:$ORACLE_BASE/admin/$ORACLE_SID/pfile
但是呢,我们也可以指定pfile 的路劲
create pfile=‘xxxxx’ from spfile
其他的转化同上理
oracle 11g还有一个牛逼的指令
比如说我们现在把spfile 文件给删了,下次启动oracle的时候就会报错,这个时候我们执行
crete spfile='xxxxx' from memory
下面实战,我们会看到我们之前装的数据库在$ORALCE_HOME/dbs下面没有init<SID>.ora这个pfile的文本参数文件
我们登录oracle
sqlplus / as sysdba;
create pfile from spfile ;
然后我们在切换到$ORALCE_HOME/dbs下面会看到initesbtest.ora 文件,这个就是pfile 的文本参数文件了
正在用的文件是不能转换的,但是你可以把转的路径改一下就可以转换了
参数文件到底有什么作用:
怎么查看当前参数文件是哪一个
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
service_names string esbtes
SQL> select distinct ISSPECIFIED from v$spparameter;
ISSPEC
------
TRUE
FALSE
我们看第一个值,看第一个值是TRUE的话,则使用的是spfile,如果第一个值是FALSE 的话,使用的就是pfile文件,这里我的第一个值是TRUE,所以我这里使用的是spfile,这里我们看到既有TRUE,又有FALSE,说说明我们两种参数文件都有,但是我们只看第一行。
还有一种方法是:
SQL> alter system set sga_target=200m scope=spfile;
System altered.
这里我修改这个参数,这里显示修改成功,说明我的启动方式读取的参数文件是spfile ,反之就是pfile
上面这两种是读取的是哪一种参数文件
下面说一下参数文件的修改
alter system|session set 参数文件名=values scope=memory|spfile|both;
memory 只对当前的instance内存有效,下次启动无效
spfile 只对spfile 进行修改,下次启动才能生效,当前的实例内存没有修改
both 内存和spfile都进行了修改。如果这里不指定scope,默认就是both
system 和 session 的区别:
判断参数能被哪些地方进行修改。我们查看视图 v$parameter
isses_modifiable可以被alter session 修改
issys_modifiable 可以被alter system修改
查看我当前的SID
SQL> select instance_name from v$instance
2 ;
INSTANCE_NAME
----------------
esbtest
比如说我现在想修改一个参数
我们可以通过参数文件产看有哪些参数
比如说这里我想修改内存
SQL> show parameter sga_
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
sga_max_size big integer 200M
sga_target big integer 200M
SQL>
SQL> alter system set sga_max_size=250m;
alter system set sga_max_size=250m
*
ERROR at line 1:
ORA-02095: specified initialization parameter cannot be modified
SQL> a scope=spfile
1* alter system set sga_max_size=250mscope=spfile
这里修改内存报错,是因为这是一个特殊的初始化参数,不能被修改,只能改到参数文件中,让他下次启动的时候生效,这个就是静态的参数。加一个spfile
我们也可以指定修改某一个实例的参数,即加一个sid
alter system set sga_max_size=250m scope=spfile sid='orcl'
上面这个命令适合单机有多个实例
alter session xxxxxx对会话进行修改
SQL> desc v$parameter
Name Null? Type
----------------------------------------- -------- ----------------------------
NUM NUMBER
NAME VARCHAR2(80)
TYPE NUMBER
VALUE VARCHAR2(4000)
DISPLAY_VALUE VARCHAR2(4000)
ISDEFAULT VARCHAR2(9)
ISSES_MODIFIABLE VARCHAR2(5)
ISSYS_MODIFIABLE VARCHAR2(9)
ISINSTANCE_MODIFIABLE VARCHAR2(5)
ISMODIFIED VARCHAR2(10)
ISADJUSTED VARCHAR2(5)
ISDEPRECATED VARCHAR2(5)
ISBASIC VARCHAR2(5)
DESCRIPTION VARCHAR2(255)
UPDATE_COMMENT VARCHAR2(255)
HASH NUMBER
ISSES_MODIFIABLE 等于TRUE 能被 system修改
ISSYS_MODIFIABLE 等于TRUE能被 session修改
select name,isses_modifiable,issys_modifiable from v$parameter;
我们可以通过上面的命令查看哪些值能被system|session 进行修改
SQL> select distinct issys_modifiable from v$parameter;
ISSYS_MOD
---------
IMMEDIATE 动态参数,可以直接修改到内存当中 alter system set XXX
FALSE 静态参数,不能直接修改到内存,需要加上scope,比如,alter system XXX scope=spfile,下次启动才能生效
DEFERRED 会话参数 alter session set XXX,只对当前会话生效
参数的删除
要是pfile ,直接进行修改删除
要是spfile 的话,需要执行
alter system reset <xxxx> scope=spfile sid='*'
这里还有一种隐藏参数,这里我没有听,太累了。上课好枯燥啊啊