天天看點

oracle中對UNNAMEDnnnnn檔案的處理

一:構造一個UNNAMEDnnnnn檔案

其中nnnnn為資料檔案絕對檔案号

1 控制檔案備份時目前聯機日志狀态如下

select group#,archived,sequence#,status from v$log

    GROUP# ARC SEQUENCE# STATUS

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

         1 YES          2 ACTIVE

         2 YES          1 ACTIVE

         3 YES          3 ACTIVE

         4 YES          4 ACTIVE

         5 YES          5 ACTIVE

         6 NO          6 CURRENT

2 目前控制控制檔案備份如下

RMAN> list backup of controlfile;

List of Backup Sets

===================

BS Key Type LV Size       Device Type Elapsed Time Completion Time

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

5       Full    7.11M      DISK        00:00:03     14-DEC-12     

        BP Key: 5   Status: AVAILABLE Compressed: NO Tag: TAG20121214T062943

        Piece Name: /oracle/app/db1/dbs/0fnsqnsl_1_1

 Control File Included: Ckp SCN: 2779647876   Ckp time: 14-DEC-12

3 建立表空間及測試資料時日志狀态如下:

SQL> select group#,archived,sequence#,status from v$Log;

         1 YES         14 INACTIVE

         2 YES         13 INACTIVE

         3 NO          15 CURRENT

         4 YES         10 INACTIVE

         5 YES         11 INACTIVE

         6 YES         12 INACTIVE

4 此時建立表空間

SQL> create tablespace jiujian datafile '/oracle/test/jiujian.dbf' size 1m;

Tablespace created.

SQL> select file#,name from v$datafile;

     FILE# NAME

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

         1 /oracle/test/system1.dbf

         2 /oracle/test/zxb.dbf

         3 /oracle/test/sysaux01.dbf

         4 /oracle/test/users01.dbf

         5 /oracle/test/zxa.dbf

         6 /oracle/test/test1.dbf

         7 /oracle/test/zxc.dbf

         8 /oracle/test/undotbs1.dbf

         9 /oracle/test/zxbig.dbf

        10 /oracle/test2.dbf

        11 /oracle/test/jiujian.dbf

5 插入測試資料:

SQL> create table t3(x int) tablespace jiujian1;

Table created.

SQL> begin             

 2 for i in 1..20 loop

 3 insert into t3 values(i);

 4 end loop;

 5 commit;

 6 end;

 7 /

PL/SQL procedure successfully completed.

SQL> select * from t3;

         X

----------

         1

         2

         3

         4

         5

         6

         7

         8

         9

        10

        11

        12

        13

        14

        15

        16

        17

        18

        19

        20

6  6到14号歸檔的scn範圍

 SEQUENCE# NAME                                     FIRST_CHANGE# NEXT_CHANGE#

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

         6 /oracle/archive/1_6_801957264.dbf           2779647184   2779648239

         7 /oracle/archive/1_7_801957264.dbf           2779648239   2779648241

         8 /oracle/archive/1_8_801957264.dbf           2779648241   2779648243

         9 /oracle/archive/1_9_801957264.dbf           2779648243   2779648245

        10 /oracle/archive/1_10_801957264.dbf          2779648245   2779648247

        11 /oracle/archive/1_11_801957264.dbf          2779648247   2779648250

        12 /oracle/archive/1_12_801957264.dbf          2779648250   2779648252

        13 /oracle/archive/1_13_801957264.dbf          2779648252   2779648254

        14 /oracle/archive/1_14_801957264.dbf          2779648254   2779648256

7 重新啟動資料庫到非加載狀态并恢複控制檔案

SQL> startup force nomount;

ORACLE instance started.

Total System Global Area 322961408 bytes

Fixed Size                  2020480 bytes

Variable Size              92277632 bytes

Database Buffers          222298112 bytes

Redo Buffers                6365184 bytes

Recovery Manager complete.

[oracle@oracle ~]$ rman target /

Recovery Manager: Release 10.2.0.1.0 - Production on Fri Dec 14 07:16:07 2012

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

connected to target database: CRM (not mounted)

RMAN> restore controlfile from '/oracle/app/db1/dbs/0fnsqnsl_1_1';

Starting restore at 14-DEC-12

using target database control file instead of recovery catalog

allocated channel: ORA_DISK_1

channel ORA_DISK_1: sid=210 devtype=DISK

channel ORA_DISK_1: restoring control file

channel ORA_DISK_1: restore complete, elapsed time: 00:00:01

output filename=/oracle/CRM2/CRM/control01.ctl

output filename=/oracle/CRM2/CRM/control02.ctl

Finished restore at 14-DEC-12

RMAN> alter database mount;

database mounted

released channel: ORA_DISK_1

注意恢複控制檔案後下邊日志seq号的變化

SQL> select group#,archived,sequence#,status from v$log;

         1 YES          2 INACTIVE

         2 YES          1 INACTIVE

         4 YES          4 INACTIVE

         5 YES          5 INACTIVE

         3 YES          3 INACTIVE

8 恢複

SQL> recover database ;

ORA-00283: recovery session canceled due to errors

ORA-01610: recovery using the BACKUP CONTROLFILE option must be done

SQL> recover database using backup controlfile;

ORA-00279: change 2779647876 generated at 12/14/2012 06:17:29 needed for thread

1

ORA-00289: suggestion : /oracle/archive/1_6_801957264.dbf

ORA-00280: change 2779647876 for thread 1 is in sequence #6

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}

auto <---------------輸入auto

ORA-00279: change 2779648239 generated at 12/14/2012 06:44:13 needed for thread

ORA-00289: suggestion : /oracle/archive/1_7_801957264.dbf

ORA-00280: change 2779648239 for thread 1 is in sequence #7

ORA-00278: log file '/oracle/archive/1_6_801957264.dbf' no longer needed for

this recovery

ORA-00279: change 2779648241 generated at 12/14/2012 06:44:14 needed for thread

ORA-00289: suggestion : /oracle/archive/1_8_801957264.dbf

ORA-00280: change 2779648241 for thread 1 is in sequence #8

ORA-00278: log file '/oracle/archive/1_7_801957264.dbf' no longer needed for

ORA-00279: change 2779648243 generated at 12/14/2012 06:44:14 needed for thread

ORA-00289: suggestion : /oracle/archive/1_9_801957264.dbf

ORA-00280: change 2779648243 for thread 1 is in sequence #9

ORA-00278: log file '/oracle/archive/1_8_801957264.dbf' no longer needed for

ORA-00279: change 2779648245 generated at 12/14/2012 06:44:15 needed for thread

ORA-00289: suggestion : /oracle/archive/1_10_801957264.dbf

ORA-00280: change 2779648245 for thread 1 is in sequence #10

ORA-00278: log file '/oracle/archive/1_9_801957264.dbf' no longer needed for

ORA-00279: change 2779648247 generated at 12/14/2012 06:44:16 needed for thread

ORA-00289: suggestion : /oracle/archive/1_11_801957264.dbf

ORA-00280: change 2779648247 for thread 1 is in sequence #11

ORA-00278: log file '/oracle/archive/1_10_801957264.dbf' no longer needed for

ORA-00279: change 2779648250 generated at 12/14/2012 06:44:19 needed for thread

ORA-00289: suggestion : /oracle/archive/1_12_801957264.dbf

ORA-00280: change 2779648250 for thread 1 is in sequence #12

ORA-00278: log file '/oracle/archive/1_11_801957264.dbf' no longer needed for

ORA-00279: change 2779648252 generated at 12/14/2012 06:44:21 needed for thread

ORA-00289: suggestion : /oracle/archive/1_13_801957264.dbf

ORA-00280: change 2779648252 for thread 1 is in sequence #13

ORA-00278: log file '/oracle/archive/1_12_801957264.dbf' no longer needed for

ORA-00279: change 2779648254 generated at 12/14/2012 06:44:22 needed for thread

ORA-00289: suggestion : /oracle/archive/1_14_801957264.dbf

ORA-00280: change 2779648254 for thread 1 is in sequence #14

ORA-00278: log file '/oracle/archive/1_13_801957264.dbf' no longer needed for

ORA-00279: change 2779648256 generated at 12/14/2012 06:44:23 needed for thread

ORA-00289: suggestion : /oracle/archive/1_15_801957264.dbf

ORA-00280: change 2779648256 for thread 1 is in sequence #15

ORA-00278: log file '/oracle/archive/1_14_801957264.dbf' no longer needed for

ORA-00308: cannot open archived log '/oracle/archive/1_15_801957264.dbf'

ORA-27037: unable to obtain file status

Linux-x86_64 Error: 2: No such file or directory

Additional information: 3

注意

1    這裡提示找不到15号歸檔,由于15号歸檔是恢複控制檔案前,資料庫目前聯機日志。

3    恢複控制檔案後seq号發生了改變 但是日志檔案内容可能還沒變。是以我們用seq号為15時刻的日志檔案進行嘗試性恢複,過程如下:

<a>/oracle/CRM2/CRM/redo03.log</a>

ORA-01244: unnamed datafile(s) added to control file by media recovery

ORA-01110: data file 11: '/oracle/test/jiujian1.dbf'

ORA-01112: media recovery not started

從以上資訊可看到我們之前建立的表空間已經被添加到了控制檔案中

 SQL&gt; select file#,name,status from v$datafile;

     FILE# NAME                                     STATUS

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

         1 /oracle/test/system1.dbf                 SYSTEM

         2 /oracle/test/zxb.dbf                     ONLINE

         3 /oracle/test/sysaux01.dbf                ONLINE

         4 /oracle/test/users01.dbf                 ONLINE

         5 /oracle/test/zxa.dbf                     ONLINE

         6 /oracle/test/test1.dbf                   ONLINE

         7 /oracle/test/zxc.dbf                     ONLINE

         8 /oracle/test/undotbs1.dbf                ONLINE

         9 /oracle/test/zxbig.dbf                   ONLINE

        10 /oracle/test2.dbf                        ONLINE

        11 /oracle/app/db1/dbs/UNNAMED00011         RECOVER

二:處理UNNAMEDnnnnn問題

1 重命名資料檔案

Database altered.

2 重命名資料檔案後資料檔案頭部資訊和控制檔案中資料檔案資訊如下:

資料檔案頭部情況

控制檔案中該資料檔案資訊

chkpt cnt: 5

Checkpoint cnt:1

Checkpointed at scn: 0x0000.a5ae1636

Stop scn: 0xffff.ffffffff

thread:1 rba:(0xf.8f1.10)

thread:1 rba:(0xf.9.10)

3 綜合以上資訊我們需要繼續應用聯機日志/oracle/CRM2/CRM/redo03.log進行恢複過程,如下:

QL&gt; recover database using backup controlfile;

ORA-00279: change 2779648278 generated at 12/14/2012 06:45:04 needed for thread

ORA-00280: change 2779648278 for thread 1 is in sequence #15

/oracle/CRM2/CRM/redo03.log

Log applied.

Media recovery complete.

4 恢複後資料檔案頭部資訊和控制檔案中資料檔案資訊如下:

資料檔案/oracle/test/jiujian1.db的資訊

chkpt cnt: 6

Checkpoint cnt:6

Stop scn: 0x0000.a5ae1636

<a href="http://blog.51cto.com/attachment/201212/165258796.jpg" target="_blank"></a>

SQL&gt; alter database open resetlogs;

SQL&gt; select * from t3;

20 rows selected.

本文轉自 zhangxuwl 51CTO部落格,原文連結:http://blog.51cto.com/jiujian/1089389,如需轉載請自行聯系原作者