DG有歸檔無備份時的數據文件恢復

一、首先查看主庫的數據文件信息:

SQL>set sqlprompt"_user'@'_connect_identifier>"

SYS@primarydb> select file#,name from v$datafile;

FILE#                             NAME

1             +DATADG/primarydb/datafile/system.270.785597071
2             +DATADG/primarydb/datafile/sysaux.269.785597073
3             +DATADG/primarydb/datafile/undotbs1.264.785597075
4             +DATADG/primarydb/datafile/users.262.785597077
5             +DATADG/primarydb/datafile/ggs.261.785597131
6             +DATADG/primarydb/datafile/ggs.259.785597479

二、模擬故障發生

直接進入 asmcmd

ASMCMD>cd +datadg/primarydb/datafile

ASMCMD> rm -f users.262.785597077

ORA-15032: not all alterations performed

ORA-15028:  ASM   file  '+datadg/primarydb/datafile/users.262.785597077'   not dropped;

currently being accessed (DBD ERROR: OCIStmtExecute) 


ASM的文件保護機制還是挺強的,由於數據庫還是 open狀態,無法直接 rm操作, 關閉數據庫後重新刪除。

SYS@primarydb>shutdown immediate

ASMCMD> rm -f users.262.785597077

 

重新嘗試打開數據庫

SQL> startup

ORACLE instance started.

Total System Global Area    417546240 bytes

Fixed Size                               2227072bytes
Variable Size                          364905600bytes
Database Buffers                      46137344bytes
Redo Buffers                           4276224bytes
Database mounted.

ORA-01157: cannot identify/lock data file 4 - see DBWR trace file

ORA-01110: data file 4: '+DATADG/primarydb/datafile/users.262.785597077' 


找不到數據文件了
嘗試能不能從重建數據文件恢復:

SQL>                     alter                      database                     create                      datafile

'+DATADG/primarydb/datafile/users.262.785597077';Database altered.

SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01190: control file or data file 4 is from before the last RESETLOGS
ORA-01110: data file 4: '+DATADG/primarydb/datafile/ users.262.785597077'

SQL>recover datafile 4;

ORA-00279: change 15286generated at 06/09/2012 18:39:26 needed for thread 1
ORA-00289: suggestion: +FRAD
ORA-00280: change 15286 for thread 1 is in sequence #1

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
ORA-00308: cannot open archived log '+FRADG'
ORA-17503: ksfdopn:2 Failed to open file +FRADG
ORA-15045: ASM file name '+FRADG' is not in reference form 



users表空間是系統默認表空間,無法實現通過重建數據文件, recover的方式恢復數據文件;

三、利用 DG備庫恢復

通過拷貝 DG對應數據文件的方式恢復損壞的數據文件。

RMAN>backup as copy datafile 4 format '/oracle/users.262.785597077'; 
Starting backup at 2012-06-19 19:29:42 
allocated channel: ORA_DISK_1 
channel ORA_DISK_1: SID=32 device type=DISK channel ORA_DISK_1: 
starting datafile copy 
input	datafile	file	number=00004
name=+DATADG/standbydb/datafile/users.261.785540219 
output file name=/oracle/users.262.785597077 tag=TAG20120619T192943 RECID=1 STAMP=786396584 
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01 Finished backup at 2012-06-19 19:29:44 


users.262.785597077從備庫 ftp到主庫

ASMCMD> cp /home/oracle/users.262.785597077 users.262.785597077
copying                                 /home/oracle/users.262.785597077                                  ->
+datadg/primarydb/datafile/users.262.785597077
ASMCMD-08016:    copy    source->'/home/oracle/users.262.785597077'    and
target->'+datadg/primarydb/datafile/users.262.785597077'failed ORA-15056: additional error message
ORA-15046: ASM filename '+datadg/primarydb/datafile/users.262.785597077' is not in single-file creation form
ORA-06512: at"SYS.X$DBMS_DISKGROUP", line 410
ORA-06512: at line 3 (DBD ERROR: OCIStmtExecute)


ASMCMD> cp /home/oracle/users.262.785597077 users

copying /home/oracle/users.262.785597077 ->+datadg/primarydb/datafile/users  


ASM不允許手動創建後面跟 9隨機數字的文件,沒辦法只有重命名了

重定向數據文件(如果是文件系統應就沒這個問題了)

SQL>	alter	database  rename file '+DATADG/primarydb/datafile/users.262.785597077'	to  '+DATADG/primarydb/datafile/users'; 
Database altered. 
SQL> recover datafile 4; 
Media recovery complete. 
SQL> alter database open; 

數據庫恢復完畢!

如果是開啓歸檔之後創建的表空間,數據文件損壞後使用重建數據文件恢復(保證歸檔不丟)

SQL>set sqlprompt "_user'@'_connect_identifier>"

SYS@primarydb>createtablespace test datafile '/oracle/test01.dbf' size 10m;

Tablespace created.

SYS@primarydb>create user test identified by test  default tablespace test;

User created.

SYS@primarydb>grantconnect,resource to test;

Grant succeeded.

TEST@primarydb>conn test/test

Connected.

TEST@primarydb> create  table  job  (  name varchar2(80),offer date,department varchar2(80) ) tablespace TEST;

Table created.

TEST@primarydb>insert into job values('john','09/09/2009','系統集成部');

1 row created.

TEST@primarydb> commit;

TEST@primarydb> col name format a10

TEST@primarydb> set linesize 200

TEST@primarydb> select * from job;

 NAME              OFFER                              DEPARTMENT

  john        0009-09-20 09:00:00          系統集成部

TEST@primarydb>conn /as sysdba

Connected.

SYS@primarydb>alter system switch logfile;

System altered. 

在備份庫查看數據是否同步過來

SQL>setsqlprompt "_user'@'_connect_identifier>"

SYS@standbydb>conn test/test

Connected.

TEST@standbydb>col name format a10

TEST@standbydb>set linesize 200

TEST@standbydb>select * from job;

NAME              OFFER                      DEPARTMENT

john           0009-09-20 09:00:00          系統集成部

主庫上更新表

TEST@primarydb>update job set OFFER='2009-09-09 08:00:00';

TEST@primarydb> commit;

TEST@standbydb>select * from job;

NAME              OFFER                        DEPARTMENT

john        2009-09-09 08:00:00               系統集成部

製造故障,將新建的表空間數據文件 DD

rac1:/oracle$dd if=/dev/zero of=/oracle/lixz01.dbf bs=1024k count=10


查看 JOB表:

TEST@primarydb> select * from job;

ERROR at line 1:

ORA-01578: ORACLE datablock corrupted (file # 7, block # 138) ORA-01110: data file 7:'/oracle/test01.dbf'

出現數據文件損壞報錯

重建數據文件:

SYS@primarydb>alter database create datafile '/oracle/test01.dbf';

alter database createdatafile '/oracle/test01.dbf'

*

ERROR at line 1:

ORA-01182: cannot  create database file 7 - file is in use or recovery ORA-01110: data file 7:'/oracle/test01.dbf'

兩種處理辦法:

第一種:

SQL> alter database datafile 7 offline;

Database altered.

SQL> alterdatabase    create datafile'/oracle/test01.dbf';

SQL> recover datafile 7;

Log applied.

Media recovery complete. 

第二種:

SYS@primarydb>shutdown immediate

ORA-01122: database file 7 failed verification check ORA-01110: data file7: '/oracle/test01.dbf'
ORA-01210: data file header is media corrupt

SYS@primarydb> shutdown abort

ORACLE instance shut down.

SQL> startup mount;

ORACLE instance started.

Total System Global Area    417546240 bytes

Fixed Size                                    2227072bytes

Variable Size                          364905600bytes

Database Buffers                      46137344bytes

Redo Buffers                               4276224bytes

Database mounted.

SQL> alterdatabase create datafile '/oracle/test01.dbf';

Database altered.

SQL> recover datafile 7;
ORA-00279: change519308 generated at 06/19/2012 20:39:43 needed for thread 1
ORA-00289: suggestion :+FRADG/primarydb/archivelog/2012_06_19/thread_1_seq_65.413.786401525
ORA-00280: change 519308 for thread 1 is in sequence #65
Specify log:{<RET>=suggested | filename | AUTO | CANCEL} AUTO

Log applied.

Media recovery complete.

SQL>alter database open;
Database altered.

SYS@primarydb> conn test/test
Connected.

SQL>alter database rename file '+DATADG/primarydb/datafile/users.262.785597077' to '+DATADG/primarydb/datafile/users';

Database altered.

SQL> recover datafile 4;

Media recovery complete.

SQL> alter database open; 

TEST@primarydb>select * from job;

NAME              OFFER                    DEPARTMENT

john       2009-09-09 08:00:00           系統集成部


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章