1、初始化参数文件
启动实例时会读取初始化参数文件。参数文件有两种类型。
• 服务器参数文件(SPFILE):
二进制文件,由oracle server维护,rman可以备份。
创建spfile
create spfile[=‘路径’ ]from pfile[=‘路径’];
这是首选的初始化参数文件类型。
这是一个由数据库服务器写入或读取的二进制文件,不得手动进行编辑。
此文件驻留在执行Oracle 实例的服务器上,而且永远存在,不受数据库关闭和启动的影响。
文件默认名为spfile<SID>.ora,启动时会自动搜索此文件。
• 文本初始化参数文件:
文本文件,操作系统命令修改,手动修改,下次启动有效实例启动时打开
默然路径:$ORACLE_HOME/dbs
创建pfile
create pfile from spfile
或者cp init.ora $ORACLE_HOME/dbs/inittest0924.ora
这类初始化参数文件可由数据库服务器读取,但不能由其写入。
必须使用文本编辑器手动设置和更改初始化参数设置,这些设置是永久的,不受数据库关闭或启动的影响。
此文件的默认名称为init<SID>.ora,如果启动时未找到SPFILE,则自动搜索此文件。
建议创建SPFILE,从而以动态方式维护初始化参数。通过使用SPFILE,可以在服务器端的磁盘文件中永久存储和管理初始化参数。
2、初始化参数的类型
Oracle DB 服务器有下列类型的初始化参数:
派生参数
一些初始化参数是派生的,也就是说它们的值是通过计算其它参数的值得来的。通常,不应变更派生参数的值。但如果进行了变更,则需指定的值将覆盖计算得出的值。
例如,SESSIONS参数的默认值派生于PROCESSES参数的值。如果PROCESSES的值发生更改,则SESSIONS的默认值也会发生更改,除非使用指定的值覆盖它。
与操作系统相关的参数
一些初始化参数的有效值或值范围与主机操作系统相关。例如,
DB_FILE_MULTIBLOCK_READ_COUNT参数指定在一次顺序扫描期间在一个I/O 操作中读取的最大块数;此参数与平台相关。
这些块的大小(由DB_BLOCK_SIZE设置)的默认值与操作系统相关。
设置参数值
初始化参数最有可能改进系统性能。一些参数设置容量限制,但不影响性能。
例如,当OPEN_CURSORS的值为10时,尝试打开第11 个游标的用户进程将收到错误消息。有些参数会影响性能,但不施加绝对限制。
例如,减小OPEN_CURSORS的值可能会降低性能,但不会阻止工作。
增大参数值也许可以改善系统性能,但增大大多数参数也会增加系统全局区(SGA) 大小。
较大的SGA 可以将数据库性能提升至某个点。在虚拟内存操作系统中,如果SGA 是交换进/出内存的,则太大的SGA 会降低性能。
设置控制虚拟内存工作区域的操作系统参数时,应考虑SGA 大小。操作系统配置也会限制SGA 的最大大小。
3、简化初始化参数
初始化参数有两种类型:基本初始化参数和高级初始化参数。
大多数情况下,只需设置和优化30 个基本参数便可获得合理的数据库性能。极少数情况下,需要修改高级参数才能获得优化的性能。
基本参数指的是为了让数据库以良好性能运行而设置的参数。其它所有参数都被认为是高级参数。
基本参数示例:
• 确定全局数据库名称:DB_NAME和DB_DOMAIN
• 指定快速恢复区:DB_RECOVERY_FILE_DEST和DB_RECOVERY_FILE_DEST_SIZE
• 指定DDL 锁定超时:DDL_LOCK_TIMEOUT
• 指定还原空间管理的方法:UNDO_MANAGEMENT
• COMPATIBLE初始化参数和不可逆兼容性
4、初始化参数:示例
CONTROL_FILES参数:指定一个或多个控制文件名。Oracle 强烈建议多路复用并镜像控制文件。值范围:一个到八个文件名(带路径名)。默认范围:与操作系统相关。
DB_FILES参数:指定可为此数据库打开的最大数据库文件数。值范围:与操作系统相关。默认值:与操作系统相关(在Solaris 上为200)。
PROCESSES参数:指定可同时连接到Oracle 服务器的最大操作系统用户进程数。此值应允许所有后台进程和用户进程连接到服务器。值范围:从6 到一个与操作系统相关的值。默认值:与操作系统相关。
DB_BLOCK_SIZE参数:指定一个Oracle DB 块的大小(字节)。这个值是在创建数据库时设置的,此后不可更改。该值指定数据库的标准块大小。所有表空间默认情况下将使用该大小。值范围:2048 到32768(与操作系统相关)。默认值:8192(与操作系统相关)。
DB_CACHE_SIZE参数:指定标准块缓冲区高速缓存的大小。值范围:至少为16 MB。默认值:48 MB。
SGA_TARGET指定所有SGA 组件的总大小。如果指定了SGA_TARGET,则会自动调整以下内存池的大小:
• 缓冲区高速缓存(DB_CACHE_SIZE)
• 共享池(SHARED_POOL_SIZE)
• 大型池(LARGE_POOL_SIZE)
• Java 池(JAVA_POOL_SIZE)
• 流池(STREAMS_POOL_SIZE)
如果将这些自动调整的内存池设置为非零值,则自动共享内存管理(ASMM) 将这些值作为下限。如果某个应用程序组件需要内存达到下限数量才能正常使用,则应当设置下限值。
以下池是手动调整大小的组件,不受ASMM 的影响:
• 日志缓冲区
• 其它缓冲区高速缓存(如KEEP和RECYCLE)和其它块大小
• 固定SGA 和其它内部分配
启用ASMM 时,会从SGA_TARGET的总可用内存中减去分配给上述池的内存。
注:MMON 进程计算自动优化的内存池的值以支持ASMM。
MEMORY_TARGET指定Oracle 系统范围内可用的内存。数据库将内存调整为MEMORY_TARGET值,并根据需要减小或增加SGA 和PGA。
在基于文本的初始化参数文件中,如果省略MEMORY_MAX_TARGET并包括MEMORY_TARGET的值,数据库会自动将MEMORY_MAX_TARGET设置为MEMORY_TARGET的值。
如果省略MEMORY_TARGET所对应的行并包括MEMORY_MAX_TARGET的值,则MEMORY_TARGET参数默认为零。
启动后,如果MEMORY_TARGET不超过MEMORY_MAX_TARGET值,则可以动态地将该参数更改为非零值。
可以使用ALTER SYSTEM命令修改MEMORY_TARGET参数。值范围是从152 MB 到MEMORY_MAX_TARGET。
PGA_AGGREGATE_TARGET参数:指定分配给此实例所挂接的所有服务器进程的程序全局区(PGA) 内存量。
这些内存不驻留在系统全局区(SGA) 中。数据库将此参数用作要使用的目标PGA 内存量。
设置此参数时,从系统上可供Oracle 实例使用的总内存中减去SGA。值范围由整数加上字母K、M或G(分别以KB、MB 或GB 为单位指定此限制)构成。最小值是10 MB,最大值是4096 GB。默认值是10 MB 或SGA 大小的20%(取两者中较大的值)。
SHARED_POOL_SIZE参数:指定共享池的大小(字节)。共享池包含诸如共享游标、存储过程、控制结构和并行执行消息缓冲区等对象。该值比较大时可以改进多用户系统的性能。值范围:与操作系统相关。默认值:操作系统是64 位时为64 MB;否则为16 MB。
UNDO_MANAGEMENT参数:指定系统应使用的还原空间管理模式。如果设置为AUTO,则在自动还原管理(AUM) 模式下启动实例。否则,在回退还原(RBU) 模式下启动实例。在RBU 模式下,还原空间在外表上被分配为回退段。在AUM 模式下,还原空间在外部被分配为还原表空间。值范围:AUTO或MANUAL。如果启动第一个实例时省略了UNDO_MANAGEMENT参数,则使用默认值AUTO。
查看pfile内容
[oracle@rtest dbs]$ pwd
/u01/app/oracle/product/11.2.0/dbhome_1/dbs
[oracle@rtest dbs]$ more inittest0924.ora
# Oracle init.ora parameter file generated by instance test0924 on 09/27/2013 14:34:25
audit_file_dest='/u01/app/oracle/admin/test0924/adump'
audit_trail='DB'
background_dump_dest='/u01/app/oracle/diag/rdbms/test0924/test0924/trace' #Deprecate parameter
compatible='11.2.0.0.0'
control_files='/u01/app/oracle/oradata/test0924/control01.ctl'
control_files='/u01/app/oracle/fast_recovery_area/test0924/control02.ctl'
core_dump_dest='/u01/app/oracle/diag/rdbms/test0924/test0924/cdump'
db_block_size=8192
db_domain=''
db_keep_cache_size=48M
db_name='test0924'
db_recovery_file_dest='/u01/app/oracle/fast_recovery_area'
db_recovery_file_dest_size=4122M
diagnostic_dest='/u01/app/oracle'
dispatchers='(PROTOCOL=TCP) (SERVICE=test0924XDB)'
log_buffer=19365888 # log buffer update
open_cursors=300
optimizer_dynamic_sampling=2
optimizer_mode='ALL_ROWS'
pga_aggregate_target=798M
plsql_warnings='DISABLE:ALL' # PL/SQL warnings at init.ora
processes=150
query_rewrite_enabled='TRUE'
remote_login_passwordfile='EXCLUSIVE'
resource_manager_plan=''
result_cache_max_size=12M
sga_target=2400M
shared_pool_size=496M
skip_unusable_indexes=TRUE
undo_tablespace='UNDOTBS1'
user_dump_dest='/u01/app/oracle/diag/rdbms/test0924/test0924/trace' #Deprecate parameter
查看spfile内容
[oracle@rtest dbs]$ pwd
/u01/app/oracle/product/11.2.0/dbhome_1/dbs
[oracle@rtest dbs]$ strings spfiletest0924.ora
test0924.__db_cache_size=1811939328
test0924.__java_pool_size=16777216
test0924.__large_pool_size=16777216
test0924.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
test0924.__pga_aggregate_target=838860800
test0924.__sga_target=2516582400
test0924.__shared_io_pool_size=0
test0924.__shared_pool_size=570425344
test0924.__streams_pool_size=16777216
*.audit_file_dest='/u01/app/oracle/admin/test0924/adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='/u01
/app/oracle/oradata/test0924/control01.ctl','/u01/app/oracle/fast_recovery_area/test0924/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_keep_cache_size=50331648
*.db_name='test0924'
*.db_recovery_file_dest='/u01/app/oracle/fast_recovery_area'
*.db_recovery_file_dest_size=4322230272
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=test0924XDB)'
*.open_cursors=300
*.pga_aggregate_target=836763648
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=2516582400
*.shared_pool_size=520093696
*.undo_tablespace='UNDOTBS2'
5、使用SQL*Plus 查看参数
可以查询数据V$PARAMETER字典视图以查找各个参数的值。
V$PARAMETER显示当前会话中的当前参数值。
还可以使用带有任意字符串的SHOW PARAMETER命令来查看包含该字符串的参数。
以下示例中的查询请求的是参数的名称和值,该示例使用WHERE子句来指定特定参数名称:
sys@TEST0924> SELECT name, value FROM V$PARAMETER WHERE name LIKE '%pool%';
NAME VALUE
------------------------------ --------------------
shared_pool_size 520093696
large_pool_size 0
java_pool_size 0
streams_pool_size 0
shared_pool_reserved_size 27682406
buffer_pool_keep
buffer_pool_recycle
global_context_pool_size
olap_page_pool_size 0
9 rows selected.
视图的说明:
sys@TEST0924> 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
第二个示例显示使用SQL*Plus SHOW PARAMETER命令来查看参数设置。还可以使用该命令查找包含一个文本字符串的所有参数。
例如,可以通过使用以下命令查找包括字符串sga的所有参数名:
sys@TEST0924> show parameter sga
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 2400M
sga_target big integer 2400M
• V$SPPARAMETER:显示有关服务器参数文件内容的信息。如果未使用服务器参数文件来启动实例,则该视图每一行的ISSPECIFIED列中的值为FALSE。
sys@TEST0924> desc V$SPPARAMETER
Name Null? Type
----------------------------------------------------- -------- ------------------------------------
SID VARCHAR2(80)
NAME VARCHAR2(80)
TYPE VARCHAR2(11)
VALUE VARCHAR2(255)
DISPLAY_VALUE VARCHAR2(255)
ISSPECIFIED VARCHAR2(6)
ORDINAL NUMBER
UPDATE_COMMENT VARCHAR2(255)
• V$PARAMETER2:显示当前对会话有效的初始化参数的相关信息,每个参数值显示为视图中的一行。新会话将从V$SYSTEM_PARAMETER2视图中显示的实例范围内的值中继承参数值。
sys@TEST0924> desc V$PARAMETER2
Name Null? Type
----------------------------------------------------- -------- ------------------------------------
NUM NUMBER
NAME VARCHAR2(80)
TYPE NUMBER
VALUE VARCHAR2(4000)
DISPLAY_VALUE VARCHAR2(4000)
ISDEFAULT VARCHAR2(6)
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)
ORDINAL NUMBER
UPDATE_COMMENT VARCHAR2(255)
• V$SYSTEM_PARAMETER:显示当前对实例有效的初始化参数的相关信息。
sys@TEST0924> desc V$SYSTEM_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(8)
ISADJUSTED VARCHAR2(5)
ISDEPRECATED VARCHAR2(5)
ISBASIC VARCHAR2(5)
DESCRIPTION VARCHAR2(255)
UPDATE_COMMENT VARCHAR2(255)
HASH NUMBER
6、 更改初始化参数值
初始化参数有两种类型。
静态参数:影响实例或整个数据库,只能通过编辑init.ora和SPFILE 进行修改。静态参数要求关闭然后重新启动数据库才能生效。无法对当前实例更改静态参数。
动态参数:可以在数据库联机时更改。
有两种类型的动态参数:
• “会话级别参数”仅影响一个用户会话。示例包括国家语言支持(NLS) 参数,这些参数可用于为排序、日期等参数指定国家语言设置。
这些参数可以在某个给定会话中使用,并且会在该会话结束时失效。
• “系统级别参数”影响整个数据库和所有会话。示例包括修改SGA_TARGET值和设置归档日志目标位置。这些参数在指定的SCOPE内保持有效。
要使它们永久有效,必须指定SCOPE=BOTH 选项或手动编辑PFILE,将这些参数设置添加到SPFILE 中。
可以使用ALTER SESSION和ALTER SYSTEM命令更改动态参数。
使用ALTER SYSTEM语句的SET子句可以设置或更改初始化参数值。
可选的SCOPE子句用于指定更改的作用域,如下所示:
• SCOPE=SPFILE:此更改仅在服务器参数文件中应用。不会对当前实例进行更改。
对于动态和静态参数,更改在下一次启动后生效,并且永久保持有效。对于静态参数来说,这是唯一可以指定的SCOPE值。
• SCOPE=MEMORY:此更改仅应用到内存中。对当前实例进行更改,且更改立即生效。
对于动态参数,更改立即生效,但不会永久保持,因为服务器参数文件不会进行更新。
对于静态参数,不允许进行该指定。
• SCOPE=BOTH:此更改会应用到服务器参数文件和内存中。对当前实例进行更改,且更改立即生效。
对于动态参数,更改永久保持有效,因为服务器参数文件会进行更新。
对于静态参数,不允许进行该指定。
如果实例不是使用服务器参数文件启动的,则指定SCOPE=SPFILE或SCOPE=BOTH是错误的。
如果实例是使用服务器参数文件启动的,则默认值为SCOPE=BOTH;
如果实例是使用文本初始化参数文件启动的,则默认值为MEMORY。
对于动态参数,还可以指定DEFERRED关键字。如果指定了该关键字,则更改仅对于以后的会话有效。
如果将SCOPE指定为SPFILE或BOTH,则使用可选的COMMENT子句可以将一个文本字符串与参数更新关联起来。此注释会写入服务器参数文件中。
7、更改参数值:示例
sys@TEST0924> ALTER SESSION
2 SET NLS_DATE_FORMAT ='mon dd yyyy';
Session altered.
sys@TEST0924> SELECT SYSDATE FROM dual;
SYSDATE
-----------
oct 02 2013
这是一个更改会话级别参数的示例。用户要将会话日期格式设置为mon dd yyyy。因此,此日期的所有查询将以该格式显示日期。
还可以使用PL/SQL 在应用程序中设置会话级别参数。
sys@TEST0924> ALTER SYSTEM SET SEC_MAX_FAILED_LOGIN_ATTEMPTS=2 SCOPE=SPFILE;
System altered.
这是一个更改断开连接之前的最大登录失败尝试次数。经过指定的失败尝试次数之后,服务器进程会自动断开连接。