最近刚开始学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.