常见原因:配置文件(listener.ora/tnsnames.ora)语法错误、端口冲突(如1521端口被占用)、Oracle环境变量未正确设置、数据库实例未启动。
解决方法:
lsnrctl status,查看是否有配置错误或未注册的实例;netstat -tuln | grep 1521(或监听器端口)检查端口是否被占用,若占用则停止冲突进程或修改监听器端口;echo $ORACLE_HOME和echo $PATH,确保ORACLE_HOME指向正确安装目录,PATH包含$ORACLE_HOME/bin;sqlplus / as sysdba登录,执行startup命令开启实例。常见原因:网络不通(服务器IP不可达)、防火墙/安全组拦截、监听器未监听正确地址或端口、tnsnames.ora配置错误。
解决方法:
ping <服务器IP>,确认网络可达;firewall-cmd --permanent --add-port=1521/tcp(CentOS 7+)并firewall-cmd --reload;$ORACLE_HOME/network/admin/listener.ora,确保HOST设置为服务器IP(或0.0.0.0监听所有接口),PORT为正确端口(如1521);$ORACLE_HOME/network/admin/tnsnames.ora中的连接字符串(如ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 服务器IP)(PORT = 1521)) (CONNECT_DATA = (SERVICE_NAME = orcl))))是否正确。常见原因:系统共享内存不足(kernel.shmmax/kernel.shmall设置过小)、Oracle内存参数(SGA_TARGET/PGA_AGGREGATE_TARGET)超过系统限制。
解决方法:
/etc/sysctl.conf,添加或修改以下参数(根据服务器内存调整,如16GB内存):kernel.shmall = 内存MB数/4(如16GB则为4194304)、kernel.shmmax = 内存MB数×1024×1024(如16GB则为17179869184)、kernel.sem = 250 32000 100 128;执行sysctl -p使配置生效;$ORACLE_HOME/network/admin/init<SID>.ora(或spfile),调整SGA_TARGET(如4G)和PGA_AGGREGATE_TARGET(如1G)至合理范围(不超过系统限制)。常见原因:安装Oracle前未安装必要的系统依赖包(如libaio、compat-libstdc++等)。
解决方法:
yum install -y binutils compat-libcap1 compat-libstdc++-33 gcc gcc-c++ glibc glibc-devel ksh libaio libaio-devel libgcc libstdc++ libstdc++-devel libXi libXtst make sysstat unixODBC unixODBC-devel;常见原因:init<SID>.ora参数文件丢失或路径错误、ORACLE_SID环境变量设置不正确。
解决方法:
$ORACLE_HOME/dbs目录,确认存在init<ORACLE_SID>.ora文件(如initorcl.ora);若不存在,可从安装介质或备份中恢复;ORACLE_SID:执行echo $ORACLE_SID,确保其值与数据库实例名一致(如orcl);若不一致,编辑~/.bashrc或~/.bash_profile,添加export ORACLE_SID=<实例名>,并执行source ~/.bashrc使配置生效;sqlplus / as sysdba登录,执行startup命令开启实例。常见原因:系统交换空间(Swap)小于Oracle要求的最小值(通常为1GB以上,推荐2GB以上)。
解决方法:
sudo fallocate -l 2G /mnt/2G.swap(创建2GB交换文件,大小可根据需求调整);sudo chmod 600 /mnt/2G.swap;sudo mkswap /mnt/2G.swap;sudo swapon /mnt/2G.swap;/etc/fstab,添加一行/mnt/2G.swap none swap sw 0 0,保存后重启系统。常见原因:当前用户没有执行Oracle操作的权限(如oracle用户未加入oinstall或dba组、未授予SYSDBA权限)。
解决方法:
id oracle,确保用户属于oinstall和dba组(如uid=1001(oracle) gid=1001(oinstall) groups=1001(oinstall),1002(dba));若不在,执行usermod -aG oinstall,dba oracle并重新登录;SYSDBA权限:用sqlplus / as sysdba登录,执行grant sysdba to <用户名>(如grant sysdba to scott);sudo权限:若需要sudo执行Oracle命令,编辑/etc/sudoers,添加oracle ALL=(ALL) ALL(需root权限)。常见原因:系统内核参数不符合Oracle要求(如semmni、semmsl等参数值过小)。
解决方法:
/etc/sysctl.conf,添加或修改以下内核参数(以Oracle 19c为例):kernel.sem = 250 32000 100 128(semmsl=128、semmns=32000、semopm=100、semmni=128);sysctl -p使配置生效;