• Oracle 已连接到空闲例程或ORA-01034: ORACLE not available


    因为是本地数据库没有重要资料,所以可以随便自己折腾。

    出现问题原因:从生产数据库导入一个表到本地库测试,因数据量过大,在导入4-5个小时后,手动中断导入。是否异常关机不能确定。

    之后再打开数据库出现一点问题,说是C盘空间小,就擅自删了几个大的数据库文件和所有日志文件。

    --以下是具体操作,先是对数据库文件的恢复,之后恢复日志文件:

    -----------------------------------------------------1、数据文件物理删除后,数据库无法打开的解决--------------------------

    C:UsersAdministrator>lsnrctl start

    LSNRCTL for 64-bit Windows: Version 11.2.0.1.0 - Production on 12-2月 -2015 09:4

    1:05

    Copyright (c) 1991, 2010, Oracle.  All rights reserved.

    启动tnslsnr: 请稍候...

    TNSLSNR for 64-bit Windows: Version 11.2.0.1.0 - Production

    系统参数文件为C:appAdministratorproduct11.2.0dbhome_1 etworkadminlistene

    r.ora

    写入c:appadministratordiag nslsnrSandice-PClisteneralertlog.xml的日志信

    监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=Sandice-PC)(PORT=1521)))

    正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=Sandice-PC)(PORT=1521)))

    LISTENER 的 STATUS

    ------------------------

    别名                      LISTENER

    版本                      TNSLSNR for 64-bit Windows: Version 11.2.0.1.0 - Produ

    ction

    启动日期                  12-2月 -2015 09:41:09

    正常运行时间              0 天 0 小时 0 分 3 秒

    跟踪级别                  off

    安全性                    ON: Local OS Authentication

    SNMP                      OFF

    监听程序参数文件          C:appAdministratorproduct11.2.0dbhome_1 etworka

    dminlistener.ora

    监听程序日志文件          c:appadministratordiag nslsnrSandice-PClistener

    alertlog.xml

    监听端点概要...

      (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=Sandice-PC)(PORT=1521)))

    服务摘要..

    服务 "ORCL" 包含 1 个实例。

      实例 "ORCL", 状态 UNKNOWN, 包含此服务的 1 个处理程序...

    命令执行成功

    C:UsersAdministrator>net start OracleServiceorcl

    OracleServiceORCL 服务正在启动 ......

    OracleServiceORCL 服务已经启动成功。

    C:UsersAdministrator>sqlplus

    SQL*Plus: Release 11.2.0.1.0 Production on 星期三 2月 11 10:25:37 2015

    Copyright (c) 1982, 2010, Oracle.  All rights reserved.

    请输入用户名:  sys as sysdba

    输入口令:

    连接到:

    Oracle Database 11g Release 11.2.0.1.0 - 64bit Production

    --说明:A表是库中原来建的表

    SQL> select * from A

      2  ;

    select * from A

                  *

    第 1 行出现错误:

    ORA-01219: 数据库未打开: 仅允许在固定表/视图中查询

    --说明:查看数据库实例启动状态,目前启动状态为mounted

    SQL> select status from v$instance;

    STATUS

    ------------

    MOUNTED

    --说明:查看控制文件位置

    SQL> select name from v$controlfile;

    NAME

    --------------------------------------------------------------------------------

    C:APPADMINISTRATORORADATAORCLCONTROL01.CTL

    C:APPADMINISTRATORFLASH_RECOVERY_AREAORCLCONTROL02.CTL

    --说明:使用oracle命令把控制文件的内容显示在Trace(踪迹)中,查看控制文件内容

    SQL> alter database backup controlfile to trace as 'D:ctl.trc';

    alter database backup controlfile to trace as 'D:ctl.trc'

    *

    第 1 行出现错误:

    ORA-01277: 文件 'D:CTL.TRC' 已存在

    SQL> alter database backup controlfile to trace as 'D:ctl.trc';

    数据库已更改。

    --说明:直接打开'D:ctl.trc'文件,查看控制文件内容,找到数据库文件存放位置,发现确实数据库文件已被删除

    SQL> SELECT count(1) FROM user_tables

      2  ;

    SELECT count(1) FROM user_tables

                         *

    第 1 行出现错误:

    ORA-01219: 数据库未打开: 仅允许在固定表/视图中查询

      

    --说明:更改数据库实例状态到open ,出现以下错误

    SQL> alter database open;

    alter database open

    *

    第 1 行出现错误:

    ORA-01157: 无法标识/锁定数据文件 2 - 请参阅 DBWR 跟踪文件

    ORA-01110: 数据文件 2: 'C:APPADMINISTRATORORADATAORCLSYSAUX01.DBF'

    --说明 数据库没找到这个数据文件,因为数据文件在没有被offline的情况下物理删除了,导致oracle的数据不一致,因此启动失败.

    通过以下方法即可解决,依次操作几个数据文件

    C:UsersAdministrator>sqlplus sys/orcl@orcl as sysdba;

    SQL*Plus: Release 11.2.0.1.0 Production on 星期三 2月 11 11:10:25 2015

    Copyright (c) 1982, 2010, Oracle.  All rights reserved.

    连接到:

    Oracle Database 11g Release 11.2.0.1.0 - 64bit Production

    SQL> alter database datafile 'C:APPADMINISTRATORORADATAORCLSYSAUX01.DBF' of

    fline drop;

    数据库已更改。

    SQL> alter database open;

    alter database open

    *

    第 1 行出现错误:

    ORA-01157: 无法标识/锁定数据文件 5 - 请参阅 DBWR 跟踪文件

    ORA-01110: 数据文件 5: 'C:APPADMINISTRATORORADATAORCLEXAMPLE01.DBF'

    SQL> alter database datafile 'C:APPADMINISTRATORORADATAORCLEXAMPLE01.DBF' o

    ffline drop;

    数据库已更改。

    SQL> alter database open;

    alter database open

    *

    第 1 行出现错误:

    ORA-01157: 无法标识/锁定数据文件 6 - 请参阅 DBWR 跟踪文件

    ORA-01110: 数据文件 6: 'C:APPADMINISTRATORORADATAORCLSYSTEM02.DBF'

    SQL> alter database datafile 'C:APPADMINISTRATORORADATAORCLSYSTEM02.DBF' of

    fline drop;

    数据库已更改。

     -----------------------------------------------------------2、日志文件物理删除后,重做日志文件恢复--------------------------------------------------

    --说明:所有数据文件物理删除解决后,继续打开数据库open状态,出现以下错误:

    SQL> alter database open;

    alter database open

    *

    第 1 行出现错误:

    ORA-03113: 通信通道的文件结尾

    进程 ID: 4308

    会话 ID: 191 序列号: 5

    --查看进程文件或alert_orcl.log 文件位置

    SQL> show parameter background_dump_dest;

    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    background_dump_dest                 string      c:appadministratordiag dbm
                                                     sorclorcl race

    --说明:找到alert_orcl.log,或Trace file c:appadministratordiag dbmsorclorcl raceorcl_ora_4308.trc ,注意4308 是进程ID

    trc 文件内容:

    DDE: Problem Key 'ORA 312' was flood controlled (0x1) (no incident)
    ORA-00312: 联机日志 1 线程 1: 'C:APPADMINISTRATORORADATAORCLREDO01.LOG'
    DDE: Problem Key 'ORA 313' was flood controlled (0x1) (no incident)
    ORA-00313: 无法打开日志组 1 (用于线程 ) 的成员
    ORA-00312: 联机日志 1 线程 1: 'C:APPADMINISTRATORORADATAORCLREDO01.LOG'
    ORA-00313: 无法打开日志组 1 (用于线程 ) 的成员
    ORA-00312: 联机日志 1 线程 1: 'C:APPADMINISTRATORORADATAORCLREDO01.LOG'

    --查询 select * from v$log;

     可以看到group 1,2 文件状态,是INACTIVE,group 3 的状态是CURRENT,猜测一下,可能当时的log日志已经记录到了REDO03.LOG,所以状态显示CURRENT

    --INACTIVE状态的重做日志组恢复

    alter database clear unarchived logfile group 1;或 alter database clear logfile group 1;

    我的是重做日志1、2 已经被物理删除,使用的是 alter database clear logfile group 1;

    依次恢复REDO01、REDO02,REDO03的状态是CURRENT,因此暂时不知道怎么恢复。

    继续连接数据库,出现以下错误:

    SQL> alter database open;

    ERROR:

    ORA-03114: 未连接到 ORACLE

    说明:重新连接

    C:UsersAdministrator>sqlplus sys/orcl@orcl as sysdba;

    SQL*Plus: Release 11.2.0.1.0 Production on 星期三 2月 11 11:19:23 2015

    Copyright (c) 1982, 2010, Oracle.  All rights reserved.

    已连接到空闲例程。

    SQL> SELECT count(1) FROM user_tables

      2  ;

    SELECT count(1) FROM user_tables

    *

    第 1 行出现错误:

    ORA-01034: ORACLE not available

    进程 ID: 0

    会话 ID: 0 序列号: 0

    SQL> Select instance_name,status from v$instance;

    Select instance_name,status from v$instance

    *

    第 1 行出现错误:

    ORA-01034: ORACLE not available

    进程 ID: 0

    会话 ID: 0 序列号: 0

    --说明:不管是检查表或实例,都显示 ORA-01034: ORACLE not available

    --在此,将实例关闭,使用命令启动到mount 状态

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

    Total System Global Area 1670221824 bytes
    Fixed Size                  2176328 bytes
    Variable Size            1056967352 bytes
    Database Buffers          603979776 bytes
    Redo Buffers                7098368 bytes
    数据库装载完毕。
    SQL> select * from v$log;

        GROUP#    THREAD#  SEQUENCE#      BYTES  BLOCKSIZE    MEMBERS ARC
    ---------- ---------- ---------- ---------- ---------- ---------- ---
    STATUS           FIRST_CHANGE# FIRST_TIME     NEXT_CHANGE# NEXT_TIME
    ---------------- ------------- -------------- ------------ --------------
             1          1          0   52428800        512          1 YES
    UNUSED              3.4393E+11 29-12月-14       3.4393E+11 29-12月-14

             3          1        135   52428800        512          1 NO
    CURRENT             3.4393E+11 29-12月-14       2.8147E+14

             2          1          0   52428800        512          1 YES
    UNUSED              3.4393E+11 29-12月-14       3.4393E+11 29-12月-14


    SQL> alter database open resetlogs;
    alter database open resetlogs
    *
    第 1 行出现错误:
    ORA-01139: RESETLOGS 选项仅在不完全数据库恢复后有效

    --说明:在此恢复的是'2014-11-01 12:12:12'

    SQL> recover database until time '2014-11-01 12:12:12';
    完成介质恢复。
    SQL> alter database open resetlogs;

    数据库已更改。

    SQL> shutdown
    数据库已经关闭。
    已经卸载数据库。
    ORACLE 例程已经关闭。
    SQL> startup
    ORACLE 例程已经启动。

    Total System Global Area 1670221824 bytes
    Fixed Size                  2176328 bytes
    Variable Size            1056967352 bytes
    Database Buffers          603979776 bytes
    Redo Buffers                7098368 bytes
    数据库装载完毕。
    数据库已经打开。
    SQL>
    SQL> SELECT count(1) FROM user_tables;

      COUNT(1)
    ----------
           960

    SQL> select * from v$log;

        GROUP#    THREAD#  SEQUENCE#      BYTES  BLOCKSIZE    MEMBERS ARC
    ---------- ---------- ---------- ---------- ---------- ---------- ---
    STATUS           FIRST_CHANGE# FIRST_TIME     NEXT_CHANGE# NEXT_TIME
    ---------------- ------------- -------------- ------------ --------------
             1          1          1   52428800        512          1 NO
    CURRENT             3.4393E+11 12-2月 -15       2.8147E+14

             2          1          0   52428800        512          1 YES
    UNUSED                       0                           0

             3          1          0   52428800        512          1 YES
    UNUSED                       0                           0

    这里注意,GROUP#1变成了CURRENT,GROUP#2、3 变成了UNUSED,虽然不知道具体原因,但是也把自己的目的达到了,数据库可以正常使用,但是已经删除掉的数据文件对应表空间的数据应该已经没有了。

    最后发现了一个问题,操作完成后,C:appAdministratororadataorcl 目录,重做日志文件和数据文件的时间发生了变化,但是临时数据文件没有改变,不懂,以后继续研究。

  • 相关阅读:
    FPGA学习之基本结构
    凸优化和机器学习
    第6篇如何访问pod
    吉日嘎拉DotNet.BusinessV4.2中的一处bug,及我的修复和扩展
    吉日嘎拉C#快速开发平台V4.0到V4.2升级记
    布隆过滤器简介及实现-----源自数学之美
    poj [1753]
    Zookeeper Hello World
    获取用户真实IP,php实现
    mysql中engine=innodb和engine=myisam的区别
  • 原文地址:https://www.cnblogs.com/flyingsanddream/p/4287713.html
Copyright © 2020-2023  润新知