本文主要针对 windows 环境下 oracle (9i 10g)启动失败,
首先,要查看 oracle 的监听 , em , 服务 是否都已经启动。如果已经启动,但仍然无法连接,首先将服务全部停止,然后按照以下顺序尝试重启
#启动监听
lsnrctl start
#关闭监听
lsnrctl stop
用lsnrctl reload重启监听器,此命令可以代替lsnrctl stop和lsnrctl start。重启将会在不需要关闭和启动监听器的情况下读取listener.ora的配置。
#启动oradb数据库服务
net start oracleserviceoradb
#关闭oradb数据库服务
net stop oracleserviceoradb
#启动dbconsole服务
emctl start dbconsole
#停止dbconsole服务
emctl stop dbconsole
#启动数据库
sqlplus
sql>/as sysdba
sql>startup
#停止数据库
sql>shutdown immediate
要启动或者停止服务,必须拥有sysdba的权限。
关闭数据库 shutdown
有四个参数,四个参数的含义如下:
Normal 需要等待所有的用户断开连接
Immediate 等待用户完成当前的语句 (推荐)
Transactional 等待用户完成当前的事务
Abort 不做任何等待,直接关闭数据库
normal需要在所有连接用户断开后才执行关闭数据库任务,所以有的时候看起来好象命令没有运行一样!在执行这个命令后不允许新的连接
immediate在用户执行完正在执行的语句后就断开用户连接,并不允许新用户连接。
transactional 在拥护执行完当前事物后断开连接,并不允许新的用户连接数据库。
abort 执行强行断开连接并直接关闭数据库。
前三种方式不回丢失用户数据。第四种在不的已的情况下,不建议采用!
数据库的启动
数据库启动使用startup命令,它有三种情况
第一种:不带参数,启动数据库实例并打开数据库,以便用户使用数据库,在多数情况下,使用这种方式!
第二种:带nomount参数,只启动数据库实例,但不打开数据库,在你希望创建一个新的数据库时使用,或者在你需要这样的时候使用!
第三种:带mount参数,在进行数据库更名的时候采用。这个时候数据库就打开并可以使用了!
其他问题:
提示:环境变量 ORACLE_SID 未定义,请定义。
设置 ORACLE_SID =WLW (WLW是我的实例名,也是服务名) C:\Documents and Settings\xcl>set ORACLE_SID=WLW(注意大写)
Oracle 10g错误:shared memory realm does not exist的分析与解决容,情况是这样的:在连接Oracle 10g时出现了错误:“shared memory realm does not exist”,如下图所示:
上图就是Sqlplus连接时出现这个错误,经过分析终于找到了解决问题的方法。
解决方法:
本文一开始提出问题,这里做一解决,为什么会出现那个问题了是因为Oracle数据库没有被启动,解决的方法就是如上面3所示操作打开数据库;
上述问题表现最直接的一个现象:查看任务管理器下oracle.exe所占内存,当oracle.exe所占内存为几十兆说明Oracle数据库没有启动,正常oracle.exe所占内存如下:
现在还原错误:关闭数据库后连接数据库,查看oracle.exe所占内存
查看内存:
与正常启动时相差比价大,所以总结一下解决“shared memory realm does not exist”方法:
(1)任务管理器中查看oracle.exe所占内存,当oracle.exe所占内存仅为几十兆,说明问题是数据库没有启动
(2)启动Oracle数据库,管理员登录,启动。
Java代码:
- sqlplus /nolog
- conn USER/PASSWORD as sysdba
- startup