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

出现问题原因:从生产数据库导入一个表到本地库测试,因数据量过大,在导入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 目录,重做日志文件和数据文件的时间发生了变化,但是临时数据文件没有改变,不懂,以后继续研究。

Oracle 已连接到空闲例程或ORA-01034: ORACLE not available的更多相关文章

  1. 2018.5.29 Oracle连接到空闲例程

    解决方法如下: 1.通过cmd命令窗启动Oracle:(最好是以管理员身份启动) C:\Users\Administrator>sqlplus /nolog SQL>conn /as sy ...

  2. oracle适配器连接不上解决方案

    Oracle适配器连接不上解决方案 作者:Vashon oracle 的Developer连接不上报错:listener does not currently know of SID given in ...

  3. Oracle各种连接函数总结

    1.前言 Oracle可用连接函数会介绍以下几个 Oracle列转行函数 Listagg() strcat() wmsys.wm_concat() 2.Oracle列转行函数 Listagg() 2. ...

  4. (转)oracle中用户删除不了,ORA-01940提示 “无法删除当前已连接用户”

    Oracle删除用户的提示无法删除当前已连接用户两种解决方法如下: 1.先锁定用户.然后查询进程号,最后删除对应的进程.在删除对应的用户 SQLalter user XXX account lock; ...

  5. oracle中用户删除不了,ORA-01940提示 “无法删除当前已连接用户”

    Oracle删除用户的提示无法删除当前已连接用户两种解决方法如下: 1.先锁定用户.然后查询进程号,最后删除对应的进程.在删除对应的用户 SQL>alter user XXX account l ...

  6. PLSQL连接ORACLE配置字符串简介 oracle网络配置 三个配置文件 listener.ora、sqlnet.ora、tnsnames.ora原理解释

    PLSQL连接ORACLE配置字符串简介 oracle网络配置 三个配置文件 listener.ora.sqlnet.ora.tnsnames.ora原理解释 oracle网络配置三个配置文件 lis ...

  7. Oracle JDBC连接服务名、SID和tnsnames.ora配置的多种方式

    昨天,领导安排去新服务器上部署项目,给了我数据库地址,服务名称,端口,用户名和密码.结果数据库一直连接不上,日志中的错误提示是监听未找到SID,我才明白原来我jdbc.properties中需要的是S ...

  8. oracle长连接超时设置

    方法一.在sqlnet.ora中设置参数 如需要设置客户端空闲10分钟即被中断,则在sqlnet.ora的末尾添加SQLNET.EXPIRE_TIME=10注:sqlnet.ora文件的路径在$ORA ...

  9. oracle错误(ORA:12154 ORA:01034 和 ORA:27101 ORA-18008 ORA-01081)

    按照正常操作流程,启动项目,发现项目报错,原因是连接不上oracle数据库, PLSQL连接时报错,错误码  ORA:12154 无法解析指定的连接标识符 第一次,遇到这个错误,在网上找了资料都是需要 ...

随机推荐

  1. VC++中如何让RadioButton分组,并且互斥

    首先让两个RadioButton的Group属性为False. 将两个RadioButton放入一个GroupBox里面,即可如果分成多个组,则将多组Radio分别用GroupBox框起来,并将每组的 ...

  2. php-fpm使用

    /usr/local/php/sbin/php-fpm  --help -c <path>|<file> Look for php.ini file in this direc ...

  3. distinct与order by

    不知为啥,当我得查询中出现distinct时,order by 中必须包含要查询的列,否则报错. SELECT DISTINCT a.DetailId, a.OrderId, a.ProductId, ...

  4. PL/SQL本地远程连接数据库

    记录自己在开发中只用一次,但是容易忘记的问题,PL/SQL-ORACLE配置远程数据库访问: 1,下载PL/SQL连接工具,链接: https://pan.baidu.com/s/1kVeeLNp 密 ...

  5. 使用airodump-ng扫描网络

    执行命令 root@sch01ar:~# airodump-ng wlan0mon 参数介绍: BSSID:表示无线AP的Mac地址 PWR:网卡报告的信号水平 Beacons:无线AP发出的通告编号 ...

  6. python's ninth day for me

    函数 函数的定义与调用: #def  关键字  定义一个函数. # my_len  函数名, 函数名的书写规则与变量的命名一致. # def  与函数名中间一个空格. # 函数名() :  加上冒号. ...

  7. PHP操作Redis(一) PHP连接Redis,含Redis密码验证、指定某一Redis数据库

    台服务器上都快开启200个redis实例了,看着就崩溃了.这么做无非就是想让不同类型的数据属于不同的应用程序而彼此分开. 那么,redis有没有什么方法使不同的应用程序数据彼此分开同时又存储在相同的实 ...

  8. 二进制(signed or unsigned)补码

    在计算机系统中,数值一律用补码来表示(存储). 主要原因:使用补码,可以将符号位和其它位统一处理:同时,减法也可按加法来处理.另外,两个用补 码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃 ...

  9. MongoDB在Windows下的环境配置和使用

    总是觉得配置环境是一个超级麻烦的事情啊,而且网上说的又比较乱,配置完后又没有说怎么开始运行,在哪输入增删改查语句,像突然断层一样.所以就在这里详细说说. 一:下载安装 1.去官网的下载页面 2.下载完 ...

  10. http://www.jb51.net/list/list_233_2.htm(导航: 首页 >> 软件编程 >> Android)

      日期:2015-04-24理解Android中Activity的方法回调 日期:2015-04-24Android获取手机通讯录.sim卡联系人及调用拨号界面方法 日期:2015-04-24And ...