我的JAVA

从头来
随笔 - 19, 文章 - 0, 评论 - 6, 引用 - 0
数据加载中……

ORACLE归档模式下恢复----UNDO,数据文件损坏

有个同学在MSN和我聊起ORACLE维护的事,他对归档文件的概念不是很熟。我就叫他看书,他讲看书晕糊糊,叫我做个实例给他看。我就在MSN上一步步的示范,顺便贴出来。不过,我记得好像我以前也是看别人的,不要鄙视我哦!!
他很仰慕哦,我回答:“无它,手熟耳!”
呵呵,是不是好峦颠的
SQL> archive log list;
数据库日志模式            存档模式
自动存档             启用
存档终点            d:\oracle\oradata\test\archive
最早的概要日志序列     26
下一个存档日志序列   28
当前日志序列           28
ORACLE要在归档模式下
建个用户zb
CONNECT zb/zb
建个表
CREATE TABLE family
       (seq NUMBER(2),
 NAME VARCHAR2(14) ,
 LOC VARCHAR2(13) ) ;
INSERT INTO family VALUES
 (1,'周斌','爸爸');
commit;
SQL> select * from family;

       SEQ NAME           LOC
---------- -------------- -------------
         1 周斌           爸爸

做备份恢复时,把undo改小一点
SQL>CREATE UNDO TABLESPACE undo1
DATAFILE 'D:\oracle\oradata\test\undo01.dbf'
SIZE 6M AUTOEXTEND ON;
SQL>ALTER SYSTEM SET UNDO_TABLESPACE=UNDO1;
SQL>DROP TABLESPACE UNDOTBS1;
commit
shutdown immediate;
冷备哦
startup;
con sys as sysdba
alter system switch logfile;
产生日志
INSERT INTO zb.family VALUES
 (2,'杨','妈妈');
commit;
alter system switch logfile;
INSERT INTO zb.family VALUES
 (3,'阳','儿子');
SQL> select * from zb.family;

       SEQ NAME           LOC
---------- -------------- -------------
         1 周斌           爸爸
         2 杨             妈妈
         3 阳             儿子
 SQL> shutdown abort
3) 此时,把undo破坏
   在‘服务‘中,将OracleServicetest停止
    删除(OS)undo01文件
4) 在‘服务‘中,将OracleServicetest启动

看警告日志D:\oracle\admin\a00215\bdump\alert_test.log,
Errors in file d:\oracle\admin\test\bdump\test_dbw0_5764.trc:
ORA-01157: cannot identify/lock data file 19 - see DBWR trace file
ORA-01110: data file 19: 'D:\ORACLE\ORADATA\TEST\UNDO01.DBF'
ORA-27041: unable to open file
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。


6) 恢复:
SQL> SHUTDOWN ABORT
将备份的undo01.dbf copy回去
SQL> STARTUP MOUNT
SQL> recover database(或者recover datafile 19//或者 recover'D:\ORACLE\ORADATA\test\UNDO01.DBF')
SQL> alter database open;

数据库已更改。

SQL> select * from zb.family;

       SEQ NAME           LOC
---------- -------------- -------------
         1 周斌           爸爸
         2 杨             妈妈

OK
如果在INSERT后COMMIT,则数据不会丢失
SQL> select * from zb.family;

       SEQ NAME           LOC
---------- -------------- -------------
         1 周斌           爸爸
         2杨             妈妈
         3 阳             儿子
数据文件一样。
数据文件的丢失和损坏可以恢复到COMMIT的状态

posted on 2005-08-30 21:30 周斌 阅读(1904) 评论(0)  编辑  收藏 所属分类: ORACLE


只有注册用户登录后才能发表评论。


网站导航: