您的位置:首页 > 数据库 > Oracle

ORACLE自动管理内存

2011-11-15 15:10 309 查看
自Oracle 9i以后启动的时候默认使用的初始化文件是spfile,我们可以通过如下三种方式来判断是SPFILE还是PFILE方式启动数据库。

1、show parameter spfile

2、show parameter pfile

3、看v$spparameter视图

1、通过查看spfile、pfile视图

用spfile启动数据库:

SQL> show parameter pfile;

NAME TYPE VALUE

------------------------------------ -------- ------------------------------

spfile string C:\ORACLE\PRODUCT\10.2.0\DB_1\

DATABASE\SPFILEWWL.ORA

SQL> show parameter spfile;

NAME TYPE VALUE

------------------------------------ -------- ------------------------------

spfile string C:\ORACLE\PRODUCT\10.2.0\DB_1\

DATABASE\SPFILEWWL.ORA

用pfile启动数据库

SQL> startup pfile=c:\initwwl.ora

ORACLE instance started.

Total System Global Area 1610612736 bytes

Fixed Size 2066080 bytes

Variable Size 385878368 bytes

Database Buffers 1207959552 bytes

Redo Buffers 14708736 bytes

Database mounted.

Database opened.

SQL> col type format a8

SQL> show parameter pfile;

NAME TYPE VALUE

------------------------------------ -------- ------------------------------

spfile string

SQL> show parameter spfile;

NAME TYPE VALUE

------------------------------------ -------- ------------------------------

spfile string

SQL>

我们在这里可以很明显的发现,使用spfile启动数据库,在查看show parameter pfile和show parameter spfile 都能看到spfile参数文件的路径。

反之使用pfile启动的数据库,我们无论是查看show parameter pfile还是show parameter spfile 都无法看到pfile参数文件的路径。


要动态修改一定要用spfile启动。如果现在是用pfile启动,可以这样切换成spfile启动:

SQL>create spfile from pfile;

SQL>shutdown immediate;

SQL>startup;

一般来说,ORACLE实例内存=物理内存*80%

对于OLTP系统:

PGA=实例内存*20%

SGA=实例内存*80%

对于OLAP系统:

PGA=实例内存*50%

SGA=实例内存*50%

混合型系统在二者之间

确定内存容量后,

对于PGA:使用WORKAREA_SIZE_POLICY设置为AUTO,表示PGA自动管理

用PGA_AGREGGATE_TARGET参数分配PGA

用SGA_TARGET参数分配SGA目标值

用SGA_MAX_SIZE分配SGA最大值

假设物理内存为4g的OLTP系统

设置PGA_AGGREGATE_TARGET和SGA_TARGET,表示分别启动PGA和SGA自动内存管理

sqlplus中配置参数

sql>alter system set WORKAREA_SIZE_POLICY=auto scope=spfile

sql>alter system set PGA_AGGREGATE_TARGET=655M scope=spfile

查询sga信息

show parameter sga_max_size;

show parameter SGA_TARGET;

SGA_TARGET是oracle10g中用于实现自动SGA内存管理而新增加的。是可动态调整的,但其值不能大于sga_max_size。

当使用sga_target时, 若未设置sga_max_size,或设置了小于sga_target,则sga_max_size将等于sga_target。

sql>alter system set SGA_TARGET=2620M scope=spfile

sql>alter system set SGA_MAX_SIZE=2620M scope=spfile

重启实例生效

OLTP与OLAP区别:

OLTP即联机事务处理,就是我们经常说的关系数据库,意即记录即时的增、删、改、查,要求实时处理、支持并发。程序员开发,企业应用基本是此类数据库。
OLAP即联机分析处理,是数据仓库的核心部心,所谓数据仓库是对于大量已经由OLTP形成的数据的一种分析型的数据库,用于处理商业智能、决策支持等重要的决策信息;
数据仓库是在数据库应用到一定程序之后而对历史数据的加工与分析。对数据的实时性、精确性要求不高,数据主要用于提供绐决策层作决策的依据。


修改可能遇到的错误。修改的 pga_aggregate_target=655 ,少了一个“M”,将报以下错误:

ORA-00093: pga_aggregate_target must be between 10M and 4096G-1

那么我们需要在pfile文件修改pga_aggregate_target

解决方法:SQL>create pfile='c:\oracle\dbs\initorcl.ora' from spfile;

不出意外将成功创造 pfile,但有时会报错,例如我曾经遇到过这个错误。

create pfile='c:\oracle\product\init.ora' from spfile

*

第 1 行出现错误:

ORA-27041: unable to open file

OSD-04002: ????????????

O/S-Error: (OS 2) ??????????????????????

用show parameter spfile命令,显示 spfile也被清空了。pfile和SPFILE都没了。重启会报以下错

ORA-01078: failure in processing system parameters

LRM-00109: ???????????????? 'C:\ORACLE\PRODUCT\10.1.0\DB_1\DATABASE\INITORCL.ORA

错误是说没找到C:\ORACLE\PRODUCT\10.1.0\DB_1\DATABASE\INITORCL.ORA启动文件

ORACLE启动分 pfile 和SPFILE两种,两文件都没有了,怎么办。在C:\oracle\product\10.1.0\admin\orcl\pfile\文件夹下有个备用的init.ora.62120119505。将此文件拷到报错的文件下,重命名为INITORCL.ORA。shutdown abort,startup启动数据库。

用命令 create spfile from pfile;建立 spfile,最后打命令重新修改

sql>alter system set WORKAREA_SIZE_POLICY=auto scope=spfile

sql>alter system set PGA_AGGREGATE_TARGET=655M scope=spfile

sql>alter system set SGA_TARGET=2620M scope=spfile

sql>alter system set SGA_MAX_SIZE=2620M scope=spfile

再次重启数据

如正常创建PFILE,打开创建的pfile文件initorcl.ora,找到 pga_aggregate_target ,修改为正确数值,然后用该pfile启动数据库

SQL>startup nomount pfile='c:\oracle\dbs\initorcl.ora'

SQL> create spfile from pfile;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: