piner的歸檔模式下丟失或損壞一個資料檔案,在linux+oracle10g下測試成功!
在歸檔方式下損壞或丟失一個資料檔案,如果存在相應的備份與該備份以來的歸檔日誌,恢復還是比較簡單的,可以作到儘量少的Down機時間,並能作到資料庫的完全恢復。
測試環境:
1 作業系統:Redhat 5
[oracle@mzl proc]$ cat /proc/version
Linux version 2.6.18-8.el5 (brewbuilder@ls20-bc2-14.build.redhat.com) (gcc version 4.1.1 20070105 (Red Hat 4.1.1-52)) #1 SMP Fri Jan 26 14:15:21 EST 2007
2 資料庫版本:Oracle10g
SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for Linux: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production
3 資料庫的名字:orcl
SQL> show parameter db_name;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_name string orcl
4 檢視資料庫是否在歸檔模式下
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 20
Next log sequence to archive 22
Current log sequence 22
5 在users表空間建立表
SQL> create table testdata(a int) tablespace users;
Table created.
6 插入資料
SQL> insert into testdata values(1);
1 row created.
SQL> commit;
Commit complete.
SQL> select * from testdata;
A
----------
1
7 在/home/mzl/BackupDatabase目錄下有個hotbak.sql檔案,內容如下:
[oracle@mzl BackupDatabase]$ cat ./hotbak.sql
#rem script.:hotbak.sql
#rem creater:mengzhaoliang
#rem data:2008/2/4
#rem desc:backup all database datafile in archive
#enter database
$ORACLE_HOME/bin/sqlplus "/as sysdba" <alter system archive log current;
#start
alter tablespace system begin backup;
!cp /u01/app/oracle/oradata/orcl/system01.dbf /home/mzl/BackupDatabase/;
alter tablespace system end backup;
alter tablespace system begin backup;
!cp /u01/app/oracle/oradata/orcl/undotbs01.dbf /home/mzl/BackupDatabase/;
alter tablespace system end backup;
alter tablespace system begin backup;
!cp /u01/app/oracle/oradata/orcl/users01.dbf /home/mzl/BackupDatabase/;
alter tablespace system end backup;
alter tablespace system begin backup;
!cp /u01/app/oracle/oradata/orcl/sysaux01.dbf /home/mzl/BackupDatabase/;
alter tablespace system end backup;
alter tablespace system begin backup;
!cp /u01/app/oracle/oradata/orcl/example01.dbf /home/mzl/BackupDatabase/;
alter tablespace system end backup;
#backup control file
#binary
alter database backup controlfile to '/home/mzl/BackupDatabase/controlbinarybackup';
#ascii
alter database backup controlfile to trace;
alter system archive log current;
<
8 執行hotbak.sql檔案
[oracle@mzl BackupDatabase]$ ./hotbak.sql
9 繼續插入資料
SQL> insert into testdata values(2);
1 row created.
SQL> commit;
Commit complete.
SQL> select * from testdata;
A
----------
1
2
SQL> alter system switch logfile;
System altered.
SQL> alter system switch logfile;
System altered.
10 關閉資料庫,模擬丟失資料
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
[oracle@mzl orcl]$ pwd
/u01/app/oracle/oradata/orcl
[oracle@mzl orcl]$ ls
control01.ctl example01.dbf redo03.log temp01.dbf
control02.ctl redo01.log sysaux01.dbf undotbs01.dbf
control03.ctl redo02.log system01.dbf users01.dbf
[oracle@mzl orcl]$ rm users01.dbf
[oracle@mzl orcl]$ ls
control01.ctl example01.dbf redo03.log temp01.dbf
control02.ctl redo01.log sysaux01.dbf undotbs01.dbf
control03.ctl redo02.log system01.dbf
模擬媒體毀壞
11 啟動資料庫錯誤,離線該資料檔案
SQL> startup
ORACLE instance started.
Total System Global Area 268435456 bytes
Fixed Size 1218868 bytes
Variable Size 88082124 bytes
Database Buffers 171966464 bytes
Redo Buffers 7168000 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 4 - see DBWR trace file
ORA-01110: data file 4: '/u01/app/oracle/oradata/orcl/users01.dbf'
還可以檢視報警檔案(見上一個恢復案例)或動態檢視v$recover_file
SQL> select * from v$recover_file;
FILE# ONLINE ONLINE_
---------- ------- -------
ERROR CHANGE#
----------------------------------------------------------------- ----------
TIME
---------
4 ONLINE ONLINE
FILE NOT FOUND 0
離線資料檔案
SQL> alter database datafile 4 offline drop;
Database altered.
12 開啟資料庫,複製備份回來(restore),恢復(recover)該資料檔案,並聯機
SQL> alter database open;
Database altered.
複製備份從備份處
[oracle@mzl orcl]$ pwd
/u01/app/oracle/oradata/orcl
[oracle@mzl orcl]$ cp /home/mzl/BackupDatabase/users01.dbf .
[oracle@mzl orcl]$ ls
control01.ctl example01.dbf redo03.log temp01.dbf
control02.ctl redo01.log sysaux01.dbf undotbs01.dbf
control03.ctl redo02.log system01.dbf users01.dbf
恢復該資料檔案
SQL> recover datafile 4;
Media recovery complete.
恢復成功,聯機該資料檔案
SQL> alter database datafile 4 online;
13 檢查資料庫的資料(完全恢復)
SQL> select * from testdata;
A
----------
1
2
說明:
1、採用熱備份,需要執行在歸檔模式下,可以實現資料庫的完全恢復,也就是說,從備份後到資料庫崩潰時的資料都不會丟失。
2、可以採用全備份資料庫的方式備份,對於特殊情況,也可以只備份特定的資料檔案,如只備份使用者表空間(一般情況下對於某些寫特別頻繁的資料檔案,可以單獨加大備份頻率)
3、如果在恢復過程中,發現損壞的是多個資料檔案,即可以採用一個一個資料檔案的恢復方法(第5步中需要對資料檔案一一離線,第6步中需要對資料檔案分別恢復),也可以採用整個資料庫的恢復方法。
4、如果是系統表空間的損壞,不能採用此方法
http://www.itpub.net/viewthread.php?tid=126320&extra=page%3D1%26amp%3Bfilter%3Ddigest&page=1
測試環境:
1 作業系統:Redhat 5
[oracle@mzl proc]$ cat /proc/version
Linux version 2.6.18-8.el5 (brewbuilder@ls20-bc2-14.build.redhat.com) (gcc version 4.1.1 20070105 (Red Hat 4.1.1-52)) #1 SMP Fri Jan 26 14:15:21 EST 2007
2 資料庫版本:Oracle10g
SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for Linux: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production
3 資料庫的名字:orcl
SQL> show parameter db_name;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_name string orcl
4 檢視資料庫是否在歸檔模式下
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 20
Next log sequence to archive 22
Current log sequence 22
5 在users表空間建立表
SQL> create table testdata(a int) tablespace users;
Table created.
6 插入資料
SQL> insert into testdata values(1);
1 row created.
SQL> commit;
Commit complete.
SQL> select * from testdata;
A
----------
1
7 在/home/mzl/BackupDatabase目錄下有個hotbak.sql檔案,內容如下:
[oracle@mzl BackupDatabase]$ cat ./hotbak.sql
#rem script.:hotbak.sql
#rem creater:mengzhaoliang
#rem data:2008/2/4
#rem desc:backup all database datafile in archive
#enter database
$ORACLE_HOME/bin/sqlplus "/as sysdba" <
#start
alter tablespace system begin backup;
!cp /u01/app/oracle/oradata/orcl/system01.dbf /home/mzl/BackupDatabase/;
alter tablespace system end backup;
alter tablespace system begin backup;
!cp /u01/app/oracle/oradata/orcl/undotbs01.dbf /home/mzl/BackupDatabase/;
alter tablespace system end backup;
alter tablespace system begin backup;
!cp /u01/app/oracle/oradata/orcl/users01.dbf /home/mzl/BackupDatabase/;
alter tablespace system end backup;
alter tablespace system begin backup;
!cp /u01/app/oracle/oradata/orcl/sysaux01.dbf /home/mzl/BackupDatabase/;
alter tablespace system end backup;
alter tablespace system begin backup;
!cp /u01/app/oracle/oradata/orcl/example01.dbf /home/mzl/BackupDatabase/;
alter tablespace system end backup;
#backup control file
#binary
alter database backup controlfile to '/home/mzl/BackupDatabase/controlbinarybackup';
#ascii
alter database backup controlfile to trace;
alter system archive log current;
<
8 執行hotbak.sql檔案
[oracle@mzl BackupDatabase]$ ./hotbak.sql
9 繼續插入資料
SQL> insert into testdata values(2);
1 row created.
SQL> commit;
Commit complete.
SQL> select * from testdata;
A
----------
1
2
SQL> alter system switch logfile;
System altered.
SQL> alter system switch logfile;
System altered.
10 關閉資料庫,模擬丟失資料
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
[oracle@mzl orcl]$ pwd
/u01/app/oracle/oradata/orcl
[oracle@mzl orcl]$ ls
control01.ctl example01.dbf redo03.log temp01.dbf
control02.ctl redo01.log sysaux01.dbf undotbs01.dbf
control03.ctl redo02.log system01.dbf users01.dbf
[oracle@mzl orcl]$ rm users01.dbf
[oracle@mzl orcl]$ ls
control01.ctl example01.dbf redo03.log temp01.dbf
control02.ctl redo01.log sysaux01.dbf undotbs01.dbf
control03.ctl redo02.log system01.dbf
模擬媒體毀壞
11 啟動資料庫錯誤,離線該資料檔案
SQL> startup
ORACLE instance started.
Total System Global Area 268435456 bytes
Fixed Size 1218868 bytes
Variable Size 88082124 bytes
Database Buffers 171966464 bytes
Redo Buffers 7168000 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 4 - see DBWR trace file
ORA-01110: data file 4: '/u01/app/oracle/oradata/orcl/users01.dbf'
還可以檢視報警檔案(見上一個恢復案例)或動態檢視v$recover_file
SQL> select * from v$recover_file;
FILE# ONLINE ONLINE_
---------- ------- -------
ERROR CHANGE#
----------------------------------------------------------------- ----------
TIME
---------
4 ONLINE ONLINE
FILE NOT FOUND 0
離線資料檔案
SQL> alter database datafile 4 offline drop;
Database altered.
12 開啟資料庫,複製備份回來(restore),恢復(recover)該資料檔案,並聯機
SQL> alter database open;
Database altered.
複製備份從備份處
[oracle@mzl orcl]$ pwd
/u01/app/oracle/oradata/orcl
[oracle@mzl orcl]$ cp /home/mzl/BackupDatabase/users01.dbf .
[oracle@mzl orcl]$ ls
control01.ctl example01.dbf redo03.log temp01.dbf
control02.ctl redo01.log sysaux01.dbf undotbs01.dbf
control03.ctl redo02.log system01.dbf users01.dbf
恢復該資料檔案
SQL> recover datafile 4;
Media recovery complete.
恢復成功,聯機該資料檔案
SQL> alter database datafile 4 online;
13 檢查資料庫的資料(完全恢復)
SQL> select * from testdata;
A
----------
1
2
說明:
1、採用熱備份,需要執行在歸檔模式下,可以實現資料庫的完全恢復,也就是說,從備份後到資料庫崩潰時的資料都不會丟失。
2、可以採用全備份資料庫的方式備份,對於特殊情況,也可以只備份特定的資料檔案,如只備份使用者表空間(一般情況下對於某些寫特別頻繁的資料檔案,可以單獨加大備份頻率)
3、如果在恢復過程中,發現損壞的是多個資料檔案,即可以採用一個一個資料檔案的恢復方法(第5步中需要對資料檔案一一離線,第6步中需要對資料檔案分別恢復),也可以採用整個資料庫的恢復方法。
4、如果是系統表空間的損壞,不能採用此方法
http://www.itpub.net/viewthread.php?tid=126320&extra=page%3D1%26amp%3Bfilter%3Ddigest&page=1
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12778571/viewspace-170147/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 備份&恢復之五:歸檔模式下丟失或損壞一個資料檔案模式
- rman 恢復---歸檔丟失and資料檔案損壞
- 歸檔模式下資料檔案丟失的恢復模式
- undo檔案丟失或損壞
- 資料檔案損壞、丟失
- 歸檔模式下丟失普通資料檔案並恢復模式
- 在歸檔模式下丟失日誌檔案的恢復模式
- 備份與恢復--資料檔案損壞或丟失
- 資料檔案丟失損壞的恢復--
- 控制檔案損壞,丟失其中一個
- 備份&恢復之八:RMAN備份歸檔模式下損壞(丟失)多個資料檔案,進行整個資料庫的恢復模式資料庫
- 恢復案例:歸檔模式下丟失全部資料檔案的恢復模式
- 磁碟損壞,system及部分資料檔案丟失
- 歸檔模式下的日誌檔案丟失的解決方法模式
- 丟失已歸檔日誌檔案下恢復資料庫資料庫
- 磁碟損壞導致資料檔案丟失的恢復
- 【備份恢復】非歸檔模式下丟失任意資料檔案 恢復操作模式
- 測試在丟失歸檔日誌的情況下,跳過部分歸檔日誌進行資料恢復資料恢復
- 臨時表空間在非歸檔模式下丟失模式
- Oracle重做日誌檔案損壞或丟失後的恢復Oracle
- 非歸檔模式下非當前日誌檔案的丟失的恢復模式
- RMAN_部分資料檔案丟失或者損壞的恢復
- REDO日誌損壞,非歸檔模式資料檔案恢復模式
- 非歸檔模式下,丟失日誌檔案的一次恢復過程模式
- REDO檔案丟失或者損壞的恢復
- oracle控制檔案的損壞或完全丟失的恢復辦法Oracle
- TEMP表空間的檔案丟失或損壞後的恢復
- Oracle聯機日誌檔案丟失或損壞的處理方法Oracle
- 恢復案例:歸檔模式下丟失非系統表空間資料檔案的恢復模式
- 歸檔模式無備份丟失資料檔案後恢復模式
- 歸檔模式有備份丟失資料檔案後恢復模式
- 在open狀態下恢復丟失的資料檔案
- Oracle不同檔案丟失/損壞的恢復方法Oracle
- 恢復archivelog模式下丟失的系統資料檔案Hive模式
- System表空間在非歸檔模式下丟失怎麼辦模式
- ORACLE聯機日誌檔案丟失或損壞的處理方法(轉)Oracle
- Oracle聯機日誌檔案丟失或損壞的處理方法 (轉)Oracle
- 恢復測試:擁有當時的全部歸檔,控制檔案,恢復丟失的資料檔案。