⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 备份与恢复测试2.doc

📁 该压缩包中不仅含有ORACLE设计文档
💻 DOC
📖 第 1 页 / 共 3 页
字号:
  COUNT(*) ST
---------- --
     98656 ok


######################################################                                                
# [1.5.3]  控制文件损坏,如果trace不是最新的数据库结构,如少了个数据文件
######################################################    

SQL> create table arch (status varchar(2));

表已创建。

SQL> alter system switch logfile;

系统已更改。

SQL> insert into arch select 'ok' from dba_objects;

已创建6166行。

SQL> commit;

提交完成。

SQL> insert into arch select 'ok' from dba_objects;

已创建6166行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系统已更改。

SQL> insert into arch select 'no' from dba_objects;

已创建6166行。

SQL> commit;

提交完成。

SQL> select GROUP#,SEQUENCE#,archived, STATUS from v$log;

    GROUP#  SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
         1          2 NO  ACTIVE
         2          1 YES ACTIVE
         3          3 NO  CURRENT    
SQL> alter tablespace tools add datafile 'C:\ORACLE\ORADATA\TESTDB\TOOLS02.dbf'
size 10m;

表空间已更改。

SQL> shutdown
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。

模拟控制文件丢失

SQL> CREATE CONTROLFILE REUSE DATABASE "testdb" NORESETLOGS  ARCHIVELOG
  2  --  SET STANDBY TO MAXIMIZE PERFORMANCE
  3      MAXLOGFILES 5
  4      MAXLOGMEMBERS 3
  5      MAXDATAFILES 100
  6      MAXINSTANCES 1
  7      MAXLOGHISTORY 226
  8  LOGFILE
  9    GROUP 1 'C:\ORACLE\ORADATA\testdb\REDO01.LOG'  SIZE 100M,
10    GROUP 2 'C:\ORACLE\ORADATA\testdb\REDO02.LOG'  SIZE 100M,
11    GROUP 3 'C:\ORACLE\ORADATA\testdb\REDO03.LOG'  SIZE 100M
12  -- STANDBY LOGFILE
13  DATAFILE
14    'C:\ORACLE\ORADATA\testdb\SYSTEM01.DBF',
15    'C:\ORACLE\ORADATA\testdb\UNDOTBS01.DBF',
16    'C:\ORACLE\ORADATA\testdb\INDX01.DBF',
17    'C:\ORACLE\ORADATA\testdb\TOOLS01.DBF',
18    'C:\ORACLE\ORADATA\testdb\USERS01.DBF'
19  CHARACTER SET ZHS16GBK
20  ;

控制文件已创建

SQL> alter database open;

数据库已更改。

SQL> select name,status from v$datafile;

NAME                                         STATUS 
--------------------------------------       -------
C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF        SYSTEM
C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF       ONLINE
C:\ORACLE\ORADATA\TESTDB\INDX01.DBF          ONLINE
C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF         ONLINE
C:\ORACLE\ORADATA\TESTDB\USERS01.DBF             ONLINE
C:\ORACLE\ORA92\DATABASE\MISSING00006        RECOVER --这个文件现在是recover状态

已选择6行。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
我们发现C:\ORACLE\ORA92\DATABASE\MISSING00006并不存在,只不过是个标记而已
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

SQL> alter database rename file 'MISSING00006' to 'C:\ORACLE\ORADATA\TESTDB\TOOLS02.dbf';  --MISSING00006不要加路径


数据库已更改。

SQL> recover datafile 'C:\ORACLE\ORADATA\TESTDB\TOOLS02.dbf';
完成介质恢复。

SQL> alter database datafile 'C:\ORACLE\ORADATA\TESTDB\TOOLS02.dbf' online;

数据库已更改。

~~~~~~~~~~~~~~~~~~~~~~~~~
如果用备份控制文件,且备份
控制文件少了新增加的两个文件
,恢复时会提示错误,我们可以
用rename来解决
~~~~~~~~~~~~~~~~~~~~~~~~~
使用备份控制文件
recover AUTOMATIC   database using backup controlfile until cancel
...       
ORA-00283: recovery session canceled due to errors                   
ORA-01244: unnamed datafile(s) added to controlfile by media recovery
ORA-01110: data file 3: '/oracle/dbs/db2.f'                          
ORA-01110: data file 2: '/oracle/dbs/db3.f'                          

~~~~~~~~~~~~~~~~~~~~
这是因为前滚时发现file#中
有两个文件,但控制文件没有
我们可以在v$datafile中看到
所以恢复中断
~~~~~~~~~~~~~~~~~~~~
SELECT FILE#,NAME 
FROM V$DATAFILE;

FILE#           NAME
--------------- ----------------------
1               /oracle/dbs/db1.f
2               /oracle/dbs/UNNAMED00002
3               /oracle/dbs/UNNAMED00003

这时对文件进行改名就可以了

ALTER DATABASE RENAME FILE '/db/UNNAMED00002' TO '/oracle/dbs/db3.f';
ALTER DATABASE RENAME FILE '/db/UNNAMED00003' TO '/oracle/dbs/db2.f';

RECOVER AUTOMATIC DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL




######################################################                                
# [1.5.4] 控制文件损坏,如果trace不是最新的数据库结构,如少了个只读数据文件
######################################################  


SQL> alter tablespace tools add datafile 'C:\ORACLE\ORADATA\TESTDB\TOOLS02.dbf'
size 10m ;

表空间已更改。                  
SQL> alter tablespace tools read only;

表空间已更改。
    
    SQL> select name,ENABLED
  2   from v$datafile;

NAME                                            ENABLED
---------------------------------------         ----------    
C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF                READ WRITE
C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF                READ WRITE
C:\ORACLE\ORADATA\TESTDB\INDX01.DBF                READ WRITE
C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF                READ ONLY
C:\ORACLE\ORADATA\TESTDB\USERS01.DBF                READ WRITE
C:\ORACLE\ORADATA\TESTDB\TOOLS02.DBF                READ ONLY

已选择6行。
SQL> startup nomount
ORACLE 例程已经启动。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
SQL> CREATE CONTROLFILE REUSE DATABASE "testdb" NORESETLOGS  ARCHIVELOG
  2  --  SET STANDBY TO MAXIMIZE PERFORMANCE
  3      MAXLOGFILES 5
  4      MAXLOGMEMBERS 3
  5      MAXDATAFILES 100
  6      MAXINSTANCES 1
  7      MAXLOGHISTORY 226
  8  LOGFILE
  9    GROUP 1 'C:\ORACLE\ORADATA\testdb\REDO01.LOG'  SIZE 100M,
10    GROUP 2 'C:\ORACLE\ORADATA\testdb\REDO02.LOG'  SIZE 100M,
11    GROUP 3 'C:\ORACLE\ORADATA\testdb\REDO03.LOG'  SIZE 100M
12  -- STANDBY LOGFILE
13  DATAFILE
14    'C:\ORACLE\ORADATA\testdb\SYSTEM01.DBF',
15    'C:\ORACLE\ORADATA\testdb\UNDOTBS01.DBF',
16    'C:\ORACLE\ORADATA\testdb\INDX01.DBF',
17    'C:\ORACLE\ORADATA\testdb\TOOLS01.DBF',
18    'C:\ORACLE\ORADATA\testdb\USERS01.DBF'
19  CHARACTER SET ZHS16GBK
20  ;

控制文件已创建
SQL> select name from v$datafile;

NAME
---------------------------------------------------------------------------

C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF
C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF
C:\ORACLE\ORADATA\TESTDB\INDX01.DBF
C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF
C:\ORACLE\ORADATA\TESTDB\USERS01.DBF
SQL> alter database open;

数据库已更改。

SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------

C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF
C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF
C:\ORACLE\ORADATA\TESTDB\INDX01.DBF
C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF
C:\ORACLE\ORADATA\TESTDB\USERS01.DBF
C:\ORACLE\ORA92\DATABASE\MISSING00006  --OPEN时增加了不认识的文件名

已选择6行。

SQL> alter database rename file 'MISSING00006' to 'C:\ORACLE\ORA92\DATABASE\TOOL
S02.DBF';
alter database rename file 'MISSING00006' to 'C:\ORACLE\ORA92\DATABASE\TOOLS02.D
BF'
*
ERROR 位于第 1 行:
ORA-01511: 重命名日志/数据文件时出错
ORA-01141: 重命名数据文件 6 时出错 - 未找到新文件
'C:\ORACLE\ORA92\DATABASE\TOOLS02.DBF'
ORA-01111: 数据文件 6 名称未知 - 请重命名以更正文件
ORA-01110: 数据文件 6: 'C:\ORACLE\ORA92\DATABASE\MISSING00006'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。
*
ERROR 位于第 1 行:
ORA-01113: ?? 4 ??????
ORA-01110: ???? 4: 'C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF'


SQL> alter database datafile 'C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF' offline;

数据库已更改。

SQL> alter database datafile 'C:\ORACLE\ORADATA\TESTDB\TOOLS02.DBF' offline;
alter database datafile 'C:\ORACLE\ORADATA\TESTDB\TOOLS02.DBF' offline
*
ERROR 位于第 1 行:
ORA-01516: ????????, ????????? 'C:\ORACLE\ORADATA\TESTDB\TOOLS02.DBF'


SQL> alter database open ;

数据库已更改。

SQL> alter database datafile 'MISSING00006' offline;  -->>注意只读表空间必须先offline,而且注意MISSING00006不能写全路径

数据库已更改。 


SQL> alter database rename file  'MISSING00006' to 'C:\ORACLE\ORADATA\TESTDB\TOO
LS02.DBF';

数据库已更改。
SQL> alter tablespace tools online;

表空间已更改。

方法2
SQL> SHUTDOWN
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> STARTUP NOMOUNT
ORACLE 例程已经启动。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
SQL> CREATE CONTROLFILE REUSE DATABASE "testdb" NORESETLOGS  ARCHIVELOG

  2  --  SET STANDBY TO MAXIMIZE PERFORMANCE
  3      MAXLOGFILES 5
  4      MAXLOGMEMBERS 3
  5      MAXDATAFILES 100
  6      MAXINSTANCES 1
  7      MAXLOGHISTORY 226
  8  LOGFILE
  9    GROUP 1 'C:\ORACLE\ORADATA\testdb\REDO01.LOG'  SIZE 100M,
10    GROUP 2 'C:\ORACLE\ORADATA\testdb\REDO02.LOG'  SIZE 100M,
11    GROUP 3 'C:\ORACLE\ORADATA\testdb\REDO03.LOG'  SIZE 100M
12  -- STANDBY LOGFILE
13  DATAFILE
14    'C:\ORACLE\ORADATA\testdb\SYSTEM01.DBF',
15    'C:\ORACLE\ORADATA\testdb\UNDOTBS01.DBF',
16    'C:\ORACLE\ORADATA\testdb\INDX01.DBF',
17    'C:\ORACLE\ORADATA\testdb\TOOLS01.DBF',
18    'C:\ORACLE\ORADATA\testdb\TOOLS02.DBF',  --创建语句中加入该数据文件
19    'C:\ORACLE\ORADATA\testdb\USERS01.DBF'
20  CHARACTER SET ZHS16GBK
21  ;

控制文件已创建

SQL> SELECT NAME FROM V$DATAFILE;

NAME
---------------------------------------------------------------------------

C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF
C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF
C:\ORACLE\ORADATA\TESTDB\INDX01.DBF
C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF
C:\ORACLE\ORADATA\TESTDB\USERS01.DBF
C:\ORACLE\ORADATA\TESTDB\TOOLS02.DBF

已选择6行。

SQL> ALTER DATABASE OPEN;
ALTER DATABASE OPEN
*
ERROR 位于第 1 行:
ORA-01113: ?? 4 ??????
ORA-01110: ???? 4: 'C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF'


SQL> RECOVER TABLESPACE TOOLS;
完成介质恢复。
SQL> ALTER DATABASE OPEN;

数据库已更改。


##################################              
# [1.6] 使用备份的控制文件进行恢复 
#                     
################################## 

前面有很多例子


http://www.cnoug.org/viewthread.php?tid=50419  原作者:fly115超级版主

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -