實驗:基于trace的控制文件重建及數(shù)據庫回復(所有控制文件丟失等) 1.測試數(shù)據的構造,創(chuàng)建只讀表空間 create tablespace tbs_users datafile /u01/app/oracle/oradata/PROD/datafile/tbs_users1.dbf size 5m, /u01/app/oracle/oradata/PROD/datafile/tbs_us
實驗:基于trace的控制文件重建及數(shù)據庫回復(所有控制文件丟失等)
1.測試數(shù)據的構造,創(chuàng)建只讀表空間
create tablespace tbs_users datafile
'/u01/app/oracle/oradata/PROD/datafile/tbs_users1.dbf' size 5m,
'/u01/app/oracle/oradata/PROD/datafile/tbs_users2.dbf' size 5m;
alter tablesapce tbs_users read only;
2.控制文件的轉儲
select name from v$controlfile;
--查看控制文件狀態(tài)
轉儲:
oradebug setmypid;
alter database backup controlfile to trace;
oradebug tracefile_name;
3.刪除控制文件
!rm /u01/app/oracle/oradata/PROD/control*.ctl
--若閃回區(qū)也有控制文件副本,一并刪除;
alter system checkpoint;
create tablespace ts1 datafile '/u01/app/oracle/oradata/PROD/datafile/ts1.dbf' size 5m;
--觸發(fā)錯誤
shutdown immeidate/abort
startup
ORA-00205:error in identifying control file;
check alert log for more info;
4.使用轉儲的跟蹤文件進行控制文件重建
查看跟蹤文件內容,確定使用noresetlogs進行重建
相關腳本:
-- Set #1. NORESETLOGS case
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "PROD" NORESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 (
'/u01/app/oracle/oradata/PROD/onlinelog/o1_mf_1_b395d7z0_.log',
'/u01/app/oracle/fast_recovery_area/PROD/onlinelog/o1_mf_1_b395df1j_.log'
) SIZE 50M BLOCKSIZE 512,
GROUP 2 (
'/u01/app/oracle/oradata/PROD/onlinelog/o1_mf_2_b395dlrd_.log',
'/u01/app/oracle/fast_recovery_area/PROD/onlinelog/o1_mf_2_b395dqql_.log'
) SIZE 50M BLOCKSIZE 512,
GROUP 3 (
'/u01/app/oracle/oradata/PROD/onlinelog/o1_mf_3_b395dwfk_.log',
'/u01/app/oracle/fast_recovery_area/PROD/onlinelog/o1_mf_3_b395f1j7_.log'
) SIZE 50M BLOCKSIZE 512
DATAFILE
'/u01/app/oracle/oradata/PROD/datafile/o1_mf_system_b393xosc_.dbf',
'/u01/app/oracle/oradata/PROD/datafile/o1_mf_sysaux_b393xovt_.dbf',
'/u01/app/oracle/oradata/PROD/datafile/o1_mf_undotbs1_b393xq2d_.dbf',
'/u01/app/oracle/oradata/PROD/datafile/o1_mf_users_b393xqpm_.dbf',
'/u01/app/oracle/oradata/PROD/datafile/o1_mf_example_b393xp04_.dbf'
CHARACTER SET AL32UTF8
;
RECOVER DATABASE
--如果數(shù)據庫非正常關閉,需要恢復數(shù)據庫;
ALTER SYSTEM ARCHIVE LOG ALL;
ALTER DATABASE OPEN;
--如果有創(chuàng)建的測試數(shù)據文件需要處理,則可以先跳過(以先打開數(shù)據庫為準);
alter database datafile file_id offline;
ALTER DATABASE RENAME FILE 'MISSING00006'
TO '/u01/app/oracle/oradata/PROD/datafile/tbs_users1.dbf';
ALTER DATABASE RENAME FILE 'MISSING00007'
TO '/u01/app/oracle/oradata/PROD/datafile/tbs_users2.dbf';
ALTER TABLESPACE "TBS_USERS" ONLINE;
ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/PROD/datafile/o1_mf_temp_b29o0g6r_.tmp'
SIZE 20971520 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;
備注:
1.只讀狀態(tài)的表空間,在利用跟蹤文件后,其數(shù)據文件名稱會發(fā)生變化,需要rename操作;
2.臨時表空間,在利用trace重建控制文件后,其臨時文件會丟失,需要重新添加或重建臨時表空間;
3.在轉儲控制文件之后新創(chuàng)建的臨時表空間,當我們重建控制文件后,這些表空間的數(shù)據文件,也需要進行處理;
4.可以利用rman中的命令來查看當前數(shù)據庫數(shù)據文件和臨時文 report schema
5.ODU 數(shù)據庫恢復工具
具體實驗:
注 在利用trace備份恢復控制文件的時候,有以下要特別注意:
- 只讀表空間
- 臨時表空間
- 離線表空間
1) 準備只讀表空間環(huán)境
SYS@ORA11GR2>create tablespace ts_users datafile '/u01/app/oracle/oradata/ORA11GR2/ts_users01.dbf' size 5m,'/u01/app/oracle/oradata/ORA11GR2/ts_users02.dbf' size 5m;
Tablespace created.
SYS@ORA11GR2>col tablespace_name for a15
SYS@ORA11GR2>select tablespace_name,status from dba_tablespaces;
TABLESPACE_NAME STATUS
--------------- ---------
SYSTEM ONLINE
SYSAUX ONLINE
UNDOTBS1 ONLINE
TEMP ONLINE
USERS ONLINE
EXAMPLE ONLINE
TS_USERS ONLINE
7 rows selected.
SYS@ORA11GR2>
SYS@ORA11GR2>select file_name,status,online_status from dba_data_files;
FILE_NAME STATUS ONLINE_
----------------------------------------------- --------- -------
/u01/app/oracle/oradata/ORA11GR2/users01.dbf AVAILABLE ONLINE
/u01/app/oracle/oradata/ORA11GR2/undotbs01.dbf AVAILABLE ONLINE
/u01/app/oracle/oradata/ORA11GR2/sysaux01.dbf AVAILABLE ONLINE
/u01/app/oracle/oradata/ORA11GR2/system01.dbf AVAILABLE SYSTEM
/u01/app/oracle/oradata/ORA11GR2/example01.dbf AVAILABLE ONLINE
/u01/app/oracle/oradata/ORA11GR2/ts_users01.dbf AVAILABLE ONLINE
/u01/app/oracle/oradata/ORA11GR2/ts_users02.dbf AVAILABLE ONLINE
7 rows selected.
SYS@ORA11GR2>
SYS@ORA11GR2>alter tablespace ts_users read only;
Tablespace altered.
SYS@ORA11GR2>select tablespace_name,status from dba_tablespaces;
TABLESPACE_NAME STATUS
--------------- ---------
SYSTEM ONLINE
SYSAUX ONLINE
UNDOTBS1 ONLINE
TEMP ONLINE
USERS ONLINE
EXAMPLE ONLINE
TS_USERS READ ONLY
7 rows selected.
SYS@ORA11GR2>select file_name,status,online_status from dba_data_files;
FILE_NAME STATUS ONLINE_
----------------------------------------------- --------- -------
/u01/app/oracle/oradata/ORA11GR2/users01.dbf AVAILABLE ONLINE
/u01/app/oracle/oradata/ORA11GR2/undotbs01.dbf AVAILABLE ONLINE
/u01/app/oracle/oradata/ORA11GR2/sysaux01.dbf AVAILABLE ONLINE
/u01/app/oracle/oradata/ORA11GR2/system01.dbf AVAILABLE SYSTEM
/u01/app/oracle/oradata/ORA11GR2/example01.dbf AVAILABLE ONLINE
/u01/app/oracle/oradata/ORA11GR2/ts_users01.dbf AVAILABLE ONLINE
/u01/app/oracle/oradata/ORA11GR2/ts_users02.dbf AVAILABLE ONLINE
7 rows selected.
SYS@ORA11GR2>
2) 查看控制文件位置
SYS@ORA11GR2>select name from v$controlfile;
NAME
--------------------------------------------------------------------------
/u01/app/oracle/oradata/ORA11GR2/control01.ctl
/u01/app/oracle/oradata/ORA11GR2/control02.ctl
SYS@ORA11GR2>
3) 轉儲控制文件到trace文件中
SYS@ORA11GR2>oradebug setmypid
Statement processed.
SYS@ORA11GR2>alter database backup controlfile to trace;
Database altered.
SYS@ORA11GR2>oradebug tracefile_name
/u01/app/oracle/diag/rdbms/ora11gr2/ORA11GR2/trace/ORA11GR2_ora_30816.trc
SYS@ORA11GR2>
4) 打開轉儲后文件,以下為部分內容
[oracle@ocmu ~]$
cat /u01/app/oracle/diag/rdbms/ora11gr2/ORA11GR2/trace/ORA11GR2_ora
…… -- Set #1. NORESETLOGS case -- -- The following commands will create a new control file and use it -- to open the database. -- Data used by Recovery Manager will be lost. -- Additional logs may be required for media recovery of offline -- Use this only if the current versions of all online logs are -- available. -- After mounting the created controlfile, the following SQL -- statement will place the database in the appropriate -- protection mode: -- ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE STARTUP NOMOUNT CREATE CONTROLFILE REUSE DATABASE "ORA11GR2" NORESETLOGS NOARCHIVELOG MAXLOGFILES 16 MAXLOGMEMBERS 3 MAXDATAFILES 100 MAXINSTANCES 8 MAXLOGHISTORY 292 LOGFILE GROUP 1 '/u01/app/oracle/oradata/ORA11GR2/redo01.log' SIZE 50M BLOCKSIZE 512, GROUP 2 '/u01/app/oracle/oradata/ORA11GR2/redo02.log' SIZE 50M BLOCKSIZE 512, GROUP 3 '/u01/app/oracle/oradata/ORA11GR2/redo03.log' SIZE 50M BLOCKSIZE 512 -- STANDBY LOGFILE DATAFILE '/u01/app/oracle/oradata/ORA11GR2/system01.dbf', '/u01/app/oracle/oradata/ORA11GR2/sysaux01.dbf', '/u01/app/oracle/oradata/ORA11GR2/undotbs01.dbf', '/u01/app/oracle/oradata/ORA11GR2/users01.dbf', '/u01/app/oracle/oradata/ORA11GR2/example01.dbf' CHARACTER SET AL32UTF8 ; …… -- ALTER DATABASE REGISTER LOGFILE '/u01/app/oracle/product/11.2.0/db_1/dbs/arch1_1_694825248.dbf'; -- ALTER DATABASE REGISTER LOGFILE '/u01/app/oracle/product/11.2.0/db_1/dbs/arch1_1_799882343.dbf'; -- Recovery is required if any of the datafiles are restored backups, -- or if the last shutdown was not normal or immediate. RECOVER DATABASE -- Database can now be opened normally. ALTER DATABASE OPEN; -- Files in read-only tablespaces are now named. ALTER DATABASE RENAME FILE 'MISSING00006' TO '/u01/app/oracle/oradata/ORA11GR2/ts_users01.dbf'; ALTER DATABASE RENAME FILE 'MISSING00007' TO '/u01/app/oracle/oradata/ORA11GR2/ts_users02.dbf'; -- Online the files in read-only tablespaces. ALTER TABLESPACE "TS_USERS" ONLINE; -- Commands to add tempfiles to temporary tablespaces. -- Online tempfiles have complete space information. -- Other tempfiles may require adjustment. ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/ORA11GR2/temp01.dbf' SIZE 30408704 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M; -- End of tempfile additions. …… |
注 在轉儲的控制文件中,沒有只讀表空間的內容
本測試,是先生成轉儲文件,再恢復的,往往在控制文件丟失之前很少會有人轉儲控制文件的(當然
了,一般情況都會備份控制文件的),如果沒有轉儲控制文件的話,我們也可以在其他數(shù)據庫中轉儲
控制文件,按照目標庫的情況進行調整,然后再創(chuàng)建。
5) 手工刪除控制文件
[oracle@ocmu ORA11GR2]$ pwd
/u01/app/oracle/oradata/ORA11GR2
[oracle@ocmu ORA11GR2]$ ls *.ctl
control01.ctl control02.ctl
[oracle@ocmu ORA11GR2]$ rm *.ctl
[oracle@ocmu ORA11GR2]$ ls *.ctl
ls: *.ctl: No such file or directory
[oracle@ocmu ORA11GR2]$
6) 控制文件刪除以后,數(shù)據庫是可以正常登陸的
[oracle@ocmu ORA11GR2]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.1.0 Production on Tue Jan 15 16:09:53 2013
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SYS@ORA11GR2>
7) 當修改結構信息時,會寫控制文件,我們創(chuàng)建一個表空間,立即報錯
SYS@ORA11GR2> create tablespace ts_idx datafile '/u01/app/oracle/oradata/
ORA11GR2/ts_idx01.dbf' size 10m;
create tablespace ts_idx datafile '/u01/app/oracle/oradata/ORA11GR2/ts_idx01.dbf' size 10m
*
ERROR at line 1:
ORA-00210: cannot open the specified control file
ORA-00202: control file: '/u01/app/oracle/oradata/ORA11GR2/control01.ctl'
ORA-27041: unable to open file
Linux Error: 2: No such file or directory
Additional information: 3
SYS@ORA11GR2>
8) 一致性關閉數(shù)據庫已經不可能了(控制文件丟失,無法同步SCN),采取強制手段
SYS@ORA11GR2>shutdow immediate;
ORA-00210: cannot open the specified control file
ORA-00202: control file: '/u01/app/oracle/oradata/ORA11GR2/control01.ctl'
ORA-27041: unable to open file
Linux Error: 2: No such file or directory
Additional information: 3
SYS@ORA11GR2>
SYS@ORA11GR2>shutdown abort;
ORACLE instance shut down.
SYS@ORA11GR2>
9) 按照轉儲文件中的步驟恢復控制文件,nomount啟動數(shù)據庫
SYS@ORA11GR2>startup nomount;
ORACLE instance started.
Total System Global Area 841162752 bytes
Fixed Size 1339768 bytes
Variable Size 494931592 bytes
Database Buffers 339738624 bytes
Redo Buffers 5152768 bytes
SYS@ORA11GR2>
10) 采用NORESETLOGS創(chuàng)建控制文件
SYS@ORA11GR2>CREATE CONTROLFILE REUSE DATABASE "ORA11GR2" NORESETLOGS NOARCHIVELOG
2 MAXLOGFILES 16
3 MAXLOGMEMBERS 3
4 MAXDATAFILES 100
5 MAXINSTANCES 8
6 MAXLOGHISTORY 292
7 LOGFILE
8 GROUP 1 '/u01/app/oracle/oradata/ORA11GR2/redo01.log' SIZE 50M BLOCKSIZE 512,
9 GROUP 2 '/u01/app/oracle/oradata/ORA11GR2/redo02.log' SIZE 50M BLOCKSIZE 512,
10 GROUP 3 '/u01/app/oracle/oradata/ORA11GR2/redo03.log' SIZE 50M BLOCKSIZE 512
11 -- STANDBY LOGFILE
12 DATAFILE
13 '/u01/app/oracle/oradata/ORA11GR2/system01.dbf',
14 '/u01/app/oracle/oradata/ORA11GR2/sysaux01.dbf',
15 '/u01/app/oracle/oradata/ORA11GR2/undotbs01.dbf',
16 '/u01/app/oracle/oradata/ORA11GR2/users01.dbf',
17 '/u01/app/oracle/oradata/ORA11GR2/example01.dbf'
18 CHARACTER SET AL32UTF8
19 ;
Control file created.
SYS@ORA11GR2>
11) 因為之前shutdown沒有采取一致性關閉,所以,需要recover database,recover后,可正常open數(shù)據庫
SYS@ORA11GR2>alter database open;
alter database open
*
ERROR at line 1:
ORA-01113: file 1 needs media recovery
ORA-01110: data file 1: '/u01/app/oracle/oradata/ORA11GR2/system01.dbf'
SYS@ORA11GR2>recover database;
Media recovery complete.
SYS@ORA11GR2>
SYS@ORA11GR2>alter database open;
Database altered.
SYS@ORA11GR2>!ls *.ctl
control01.ctl control02.ctl
SYS@ORA11GR2>
看似已恢復完成,不過,很清晰的看到,轉儲的控制文件中,還有幾步沒有完成,我們繼續(xù)
12) 再次查看表空間和數(shù)據文件狀態(tài)
我們可以看到,只讀表空間的狀態(tài)依然是read only,不過數(shù)據文件的路徑、名字及狀態(tài)都有所變化
SYS@ORA11GR2>select tablespace_name,status from dba_tablespaces;
TABLESPACE_NAME STATUS
--------------- ---------
SYSTEM ONLINE
SYSAUX ONLINE
UNDOTBS1 ONLINE
TEMP ONLINE
USERS ONLINE
EXAMPLE ONLINE
TS_USERS READ ONLY
7 rows selected.
SYS@ORA11GR2>col file_name for a52
SYS@ORA11GR2>select file_name,status,online_status from dba_data_files;
FILE_NAME STATUS ONLINE_
---------------------------------------------------- --------- -------
/u01/app/oracle/oradata/ORA11GR2/example01.dbf AVAILABLE ONLINE
/u01/app/oracle/oradata/ORA11GR2/users01.dbf AVAILABLE ONLINE
/u01/app/oracle/oradata/ORA11GR2/undotbs01.dbf AVAILABLE ONLINE
/u01/app/oracle/oradata/ORA11GR2/sysaux01.dbf AVAILABLE ONLINE
/u01/app/oracle/oradata/ORA11GR2/system01.dbf AVAILABLE SYSTEM
/u01/app/oracle/product/11.2.0/db_1/dbs/MISSING00006 AVAILABLE OFFLINE
/u01/app/oracle/product/11.2.0/db_1/dbs/MISSING00007 AVAILABLE OFFLINE
7 rows selected.
SYS@ORA11GR2>
13) 按照轉儲的步驟繼續(xù)rename數(shù)據文件
注:如果不rename數(shù)據文件的話,數(shù)據文件是沒法ONLINE的
SYS@ORA11GR2>ALTER DATABASE RENAME FILE 'MISSING00006'
TO '/u01/app/oracle/oradata/ORA11GR2/ts_users01.dbf';
Database altered.
SYS@ORA11GR2>ALTER DATABASE RENAME FILE 'MISSING00007'
TO '/u01/app/oracle/oradata/ORA11GR2/ts_users02.dbf';
Database altered.
SYS@ORA11GR2>
14) 按照轉儲步驟,修改表空間online
SYS@ORA11GR2>ALTER TABLESPACE "TS_USERS" ONLINE;
Tablespace altered.
SYS@ORA11GR2>
15) 再次查看表空間、數(shù)據文件的狀態(tài),已經徹底恢復原貌
SYS@ORA11GR2>select tablespace_name,status from dba_tablespaces;
TABLESPACE_NAME STATUS
--------------- ---------
SYSTEM ONLINE
SYSAUX ONLINE
UNDOTBS1 ONLINE
TEMP ONLINE
USERS ONLINE
EXAMPLE ONLINE
TS_USERS READ ONLY
7 rows selected.
SYS@ORA11GR2>select file_name,status,online_status from dba_data_files;
FILE_NAME STATUS ONLINE_
---------------------------------------------------- --------- -------
/u01/app/oracle/oradata/ORA11GR2/example01.dbf AVAILABLE ONLINE
/u01/app/oracle/oradata/ORA11GR2/users01.dbf AVAILABLE ONLINE
/u01/app/oracle/oradata/ORA11GR2/undotbs01.dbf AVAILABLE ONLINE
/u01/app/oracle/oradata/ORA11GR2/sysaux01.dbf AVAILABLE ONLINE
/u01/app/oracle/oradata/ORA11GR2/system01.dbf AVAILABLE SYSTEM
/u01/app/oracle/oradata/ORA11GR2/ts_users01.dbf AVAILABLE ONLINE
/u01/app/oracle/oradata/ORA11GR2/ts_users02.dbf AVAILABLE ONLINE
7 rows selected.
SYS@ORA11GR2>
16) 轉儲步驟中還涉及到了臨時表空間,我們驗證一下,重建控制文件后,臨時表空間的情況,沒有任何數(shù)據文件
SYS@ORA11GR2>select file_name,tablespace_name from dba_temp_files;
no rows selected
SYS@ORA11GR2>
17) 按照轉儲中的語句給臨時表空間增加數(shù)據文件
SYS@ORA11GR2>ALTER TABLESPACE TEMP
ADD TEMPFILE '/u01/app/oracle/oradata/ORA11GR2/temp01.dbf'
SIZE 30408704 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;
Tablespace altered.
SYS@ORA11GR2>
18) 臨時文件已添加成功
SYS@ORA11GR2>select FILE_NAME,TABLESPACE_NAME from dba_temp_files;
FILE_NAME TABLESPACE_NAME
---------------------------------------------------- ---------------
/u01/app/oracle/oradata/ORA11GR2/temp01.dbf TEMP
SYS@ORA11GR2>
至此,控制文件恢復完畢
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com