1. 解决“ORA-12162: TNS:net service name is incorrectly specified”问题
在切换到oracle用户后,执行sqlplus / as sysdba语句时遇到下面的错误。
[oracle@kjora-1 ~]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on Tue Nov 24 17:28:03 2015
Copyright (c) 1982, 2011, Oracle. All rights reserved.
ERROR:
ORA-12162: TNS:net service name is incorrectly specified
Enter user-name:
解决方法:上面才错误表示没有正确的设置SID值。
修改# vi /home/oracle/.bash_profile
export ORACLE_SID=kjzlrtdb
这里没有设置或者没有设置正确
保存。
2. "ORA-27102: out of memory"问题
执行启动Oracle命令时出现下面的错误
SQL> startup
ORA-27102: out of memory
Linux-x86_64 Error: 28: No space left on device
解决方法:出现这个问题的原因是系统内核参数设置的共享内存大小比SGA最大值小了,解决方法可以是调大内存参数或者调小memory_max_target和memory_target。
# vi /etc/sysctl.conf
# add by sxr
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 4194304
kernel.shmmax = 34359738368
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
保存,执行 sysctl -p 生效
3. 启动oracle时遇到了“ ORA-27102: out of memory,Linux-x86_64 Error: 12: Cannot allocate memory”错误,如何解决?
调整sga的相关数值经常导致oracle无法启动,提示“ORA-27102: out of memory”的错误
现象如下:SQL> startup
ORA-27102: out of memory
Linux-x86_64 Error: 12: Cannot allocate memory
解决办法:
第一步,需要修改spfilexxx.ora文件中二进制中“*.lock_sga=FALSE”和“*.pre_page_sga=FALSE”从TRUE改成FALSE才行,使锁定处于关闭状态。这样就可以调整sga_max_size和sga_target的值,把sga相关参数调小或调回原来数值,否则调整的数值不生效。
(1)$ sqlplus / as sysdba
SQL> create pfile='/home/oracle/pfile20151209.ora' from spfile;
(2)$ vi /home/oracle/pfile20151209.ora
*.lock_sga=FALSE
*.pre_page_sga=FALSE
*.pga_aggregate_target=3221225472 #调小点,或还原以前的数值
*.sga_max_size=8589934592 #调小点,或还原以前的数值
*.sga_target=8589934592 #同上
(3)让spfile从pfile20151209.ora文件中读取数值到spfilexxx.ora二进制文件,从而修改spfilexxx.ora的值,启动试试。
# su – oracle
$ sqlplus / as sysdba
SQL> create spfile from pfile='/home/oracle/pfile20151209.ora';
SQL> startup
第二步,若启动不了,再修改 /etc/sysctl.conf文件中“kernel.shmmax”和“kernel.shmall”的值,把值调大。
第三步,再次启动oracle
$ sqlplus / as sysdba
SQL> startup
直到能够启动为止。
提示:这种方法是永久可行的,每次启动oracle都没问题。
还有个临时的方法:
是先使用root执行命令ulimit -l unlimited(相当于把“*.lock_sga=FALSE”和“*.pre_page_sga=FALSE”从TRUE改成FALSE),然后进入sqlplus去startup数据库。但这种方法仅限于当前的进程,退出该进程在启动数据库就不行了。