首页 > 其他分享 >ORA-00845:系统不支持MEMORY_TARGET

ORA-00845:系统不支持MEMORY_TARGET

时间:2023-07-28 10:06:33浏览次数:37  
标签:00845 TARGET dev 参数 内存 MEMORY shm

错误信息

【汉】ORA-00845:系统不支持MEMORY_TARGET

【英】ORA-00845:MEMORY_TARGET not supported on this system

在CentOS 7操作系统上启动数据库时报错。

ORA-00845:系统不支持MEMORY_TARGET_ORA-00845

版本

Oracle 【11.2.0.3.0】、【11.2.0.1.0】、【11.2.0.4.0】

原因

原因有两种可能,一是因为操作系统不支持参数【MEMORY_TARGET】,另一种可能是操作系统支持,但是/dev/shm空间不够。

首先来说一下/dev/shm,/dev/shm是一种文件系统,它跟xfs、ext4、ext3这种文件系统相似,只不过它是完全使用内存的一种文件。在内存中存储数据,大家也清楚,只要服务器在重启或意外宕机的情况下,/dev/shm目录里的内容就会丢失。

【MEMORY_TARGET】参数指定Oracle可使用的内存空间,它会使用/dev/shm文件系统来动态分配SGA和PGA。因此,只要指定此参数的大小,就不需要再手动调整SGA和PGA的大小,这就是Oracle的AMM内存管理模式。

如果初始化参数文件中,有【MEMORY_TARGET】参数但没有【MEMORY_MAX_TARGET】的值,则Oracle会自动将【MEMORY_MAX_TARGET】参数的值设置成【MEMORY_TARGET】参数的值。

如果初始化参数文件中,有【MEMORY_MAX_TARGET】参数但没有【MEMORY_TARGET】参数的话,则Oracle会自动将【MEMORY_TARGET】参数的值设置为0。在数据库启动后,可以在根据需要,动态去设置【MEMORY_TARGET】参数的大小,但它不能超过【MEMORY_MAX_TARGET】参数值。

需要注意的是,设置了【MEMORY_TARGET】参数后,并不代表Oracle内存使用一定会低于或等于这个值。例如,在服务器操作系统内存可用的情况下,内存就会分配给PL/SQL表和varrays,而不考虑【MEMORY_TARGET】参数的值。

解决方法

CentOS系统是支持【MEMORY_TARGET】参数的,那么就只剩下/dev/shm空间不足的情况。

1、首先检查/dev/shm空间的大小。

[oracle@localhost ~]$ df -h

ORA-00845:系统不支持MEMORY_TARGET_ORA-00845_02

2、检查数据库参数文件配置的参数

检查参数文件有两个,一个是spfile<ORACLE_SID>.ora文件,另一个是inti<ORACLE_SID>.ora文件。

Oracle在启动到nomount状态下,会先读取spfile文件,如果spfile不存在,再读取pfile文件。因此,只要spfile文件存在,就不需要管pfile文件是否存在了。

# 进入参数文件目录
[oracle@localhost ~]$ cd $ORACLE_HOME/dbs
# 查看spfile文件
[oracle@localhost dbs]$ cat spfileorcl.ora

ORA-00845:系统不支持MEMORY_TARGET_ORA-00845_03

3、解决

看到当前数据库配置的内存的确超过/dev/shm内存时,就已经有解决方案了。解决要么是增加/dev/shm空间的大小,要么是减少memory参数的值。这两种方案需要跟据你的服务器来定,如果有内存可以继续增加,就可以增大/dev/shm的值。如果没有内存可以使用,就减少memory参数的值。

增加/dev/shm

此方法要求/dev/shm暂时没有使用,如果有使用,请先关闭使用的服务再重新挂载,否则,正在使用/dev/shm的应用会报错。

# 重新挂载内存
[root@localhost ~]# mount -t tmpfs shmfs -o size=3g /dev/shm

# 配置自动挂载
vim /etc/fstab

shmfs /dev/shm tmpfs size=3g 0

# 再次查看
[root@localhost ~]# df -h

减少内存的值

减少内存的参数,需要编辑pfile文件后,再重新用pfile生成spfile。

进入sqlplus命令窗口
[oracle@localhost dbs]$ sqlplus / as sysdba
# 使用spfile创建pfile文件
SQL> create pfile from spfile;
# 退出splqplus命令窗口
SQL> exit
# 修改配置文件,减少参数的值
[oracle@localhost dbs]$ vim initorcl.ora

*.memory_max_target=1073741824
*.memory_target=1073741824

# 再进入sqlplus命令窗口
[oracle@localhost dbs]$ sqlplus / as sysdba
# 用pfile生成spfile
SQL> create spfile from pfile;
# 启动数据库
SQL> startup

至此,问题就解决了,数据库正常启动。

标签:00845,TARGET,dev,参数,内存,MEMORY,shm
From: https://blog.51cto.com/bxbdba/6878347

相关文章

  • rabbitmq告警Error: health check failed. Message: resource alarm(s) in effect:[{r
     这个错误信息表示RabbitMQ的内存使用量超出了预设的阈值,导致触发了RabbitMQ的内存警告阈值报警。RabbitMQ在运行过程中会不断地将消息存储在内存中,如果内存使用量超出了预设的阈值,就会触发内存警告阈值报警。这个阈值的默认值是40%的物理内存,可以通过修改Rabbi......
  • target_link_libraries中的PRIVATE INTERFACE PUBLIC
    CMaketarget_link_librariesInterfaceDependenciesCMake的链接选项:PRIVATE,INTERFACE,PUBLICIfyouarecreatingasharedlibraryandyoursourcecppfiles#includetheheadersofanotherlibrary(Say,QtNetworkforexample),butyourheaderfilesdon'ti......
  • css3之:target伪类
    CSS3target伪类    -------用来匹配URI某一个标志符的目标元素。一般url中包含"#"字符,后面带有一个标志符号,如:"#top" 1、浏览器支持情况:      除了IE6-8,其他浏览器都支持。     http://caniuse.com/#search=%3Atarget  2、使用方式:   //类似于hov......
  • 【遇到一个神奇的问题】暂未想到原因,http.Post 传入 nil参数正确,但是传输值为 nil 的
    出错的代码如下:funcgetEab(ctxcontext.Context,credentialsJSONstring,old*externalAccountKeyResp)(*externalAccountKeyResp,error){//inithttpclient// varpostData*bytes.Reader=nil ifold!=nil{ buf,_:=json.Marshal(old) postData......
  • You can’t specify target table ‘aaa′ for update in FROM clause
    Youcan’tspecifytargettable‘aaa′forupdateinFROMclause使用MySQL执行DELETEFROM时,若子查询的FROM子句和更新/删除对象使用同一张表,会出现错误。针对“同一张表”这个限制,撇开效率不谈,多数情况下都可以通过多加一层SELECT别名表来变通解决,如下:DELETEFRO......
  • springboot元注解@Target@Retention@Documented
        @Target(ElementType.METHOD)是一个元注解,用来标注注解的作用目标。这里的@Target(ElementType.METHOD)表示该自定义注解可以用于方法上。@Retention(RetentionPolicy.RUNTIME)是一个元注解,用来标注注解的保留策略。这里的@Retention(RetentionPolicy.RUNTIME)表......
  • maven-resources-production:igowin-core: java.lang.OutOfMemoryError: Java hea
    MavenResourcesProduction:OutofMemoryErrorinJavaIntroductionInJava,theOutOfMemoryErrorisacommonexceptionthatoccurswhentheJavaVirtualMachine(JVM)cannotallocateenoughmemorytoperformanoperation.Thiserrorisoftenencountered......
  • Could not find compile target android-33 for modules :app
         检查一下这些地方......
  • LOADING Redis is loading the dataset in memory
     MISCONFRedisisconfiguredtosaveRDBsnapshots,butiscurrentlynotabletopersistondisk.Commandsthatmaymodifythedatasetaredisabled.PleasecheckRedislogsfordetailsabouttheerror LOADINGRedisisloadingthedatasetinmemory......
  • Makefile:162:recipe for target ‘xxx.o‘ failed!
    Q:使用makefile对工程进行编译的时候,出现指定报错:Makefile:162:recipefortarget‘xxx.o‘failed!A:该问题报错的意思是缺少依赖。根本问题是由于某个错误,导致过程文件xxx.o无法正常编译成功(makefile中最终目标文件的编译需要依赖过程目标文件xxx.o,而过程目标文件xxx.......