请高手赐教---ora-01102(window-xp)

情况这样:  
C:\>sqlplus/nolog
SQL*Plus: Release 8.1.7.0.0 - Production on 星期五 8月 29 10:35:41 2008
(c) Copyright 2000 Oracle Corporation.  All rights reserved.
SQL> connect internal/oracle@jibao as sysdba
已连接。
SQL> shutdown
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount
ORACLE 例程已经启动。

Total System Global Area  237856796 bytes
Fixed Size                    75804 bytes
Variable Size              80416768 bytes
Database Buffers          157286400 bytes
Redo Buffers                  77824 bytes
ORA-01102: ??? EXCLUSIVE ????????
操作系统是window xp.
在网上搜了很多都说是:当你启动数据库遇到1102报错时,之前的数据库的down操作一般都不是正常完成的,或由于一些异常使Oracle在操作系统中残留一些内存结构,Pmon等一几个进程依然存在等原因使Oracle误认为Instance依然在运行着,所以库就没有启动,具体说来大体原因有如下几个:
1、pmon、smon、lwgw及dbwr这些后台进程依然存在着
2、Oracle开辟的共享内存没有释放掉
3、"lk<sid>" and "sgadef<sid>.dbf"这两个用于锁内存的文件存在着。
1、看一下"lk<sid>" and "sgadef<sid>.dbf"这两个文件是不是存在着,如果存在将其删掉。
oracle$cd $ORACLE_HOME/dbs
oracle$ls -l sgadef<sid>.dbf
如果存在删掉它
oracle$rm sgadef<sid>.dbf
oracle$ls -l lk<sid>
如果存在删掉它
oracle$rm lk<sid>
2、看是不是有后台进程存在了
oracle$ps -ef | grep ora_ | grep $ORACLE_SID
如果有pmon这些后台进程的残留,kill -9掉它
oracle$kill -9 pid
3、看一下oracle的共享内存段及信号集(semaphores)是不是还存在着
1)清共享内存段
oracle$ipcs -m   --显示一下,看owner是Oracle用户的
oracle$ipcrm -m <Shared_Memory_ID>
2)清信号集
oracle$ipcs -s   --显示一下,看owner是Oracle用户的
oracle$ipcrm -s <Semaphore_ID>
问题是在windown xp系统中没有办法运行这些命令.请高手赐教.
我也来说两句 查看全部回复

最新回复

  • wxz888 (2008-8-29 14:06:26)

    请高手帮帮忙.
  • 1x1xqq (2008-8-29 20:00:34)

    是不是还有其他数据库,把那些都关掉
  • wxz888 (2008-8-30 11:27:54)

    出现这情况前就有其它数据事例存在.以前都用得好好.
  • wxz888 (2008-8-30 14:09:44)

    SQL> startup mount
    ORACLE 例程已经启动。

    Total System Global Area  237856796 bytes
    Fixed Size                    75804 bytes
    Variable Size              80416768 bytes
    Database Buffers          157286400 bytes
    Redo Buffers                  77824 bytes
    ORA-01102: ??? EXCLUSIVE ????????
    不正常启动的数据库事例中能不能查询到pfile的路径吗?如果正常启动用show parameter pfile或show parameter spfile没有这两个值,如何增加这两个其中一个.
  • littledan (2008-8-31 08:52:06)

    你能重启机器么?
    如果不能,下载psexplore看有没有该实例的oracle进程杀掉就好。

    不过oracle估计会recover。可能crash
  • 1x1xqq (2008-8-31 16:41:36)

    刚好前天我做做复制数据库的实验,一个主数据库,一个辅助数据库,这两个库的init.ora里的
    db_name都是一样是就是主数据库的名字,那么我在主数据库时,报这个错,查了以下说是
    内存没有释放,想了以下觉得是不是两个库的名字都是一样的所以才会这样,所以就把主数据库正常关掉,在打开这个辅助库就可以。后来看另外一篇文章说是在辅助库的init.ora里加上这个参数 lock_space_name=clone就可以两个同时打开,的确是可以的
    如果是主辅数据库的情况可以
    1 关掉一个
    2在参数里加上lock_space_name=clone
  • wxz888 (2008-9-01 15:26:48)

    非常感谢.
    请问高手不正常启动的数据库事例中能不能查询到pfile的路径吗?如果正常启动用show parameter pfile或show parameter spfile没有这两个值,如何增加这两个其中一个.数据库是8.1.7的
  • 1x1xqq (2008-9-01 17:10:48)

    1数据库是8.1.7的,那肯定是采用pfile的,因为spfile是9i才开始引入的.
    2show parameter pfile 或者spfile 结果是一样的,显示数据库采用pfile还是spfile启动的
      如果是pfile启动那么,显示为空
      如果是spfile启动那么,显示spfile 的路径
    3 pfile路径是固定的,不管正不正常启动, 你看下你的init.ora文件在哪,那就是pfile路径
    5 show parameter  显示的值,实例一启动就可以显示,应该是实例启动后把启动参数里的值还有相关的一些东西放在内存里, 如果显示的为空是正常的说明你用pfile启动的不用加,而且这个也不是加上去的,数据库用什么启动的,他就显示什么
  • wxz888 (2008-9-02 10:02:48)

    谢谢1x1xqq
    connect internal/oracle@jibao as sysdba
    我发现这样的.用shutdown immediate 关闭以后然后用startup mount启动数据库就出现下面:
    Total System Global Area  237856796 bytes
    Fixed Size                    75804 bytes
    Variable Size              80416768 bytes
    Database Buffers          157286400 bytes
    Redo Buffers                  77824 bytes
    ORA-01102: ??? EXCLUSIVE ????????

    但是如果用指定pfile启动的话数据库启动又很正常(pfile=c:\oralce\admin\jibao\pfile\init.ora).不会出现上面ORA-01102错误,在系统服务关闭启动都没有问题.
    究竟用startup mount启动的时候是用的是哪个init.ora文件.看又看不到.请高手解释下.谢谢
  • 1x1xqq (2008-9-02 11:19:34)

    9i的启动顺序是spfilesid.ora,spfile.ora,initsid.ora,init.ora
    看下有没有个initsid.ora之类的,或者你把所有的带init的都找出来,