SPFile文件常用内容详解

来源:互联网 发布:詹姆斯上赛季数据 编辑:程序博客网 时间:2024/05/16 00:35

SPFile文件是一个二进制格式的文件,尽管可以打开它查看其中的内容,但是任何用户都不应当手工对其内容进行修改,否则实例将无法启动。
    修改SPFile文件需要使用Alter System语句,可以在Set子句中通过Scope选项来设置Alter System语句的影响范围。
    a.Scope=SPFile:修改仅记录在SPFile文件中。只有在下一次启动数据库时修改才会生效,同时适用于动态/静态初始化参数。
    b.Scope=Memory:修改仅记录在内存中。更改将立即生效(只对本次操作有效),下一个次启动数据库时仍然会使用修改前的参数设置。只适用于动态初始化参数。
    c.Scope=Both(默认):修改将同时记录在内存中和SPFile文件中。更改立即生效,只适用于动态初始化参数。
    另:在修改动态参数时,还可以指定Deferred关键字,这样对参数的修改将延迟到新的会话产生时才生效。

修改服务器端SPFile配置文件:SQL > alter system set ParameterName=ParameterValue scope=spfile;
对动态初始化参数JOB_Queue_Processes进行修改:SQL > Alter System Set JOB_Queue_Processes=50 Comment='Specifies the frequency of checkpoints';
查看spfile文件的内容:SQL> select * from v$spparameter;
查看当前实例的运行参数:SQL > show parameters;     SQL > select * from v$parameter;   SQL > select * from v$parameters;


在创建数据库时,SPFile文件中部分必须考虑的参数值:
基本规则:
a.在SPFile文件中,所有参数都是可选的,也就是说只需要在初始化参数文件中列出那些需要修改的参数,其它保持默认值即可。
b.SPFile文件中只能包含参数赋值语句和注释语句。注释语句以“#”符合开头,是单行注释。
c.SPFile文件中列出的参数是不分次序的。
d.SPFile参数的名称和值是不区分大小写的,只有在Unix系统中,由于操作系统本身区分文件名称和路径的大小写,才需要在设置参数时注意大小写问题。
e.若要在SPFile文件的同一行设置多个参数,需要使用空格分隔。比如:PROCESSES=100 CPU_COUNT=1 OPEN_CURSORS=10
f.对于可以具有多个值的初始化参数,需要将所有的值放在一个括号内,并使用逗号进行分隔,比如ROLLBACK_SEGMENTS=(SEG1,SEG2,SEG3,SEG4,SEG5)
g.在SPFile文件中,可以使用IFILE参数引用其它的SPFile文件。
h.对于具有字符串类型值的参数,如果字符串中包含空格或制表符,必须使用单引号或双引号将字符串括起来,比如:NLS_TERRITORY="CZECH REPUBLIC"
常用参数:
DB_NAME和DB_DOMAIN
      全局数据库名通常由本地数据库标识(DB_NAME)和网络域名(DB_DOMAIN)组成,在网络中唯一标识一个Oracle,在只有一个实例的情况下,DB_NAME与实例标识SID相同。
   全局数据库名在数据库创建后可以更改,使用【Alter DataBase RENAME GLOBAL_NAME】语句,语句执行成功后,必须重启Oracle并重建控制文件(重建控制文件是一件比较危险的工作,因此,建议避免修改全局数据库名)。
   DB_NAME同时存储在数据文件、控制文件和重做日志文件中,如果DB_NAME参数指定的数据库名与控制文件的保持不一致,Oracle将无法启动。
CONTROL_FILE
    控制文件保存有关于数据库物理结构的基本信息,每个Oracle都必须至少拥有一个控制文件。Oracle建议创建两个控制文件,并且应当将他们分别放置在不同点硬盘上。
DB_Block_Buffer
   这部分内存的作用主要是在内存中缓存从数据库中读取的数据块,数据库缓冲区越大,为用户已经在内存里的共享数据提供的内存就越大,这样可以减少所需要的磁盘物理读写次数。
    在Oracle 9i以前版本数据库中,缓冲是由db_block_buffers*db_block_size来决定,db_block_size参数是在创建数据库时设置的,它决定数据库里每个块的大小,9i以前不能改变已经存在的数据库的块大小,因此应该在最初创建数据库时就确保设置适当的数据库块大小。在创建数据库时设置为8k,db_block_buffers*db_block_size的乘积占物理内存的20%~30%,物理内存在1G以内,可以占20%,1G~2G之间可占25%,物理内存在2G以上,可以占30%,甚至更高。
DB_Block_Lru_Latches
     在多CPU机器上通过初始化参数DB_BLOCK_LRU_LATCHES允许多个LRU锁存器。当DBWR和服务器进程扫描数据块缓冲Cache时,它们需要获取LRU锁存器。这种锁存器对于避免缓冲区变脏以及避免被其他进程改变都是必要的,这也避免了扫描时返回不一致的结果。如果没有使用锁存器,某个扫描自由缓冲区的进程可能会发现一个自由缓冲区,但是立刻就可能被其他进程使用。每一个LRU 锁存器至少保护50个数据块缓冲区。所有缓冲区都被Oracle基于Hash算法分配到特定的LRU锁存器之上。如果该值太小,在数据库活动量很大时就会潜在地导致竞争。在多CPU机器之上这种竞争会高一些,这是因为多个服务器进程可能排队以获取一个LRU Cache。该参数默认值为CPU个数的一半,在多CPU系统中,推荐设为等于CPU数目或CPU数目的2倍~3倍(在Oracle 9i中,该参数已经变为一个隐含参数)。
DB_BLOCK_SIZE
      数据库块(BLOCK)是Oracle用来管理存储空间的最小单元,也被称为Oracle块,一个Oracle块可以由一个或多个操作系统快组成。
   Oracle块的大小在创建Oracle时由DB_BLOCK_SIZE指定,并且在Oracle建立后不能更改。DB_BLOCK_SIZE指定的值为标准Oracle块的大小,SYSTEM表空间及其其它表空间的默认地使用标准Oracle块。标准Oracle块必须是操作系统的整数倍,通常是4KB或8KB,随着数据库块大小的增加,数据库对内存(SGA区)的需求也会随着增加。
   注:在Oracle9i中,最多支持使用四种不同大小的非标准Oracle块,可以是2KB、4KB、8KB、16KB或32KB中的任意四个。
DB_Cache_Size
   SGA区是Oracle实例的重要组成部分,它是由操作系统专门分配给Oracle使用的一块共享内存区。
   该参数直接指定SGA区中数据库告诉缓存区的大小(以KB或MB为单位),动态参数,可以在实例运行过程中动态改变。
DB_File_MultibLock_Read_Count
      该参数主要同全表扫描有关。当Oracle在请求大量连续数据块的时候,该参数控制块的读入速率。DB_FILE_MULTIBLOCK_READ_COUNT参数能对系统性能产生较大的影响,它和DB_BLOCK_SIZE参数之间有重要关系。因为在Unix物理层上,Oracle总是以最小64K的数据库块进行读入,因此应该使这2个参数的乘积为64K。即如果DB_BLOCK_SIZE为8192,则DB_FILE_MULTIBLOCK_READ_COUNT应设为8。
DB_nK_CACHE_SIZE
   如果要在数据库中使用非标准块,除了使用DB_CACHE_SIZE参数外,至少还要指定一个DB_nK_CACHE_SIZE参数。
   DB_nK_CACHE_SIZE一共有5个:DB_2K_CACHE_SIZE、DB_4K_CACHE_SIZE、DB_8K_CACHE_SIZE、DB_16K_CACHE_SIZE、DB_32K_CACHE_SIZE
DB_Queue_Process
     该参数指定每个例程的SNP作业队列进程的数量。当使用job或复制时,一定要设置该参数,推荐设为3或4。并行查询中需要设置的参数
     并行查询仅当在多CPU处于空闲状态且数据分布在不同磁盘时才会对某些查询(有全表扫描操作)的性能产生有益的影响,而且即使在这种情况下,并行查询服务器的最大数量最好也不要超过CPU的数量。这里面应该修改的参数如下。
DML_Locks
     该参数表示所有用户获取的表锁的最大数量。对每个表执行 DML 操作均需要一个 DML锁。例如,如果3个用户修改 2 个表,就要求该值为 6。该值过小可能会引起死锁问题。这个参数同transaction参数有关系,缺省为4倍的transaction大小。建议该参数不应该低于600,可以检查系统的当前值,若比600小,则将transaction参数改为150以上,dml_locks参数会自动变为transaction的4倍。
Java_Pool_Size
      Oracle 8i以后版本中,Oracle数据库内置了对Java的支持,短消息系统并未使用这些功能,因此java_pool_size的值可以减少到1M。但如果数据库安装时选择了JServer组件,则这个值可以设置为20M~30M之间。(可以查询v$option动态视图,如果java那一项值为true,则表示安装了JServer,为false,表示未安装)。
Large_Pool_Size
      Oracle的large_pool用于MTS、并行查询和RMAN。如果使用了MTS或RMAN,large_pool特别有用,它可以降低用户对shared_pool的争用,这个参数不推荐设置。(或设为1M)。
Log_Buffer
      Log_buffer是重做日志缓冲区,对数据库的任何修改都按顺序被记录在该缓冲,然后由LGWR进程将它写入磁盘。LGWR的写入条件是:用户提交、有1/3重做日志缓冲区未被写入磁盘、有大于1M重做日志缓冲区未被写入磁盘、超时、DBWR需要写入的数据的SCN 号大于LGWR记录的SCN 号,DBWR 触发LGWR写入。从中可以看出,大于1M的log buffer值意义并不大,建议不论物理内存多大,该值统一设为1M。
Log_CheckPoint_Interval
       该参数同检查点有关,检查点由ckpt 进程执行,检查点发生时Oracle会同步数据文件、控制文件和redo文件。该参数指定当写入重做日志文件中的OS 块 (而不是数据库块) 的数量达到设定值时,强制执行一次检查点。该值较低可以缩短例程恢复所需的时间,但可能导致磁盘操作过量。在Oracle 8i中该值缺省为100000。当值为0时,表示此参数不起作用。该参数的设定需要考虑的因素较多,建议使用缺省值。
Log_CheckPoint_TimeOut
     该参数仍然同检查点有关。它指定距下一个检查点出现的最大时间间隔(秒数)。将该时间值指定为0,将禁用以时间为基础的检查点。较低的值可以缩短例程恢复的时间,但可能导致磁盘操作过量。在8i中该值缺省为1800。如果想强制某一时间段后执行检查点,则用此选项。不建议修改该值。
Open_Cursors
     指定一个会话一次可以打开的游标 (环境区域) 的最大数量,并且限制PL/SQL使用的PL/SQL游标高速缓存的大小,以避免用户再次执行语句时重新进行语法分析。请将该值设置得足够高,这样才能防止应用程序耗尽打开的游标。此值建议设置为250~300。
PGA_Aggregate_Target
     该参数指定连接到例程的所有服务器进程的目标 PGA 总内存。建议对该值设置为每1G内存增加100M,但最大不要超过500M。设置了workarea_size_policy和pga_aggregate_target参数后,不用再设置sort_area_size等参数。
PROSESSES
   指定Oracle能够并发执行的操作系统进程的最大数目。最小值是6(每个数据库至少启动5个后台进程和一个用户进程)
Re_Page_SGA
      该参数表示将把所有SGA装载到内存中,以便使该实例迅速达到最佳性能状态。这将增加例程启动和用户登录的时间,但在内存充足的系统上能减少缺页故障的出现。建议在2G以上(含2G)内存的系统都将该值设为true。
Session_Cached_Cursor
      该参数指定要高速缓存的会话游标的数量。对同一SQL语句进行多次语法分析后,它的会话游标将被移到该会话的游标高速缓存中。这样可以缩短语法分析的时间,因为游标被高速缓存,无需被重新打开。设置该参数有助于提高系统的运行效率,建议无论在任何平台都应被设为50。
SHARED_POOL_Reserved_SIZE
     它的作用是在shared pool中保留一块区域以放置一些大对象(如大型软件包),如不设置此参数,系统缺省保留5%的shared pool空间用于放置大对象,不建议设置该参数,让系统自动分配即可。
SHARED_POOL_SIZE
   该参数用于设置SGA区中共享池的大小,共享池用于存放解析后的SQL和PL/SQL语句,以及由多个服务进程共享的会话信息。动态参数。
SGA_Max_Size
   该参数用于限制SGA区所能使用的最大内存空间,尽管SGA区中数据库高速缓存区、共享池等组件的大小在Oracle9i中都能动态调整,只要SGA区不大于该值,就可以动态调整数据库缓冲区和share pool的大小。建议该值取物理内存的50%。
Sort_area_retained_size
     这个参数的含义是当排序完成后至少为session继续保留的排序内存的最小值,该值最大可设为等于Sort_area_size。这样设置的好处是可以提高系统性能,因为下次再做排序操作时不需要再临时申请内存,缺点是如果Sort_ara_size设得过大并且session数很多时,将导致系统内存不足。建议该值设为Sort_area_size的10%~20%左右,或者不设置(缺省为0)。
Sort_area_size
     该参数是当查询需要排序的时候,Oracle将使用这部分内存做排序,当内存不足时,使用临时表空间做排序。这个参数是针对会话(session)设置的,不是针对整个数据库。即如果应用有170个数据库连接(session),假设这些session都做排序操作,则Oracle会分配8×170等于1360M内存做排序,而这些内存是在Oracle的SGA区之外分配的,即如果SGA区分配了1.6G内存,Oracle还需要额外的1.3G内存做排序。
     建议该值设置不超过3M,当物理内存为1G时,该值宜设为1M或更低(如512K);2G时可设为2M;但不论物理内存多大,该值也不应超过3M。
Undo_Management
   由Undo_management参数决定是使用undo tablespace还是使用手工建立的回滚段。如果该参数为auto,则表示使用undo tablespace。为manual,表示使用手工管理回滚段,
Undo_Retention
     该参数的单位为秒,当undo_management参数为auto时,undo_retention表示在undo_tablespace中保留多长时间的回滚信息,Oracle 9i的flash_back功能同该值有关。该值设为多大同undo_tablespace的大小有关,在9i R2中缺省值为10800,一般情况下已经够了,不建议修改该参数。
WorkArea_Size_Policy
     这也是Oracle 9i新引入的参数,如果该参数设为auto,Oracle会为所有的session在SGA区之外分配一块大的内存区域做为UGA,该内存由pga_aggregate_target设置。每个session都在这块大内存区中做排序等操作,从而不用再设置其他的“*_area_size” 参数。该值在Oracle 9i中缺省设为auto,建议继续使用缺省值。

原创粉丝点击