有個同學在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的狀態