ORACLE数据库 memory_target SGA 大小

修改 memory_target

用oracle用户登录,
sqlplus "/as sysdba"
SQL> show parameters target;
     show parameters spfile;
     alter system set memory_max_target=4G scope=spfile;
     alter system set memory_max_target=4G scope=both;
     tmpfs /dev/shm tmpfs defaults,size=24G 0 0
    
-查看当前使用的哪个参数文件启动的
SQL> select distinct isspecified from v$spparameter;
ISSPEC

------

FALSE

看第一个值是FALSE还是TRUE,如果是FALSE,则是pfile,否则则是spfile.

第一行为TRUE可知,是从spfile启动的,
有两行,其中第二行为FALSE,表示有两个参数文件,一个是spfile,一个是pfile
最终:修改参数的方法:
先用 mount -o remount,size=16G  tmpfs
(无论实际内存大小如何,上述命令都能成功,只是不知道内存太小,oracle是否真能启动)
或类似 mount -t tmpfs -o remount,size=32G tmpfs /tmp(命令成功,但没测试oracle启动正常与否)
修改 tmpfs 大小,使oracle能够启动成功;
然后:
用oracle用户lmoracle登录,执行:
sqlplus "/as sysdba"
create pfile=‘/pb/lmoracle/a.txt‘ from memory;
如果oracle已经被正常启动的情况下,可以得到一个保存所有参数的文件:/pb/lmoracle/a.txt
修改a.txt中的
memory_target=2G

memory_target=24G

在sqlplus中执行shutdown;
退出sqlplus,重新执行下面的命令进入sqlplus:
sqlplus "/as sysdba"
然后用修改后的参数文件启动数据库实例:
startup pfile=‘/pb/lmoracle/a.txt‘;
看一下参数:
show parameters target;
无误后,
create spfile from memory;
这样就把改好的参数文件保存到缺省的spfile中了。
重启数据库(或重启机器)
----------------------------------------------------------------------------------------------

ORA-00845: MEMORY_TARGET not supported on this system报错解决
Oracle 11g数据库修改pfile参数后启动数据库报错ora-00845
SQL> startup
ORA-00845: MEMORY_TARGET not supported on this system
在oracle 11g中新增的内存自动管理的参数MEMORY_TARGET,
它能自动调整SGA和PGA,这个特性需要用到/dev/shm共享文件系统,
而且要求/dev/shm必须大于MEMORY_TARGET,如果/dev/shm比MEMORY_TARGET小就会报错

解决方案
1.初始化参数MEMORY_TARGET或MEMORY_MAX_TARGET不能大于共享内存(/dev/shm),为了解决这个问题,可以增大/dev/shm
如:
# mount -t tmpfs shmfs -o size=7g /dev/shm
2.为了确保操作系统重启之后能生效,需要修改/etc/fstab文件
shmfs /dev/shm tmpfs size=7g 0
3.如果/dev/shm没有挂载也会报上面的错,所认需要确保已经挂载
[email protected] ~]$ df -h
tmpfs                16G 8.9G 7.2G 56% /dev/shm
下面为一次操作的记录
[[email protected] ~]# cat /etc/fstab | grep tmpfs
tmpfs                  /dev/shm              tmpfs  defaults,size=8g      0 0
[[email protected] ~]# mount -o remount,size=16G /dev/shm
[[email protected] ~]# cat /etc/fstab | grep tmpfs
tmpfs                  /dev/shm              tmpfs  defaults,size=8g      0 0
[[email protected] ~]# vi /etc/fstab
/dev/rootvg/LogVol02  /                      ext3  defaults      1 1
/dev/rootvg/LogVol01  /tmp                  ext3  defaults      1 2
/dev/rootvg/lvol0    /ebao                  ext3  defaults      1 2
/dev/rootvg/lvol1    /backup                ext3  defaults      1 2
LABEL=/boot            /boot                  ext3  defaults      1 2
tmpfs                  /dev/shm              tmpfs  defaults,size=16g      0 0
devpts                /dev/pts              devpts gid=5,mode=620 0 0
sysfs                  /sys                  sysfs  defaults      0 0
proc                  /proc                  proc  defaults      0 0
/dev/rootvg/LogVol00  swap                  swap  defaults      0 0
"/etc/fstab" 10L, 769C written

[[email protected] ~]# df -h|grep shm
tmpfs                16G    0  16G  0% /dev/shm
SQL> startup
ORACLE instance started.
Total System Global Area 9420095488 bytes
Fixed Size                2236248 bytes
Variable Size          2315255976 bytes
Database Buffers        7046430720 bytes
Redo Buffers              56172544 bytes
Database mounted.
Database opened.
SQL> exit

---------------------------------------------------------------------------
Oracle调整SGA大小

memory_max_target < shm 切记,否则Oracle实例将启动失败,
报  ORA-00845: MEMORY_TARGET not supported on this system 错,点击查看shm设置

------------------------------
SQL> show parameter sga
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 512M
sga_target big integer 512M
SQL>
SQL> show parameter memory
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
hi_shared_memory_address integer 0
memory_max_target big integer 0
memory_target big integer 0
shared_memory_address integer 0
SQL>

sql>alter system set memory_max_target = 15G scope=spfile;
sql>alter system set memory_target = 15G     scope=spfile;
shutdown immediate
startup

SQL> show parameter memory
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
hi_shared_memory_address integer 0
memory_max_target big integer 15G
memory_target big integer 15G
shared_memory_address integer 0

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

如何修改oracle SGA大小
在正常情况下,查询非常慢。
1、检查SGA大小,以DBA身份连接到oracle数据库,输入show sga。
2、如果SGA过小,请修改其大小
修改SGA必须保持的原则:
 1).sga_target不能大于sga_max_size,可以设置为相等。
 2).SGA加上PGA等其他进程占用的内存总数必须小于操作系统的物理内存。
做如下操作前,必须备份dbs目录下的所有文件。
方法一:直接SQL命令行修改:
(如果spfile文件不存在,需先创建create spfile from pfile;)
SQL>alter system set sga_max_size=1024m scope=spfile;
然后需要重启数据库
SQL>shutdown immediate
SQL>startup
SQL>show sga;即可看到SGA的大小已经被修改
重启之后,再修改sga_target
SQL>alter system set sga_target=1024m scope=both;

------------------------------------------------------------------------
设置SGA的原则以及修改它的大小

一,设置SGA的原则:
有时候会碰到在配置SGA中出现了问题,由于分配的内存过多,数据库启不起来了。

内存结构=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就差不多了

例如:
内存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

二,修改SGA的大小:
1.sga_target不能大于sga_max_size,可以设置为相等。                      2.SGA加上PGA等其他进程占用的内存总数必须小于操作系统的物理内存。
做如下操作前,必须备份dbs目录下的所有文件。
方法一:直接SQL命令行修改:
SQL>alter system set sga_target=1024m scope=spfile;
SQL>alter system set sga_max_size=1024m scope=spfile;
(如果spfile文件不存在,需先创建createspfile from pfile;)
alter system set sga_target=12g scope=spfile;
alter system set sga_max_size=12g scope=spfile;
然后
SQL>shutdown immediate
SQL>startup
SQL>show sga;   即可看到SGA的大小已经被修改
方法二:通过EM修改:
以SYS登陆到EM:管理->(数据库配置)所有初始化参数—>SPFile->
               在此界面可以直接定义sga_target与sga_max_size
然后重启数据库即可!

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

cmd下部分操作:,oracle10.2.0g

SQL>conn sys/rezin as sysdba
已连接。
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
Oracle 例程已经关闭。
SQL> startup
oracle 例程已经启动。

TotalSystem Global Area 1073741824 bytes
FixedSize                 1253124 bytes
VariableSize            696254716 bytes
Database Buffers         369098752 bytes
RedoBuffers               7135232 bytes
数据库装载完毕。
数据库已经打开。
SQL> show sga;
TotalSystem Global Area 1073741824 bytes   ---原来大小
FixedSize                 1253124 bytes
VariableSize            696254716 bytes
Database Buffers         369098752 bytes
RedoBuffers               7135232 bytes
SQL> alter system set sga_target=300m  scope=spfile;
系统已更改。
SQL>alter system set sga_max_size=280m scope=spfile;
系统已更改。
SQL>shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。

TotalSystem Global Area  314572800 bytes    ---修改后的大小
FixedSize                 1248720 bytes
VariableSize             96469552 bytes
Database Buffers         209715200 bytes
RedoBuffers               7139328 bytes
数据库装载完毕。
数据库已经打开。

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

oracle 11g安装后,无法登陆的问题(MEMORY_TARGET not supported on this system)

问题的解决:修改dev/shm的大小,具体和memory的对应关系大小可以参考oracle官方快速安装教程中写的设置
[[email protected] ~]$ sqlplus
SQL*Plus: Release 11.2.0.1.0 Production on Mon Jul 1 20:03:07 2013
Copyright (c) 1982, 2009, Oracle.  All rights reserved.
Enter user-name: sys as sysdba
Enter password:
Connected to an idle instance.
SQL> startup;
ORA-00845: MEMORY_TARGET not supported on this system
MEMORY_TARGET不知道在哪设置,根据网上资料,设置了系统参数,但依然无效
[[email protected] ~]# mount -o remount /dev/shm
[[email protected] ~]# df -h /dev/shm/
Filesystem            Size  Used Avail Use% Mounted on
shmfs                 20G     0   20G   0% /dev/shm
想重启数据库也报错~~~
SQL> shutdown immediate;
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Linux-x86_64 Error: 2: No such file or directory
SQL> startup mount
ORA-00845: MEMORY_TARGET not supported on this system

(1)登陆orcl数据库
SQLPLUS SYS/[email protected] AS SYSDBA
(2)设置内存大小
ALTER SYSTEM SET MEMROY_MAX_TARGET=500M SCOPE=SPFILE;(SCOPE=SPFILE表示写如SPFILE文件,在数据库重启后生效)
(3) 设置自动分配的内存大小
ALTER SYSTEM SET MEMORY_TARGET = 500M SCOPE=SPFILE;(表示自动调节PGA和SGA的总大小为500M)
ALTER SYSTEM SET SGA_TARGET =0 SCOPE=SPFILE;
ALTER SYSTEM SET PGA_AGGREGATE_TARGET =0 SCOPE=SPFILE;
(4)关闭数据库
SHUTDOWN IMMEDIATE
(5)重启数据库EXP1使配置生效
startup

按下面的方法搞定,假设你的实例名为orcl
在linux下执行:
1、cd $ORACLE_HOME/dbs
2、sqlplus / as sysdba
3、create pfile from spfile;
然后修改pfile里面的内容,将memery_target修改为sga_target 和 pga_aggregate_target,一个256M,一个200M。
并去掉开始所有的orcl.的选项。
5、startup pfile=‘initorcl.ora‘
6、create spfile from pfile=‘initorcl.ora‘
7、startup force

MEMORY_TARGET 是 oracle database 11g 继 10g 加入 sga_target 之后新加的一个内存自动管理参数,
参数嘛,当然是在 pfile 或 spfile 中设置啦。

*.memory_target=54087647232
应该是55G,于是我调整了
vi /etc/fstab--调整共享内存大小
mount /dev/shm--执行可用
df -h /dev/shm--验证值为60G,
然后在oracle用户下startup就把服务器启动了。

备注:随笔中内容来源于网上资料整理,仅供参考。

时间: 2024-08-07 04:32:54

ORACLE数据库 memory_target SGA 大小的相关文章

如何查看Oracle数据库表空间大小(空闲、已使用),是否要增加表空间的数据文件

要查看Oracle数据库表空间大小,是否需要增加表空间的数据文件,在数据库管理中,磁盘空间不足是DBA都会遇到的问题,问题比较常见. --1.查看表空间已经使用的百分比 Sql代码 select   a.tablespace_name,a.bytes/1024/1024 "Sum MB",(a.bytes-b.bytes)/1024/1024   "used MB",b.bytes/1024/1024 "free MB",round(((a.by

Oracle 10G启动时SGA大小

Oracle 10g 库启动的SGA大小由sga_target与sga_max_size决定,分下面三种情况讨论 sga_target=sga_max_size 参数文件指定值 *.sga_target=599785472 启动 SQL> startup ORACLE instance started. Total System Global Area 599785472 bytes Fixed Size 2022632 bytes Variable Size 171967256 bytes D

查看oracle数据库的大小和空间使用情况

查看oracle数据库的大小和空间使用情况 (2012-06-19 14:44:30) 转载▼ 标签: 杂谈 分类: oracle 1.查看表空间的使用状况 SELECT upper(f.tablespace_name) 表空间名, d.Tot_grootte_Mb "表空间大小(M) ", d.Tot_grootte_Mb - f.total_bytes "已使用空间(M) ", round((d.Tot_grootte_Mb - f.total_bytes) /

查询Oracle 数据库中带有lob字段的某一个表的大小

注意:由于lob字段有独立的lob segment来存储,故对于带有lob字段的表,不能仅仅查询dba_segments. 以下脚本来自: How to Compute the Size of a Table containing Outline CLOBs and BLOBs[Article ID 118531.1] 经过修改:改为了NVL(SUM(S.BYTES),0) SQL> col "TOTAL TABLE SIZE" format 99999999999999 ---

Oracle数据库之内存管理

大页内存 备注 备注1:不能使用oracle自动内存管理: 备注2:目的是减少swap的使用: 备注3:建议SGA大于8G: 备注4:只限于linux系统: 备注5:不会使用/dev/shm空间: 备注6:需要设置内存锁: 如果配置了大页内存但没有被oracle使用 1.sga_max_size超过了大页内存: 2.没有设置内存锁: 3.没有取消自动内存管理: 查看系统大页内存的使用情况 cat /proc/meminfo | grep -i HugePages 备注1:一般大页内存的默认大小为

ORACLE数据库性能优化之--&gt;内存磁盘

1,内存结构优化概述 1.1 缓冲区 影响数据库运行性能的缓冲区包括可以共享的SGA和服务器进程私有的pga两大类,其中sga又包括共享池.大型池.java池.数据缓冲区.流池.redo log缓冲区. 1.2 自动内存管理 oracle一般采用自动内存管理来管理系统内存,由oracle自动管理和调整数据库实例的内存大小.在自动管理模式下,首先对初始化参数MEMORY_TARGET(目标内存大小)和MEMORY_MAX_TARGET(最大内存大小)进行配置,数据库调整目标内存大小,根据需要不断重

转:// LINUX下为ORACLE数据库设置大页--hugepage

在Linux中配置hugepage可以提高oracle的性能,减少oracle sga的页交换,类似于aix中的lagepage. 为什么 使用大页? LINUX内存的默认块大小是4K如果SGA为:128Gselect 128*1024*1024/4 from dual;33554432个(三千多万),select 128*1024/2 from dual; 65536个每个内存页,有一个页表项(大概10个字节),记录页的状态.位置默认块大小是4K时--页表大小:320M.在大页下2M时,页表只

记一次修改sga大小之后出现的一系列报错

记录一次修改sga大小之后出现的一系列报错 修改了oracle的sga大小之后,遇到了一系列的报错. 00844和00851报错 SQL> startup; ORA-00844: Parameter not taking MEMORY_TARGET into account ORA-00851: SGA_MAX_SIZE 2147483648 cannot be set to more than MEM SQL> 01078报错 SQL> startup; ORA-01078: fail

oracle数据库一些常用的优化方案

充分利用系统全局区域SGA(SYSTEM GLOBAL AREA) :     SGA是oracle数据库的心脏.用户的进程对这个内存区发送事务,并且以这里作为高速缓存读取命中的数据,以实现加速的目的.正确的SGA大小对数据库的性能至关重要. SGA包括以下几个部分: 1. 数据块缓冲区(data block buffer cache)是SGA中的一块高速缓存,占整个数据库大小的1%-2%,用来存储从数据库重读取的数据块(表.索引.簇等),因此采用least recently used (LRU