linux oracle sqlplus连接不上或者执行sql语句报错问题解决

  • Post author:
  • Post category:linux


linux默认安装完Oracle11g之后切换到Oracle用户,sqlplus / as sysdba命令,报错:


ERROR:


ORA-12162: TNS:net service name is incorrectly specified


Enter user-name:


在网上寻找原因,发现是:

ORACLE_SID没有指定!

确认系统当前的ORACLE_HOME和ORACLE_SID环境变量

[oracle@asdlabdb01 ~]$ echo $ORACLE_HOME

/oracle/app/oracle/product/10.2.0/db_1

[oracle@asdlabdb01 ~]$ echo $ORACLE_SID

[oracle@asdlabdb01 ~]$

此时修改root用户的/etc/profile文件,将ORACLE_SID设为orcl。

此时sqlplus / as sysdba可以进去了。

但是输入一个select语句报错:

ORA-01034: ORACLE not available
Process ID: 0
Session ID: 0 Serial number: 0

上网查可能是因为没有启动oracle实例,sqlplus连接进去之后输入命令:

startup

报错:

could not open parameter file “…./product/11.2/db_1/dbs/initorcl.ora

网上查这个问题是ORACLE_SID参数有问题,有三个地方的SID可以查看一下是否一致:

1、$ORACLE_BASE/admin/SID_NAME/pfile文件夹下的init文件中的SID;

2、/etc/oratab中的最后一行第一个“:”前,如“oracl:/u01/app/oracle/product/11.2.0/dbhome_1:N”中的“oracl”;

3、~/.bash_profile中的SID;

由于系统中没有第一个和第二个目录。只更改了第三个文件中的sid=orcl(原来的sid是空的)。

之后再登入sqlplus startup,还是报这个错。

网上说:

将$ORACLE_BASE/admin /数据库名称/pfile目录下的init.ora.012009233838形式的文件copy到$ORACLE_HOME/dbs目录下 initoracle.ora即可。(注:initoracle.ora中的oracle为你的实例名 ORACLE_SID)

但是找了一下oracle的安装目录中并没有这个目录。

于是使用find命令查了一下:

find /oracle/ -name init*.ora

找到了/oracle/app/product/11.2.0/dbhome_1/dbs/init.ora这个文件。

猜测可能是这个文件名字不对,于是将init.ora复制一份命名为initorcl.ora。

再次启动,报错:

SQL> startup

ORA-48108: invalid value given for the diagnostic_dest init.ora parameter

ORA-48140: the specified ADR Base directory does not exist [/u01/app/oracle/product/11.2.0/db_11g/dbs/<ORACLE_BASE>]

ORA-48187: specified directory does not exist

Linux-x86_64 Error: 2: No such file or directory

Additional information: 1

这是因为我直接复制的是oracle 11g的init.ora模板,如果没有修改<ORACLE_BASE>这个值的话,就会报以上错误。

解决办法是将<ORACLE_BASE>替换为真正的ORACLE_BASE路径。

我这里是/oracle/app

重新启动,报No such file or directory,只需要mkdir建立相应的目录即可。

建立目录后就可以startup了。

启动成功后再执行select语句就不会报错了。



版权声明:本文为qq_26010491原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。