首页 > 数据库 > Oracle > oracle 关于--参数文件
参数文件就是来定义数据库启动的时候一些相关配置,要根据参数文件中的参数设置来分配内存,允许打开进程,会话等等一些信息。要想让数据库启动,必须先读取参数文件。参数文件中的参数,通常称为初始化参数,简称为参数。
Linux 环境
|
参数文件一共有两大类: Pfile Spfile 文件默认位置: Pfile: $ORACLE_HOME/dbs/init$ORACLE_SID.ora (9i 与之前版本,10g后就不用pfile)
Pfile:$ORACLE_BASE/admin/$ORACLE_SID/pfile/init.ora. Spfile:$ORACLE_HOME/dbs/spfile$ORACLE_SID.ora 区别: 其中pfile 是文本文件 ,可以通过vi编辑
Spfile 是二进制文件,是服务器参数,所以只能存放在服务器端. 可以被RMAN备份 可以登录数据库alter system|session set parameter_name=values scope=memory|spfile|both; 修改
Oracle启动读取参数文件优先级别
首先读取spfile 读取 spfile.ora 如果未找到
读取init
|
Pfile与spfile是可以相互转化的
|
创建内容为spfile的pfile Create pfile from spfile;(默认路径$ORACLE_HOME/dbs/init$ORACLE_SID.ora) 可以指定pfile路径 Create pfile =’/u01/app….’ from spfile; 创建spfile Create spfile from pfile; 指定路径 Create spfile=’/u01/app/..’ from pfile=’/u01/app/..’;
在11g中可以直接转化内存 Create spfile’/u01/app..’ from memory;
|
|
SQL> show parameter service_name
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ service_names string fengzi SQL> select distinct isspecified from v$spparameter;
ISSPEC ------ TRUE FALSE
SQL>
如果第一个值为FALSE 就是使用pfile 如果第一个值为TRUE 就是使用的spfile
还有一种方法:修改一个正确的参数 SQL> alter system set sga_target=200m scope=spfile; alter system set sga_target=200m scope=spfile * ERROR at line 1: ORA-32001: write to SPFILE requested but no SPFILE specified at startup
SQL> 如果修改成功就为spfile启动,报错32001就为pfile启动。 |
|
[oracle@dongyang ~]$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Mon Mar 24 13:15:18 2014
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production With the Partitioning, OLAP and Data Mining options 创建pfile SQL> create pfile from spfile;
File created.
SQL> [oracle@dongyang dbs]$ pwd /u01/app/oracle/product/10.2.0/db_1/dbs [oracle@dongyang dbs]$ ls ab_+ASM.dat init+ASM.ora initfengzi.ora orapw+ASM spfile+ASM.ora hc_+ASM.dat init.ora lk+ASM orapwfengzi hc_fengzi.dat initdw.ora lkFENGZI snapcf_fengzi.f [oracle@dongyang dbs]$ 编辑 pfile 修改参数 修改其中的某些值 [oracle@dongyang dbs]$ vi initfengzi.ora
fengzi.__db_cache_size=402653184 fengzi.__java_pool_size=16777216 fengzi.__large_pool_size=16777216 fengzi.__shared_pool_size=150994944 fengzi.__streams_pool_size=0 *.audit_file_dest='/u01/app/oracle/admin/fengzi/adump' *.background_dump_dest='/u01/app/oracle/admin/fengzi/bdump' *.compatible='10.2.0.1.0' *.control_file_record_keep_time=20 *.control_files='+DATA/fengzi/controlfile/current.269.842186993','+DATA/fengzi/controlfile/current.270.842186999' *.core_dump_dest='/u01/app/oracle/admin/fengzi/cdump' *.db_block_size=8192 *.db_create_file_dest='+DATA' *.db_domain='' *.db_file_multiblock_read_count=16 *.db_name='fengzi' *.db_recovery_file_dest='+DATA' *.db_recovery_file_dest_size=2147483648 *.dispatchers='(PROTOCOL=TCP) (SERVICE=fengziXDB)' *.job_queue_processes=10 *.log_archive_dest_1='LOCATION=+DATA/fengzi/' *.log_archive_format='%t_%s_%r.dbf' *.open_cursors=1000 *.pga_aggregate_target=199229440 *.processes=300 *.remote_login_passwordfile='EXCLUSIVE' *.sga_max_size=1074790400 关闭数据库使用pfile启动库并更新spfile SQL> shutdown immediate; Database closed. Database dismounted. ORACLE instance shut down. SQL> startup pfile='/u01/app/oracle/product/10.2.0/db_1/dbs/initfengzi.ora'; ORACLE instance started.
Total System Global Area 1090519040 bytes Fixed Size 2020160 bytes Variable Size 671091904 bytes Database Buffers 402653184 bytes Redo Buffers 14753792 bytes Database mounted. Database opened. SQL> create spfile from pfile; (因为参数文件的优先级别,所以修改pfile一定要更新spfile)
File created.
SQL>
|
alter system|session set parameter_name=values scope=memory|spfile|both sid=’sid’|’*’;
system---系统的
session—会话的
判断该使用哪个修改需查看视图v$parameter
|
其中ISSES_MODIFIABLE为被alter session修改 ISSYS_MODIFIABLE为被 alter system 修改 值为TURE 可以被修改 值为FALSE 表示为静态参数,不能直接修改到内存 需要scope=spfile修改 值为IMMEDIATE 表示为动态参数,可以直接修改到内存 可以scope=both 值为DEFERRED 表示为会话参数 只对当前实例生效 下次启动无效 SQL> select name,ISSES_MODIFIABLE,ISSYS_MODIFIABLE from v$parameter; NAME ISSES ISSYS ------------------------------------------------------------------------------------------------- tracefile_identifier TRUE FALSE lock_name_space FALSE FALSE processes FALSE FALSE sessions FALSE FALSE timed_statistics TRUE IMMEDIATE timed_os_statistics TRUE IMMEDIATE resource_limit FALSE IMMEDIATE license_max_sessions FALSE IMMEDIATE license_sessions_warning FALSE IMMEDIATE cpu_count FALSE IMMEDIATE instance_groups FALSE FALSE event FALSE FALSE sga_max_size FALSE FALSE …………
|
memory--- 表示只修改当前实例内存 下次启动不生效
spfile---表示 只对spfile修改 下次启动才会生效 当前实例内存是没有修改
both-----表示 当前实例内存与spfile都修改
其中both为默认值。
Sid=’sid’ 为指定实例名
Sid=’*’ 为所有实例
单实例状态下无需使用,只有在RAC情况下可以选择使用
|
首先要确认要修改参数的数值 SQL> show parameter sga_
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ lock_sga boolean FALSE pre_page_sga boolean FALSE sga_max_size big integer 1040M sga_target big integer 576M SQL> 尝试默认scope=both方式修改 SQL> alter system set sga_max_size=1060m; alter system set sga_max_size=1060m * ERROR at line 1: ORA-02095: specified initialization parameter cannot be modified 当前的参数是初始化参数不能被修改。 只能改到参数文件中使下次启动生效 使用scope=spfile修改 SQL> alter system set sga_max_size=1060m scope=spfile;
System altered.
SQL> 使用scope=memory修改参数 SQL> show parameter pga
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ pga_aggregate_target big integer 190M SQL> alter system set pga_aggregate_target=200m scope=memory;
System altered. 可以使用cope=both方式修改 SQL> alter system set pga_aggregate_target=200m scope=both;
System altered.
SQL> |
|
查看隐藏参数 SQL> desc x$ksppi Name Null? Type ----------------------------------------- -------- ---------------------------- ADDR RAW(8) INDX NUMBER INST_ID NUMBER KSPPINM VARCHAR2(80) KSPPITY NUMBER KSPPDESC VARCHAR2(255) KSPPIFLG NUMBER KSPPILRMFLG NUMBER KSPPIHASH NUMBER
SQL> desc x$ksppcv Name Null? Type ----------------------------------------- -------- ---------------------------- ADDR RAW(8) INDX NUMBER INST_ID NUMBER KSPPSTVL VARCHAR2(512) KSPPSTDVL VARCHAR2(512) KSPPSTDF VARCHAR2(9) KSPPSTVF NUMBER KSPPSTCMNT VARCHAR2(255)
SQL> select a.ksppinm,b.ksppstvl from x$ksppi a,x$ksppcv b where a.indx=b.indx;
KSPPINM -------------------------------------------------------------------------------- KSPPSTVL -------------------------------------------------------------------------------- _ash_sample_all FALSE
_ash_dummy_test_param 0
_threshold_alerts_enable 1
KSPPINM -------------------------------------------------------------------------------- KSPPSTVL -------------------------------------------------------------------------------- _addm_auto_enable TRUE
_addm_version_check TRUE
_addm_skiprules …… ……
|
删除一个参数也就是将参数改回初始化设置的默认值。
|
如果使用的是pfile 直接编辑删除就好了。
使用spfile SQL> show parameter pga
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ pga_aggregate_target big integer 200M SQL> alter system reset pga_aggregate_target scope=spfile sid='*';
System altered.
SQL> 删除一个参数必须要指定sid=’*’。 |
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29532781/viewspace-1130083/ ,如需转载,请注明出处,否则将追究法律责任。