oracle實驗記錄 (恢復read only tablespace(2))

fufuh2o發表於2009-09-07


看下read only tablespace與 重建立控制檔案,和使用備份控制檔案

 

情況一重建控制檔案
SQL> alter tablespace testtb read only;


SQL> alter database backup controlfile to trace;

資料庫已更改。


CREATE CONTROLFILE REU
SE DATABASE "ORCL" RESETLOGS  ARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01.LOG'  SIZE 50M,
  GROUP 2 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02.LOG'  SIZE 50M,
  GROUP 3 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO03.LOG'  SIZE 50M
-- STANDBY LOGFILE
DATAFILE
  'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF',
  'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF',~~~~~~~~~~~~~~此時沒有 read only tablespace datafile的資訊
  'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF',
  'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF',
  'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF',
  'D:\TEST.DBF'
CHARACTER SET ZHS16GBK
;

 


SQL> shutdown immediate;
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> startup nomount
ORA-32004: obsolete and/or deprecated parameter(s) specified
ORACLE 例程已經啟動。

Total System Global Area  612368384 bytes
Fixed Size                  1250428 bytes
Variable Size             339741572 bytes
Database Buffers          264241152 bytes
Redo Buffers                7135232 bytes
SQL> CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS  ARCHIVELOG
  2      MAXLOGFILES 16
  3      MAXLOGMEMBERS 3
  4      MAXDATAFILES 100
  5      MAXINSTANCES 8
  6      MAXLOGHISTORY 292
  7  LOGFILE
  8    GROUP 1 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01.LOG'  SIZE 50M,
  9    GROUP 2 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02.LOG'  SIZE 50M,
 10    GROUP 3 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO03.LOG'  SIZE 50M
 11  -- STANDBY LOGFILE
 12  DATAFILE
 13    'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF',
 14    'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF',
 15    'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF',
 16    'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF',
 17    'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF',
 18    'D:\TEST.DBF'
 19  CHARACTER SET ZHS16GBK
 20  ;

控制檔案已建立。

SQL> select count(*) from v$archived_log;

  COUNT(*)
----------
         0

SQL> alter database open;

資料庫已更改。

 


解決很簡單 可以重新create controlfile 時候加上D:\TESTTB.DBF  ,也
SQL> select tablespace_name ,status from dba_tablespaces;

TABLESPACE_NAME                STATUS
------------------------------ ---------
SYSTEM                         ONLINE
UNDOTBS1                       ONLINE
SYSAUX                         ONLINE
TEMP                           ONLINE
USERS                          ONLINE
EXAMPLE                        ONLINE
TEST                           ONLINE
TESTTB                         READ ONLY(資料字典中還有SYSTEM TABLESPACE)

已選擇8行。

SQL> alter tablespace testtb read write;
alter tablespace testtb read write
*
第 1 行出現錯誤:
ORA-01135: DML/query ?????????? 7 ????????????
ORA-01111: ???????? 7 ???????? - ??????????????????
ORA-01110: ???????? 7: 'E:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\MISSING00007'
但無法使用了)

SQL> alter session set events 'immediate trace name controlf level 8';

會話已更改。
DATA FILE #7:
  (name #10) E:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\MISSING00007~~~~~~~~~~~~~可以看到沒有準確的檔名字
creation size=0 block size=8192 status=0xc4 head=10 tail=10 dup=1
 tablespace 11, index=8 krfil=7 prev_file=0
 unrecoverable scn: 0x0000.00000000 01/01/1988 00:00:00
 Checkpoint cnt:4294967295 scn: 0x0000.00130425 01/01/1988 00:00:00
 Stop scn: 0x0000.00130425 09/07/2009 13:15:01
 Creation Checkpointed at scn:  0x0000.0011cf7f
 thread:0 rba:(0x0.0.0)

SQL> select file#,status from v$datafile;(資訊來自controlfile)

     FILE# STATUS
---------- -------
         1 SYSTEM
         2 ONLINE
         3 ONLINE
         4 ONLINE
         5 ONLINE
         6 ONLINE
         7 OFFLINE
SQL> alter database datafile 7 online;

資料庫已更改。

 

SQL> select tablespace_name ,status from dba_tablespaces;

TABLESPACE_NAME                STATUS
------------------------------ ---------
SYSTEM                         ONLINE
UNDOTBS1                       ONLINE
SYSAUX                         ONLINE
TEMP                           ONLINE
USERS                          ONLINE
EXAMPLE                        ONLINE
TEST                           ONLINE
TESTTB                         READ ONLY

已選擇8行。

Rename 解決有問題
SQL> alter database rename file 'E:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\MISSING0000
7' to 'd:\testtb.dbf';

資料庫已更改。

SQL> alter tablespace testtb read write;
alter tablespace testtb read write
*
第 1 行出現錯誤:
ORA-00600: 內部錯誤程式碼, 引數: [krhpfh_03-1208], [fno =], [7], [fecpc =],~~~~~~~~~~~~~~~~~~~~~~有問題
[4294967295], [fhcpc =], [28], []
ORA-01110: 資料檔案 7: 'D:\TESTTB.DBF'


SQL> alter tablespace testtb read only;
alter tablespace testtb read only
*
第 1 行出現錯誤:
ORA-01644: 表空間 'TESTTB' 已經是隻讀


還是用重新建立controlfile 來恢復吧

SQL> shutdown immediate;
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> startup nomount
ORA-32004: obsolete and/or deprecated parameter(s) specified
ORACLE 例程已經啟動。

Total System Global Area  612368384 bytes
Fixed Size                  1250428 bytes
Variable Size             352324484 bytes
Database Buffers          251658240 bytes
Redo Buffers                7135232 bytes
SQL> CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS  ARCHIVELOG
  2      MAXLOGFILES 16
  3      MAXLOGMEMBERS 3
  4      MAXDATAFILES 100
  5      MAXINSTANCES 8
  6      MAXLOGHISTORY 292
  7  LOGFILE
  8    GROUP 1 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01.LOG'  SIZE 50M,
  9    GROUP 2 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02.LOG'  SIZE 50M,
 10    GROUP 3 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO03.LOG'  SIZE 50M
 11  -- STANDBY LOGFILE
 12  DATAFILE
 13    'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF',
 14    'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF',
 15    'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF',
 16    'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF',
 17    'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF',
 18    'D:\TEST.DBF',
 19    'D:\TESTTB.DBF'**************************************
 20  CHARACTER SET ZHS16GBK
 21  ;

控制檔案已建立。

SQL>
SQL> alter database open;
alter database open
*
第 1 行出現錯誤:
ORA-01113: ?? 7 ??????
ORA-01110: ???? 7: 'D:\TESTTB.DBF'


SQL> recover datafile 7;
完成介質恢復。
SQL> alter database open;

資料庫已更改。

SQL> alter tablespace testtb read write;

表空間已更改。

SQL> create table t22 (a int) tablespace testtb;

表已建立。

SQL> insert into t22 values(1);

已建立 1 行。

SQL> commit;

提交完成。


情況二 使用備份控制檔案(備份控制檔案 資訊中表空間為讀寫,而現在為read only 或反過來)

SQL> @d:\backup\backupctl.txt
已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

SQL> alter tablespace testtb read only;

表空間已更改。


SQL> select tablespace_name ,status from dba_tablespaces;

TABLESPACE_NAME                STATUS
------------------------------ ---------
SYSTEM                         ONLINE
UNDOTBS1                       ONLINE
SYSAUX                         ONLINE
TEMP                           ONLINE
USERS                          ONLINE
EXAMPLE                        ONLINE
TEST                           ONLINE
TESTTB                         READ ONLY

已選擇8行。
SQL> shutdown immediate;
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。

將備份控制檔案RESTORE 到原位置
SQL> recover database using backup controlfile;
ORA-00279: 更改 1250359 (在 09/07/2009 14:01:39 生成) 對於執行緒 1 是必需的
ORA-00289: 建議: E:\ARCHIVELOG\ARC00028_0695918991.001.ARC
ORA-00280: 更改 1250359 (用於執行緒 1) 在序列 #28 中


指定日誌: {=suggested | filename | AUTO | CANCEL}
E:\oracle\product\10.2.0\oradata\orcl\redo02.log
已應用的日誌。
完成介質恢復。

SQL> alter database open resetlogs;

資料庫已更改。

SQL> alter tablespace testtb read write;

表空間已更改。

SQL> insert into t22 values(2);

已建立 1 行。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12020513/viewspace-614102/,如需轉載,請註明出處,否則將追究法律責任。

相關文章