以下的文章主要介紹的是Oracle表空間的實際數據文件丟失的恢復,我們假設Oracle數據庫其處於歸檔模式。我們在數據庫裡重建一個Oracle表空間,一共有3個相關的數據文件。各10M,表空間內有一張23M的表。
- SQL> select count(*) from ldy.t1;
- COUNT(*)
- 605136
- SQL> col segment_name for a20
- SQL> col tablespace_name for a20
- SQL> select segment_name,tablespace_name,bytes/1024/1024 mb from dba_segments where owner='LDY';
- SEGMENT_NAME TABLESPACE_NAME MB
- T1 LDY 23
關閉數據庫,將Oracle表空間的其中一個數據文件刪除,啟動後報錯:
- SQL> startup
Oracle例程已經啟動。
- Total System Global Area 612368384 bytes
- Fixed Size 1250428 bytes
- Variable Size 230689668 bytes
- Database Buffers 373293056 bytes
- Redo Buffers 7135232 bytes
數據庫裝載完畢。
ORA-01157: 無法標識/鎖定數據文件 6 - 請參閱 DBWR 跟蹤文件
ORA-01110: 數據文件 6: 'E:\Oracle\ORADATA\LDY01.DBF'
此時數據庫為mount狀態。
- SQL> select open_mode from v$database;
- OPEN_MODE
- MOUNTED
增加回該數據文件。
- SQL>alter database create datafile 'E:\Oracle\ORADATA\LDY01.DBF';
數據庫已更改。
介質恢復。
- SQL>recover datafile 6;
完成介質恢復。
數據庫打開,正常查詢。
- SQL> alter database open;
數據庫已更改。
- SQL> select count(*) from ldy.t1;
- COUNT(*)
- 605136