1,启动报错
azure云上oracle备库降低配置,从DS12降低到DS11后,需要重启服务器,但是之后在开启oracle服务的时候,报错如下
SQL> startup;
ORA-00845: MEMORY_TARGET not supported on this system
SQL>
官方MEMORY_TARGET介绍
Starting with Oracle Database 11g, the Automatic Memory Management feature requires more shared memory (/dev/shm)and file descriptors. The size of the shared memory should be at least the greater of MEMORY_MAX_TARGET and MEMORY_TARGET for each Oracle instance on the computer. If MEMORY_MAX_TARGET or MEMORY_TARGET is set to a non zero value, and an incorrect size is assigned to the shared memory, it will result in an ORA-00845 error at startup.
就是说MEMORY_MAX_TARGET的设置不能超过/dev/shm的大小,在oracle11g中新增的内存自动管理的参数MEMORY_TARGET,它能自动调整SGA和PGA,这个特性需要用到/dev/shm共享文件系统,而且要求/dev/shm必须大于MEMORY_TARGET,如果/dev/shm比MEMORY_TARGET小就会报错。
2,解决办法:
修改/etc/fstab配置, 查看/etc/fstab
[oracle@oracle2~]$ more /etc/fstab
#
# /etc/fstab
# Created by anaconda on Wed Jan 15 04:45:47 2014
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=6d089360-3e14-401d-91d0-378f3fd09332 / ext4 defaults 1 1
/dev/sdc /oracle ext4 defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
[oracle@oracle2~]$
看到里面没有tmpfs的默认值,所以需要在里面修改tmpfs的值,设置一个默认值size大小
tmpfs /dev/shm tmpfs defaults 0 0
换成
tmpfs /dev/shm tmpfs defaults,size=10G 0 0
需要重新mount生效
[root@oracle2~]# mount -o remount,size=10G /dev/shm
[root@oracle2~]#
[root@oracle2~]#
[root@oracle2~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 29G 8.8G 19G 33% /
tmpfs 10G 0 10G 0% /dev/shm
/dev/sdc 1007G 425G 531G 45% /oracle
/dev/sdb1 28G 172M 26G 1% /mnt/resource
[root@oracle2~]#
再去启动oracle实例,startup成功,如下
[root@oracle2~]# su - oracle
[oracle@oracle2~]$ rlwrap sqlplus / as sysdba
SQL*Plus: Release 11.2.0.1.0 Production on Mon Jan 16 10:20:33 2017
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup;
ORACLE instance started.
Total System Global Area 8551575552 bytes
Fixed Size 2215064 bytes
Variable Size 2818573160 bytes
Database Buffers 5704253440 bytes
Redo Buffers 26533888 bytes
Database mounted.
Database opened.
SQL>
3,扩展问题
关于自动内存管理,自动内存管理是用两个初始化参数进行配置的:
MEMORY_TARGET:动态控制SGA和PGA时,Oracle总共可以使用的共享内存大小,这个参数是动态的,因此提供给Oracle的内存总量是可以动态增大,也可以动态减小的。它不能超过MEMORY_MAX_TARGET参数设置的大小。默认值是0。
使用动态内存管理时,SGA_TARGET和PGA_AGGREGATE_TARGET代表它们各自内存区域的最小设置,要让Oracle完全控制内存管理,这两个参数应该设置为0。
但是memory_target这个参数是可以动态调节的...也就是说不需要重新启动DB,就可以让其生效。
MEMORY_MAX_TARGET 是设定Oracle能占OS多大的内存空间
SGA_MAX_SIZE是Oracle SGA 区最大能占多大内存空间
11g MEMORY_MAX_TARGET 参数包含SGA和PGA两部分。
在手动创建数据库时,只需要在创建数据库之前设置合适的MEMORY_TARGET和MEMORY_MAX_TARGET初始化参数。
在一个系统上启用自动内存管理其实很简单,不需要事先做太多的事情,可以使用下面的计算公式来计算: MEMORY_TARGET=SGA_TARGET+GREATEST(PGA_AGGREGATE_TARGET,"maximumPGAallocated");
查看状态
SQL> SELECT
2 NAME,
3 VALUE
4 FROM
5 v$parameter
6 WHERE NAME IN (
7 'pga_aggregate_target',
8 'sga_target'
9 )
10 UNION
11 SELECT
12 'maximum PGA allocated' AS NAME,
13 to_char(VALUE) AS VALUE
14 FROM
15 v$pgastat
16 WHERE NAME = 'maximum PGA allocated' ;
NAME VALUE
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
maximum PGA allocated 41652878336
pga_aggregate_target 11897856102
sga_target 60666413056
SQL>
如果需要监视Memory_target 的状况则可以使用下面三个动态试图:
V$MEMORY_CURRENT_RESIZE_OPS
V$MEMORY_DYNAMIC_COMPONENTS
V$MEMORY_RESIZE_OPS
V$MEMORY_TARGET_ADVICE
下面来看看在11g 中Memory_target 设置和不设置对SGA/PGA 的影响:
如果Memory_target 设置为非0 值
1、sga_target 和 pga_aggregate_target 已经设置大小
Memory_Target =SGA_TARGET+PGA_AGGREGATE_TARGET ,大小和 memory_max_size 一致
2、sga_target 设置大小, pga_aggregate_target 没有设置大小
3、sga_target 没有设置大小, pga_aggregate_target 设置大小
sga_target 初始化值=memory_target-pga_aggregate_target
4、sga_target 和 pga_aggregate_target 都没有设置大小
两个值没有最小值和默认值,Oracle 将根据数据库运行状况进行分配大小,但在数据库启动是会有一个固定比例来分配:
sga_target =memory_target *60%
pga_aggregate_target=memory_target *40%
查看所有的target状态值
SQL> show parameter target;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
archive_lag_target integer 0
db_flashback_retention_target integer 1440
fast_start_io_target integer 0
fast_start_mttr_target integer 0
memory_max_target big integer 0
memory_target big integer 0
parallel_servers_target integer 128
pga_aggregate_target big integer 11897856102
sga_target big integer 57856M
SQL>
MEMORY_TARGET 简介图