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

关于ORACLE11G ORA-00845 错误的正确解决方案

2009-10-28 18:54 381 查看
最近刚开始学oracle,在我的xp sp3下装了oracle 10g,又在vm下装了CentOS4+oracle11g,虽然出了一堆错误,但都一一解决了,然后随便敲了几个命令,看没问题就先洗洗睡了。前段时间看了一下pl/sql,今天想上机试一下,结果就出问题了。

来看一下我的问题。

我先登录进centOS(^=^,这个好啊,和RedHat一样还不用交钱,免除了用盗版的嫌疑,再鄙视一下发明授权费的那家伙,看看oracle贵得~~),一切顺利,然后用oracle用户输入:

sqlplus /nolog

然后:

SQL>conn / as sysdba

一切OK,但是下面问题就来了:

SQL>startup

ORA-00845: MEMORY_TARGET not supported on this system

报错了,然后就百度,不出我所料,出来一堆。先点开杨廷琨巨巨的博客,进去一看,蛮简单的,只要改个文件就行了,结果不管三七二十一就把杨巨巨的文件照抄进去了,额,然后就是一堆莫名其妙的错误,看来是文件改错了。于是我仔细对比了一下,发现只要改一个参数就可以了。顺便说一句,我又看了几个解决方案,发现和杨老大的一样,额,也不知道自己试过了没有,汗~~原封不动的就抄过去了,还误导我。

废话不多说了,下面给出我的解决方案。

这个问题是由于设置SGA的大小超过了操作系统/dev/shm的大小:
[root@enterprice64 ~]# df -k /dev/shm

Filesystem 1K-blocks Used Available Use% Mounted on

none 202532 0 202532 0% /dev/shm

这是我机器上的结果,杨老大上的1K-blocks是4个多G,难怪我会出错,我的虚拟机硬盘上没有那么多空间,我的的1K-blocks才200多M,汗。

Oracle在metalink的文档:Doc ID:Note:460506.1中进行了说明。解决这个问题只有两个方法,一种是修改初始化参数,使得初始化参数中SGA的设置小于/dev/shm的大小,另一种方法就是调整/dev/shm的大小。
修改/dev/shm的大小可以通过修改/etc/fstab来实现(注意了,这里要用root,而不是你的oracle账号来修改):

[root@enterprice64 ~]# vi /etc/fstab

LABEL=/ / ext3 defaults 1 1

LABEL=/boot /boot ext3 defaults 1 2

LABEL=/data /data ext3 defaults 1 2

devpts /dev/pts devpts gid=5,mode=620 0 0

#tmpfs /dev/shm tmpfs defaults 0 0

tmpfs /dev/shm tmpfs defaults,size=10240M 0 0

LABEL=/home /home ext3 defaults 1 2

LABEL=/opt /opt ext3 defaults 1 2

proc /proc proc defaults 0 0

sysfs /sys sysfs defaults 0 0

LABEL=/usr /usr ext3 defaults 1 2

LABEL=/var /var ext3 defaults 1 2

LABEL=SWAP-sda8 swap swap defaults 0 0

~

~

"/etc/fstab" 13L, 965C written

我就是照抄了上面一段才出错的,后来对比了一下,发现只要增加一个size的参数就行了,下面是我的:

[root@enterprice64 ~]# vi /etc/fstab

# This file is edited by fstab-sync - see 'man fstab-sync' for details

LABEL=/ / ext3 defaults 1 1

none /dev/pts devpts gid=5,mode=620 0 0

none /dev/shm tmpfs defaults,size=1G 0 0

none /proc proc defaults 0 0

none /sys sysfs defaults 0 0

LABEL=SWAP-sda2 swap swap defaults 0 0

# Beginning of the block added by the VMware software

.host:/ /mnt/hgfs vmhgfs defaults,ttl=5 0 0

# End of the block added by the VMware software

/dev/hdc /media/cdrom auto pamconsole,fscontext=system_u:object_r:removable_t,exec,noauto,managed 0 0

/dev/fd0 /media/floppy auto pamconsole,fscontext=system_u:object_r:removable_t,exec,noauto,managed 0 0

~

~

~

注意看第三行:

none /dev/shm tmpfs defaults,size=1G 0 0

这一行原来是:

none /dev/shm tmpfs defaults 0 0

我只是添加了size=1G,然后保存退出。杨老大设定的是:

tmpfs /dev/shm tmpfs defaults,size=10240M 0 0

大家看到了,对比一下我们俩的/etc/fstab 文件,还是有一些不同的。还有,他设定的size是10240M,也就是10G,一般装在虚拟机里是不会有这么大的闲余空间的。看来杨老大是在真机上装的,空间就是足呀,呵呵呵。

这里要提醒一下大家,我的 1K-blocks 只有200多M所以就给了size=1G,而杨老大的 1K-blocks 是4个多G,所以他给了10G,大家要根据自己的 df -k /dev/shm 的结果来给size赋值。千万不要给少了。

好了,下面就简单了:

[root@enterprice64 ~]# umount /dev/shm

[root@enterprice64 ~]# mount /dev/shm

[root@enterprice64 ~]# df -k /dev/shm

Filesystem 1K-blocks Used Available Use% Mounted on

none 1048576 239044 809532 23% /dev/shm

大家看到了,现在的 1K-blocks 是1G左右,刚好就是刚才我给的size值。下面

[root@enterprice64 ~]# su - oracle

[oracle@enterprice64 ~]$ sqlplus "/ as sysdba"

SQL*Plus: Release 11.1.0.6.0 - Production on Wed Oct 28 17:05:28 2009

Copyright (c) 1982, 2007, Oracle. All rights reserved.

Connected to:

Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> startup

ORACLE instance started.

Total System Global Area 313860096 bytes

Fixed Size 1299624 bytes

Variable Size 226495320 bytes

Database Buffers 79691776 bytes

Redo Buffers 6373376 bytes

Database mounted.

Database opened.

SQL>

大家可以看到,一切正常了。

来看一下SGA,其实就是startup时显示的一堆数据:

SQL> show sga;

Total System Global Area 313860096 bytes

Fixed Size 1299624 bytes

Variable Size 230689624 bytes

Database Buffers 75497472 bytes

Redo Buffers 6373376 bytes

SQL>

虽然只是一个小问题,但是我解决的过程还是有一点波折,这也说明了随便copy是要不得的,一定要多思考,找到问题的本质,这样才能真正学好学透。

THAT'S ALL.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: