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