ITPub博客

首页 > Linux操作系统 > Linux操作系统 > oracle实验记录 (恢复read only tablespace(2))

oracle实验记录 (恢复read only tablespace(2))

原创 Linux操作系统 作者:fufuh2o 时间:2009-09-07 14:11:56 0 删除 编辑


看下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/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-06-26

  • 博文量
    182
  • 访问量
    428592