ORA错误

 一oracle数据库无法登录,报:ORA-01034: ORACLE not available 错误

解决方法:

step 1 先看oracle的监听和oracle的服务是否都启动了。启动oracle监听: cmd的命令行窗口下,输入lsnrctl start,回车即启动监听。

step 2 查看oracle的sid叫什么,比如创建数据库的时候,实例名叫“abc”,那么先手工设置一下oralce的sid,cmd命令窗口中,set ORACLE_SID=abc

step 3 再输入sqlplus  /nolog,回车 再输入 conn / as sysdba;回车

step 4 再输入startup,回车.这步是启动oracle服务。如果startup启动被告知已经启动了,可以先输入shutdown immediate;等shutdown结束之后,再输入startup。

step 5 过几秒钟等命令运行完成,就能连接了。这个时候,可以输入"select * from user_tables;"测试一下,看是否有查询结果。

step 6 出现ORA-01034和ORA-27101的原因是多方面的:主要是oracle当前的服务不可用,shared memory realm does not exist,是因为oracle没有启动或没有正常启动,共享内存并没有分配给当前实例.所以,通过设置实例名,再用操作系统身份验证的方式,启动数据库。这样数据库就正常启动了,就不会报ORA-01034和ORA-27101两个启动异常了。

 

 

二ORA-12528: TNS: 监听程序: 所有适用例程都无法建立新连

原因:断电或者断网可能出现的

首先在cmd中执行lsnrctl status命令,会显示如下信息

监听端点概要... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=svctag-5dk652x)(PORT=1521))) (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC0ipc))) 服务摘要.. 服务 "PLSExtProc" 包含 1 个例程。 例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序... 服务 "orcl" 包含 1 个例程。 例程 "orcl", 状态 BLOCKED, 包含此服务的 1 个处理程序... 服务 "orcl_XPT" 包含 1 个例程。 例程 "orcl", 状态 BLOCKED, 包含此服务的 1 个处理程序... 命令执行成功

如果看到 BLOCKED 则为出错的状态。服务摘要.. 服务 "PLSExtProc" 包含 1 个例程。 例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序... 服务 "orcl" 包含 1 个例程。 例程 "orcl", 状态 BLOCKED, 包含此服务的 1 个处理程序... 服务 "orcl_XPT" 包含 1 个例程。 例程 "orcl", 状态 BLOCKED, 包含此服务的 1 个处理程序... 命令执行成功

如果看到 BLOCKED 这个问题说明数据库没有Mount。

连接的问题可以通过修改listener.ora的参数,把动态的参数设置为静态的参数,蓝色标注部分,然后从新启动监听,就OK

位置D:\oracle\product\10.2.0\db_1\NETWORK\ADMIN

SID_LIST_LISTENER =

(SID_LIST =  

(SID_DESC =    

(SID_NAME = PLSExtProc)    

(ORACLE_HOME = D:\oracle\product\10.1.0\db_1)

    (PROGRAM = extproc)   )

 

(SID_DESC =  

  (GLOBAL_DBNAME = orcl) //如果已经有这个orcl了,这个文件就不用修改    

(ORACLE_HOME = D:\oracle\product\10.1.0\db_1) //这里要根据你的实际路径来  

  (SID_NAME = orcl)   ) )

 

LISTENER =

(DESCRIPTION_LIST =  

(DESCRIPTION =  

  (ADDRESS_LIST =  

  (ADDRESS =

(PROTOCOL = TCP)(HOST = lypch )(PORT = 1521))     )  

  (ADDRESS_LIST =  

  (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))  

  )   ) )
通过修改tnsnames.ora的参数,红色表注部分

# tnsnames.ora Network Configuration File: D:\oracle\product\10.1.0\db_1 \network\admin\tnsnames.ora # Generated by Oracle configuration tools.

AMMICLY =

(DESCRIPTION =  

(ADDRESS =

(PROTOCOL = TCP)(HOST = lypch )

(PORT = 1521))  

(CONNECT_DATA =  

  (SERVER = DEDICATED)  

  (SERVICE_NAME = orcl)  

(UR=A) //加上这个,不知道是什么意思

  ) )

EXTPROC_CONNECTION_DATA =

(DESCRIPTION =  

(ADDRESS_LIST =  

  (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))   )  

(CONNECT_DATA =    

(SID = PLSExtProc)  

  (PRESENTATION = RO)  

) )

然后 sqlplus /nolog SQL>alter database mount; SQL>alter database open;
这样就可以启动数据库了;
或者用Oradim -shutdown -sid ammicly -shuttype srvc,inst -shutmode immediate -syspwd ammic;关闭数据库 在用oradim -startup -sid ammicly -starttype srvc,inst -syspwd ammic;启动数据库解决;也可以在截面上从启动数据库服务来解决;
总结RA-12528问题是因为监听中的服务使用了动态服务,系统启动后,数据库没有正常的MOUNT,因此在动态模式下,就会出现这个问题,用静态的就不会有这个问题,因此上面的方法就是把监听设置为静态,或者在tnsnames.ora中追加(UR=A)或者从启动服务,三种方法解决问题;

 

 

 

一  oracle ORA-01033 断电或者断网可能出现的

1、进入CMD,执行set ORACLE_SID=fbms,确保连接到正确的SID;

2、运行sqlplus "/as sysdba"      SQL>shutdown immediate      停止服务     SQL>startup                  

   启动服务,观察启动时有无数据文件加载报错,并记住出错数据文件标号     SQL>shutdown immediate  

   再次停止服务     SQL>startup mount     SQL> recover datafile 2       

恢复出错的数据文件     SQL>shutdown immediate      再次停止服务    SQL>startup     启动服务,此次正常。

3、进入PL/SQL Developer检查,没有再提示错误。

 

 

posted @ 2012-08-04 23:24  宁酸  阅读(332)  评论(1)    收藏  举报