我的備份與恢復實驗 (歸檔模式下用戶管理的完全恢復)
2024-07-21 02:40:24
供稿:網友
os:winXP
Oracle:9.2.0.1.0
sid:xianhe一:預備工作
把數據庫改為歸檔模式
SQL> startup mount
ORACLE 例程已經啟動。
Total System Global Area 126950220 bytes
Fixed Size 453452 bytes
Variable Size 109051904 bytes
Database Buffers 16777216 bytes
Redo Buffers 667648 bytes
數據庫裝載完畢。
SQL> alter database archivelog;
數據庫已更改。
SQL> alter database open;
數據庫已更改。
SQL>
設置成自動歸檔
SQL> alter system set log_archive_start = true scope=spfile;
系統已更改。
確定數據庫在歸檔模式下并是自動存檔的
SQL> archive log list
數據庫日志模式 存檔模式
自動存檔 啟用
存檔終點 D:/oracle/ora92/RDBMS
最早的概要日志序列 2
下一個存檔日志序列 4
當前日志序列 4
SQL>
干凈的關閉數據庫,做一個完全的冷備份。
二:開始實驗
實驗1:描述如下。
數據庫系統數據文件和回退段遭破壞的情況下的恢復。此時數據庫的狀態是關閉的。
先啟動數據庫,用scott用戶建立test表,并插入兩條數據。
SQL> create table scott.test
2 (id int);
表已創建。
SQL> insert into scott.test values(1);
已創建 1 行。
SQL> insert into scott.test values(2);
已創建 1 行。
SQL> commit;
提交完成。
假設數據庫遭意外被迫關閉,并且系統數據文件丟失。
SQL> shutdown abort
ORACLE 例程已經關閉。
把oracle服務停掉,刪除SYSTEM01.dbf和UNDOTBS01.DBF文件
啟動服務
啟動數據庫, 提示如下錯誤
SQL> startup
ORACLE 例程已經啟動。
Total System Global Area 126950220 bytes
Fixed Size 453452 bytes
Variable Size 109051904 bytes
Database Buffers 16777216 bytes
Redo Buffers 667648 bytes
數據庫裝載完畢。
ORA-01157: 無法標識/鎖定數據文件 1 - 請參閱 DBWR 跟蹤文件
ORA-01110: 數據文件 1: 'D:/ORACLE/ORADATA/XINAHE/SYSTEM01.DBF'
把備份的SYSTEM01.dbf文件還原回去
然后recover database 或 recover datafile 'D:/ORACLE/ORADATA/XINAHE/SYSTEM01.DBF'
SQL> recover datafile 'D:/ORACLE/ORADATA/XINAHE/SYSTEM01.DBF';
完成介質恢復。
打開數據庫有提示
SQL> alter database open;
alter database open
*
ERROR 位于第 1 行:
ORA-01157: 無法標識/鎖定數據文件 2 - 請參閱 DBWR 跟蹤文件
ORA-01110: 數據文件 2: 'D:/ORACLE/ORADATA/XINAHE/UNDOTBS01.DBF'
把備份的UNDOTBS01.DBF文件還原回去,執行recover database 或 recover datafile 'D:/ORACLE/ORADATA/XINAHE/UNDOTBS01.DBF'
SQL> recover datafile 'D:/ORACLE/ORADATA/XINAHE/UNDOTBS01.DBF';
完成介質恢復。
然后就可以打開數據庫,查看scott用戶的test表。
SQL> alter database open;
數據庫已更改。
SQL> select * from scott.test;
ID
----------
1
2
SQL>
完成。
實驗2:描述如下
數據庫是打開的,這是損壞的文件是用戶的數據文件而不是system和undo文件。
用scott用戶在users表空間建立test1表
SQL> create table scott.test1(id int)
2 tablespace users;
表已創建。
插入兩條數據
SQL> insert into scott.test1 values(1);
已創建 1 行。
SQL> insert into scott.test1 values(2);
已創建 1 行。
SQL> commit;
提交完成。
當前日志歸檔
SQL> alter system archive log current;
系統已更改。
現在破壞users表空間,使其離線,然后刪除users01.dbf
SQL> alter tablespace users offline;
表空間已更改。
SQL> alter tablespace users online;
alter tablespace users online
*
ERROR 位于第 1 行:
ORA-01157: 無法標識/鎖定數據文件 9 - 請參閱 DBWR 跟蹤文件
ORA-01110: 數據文件 9: 'D:/ORACLE/ORADATA/XINAHE/USERS01.DBF'
此時出現錯誤,users表空間不能在線了。這時把備份的users01.DBF還原回去。
然后
SQL> recover tablespace users;
ORA-00279: 更改 292331 (在 03/18/2005 16:36:05 生成) 對于線程 1 是必需的
ORA-00289: 建議: D:/ORACLE/ORA92/RDBMS/ARC00004.001
ORA-00280: 更改 292331 對于線程 1 是按序列 # 4 進行的
指定日志: {<RET>=suggested filename AUTO CANCEL}
auto
ORA-00279: 更改 292907 (在 03/18/2005 16:45:43 生成) 對于線程 1 是必需的
ORA-00289: 建議: D:/ORACLE/ORA92/RDBMS/ARC00005.001
ORA-00280: 更改 292907 對于線程 1 是按序列 # 5 進行的
ORA-00278: 此恢復不再需要日志文件 'D:/ORACLE/ORA92/RDBMS/ARC00004.001'
已應用的日志。
完成介質恢復。
SQL> alter tablespace users online;
表空間已更改。
SQL> select * from scott.test1;
ID
----------
1
2
完成。
實驗3:描述如下
數據文件沒有備份(不能使system和undo文件)的恢復。
創建表空間testspace
SQL> create tablespace testspace
2 datafile 'd:/oracle/oradata/xinahe/testspace.dbf' size 10m;
表空間已創建。
SQL> create table scott.test3(id int)
2 tablespace testspace;
表已創建。
SQL> commit;
提交完成。
SQL> alter system switch logfile;
系統已更改。
SQL> insert into scott.test3 values(1);
已創建 1 行。
SQL> commit;
提交完成。
SQL> alter tablespace testspace offline;
表空間已更改。
SQL> select * from scott.test3;
select * from scott.test3
*
ERROR 位于第 1 行:
ORA-00376: 此時無法讀取文件 11
ORA-01110: 數據文件 11: 'D:/ORACLE/ORADATA/XINAHE/TESTSPACE.DBF'
由于沒有備份數據文件,我重新創建一個
SQL> alter database create datafile
2 'D:/ORACLE/ORADATA/XINAHE/TESTSPACE.DBF';
數據庫已更改。
SQL> recover tablespace testspace;
完成介質恢復。
SQL> alter tablespace testspace online;
表空間已更改。
SQL> select * from scott.test3;
ID
----------
1
完成。