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语句就不会报错了。