看下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 中
指定日志: {
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博客 ” ,链接:https://blog.itpub.net/12020513/viewspace-614102/ ,如需转载,请注明出处,否则将追究法律责任。