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 目錄,重做日志文件和數據文件的時間發生了變化,但是臨時數據文件沒有改變,不懂,以后繼續研究。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM