Parameter File 参数文件
参数文件是用来保存数据库中所有非默认值得初始化参数,分为spfile(二进制)和pfile(文本文件)
查看数据库下的参数
select name,value from v$parameter where name='compatible';
NAME VALUE -------------------- -------------------- compatible 11.2.0.0.0 Elapsed: 00:00:00.00
select count(1) from v$parameter;
COUNT(1) ---------- 342 Elapsed: 00:00:00.01
可以看到当前版本数据库有342个参数,但是版本不同,参数的个数也不同,查看当前版本
select * from v$version;
BANNER -------------------------------------------------------------------------------- Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production PL/SQL Release 11.2.0.1.0 - Production CORE 11.2.0.1.0 Production TNS for Linux: Version 11.2.0.1.0 - Production NLSRTL Version 11.2.0.1.0 - Production Elapsed: 00:00:00.01
查看非默认值的参数,也就是被修改过的参数
select name,value from v$parameter where isdefault<>'TRUE';
NAME -------------------------------------------------------------------------------- VALUE ------------------------------------------------------------------------------------------------------------------------ processes 150 spfile +DATA/sundb/spfilesundb.ora memory_target 838860800 control_files +DATA/sundb/controlfile/current.260.974086781, +FLASH/sundb/controlfile/current.256.974086781 db_block_size 8192 compatible 11.2.0.0.0 db_create_file_dest +DATA db_recovery_file_dest +FLASH db_recovery_file_dest_size 4070572032 undo_tablespace UNDOTBS1 remote_login_passwordfile EXCLUSIVE db_domain dispatchers (PROTOCOL=TCP) (SERVICE=sundbXDB) audit_file_dest /u01/app/oracle/admin/sundb/adump audit_trail DB db_name sundb open_cursors 300 diagnostic_dest /u01/app/oracle 18 rows selected. Elapsed: 00:00:00.00
其中只有参数DB_NAME没有默认值,也就是说我们一定要指定DB_NAME才能创建数据库
为了简化对视图v$parameter的访问,Oracle提供了一个SQLPLUS环境命令:show parameter,可以以模糊匹配的方式返回含有字符串的参数打印出来。
show parameter name
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_file_name_convert string db_name string orcl db_unique_name string orcl global_names boolean FALSE instance_name string orcl lock_name_space string log_file_name_convert string service_names string orcl
被修改过的18个参数保存在参数文件中,参数文件有两种pfile(文本格式)、spfile(二进制格式),默认情况下oracle为我们创建的是spfile
可以修改的参数值我们叫做动态参数,不能修改的参数我们叫做静态参数。
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
select name,issys_MODIFIABLE from v$parameter where issys_MODIFIABLE <> 'FALSE' order by 2;
NAME ISSYS_MOD -------------------------------------------------------------------------------- --------- backup_tape_io_slaves DEFERRED recyclebin DEFERRED audit_file_dest DEFERRED olap_page_pool_size DEFERRED object_cache_max_size_percent DEFERRED sort_area_size DEFERRED sort_area_retained_size DEFERRED object_cache_optimal_size DEFERRED timed_statistics IMMEDIATE timed_os_statistics IMMEDIATE resource_limit IMMEDIATE license_max_sessions IMMEDIATE license_sessions_warning IMMEDIATE
动态参数类型:
defered:参数值可以修改,但是对于当前会话是不生效的,要在修改后重新连接的会话中才会生效。
immediate:参数值修改后立即生效。
select name,issys_MODIFIABLE from v$parameter where issys_MODIFIABLE = 'FALSE' ORDER BY 2;
NAME ISSYS_MOD -------------------------------------------------------------------------------- --------- lock_name_space FALSE processes FALSE sessions FALSE instance_groups FALSE event FALSE sga_max_size FALSE pre_page_sga FALSE shared_memory_address FALSE hi_shared_memory_address FALSE静态参数:可以通过修改参数文件后,重启数据库是修改生效。
查看参数文件类型
show parameter spfile
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ spfile string +DATA/sundb/spfilesundb.ora
如果这个参数有值,说明用的是spfile,如果是空,就是用的pfile
由于这个数据库是建立在ASM磁盘组上面的,所以参数文件的位置也在磁盘组上
cd $ORACLE_HOME/dbs
cat initorcl.ora
SPFILE='+DATA/sundb/spfileorcl.ora'这个路径指向了磁盘组的参数文件路径
spfile:位置:$ORACLE_HOME/dbs/orapw<ORACLE_SID>
修改动态参数值
show parameter open_cursors
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ open_cursors integer 300
alter system set open_cursors=400 scope=memory;
System altered. Elapsed: 00:00:00.01
show parameter open_cursors
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ open_cursors integer 400
show spparameter open_cursors
SID NAME TYPE VALUE -------- ----------------------------- ----------- ---------------------------- * open_cursors integer 300
发现在二进制参数文件spfile中还没有改过来,我们修改参数文件中的值
alter system set open_cursors=400 scope=spfile;
show spparameter open_cursors
SID NAME TYPE VALUE -------- ----------------------------- ----------- ---------------------------- * open_cursors integer 400
这次spfile中的参数值就改过来了
如果希望将内存中的参数值和参数文件中的参数值一起修改
alter system set open_cursors=400 scope=both;
默认情况下scope的取值就是both,因此也可以将 scope=both省略
下面我们修改静态参数
show parameter memory_max_target
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ memory_max_target big integer 800M
alter system set memory_max_target=900m;
alter system set memory_max_target=900m * ERROR at line 1: ORA-02095: specified initialization parameter cannot be modified Elapsed: 00:00:00.00
发现不能直接修改内存的值,我们就只能修改spfile中的值,然后重启数据库后让参数值生效
alter system set memory_max_target=900m scope=spfile;
pfile
我们先建立pfile文件
create pfile='/home/oracle/1.ora' from spfile;
我们尝试用pfile启动实例
shutdown immediate
startup pfile='/home/oracle/1.ora'
show parameter spfile
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ spfile string
发现这个参数为空,是用pfile文件启动的
我们修改动态参数
alter system set open_cursors=200;
show parameter open_cursors
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ open_cursors integer 200
但是用pfile启动的数据库只能讲参数值修改到内存中去,不能将参数值修改到pfile中,更不会更新到spfile中,如果要修改pfile中的参数值,必须自己手动修改pfile文件中的参数值,想让修改后的参数值生效,需要重新启动实例。
修改静态参数的方法类似,也是直接修改pfile文件中的值,然后重启实例就可以了。
oracle 启动数据库对参数文件的搜索顺序为
spfilesid.ora—>spfile.ora—->init_sid.ora