Database

意外覆蓋了 system.dbf - 現在怎麼辦?

  • June 16, 2012

我不小心覆蓋了 system.dbf/usr/lib/oracle/xe/oradata/XE/system.dbf

好吧,我實際上並沒有意外地這樣做,但是由於數據庫中的其他故障,我將其覆蓋了。

當我嘗試執行以下命令時:

SQL> shutdown
ORA-01109: database not open


Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.

Total System Global Area  289406976 bytes
Fixed Size                  1258488 bytes
Variable Size              92277768 bytes
Database Buffers          192937984 bytes
Redo Buffers                2932736 bytes
Database mounted.
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open

現在我想嘗試恢復數據庫,因為以掛載或標準啟動它肯定不起作用。

SQL> recover database using backup controlfile;
ORA-00283: recovery session canceled due to errors
ORA-01110: data file 1: '/usr/lib/oracle/xe/oradata/XE/system.dbf'
ORA-01122: database file 1 failed verification check
ORA-01110: data file 1: '/usr/lib/oracle/xe/oradata/XE/system.dbf'
ORA-01206: file is not part of this database - wrong database id

我該如何解決這個問題?甚至可能嗎?

我的“真正”問題是我執行了 /etc/init.d/oracle-xe 配置,它覆蓋了我的舊配置並且可能刪除了密碼等,所以我的表不見了,但是我找到了 mytablespace.dbf 所以我希望有可能恢復嗎?

請對此有所了解。

你有你的數據庫的備份嗎?覆蓋 SYSTEM 表空間數據文件需要從備份中完全恢復。

由於我沒有使用 Oracle 的經驗,我根本不知道這是否適用。但是,如果文件是由某個程序打開的,並且該程序仍在執行,則可以通過在 /proc 文件系統中訪問它來恢復它。

# ls -l /proc/13646/fd
total 0
lrwx------ 1 root root 64 Apr 13 21:43 0 -> /dev/null
lrwx------ 1 root root 64 Apr 13 21:43 1 -> /dev/null
lrwx------ 1 root root 64 Apr 13 21:43 2 -> /dev/null
lrwx------ 1 root root 64 Apr 13 21:43 3 -> socket:[38094]
l-wx------ 1 root root 64 Apr 13 21:43 4 -> /var/log/openvpn-status-server.log
lrwx------ 1 root root 64 Apr 13 21:43 5 -> /etc/openvpn/ipp.txt
lrwx------ 1 root root 64 Apr 13 21:43 6 -> socket:[38099]
lrwx------ 1 root root 64 Apr 13 21:43 7 -> /dev/net/tun

讓我們刪除其中一個!

# rm /var/log/openvpn-status-server.log
# ls /var/log/openvpn-status-server.log
ls: cannot access /var/log/openvpn-status-server.log: No such file or directory

好的,刪除,再次ls:

# ls -l /proc/13646/fd/4 
l-wx------ 1 root root 64 Apr 13 21:43 /proc/13646/fd/4 -> /var/log/openvpn-status-    server.log (deleted)

它在那裡,已刪除但仍保留。

# cp /proc/13646/fd/4 myrecover.txt
# ls -l myrecover.txt 
-rw------- 1 root root 359 Apr 13 21:45 myrecover.txt

果然,我親愛的老 openvpn-status-server.log 恢復了!

引用自:https://serverfault.com/questions/76641