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