有个同学在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的状态