手动创建数据库实例全攻略4:参数文件

一、参数文件说明
1、参数文件作用。
在前期的数据库知识探索实验中,我们经常使用这个参数。
http://www.cnblogs.com/alexy/p/createdb1.html
http://www.cnblogs.com/alexy/p/createdb2.html
http://www.cnblogs.com/alexy/p/createdb3.html
在启动过程中,我们看到告警日志中的各种配置参数,截取如下:

SQL> show parameter background_dump
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
background_dump_dest     string     /opt/oracle/admin/ocm/bdump
SQL>

启动日志中记录的参数读取和写入过程如下:

[oracle@ocmserver bdump]$ more alert_ocm.log 
Mon Jul 1 22:23:18 2013
Starting ORACLE instance (normal) -----可以看出来是正常启动,normal一般是没有带参数。
LICENSE_MAX_SESSION = 0 ----如下开始读参数文件,控制文件内的相关信息
LICENSE_SESSIONS_WARNING = 0
Picked latch-free SCN scheme 2
Using LOG_ARCHIVE_DEST_10 parameter default value as USE_DB_RECOVERY_FILE_DEST
Autotune of undo retention is turned on. 
IMODE=BR
ILAT =18
LICENSE_MAX_USERS = 0
SYS auditing is disabled
ksdpec: called for event 13740 prior to event group initialization
Starting up ORACLE RDBMS Version: 10.2.0.1.0.
System parameters with non-default values:
processes = 150
__shared_pool_size = 62914560
__large_pool_size = 4194304
__java_pool_size = 4194304
__streams_pool_size = 0
sga_target = 218103808
control_files = /opt/oracle/oradata/ocm/control01.ctl, /opt/oracle/oradata/ocm/control02.ctl, /opt/oracle/oradata/ocm/control03.ctl
db_block_size = 8192
__db_cache_size = 142606336
compatible = 10.2.0.1.0
db_file_multiblock_read_count= 16
db_recovery_file_dest = /opt/oracle/flash_recovery_area
db_recovery_file_dest_size= 2147483648
undo_management = AUTO
undo_tablespace = UNDOTBS1
remote_login_passwordfile= EXCLUSIVE
db_domain = 
dispatchers = (PROTOCOL=TCP) (SERVICE=ocmXDB)
job_queue_processes = 10
background_dump_dest = /opt/oracle/admin/ocm/bdump
user_dump_dest = /opt/oracle/admin/ocm/udump
core_dump_dest = /opt/oracle/admin/ocm/cdump
audit_file_dest = /opt/oracle/admin/ocm/adump
db_name = ocm
open_cursors = 300
pga_aggregate_target = 71303168
PMON started with pid=2, OS id=5838 -----开始启动后台进程。
PSP0 started with pid=3, OS id=5840
MMAN started with pid=4, OS id=5842
DBW0 started with pid=5, OS id=5844
LGWR started with pid=6, OS id=5846
CKPT started with pid=7, OS id=5848
SMON started with pid=8, OS id=5850
RECO started with pid=9, OS id=5852
CJQ0 started with pid=10, OS id=5854
MMON started with pid=11, OS id=5856
Mon Jul 1 22:23:19 2013
starting up 1 dispatcher(s) for network address '(ADDRESS=(PARTIAL=YES)(PROTOCOL=TCP))'...
MMNL started with pid=12, OS id=5858
Mon Jul 1 22:23:19 2013
starting up 1 shared server(s) ...
Mon Jul 1 22:23:19 2013
ALTER DATABASE MOUNT -----启动到mount状态;
Mon Jul 1 22:23:23 2013
Setting recovery target incarnation to 2
Mon Jul 1 22:23:23 2013
Successful mount of redo thread 1, with mount id 2202287127 ----挂载redo成功;
Mon Jul 1 22:23:23 2013
Database mounted in Exclusive Mode -----数据库挂载为排他模式;
Completed: ALTER DATABASE MOUNT
Mon Jul 1 22:23:24 2013 
ALTER DATABASE OPEN -----打开数据库
Mon Jul 1 22:23:24 2013
Thread 1 opened at log sequence 2
Current log# 1 seq# 2 mem# 0: /opt/oracle/oradata/ocm/redo01.log
Successful open of redo thread 1
Mon Jul 1 22:23:24 2013
MTTR advisory is disabled because FAST_START_MTTR_TARGET is not set
Mon Jul 1 22:23:24 2013
SMON: enabling cache recovery
Mon Jul 1 22:23:24 2013
Successfully onlined Undo Tablespace 1. -----undo表空间online成功;
Mon Jul 1 22:23:24 2013
SMON: enabling tx recovery
Mon Jul 1 22:23:24 2013
Database Characterset is AL32UTF8
replication_dependency_tracking turned off (no async multimaster replication found)
Starting background process QMNC
QMNC started with pid=16, OS id=5866
Mon Jul 1 22:23:25 2013
db_recovery_file_dest_size of 2048 MB is 0.00% used. This is a
user-specified limit on the amount of space that will be used by this
database for recovery-related files, and does not reflect the amount of
space available in the underlying filesystem or ASM diskgroup.
Mon Jul 1 22:23:27 2013
Completed: ALTER DATABASE OPEN -----启动完成;
[oracle@ocmserver bdump]$

2、参数文件分类
个人觉得参数文件分为3类(ORACLE官方文档是分了2类)

  • 默认pfile ----系统默认的文本文件,文件名格式为init.ora。
  • pfile ----可编辑的文本文件,文件名格式为init<sid>.ora
  • spfile ----不可手动编辑的二进制文件,文件名格式为spfile<sid>.ora,支持RMAN备份。

  这三者之间可以相互转化,特别是当参数文件异常中断,需要从alert_sid.log里面拼凑出默认的pfile,再修改为init<sid>.ora,最后使用命令转化为spfile<sid>.ora。这样的情况极少出现,只是一种思路和方法。转化命令和过程大体如下:

  • 1)spfile转化为pfile

create pfile from spfile
create pfile form spfile='/opt/oracle/product/dbs/spfileocm.ora';
create pfile='/opt/oracle/product/dbs/initocm.ora' from spfile='/opt/oracle/product/dbs/spfileocm.ora';

  • 2)pfile转化为spfile

create spfile from pfile;
create spfile from pfile='/opt/oracle/product/dbs/initocm.ora';
create spfile='/opt/oracle/product/dbs/spfileocm.ora' from pfile='/opt/oracle/product/dbs/initocm.ora';

  • 3)spfile特性

create spfile from memory;

3、参数文件读取顺序
通常读取顺序为spfile<sid>.ora --->spfile.ora --->init<sid>.ora(没有办法情况下把init.ora修改为适当的init<sid>.ora)
这三个文件一般存放在$ORACLE_HOME/product/dbs下。

startup的时候可以指定pfile

startup pfile='/opt/oracle/product/dbs/initocm.ora';

但是spfile不可以

startup spfile='/opt/oracle/product/dbs/spfileocm.ora';

4、参数文件修改
4.1 pfile修改
pfile为文本文件,可以直接vi修改,但需要重启instance;

4.2 spfile修改
spfile修改提供如下指令:

Alter system set parameter=value
<scope = memory|spfile|both>
<deferred>
<comment = 'text'>
<sid = 'sid|*'>
解释如下:
<scope = memory|spfile|both>:
Memory:修改只对内存有效,即只对当前实例有效,且立即生效,但不会保存到SPFILE, 数据库重启后此配置丢失;
Spfile:修改只对SPFILE有效,不影响当前实例,需要重启数据库才能生效r;
both: 包含以上两种,立即生效,且永久生效(缺省)。
<deferred>:
语句执行后暂时先不做修改,等该用户再次登录DB时,此参数修改生效。
<comment = 'text'>:
为修改的参数添加注释。
<sid = 'sid|*'>:
 常用于多实例对应一个DB的情况,不同的SID分别指定不同的实例。若是sid = SID,那么此参数只适用于SID对应的实例;若是sid = *,则此参数适用于所有实例。

4.3 spfile和pfile的差异
如下图,可以看出spfile与pfile的差异来

5、参数文件常用视图和表
v$parameter ----和show parameter abc 效果同。
v$instance
x$ksppi
x$ksppcv

6、常用参数及说明

CIRCUITS
参数类型:整型
默认值:如果是共享服务器架构,其值为会话数;如果非共享服务器架构,则值为0
参数类别:静态
CIRCUITS用于指定在MTS服务器架构下的虚电路的总数。
 
CONTROL_FILES
参数类型:字符串
语法:CONTROL_FILES = 文件名[,文件名[,...]]
参数类别:静态
取值范围:1至8个文件名
实时应用集群:多个实例必须有相同的设置。
CONTROL_FILES用来指定数据库的参数文件。参数值里指定的多个文件是镜像关系。
 
CURSOR_SHARING
参数类型:字符串
语法:CURSOR_SHARING = {SIMILAR|EXACT|FORCE}
默认值:EXACT
参数类别:动态:ALTER SESSION,ALTER SYSTEM
CURSOR_SHARING用来指定SQL语句如何共享游标。值如下:
FORCE:如果SQL表述只是字面上的不一样,而效果是一样的,则共享游标;
SIMILAR:如果SQL表述只是字面上的不一样,效果和查询计划的维度都一样,则共享游标。这比FORCE我了一个限制:查询计划的维度;
EXACT:仅当SQL表述在字面上完全相同时才共享游标。
 
DB_ nK_CACHE_SIZE
DB_BLOCK_BUFFERS
DB_BLOCK_SIZE
DB_CACHE_SIZE
JAVA_POOL_SIZE
LOG_BUGGER
shared_pool_size
sort_area_size
large_pool_size
statistics_level
SGA_TARGET
以上几个参数是关于内存数据块的设置。

DB_DOMAIN
DB_NAME
ORACLE_SID
INSTANCE_NAME
 
DB_FILES
参数类型:整型
默认值:200
参数类别:静态
实时应用集群:必须为每一个实例设置这个值,且值必须相等。
DB_FILES用来设置数据库文件个数的最大值。
 
DB_WRITER_PROCESSES
参数类型:整型
默认值:1
参数类别:静态
取值范围:1至20
DB_WRITER_PROCESSES用来设置数据库写进程的个数。
 
DISPATCHERS
参数类型:字符串
语法:DISPATCHERS = 'dispatch_clause'
dispatch_cluse::=
(PROTOCOL = protocol)|(ADDRESS = address)|(DESCRIPTION = description)[option_clause]
options_clause::=
(DISPATCHERS = integer|SESSIONS= integer|CONNECTIONS = integer|TICKS = second|POOL = {1|ON|YES|TRUE|BOTH|({IN|OUT}=ticks)|0|OFF|NO|FALSE|ticks}|MULTIPLEX = {1|ON|YES|TRUE|0|OFF|NO|FALSE|BOTH|IN|OUT}|LISTENER=tnsname|SERVICE=service|INDEX=integer)
参数类别:动态:ALTER SYSTEM
DISPATCHERS用来配置在共享服务器架构下的dispatcher进程。

FIXED_DATE
参数类型:字符串
语法:FIXED_DATE=yyyy-mm-dd-hh24-mi-ss(或者是一个oracle默认格式的日期时间值)
参数类别:动态:ALTER SYSTEM
FIXED_DATE 用来设置SYSDATE的值,使固化或动态变化,如:alter system set fixed_date='2006-01-01',则第次查询select sysdate from dual的结果都是2006-01-01,若要将其设回当前时间:alter system set fixed_date=none。
 
IFILE
参数类型:参数文件
语法:IFILE=参数文件名
参数类别:静态
实时应用集群:不同的实例可以有不同的设定值
IFILE用来指出一个另一个链接的参数文件,这个链接的参数文件也是参数文件。我觉得使用这个参数的好处是可以将参数以不同的分类放在多个参数文件中,如:
IFILE=COMMON.ORA
IFILE=DBPARAMS.ORA
IFILE=MEMPARAMS.ORA
 
LICENSE_MAX_SESSIONS
参数类型:整型
默认值:0
参数类别:动态:ALTER SYSTEM
实时应用集群:不同的实例可以有不同的设置值,但总数须小于等于数据库的total number of sessions licensed。
LICENSE_MAX_SESSIONS用于设置实例的最大许可用户会话数,如果会话数达到这个值,则只允许有RESTRICTED
SESSION权限的用户才能连接到数据库。
 
LICENSE_MAX_USERS
参数类型:整型
默认值:0
Real Application Clusters:Multiple instances should have the same values. If different instances specify different values for this parameter, then the value of the first instance to mount the database takes precedence.
LICENSE_MAX_USERS设置数据库的最大用户数,当实际用户数达到这个限额,将不能再创建用户。
 
LOCK_SGA
参数类型:布尔
默认值:false
参数类别:静态
取值范围:false|true
LOCK_SGA用来设定是否SGA只使用物理内存。若值为true,则只使用物理内存,若值为false,则可以允许使用操作系统的虚拟内存(虚拟内存是操作系统利用磁盘空间来当成内存使用的一种技术)。
 
LOG_ARCHIVE_DEST
LOG_ARCHIVE_DEST_ n
LOG_ARCHIVE_DEST_STATE_ n
LOG_ARCHIVE_DUPLEX_DEST
LOG_ARCHIVE_FORMAT
LOG_ARCHIVE_MAX_PROCESSES
LOG_ARCHIVE_MIN_SUCCEED_DEST
LOG_ARCHIVE_START
LOG_ARCHIVE_TRACE
以上这几个参数是关于归档日志的相关设置,这些参数很重要。
 
LOG_CHECKPOINT_INTERVAL
LOG_CHECKPOINT_TIMEOUT
以上两个参数是关于检查点的。
 
LOG_CHECKPOINTS_TO_ALERT
参数类型:布尔
默认值:false
LOG_CHECKPOINTS_TO_ALERT用于设定是否将检查点日志写入警报文件(alert file)中。
 
MAX_DISPATCHERS
参数类型:整型
默认值:5
参数类别:静态
MAX_DISPATCHERS用于在共享服务器架构中,设定DISPATCHER(分配器)的最大数。
 
MAX_DUMP_FILE_SIZE
参数类型:字符串
语法:MAX_DUMP_FILE_SIZE={integer [K|M]}
默认值:UNLIMITED
参数类别:动态:ALTER SYSTEM,ALTER SESSION
取值范围:0至UNLIMITED
MAX_DUMP_FILE_SIZE用来设置轨迹文件的最大文件大小。
 
MAX_ENABLED_ROLES
参数类型:整型
默认值:20
参数类别:静态
MAX_ENABLED_ROLES用于设定一个用户可以同时可最多拥有多少个生效的角色。而实际上一个用户所拥有的有效色是2+MAX_ENABLED_ROLES,因为每个用户都默认拥有两个生效的角色,一个是public,一个是用户特有的角色。
 
MAX_ROLLBACK_SEGMENTS
参数类型:整型
默认值:MAX(30, TRANSACTIONS/TRANSACTIONS_PER_ROLLBACK_SEGMENT)
参数类别:静态
取值范围:2至65535
MAX_ROLLBACK_SEGMENTS用来设定SGA中最大回滚段的最大值。
 
MAX_SHARED_SERVERS
参数类型:整型
参数类别:静态
MAX_SHARED_SERVERS用于设定在共享服务器架构中的最大共享服务器数量。
 
OPEN_CURSORS
参数类型:整型
默认值:50
参数类别:动态:ALTER SYSTEM
取值范围:1至4294967295
OPEN_CURSORS用于设定一个会话最多可以同时打开多少个游标。
 
PROCESSES
参数类型:整型
参数类别:静态
PROCESSES用于设置总的实例的进程数限额,包括服务器进程,以及后台进程、任务进程等。
 
REMOTE_LOGIN_PASSWORDFILE
参数类型:字符串
语法:REMOTE_LOGIN_PASSWORDFILE={NONE|SHARED|EXCLUSIVE}
参数类别:静态
此参数用于设置密码文件的验证方式。
 
SESSIONS
参数类型:整型
默认值:(1.1 * PROCESSES) + 5
参数类别:静态
SESSIONS用于设定系统可创建的最大会话数。

SGA_MAX_SIZE
参数类型:大整型
语法:SGA_MAX_SIZE = integer [K | M | G]
参数类别:静态
SGA_MAX_SIZE用于设置实例的SGA的大小。

二、参数文件实验说明

To be continue……

三、小结

1、参数文件在前面所有实验都非常重要,一般不会出问题,如果出现问题可以去参考alert_ocm.log里面去找讯息重建(发现所有问题重建都可以好,controlfile最终办法也是重建控制文件能解决很多问题?)

2、参数文件修改参数会越来越少.ORACLE11g中,oracle有了自己的调优策略。在oracle 12c中恐怕会更加优化和方便,基本不需要人工干预和调整了,但理解知识无关乎他是否使用,对后续调优及其他方面有很大的方便。

3、参数文件内容不多,应该重点理解。

四、参考文档
1、官方文档
2、minbear的blog:http://www.cnblogs.com/minbear/archive/2006/10/12/526853.html
怕丢失,保存在空间如下:

前言

近来公司技术,研发都在问我关于内存参数如何设置可以优化oracle的性能,所以抽时间整理了这篇文档,以做参考.

目的

希望通过整理此文档,使大家对oracle内存结构有一个全面的了解,并在实际的工作中灵活应用,使oracle的内存性能达到最优配置,提升应用程序反应速度,并进行合理的内存使用.

内容

实例结构

oracle实例=内存结构+进程结构

oracle实例启动的过程,其实就是oracle内存参数设置的值加载到内存中,并启动相应的后台进程进行相关的服务过程。

进程结构

oracle进程=服务器进程+用户进程

几个重要的后台进程:

DBWR:数据写入进程.

LGWR:日志写入进程.

ARCH:归档进程.

CKPT:检查点进程(日志切换;上一个检查点之后,又超过了指定的时间;预定义的日志块写入磁盘;例程关闭,DBA强制产生,表空间offline)

LCKn(0-9):封锁进程.

Dnnn:调度进程.

内存结构(我们重点讲解的)

内存结构=SGA(系统全局区)+PGA(程序全局区)

SGA:是用于存储数据库信息的内存区,该信息为数据库进程所共享。它包含Oracle 服务器的数据和控制信息,它是在Oracle服务器所驻留的计算机的实际内存中得以分配,如果实际内存不够再往虚拟内存中写

 

我们重点就是设置SGA,理论上SGA可占OS系统物理内存的1/2——1/3

原则:SGA+PGA+OS使用内存<总物理RAM

SGA=((db_block_buffers*blocksize)+(shared_pool_size+large_pool_size+java_pool_size+log_buffers)+1MB

1、SGA系统全局区.(包括以下五个区)

A、数据缓冲区:(db_block_buffers)存储由磁盘数据文件读入的数据。

大小: db_block_buffers*db_block_size

         Oracle9i设置数据缓冲区为:Db_cache_size

         原则:SGA中主要设置对象,一般为可用内存40%。

B、共享池:(shared_pool_size):数据字典,sql缓冲,pl/sql语法分析.加大可提速度。

原则:SGA中主要设置对象,一般为可用内存10%

C、日志缓冲区:(log_buffer)存储数据库的修改信息.

         原则:128K ---- 1M 之间,不应该太大

D 、JAVA池(Java_pool_size)主要用于JAVA语言的开发.

         原则:若不使用java,原则上不能小于20M,给30M通常就够了
E、 大池(Large_pool_size)  如果不设置MTS,主要用于数据库备份恢复管理器RMAN。

         原则:若不使用MTS,5---- 10M 之间,不应该太大

SGA=. db_block_buffers*db_block_size+ shared_pool_size+ log_buffer+Java_pool+size+large_pool_size

       原则: 达到可用内存的55-58%就可以了.

2、PGA程序全局区

PGA:包含单个服务器进程或单个后台进程的数据和控制信息,与几个进程共享的SGA 正相反PGA 是只被一个进程使用的区域,PGA 在创建进程时分配在终止进程时回收.

A、Sort_area_size 用于排序所占内存

B、Hash_area_size 用于散列联接,位图索引

这两个参数在非MTS下都是属于PGA ,不属于SGA,是为每个session单独分配的,在我们的服务器上除了OS + SGA,一定要考虑这两部分
原则:OS 使用内存+SGA+并发执行进程数*(sort_area_size+hash_ara_size+2M) < 0.7*总内存

实例配置

一:物理内存多大

二:操作系统估计需要使用多少内存

三:数据库是使用文件系统还是裸设备

四:有多少并发连接

五:应用是OLTP 类型还是OLAP 类型

基本掌握的原则是, db_block_buffer 通常可以尽可能的大,shared_pool_size 要适度,log_buffer 通常大到几百K到1M就差不多了

     A、如果512M RAM 单个CPU   db_block_size 是8192 bytes
 SGA=0.55*512M=280M左右

建议 shared_pool_size = 50M, db_block_buffer* db_block_size = 200M
具体: shared_pool_size =52428800 #50M

db_block_buffer=25600      #200M

log_buffer = 131072         # 128k (128K*CPU个数)

             large_pool_size=7864320      #7.5M

             java_pool_size = 20971520    # 20 M

             sort_area_size = 524288      # 512k (65k--2M)

             sort_area_retained_size = 524288   # MTS 时 sort_area_retained_size = sort_area_size

B、如果1G RAM     单个CPU   db_block_size 是8192 bytes
SGA=0.55*1024M=563M左右
建议 shared_pool_size = 100M , db_block_buffer* db_block_size = 400M
具体: shared_pool_size=104857600    #100M

          db_block_buffer=51200         #400M

 log_buffer = 131072         # 128k (128K*CPU个数)

               large_pool_size=15728640       #15M

          java_pool_size = 20971520    # 20 M

sort_area_size = 524288      # 512k (65k--2M)

              sort_area_retained_size = 524288   # MTS 时 sort_area_retained_size = sort_area_size

 

C、如果2G     单个CPU   db_block_size 是8192 bytes

SGA=0.55*2048M=1126.4M左右
建议 shared_pool_size = 200M , db_block_buffer *db_block_size = 800M

       具体: shared_pool_size=209715200    #200M

          db_block_buffer=103192         #800M

 log_buffer = 131072            # 128k (128K*CPU个数)

               large_pool_size= 31457280      #30M

          java_pool_size = 20971520      # 20 M

sort_area_size = 524288         # 512k (65k--2M)

              sort_area_retained_size = 524288   # MTS 时 sort_area_retained_size = sort_area_size

 

 

假定64 bit ORACLE

内存4G

shared_pool_size = 200M , data buffer = 2.5G

 

内存8G

shared_pool_size = 300M , data buffer = 5G

 

内存 12G

shared_pool_size = 300M-----800M , data buffer = 8G

参数更改方式

oracle8i:

主要都是通过修改oracle启动参数文件进行相关的配置

参数文件位置:

d:oracleadminDB_Namepfileinit.ora

按以上修改以上参数值即可。

Oracle9i:

两种方式:第一种是修改oracle启动参数文件后,通过此参数文件再创建服务器参数文件

          第二种是直接运行oracle修改命令进行修改。

SQL>alter system set db_cache_size=200M scope=spfile;

SQL>alter system set shared_pool_size=50M scope=spfile;

3、Robinson_0612的blog:http://blog.csdn.net/robinson_0612/article/details/5559174

原文地址:https://www.cnblogs.com/alexy/p/createdb4.html