天天看點

ORA-27125: unable to create shared memory segment

OS環境:CentOS release 6.5 (Final)

Oracle版本:Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit

場景:資料庫startup的時候報如下錯誤

*******************************************************************************

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

SQL*Plus: Release 10.2.0.1.0 - Production on 星期二 5月 31 09:10:45 2016

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

已連接配接到空閑例程。

SQL> startup

ORA-27125: unable to create shared memory segment

Linux-x86_64 Error: 1: Operation not permitted

*********************************************************************************

解決方法:

When a process uses some memory, the CPU is marking the RAM as used by that process. For efficiency, the CPU allocate RAM by chunks of 4K bytes (it's the default value on many platforms). Those chunks are named pages. Those pages can be swapped to disk, etc.

Since the process address space are virtual, the CPU and the operating system have to remember which page belong to which process, and where it is stored. Obviously, the more pages you have, the more time it takes to find where the memory is mapped. When a process uses 1GB of memory, that's 262144 entries to look up (1GB / 4K). If one Page Table Entry consume 8bytes, that's 2MB (262144 * 8) to look-up.

Most current CPU architectures support bigger pages (so the CPU/OS have less entries to look-up), those are named Huge pages (on Linux), Super Pages (on BSD) or Large Pages (on Windows), but it all the same thing.

步驟如下:

[oracle@localhost ~]$ id oracle

uid=501(oracle) gid=501(oinstall) groups=501(oinstall),502(dba)

root@localhost ~]# more /proc/sys/vm/hugetlb_shm_group 

[root@localhost ~]# echo 502 >/proc/sys/vm/hugetlb_shm_group

[root@localhost ~]# su - oracle

SQL*Plus: Release 10.2.0.1.0 - Production on 星期二 5月 31 09:12:05 2016

ORACLE 例程已經啟動。

Total System Global Area 5016387584 bytes

Fixed Size                  2027640 bytes

Variable Size            1124077448 bytes

Database Buffers         3875536896 bytes

Redo Buffers               14745600 bytes

資料庫裝載完畢。

資料庫已經打開。