Oracle 已连接到空闲例程或ORA-01034: ORACLE not available
因为是本地数据库没有重要资料,所以可以随便自己折腾。
出现问题原因:从生产数据库导入一个表到本地库测试,因数据量过大,在导入4-5个小时后,手动中断导入。是否异常关机不能确定。
之后再打开数据库出现一点问题,说是C盘空间小,就擅自删了几个大的数据库文件和所有日志文件。
--以下是具体操作,先是对数据库文件的恢复,之后恢复日志文件:
-----------------------------------------------------1、数据文件物理删除后,数据库无法打开的解决--------------------------
C:\Users\Administrator>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:\app\Administrator\product\11.2.0\dbhome_1\network\admin\listene
r.ora
写入c:\app\administrator\diag\tnslsnr\Sandice-PC\listener\alert\log.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:\app\Administrator\product\11.2.0\dbhome_1\network\a
dmin\listener.ora
监听程序日志文件 c:\app\administrator\diag\tnslsnr\Sandice-PC\listener\
alert\log.xml
监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=Sandice-PC)(PORT=1521)))
服务摘要..
服务 "ORCL" 包含 1 个实例。
实例 "ORCL", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
命令执行成功
C:\Users\Administrator>net start OracleServiceorcl
OracleServiceORCL 服务正在启动 ......
OracleServiceORCL 服务已经启动成功。
C:\Users\Administrator>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:\APP\ADMINISTRATOR\ORADATA\ORCL\CONTROL01.CTL
C:\APP\ADMINISTRATOR\FLASH_RECOVERY_AREA\ORCL\CONTROL02.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:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSAUX01.DBF‘
--说明 数据库没找到这个数据文件,因为数据文件在没有被offline的情况下物理删除了,导致oracle的数据不一致,因此启动失败.
通过以下方法即可解决,依次操作几个数据文件
C:\Users\Administrator>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:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSAUX01.DBF‘ of
fline drop;
数据库已更改。
SQL> alter database open;
alter database open
*
第 1 行出现错误:
ORA-01157: 无法标识/锁定数据文件 5 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 5: ‘C:\APP\ADMINISTRATOR\ORADATA\ORCL\EXAMPLE01.DBF‘
SQL> alter database datafile ‘C:\APP\ADMINISTRATOR\ORADATA\ORCL\EXAMPLE01.DBF‘ o
ffline drop;
数据库已更改。
SQL> alter database open;
alter database open
*
第 1 行出现错误:
ORA-01157: 无法标识/锁定数据文件 6 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 6: ‘C:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSTEM02.DBF‘
SQL> alter database datafile ‘C:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSTEM02.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:\app\administrator\diag\rdbm
s\orcl\orcl\trace
--说明:找到alert_orcl.log,或Trace file c:\app\administrator\diag\rdbms\orcl\orcl\trace\orcl_ora_4308.trc ,注意4308 是进程ID
trc 文件内容:
DDE: Problem Key ‘ORA 312‘ was flood controlled (0x1) (no incident)
ORA-00312: 联机日志 1 线程 1: ‘C:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO01.LOG‘
DDE: Problem Key ‘ORA 313‘ was flood controlled (0x1) (no incident)
ORA-00313: 无法打开日志组 1 (用于线程 ) 的成员
ORA-00312: 联机日志 1 线程 1: ‘C:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO01.LOG‘
ORA-00313: 无法打开日志组 1 (用于线程 ) 的成员
ORA-00312: 联机日志 1 线程 1: ‘C:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO01.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:\Users\Administrator>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:\app\Administrator\oradata\orcl 目录,重做日志文件和数据文件的时间发生了变化,但是临时数据文件没有改变,不懂,以后继续研究。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。