数据库备份 恢复
臨時(shí)表空間恢復(fù)
1.建立臨時(shí)表空間
SQL> create temporary tablespace temp123 tempfile '/u01/app/oracle/oradata/orcl/temp123.dbf' size 20M;
2.更改為默認(rèn)
SQL> alter database default temporary tablespace temp123;
3.SQL> drop tablespace temp;(刪除)
==========================================================
日志文件,控制文件恢復(fù)
1.刪除2個(gè)日志文件
[oracle@sq orcl]$ rm -rf redo01.log redo03.log?
刪除所有控制文件
[oracle@sq orcl]$ rm -rf *.ctl
2.
SQL> startup force(報(bào)錯(cuò))
3.
CREATE CONTROLFILE REUSE DATABASE "ORCL" RESETLOGS ?ARCHIVELOG
? ? MAXLOGFILES 16
? ? MAXLOGMEMBERS 3
? ? MAXDATAFILES 100
? ? MAXINSTANCES 8
? ? MAXLOGHISTORY 292
LOGFILE
? GROUP 1 '/u01/app/oracle/oradata/orcl/redo01.log' ?SIZE 50M,
? GROUP 2 '/u01/app/oracle/oradata/orcl/redo02.log' ?SIZE 50M,
? GROUP 3 '/u01/app/oracle/oradata/orcl/redo03.log' ?SIZE 50M
-- STANDBY LOGFILE
DATAFILE
? '/u01/app/oracle/oradata/orcl/system01.dbf',
? '/u01/app/oracle/oradata/orcl/undotbs01.dbf',
? '/u01/app/oracle/oradata/orcl/sysaux01.dbf',
? '/u01/app/oracle/oradata/orcl/users01.dbf',
? '/u01/app/oracle/oradata/orcl/aaa.dbf'
CHARACTER SET WE8ISO8859P1
;
4.SQL> select open_mode from v$database;
5.SQL> alter database open;(報(bào)錯(cuò))
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
SQL> alter database open resetlogs;(報(bào)錯(cuò))
SQL> recover database; (報(bào)錯(cuò))
查看恢復(fù)目錄
SQL> show parameter DB_RECOVERY_FILE_DEST
SQL> recover database using BACKUP CONTROLFILE;
(using backup controlfile. ?恢復(fù)就不會受“當(dāng)前controlfile所紀(jì)錄的SCN”的限制) 成功
提示中輸入: ?/u01/app/oracle/oradata/orcl/redo02.log (當(dāng)前就一個(gè)日志文件)
SQL> alter database open resetlogs;
==========================================
部分?jǐn)?shù)據(jù)庫恢復(fù)
1.SQL> alter tablespace users begin backup;
? [oracle@sq orcl]$ cp users01.dbf /home/oracle/db_bak/
2.SQL> alter tablespace users end backup;?
??
3.SQL> create table tt as select * from dba_objects;
? SQL> select count(*) from tt;
? SQL> commit;
4.[oracle@sq orcl]$ rm -rf users01.dbf (模擬損壞)
5.SQL> alter system flush buffer_cache;
SQL> conn sys/123456 as sysdba
6.SQL> startup force;(報(bào)錯(cuò) 缺少4號文件)
7.SQL> alter database datafile 4 offline;
? [oracle@sq orcl]$ cp /home/oracle/db_bak/users01.dbf .
8.SQL> recover datafile 4;
SQL> alter database datafile 4 online;
9.SQL> startup force;
============================================
完全數(shù)據(jù)庫恢復(fù)
步驟跟上面一樣
recover database
============================================
歸檔模式數(shù)據(jù)文件恢復(fù)
1.SQL> create tablespace tbs_recover datafile '/oracle/app/oradata/TEST/tbs_recover.dbf' size 10M;
2.
SQL> create table tab_recover tablespace tbs_recover as select * from dba_objects;
SQL> commit;
3.SQL> alter system switch logfile;
SQL> /
4.[oracle@sq123 TEST]$ rm -rf tbs_recover.dbf?
5.SQL> alter system flush buffer_cache;
6.SQL> conn sys/123456 as sysdba
? SQL> select * from tab_recover;(報(bào)錯(cuò))
7.SQL> alter database datafile 5 offline;
8.SQL> alter database create datafile '/oracle/app/oradata/TEST/tbs_recover.dbf';
(創(chuàng)建出表空間)
9.SQL> alter database datafile 5 online;(報(bào)錯(cuò))
SQL> recover datafile 5;
AUTO
10.SQL> alter database datafile 5 online;(成功)
? ?SQL> select * from tab_recover;(數(shù)據(jù)回來了)
=============================================
不完全數(shù)據(jù)庫恢復(fù)
日志挖掘技術(shù)確定誤操作時(shí)間與scn
查看當(dāng)前時(shí)間
alter database begin backup;
cp *.dbf /home/oracle/db_bak
alter database end backup;
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual; ?2012-04-24 07:20:34
SQL> drop table tab_recover;
1.日志挖掘技術(shù),確定誤刪除表的時(shí)間
[oracle@sq123 ~]$ mkdir logminer
存儲目錄
SQL> alter system set utl_file_dir='/home/oracle/logminer' scope=spfile;
SQL> shutdown immediate
SQL> startup
2.創(chuàng)建存儲數(shù)據(jù)字典文件的文件
SQL> execute dbms_logmnr_d.build('shwdict.ora','/home/oracle/logminer');
cd /home/oracle/logminer/
3.
SQL> execute dbms_logmnr.add_logfile('/oracel/app/oradtaa/TEST/',dbms_logmnr.new);
4.挖掘數(shù)據(jù)
SQL> exec dbms_logmnr.start_logmnr (dictfilename=>'/home/oracle/logminer/shwdict.ora');
5.
SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
SQL> select SCN,TIMESTAMP,SQL_REDO from v$LOGMNR_CONTENTS where SQL_REDO like '%drop%';
結(jié)果:
? ? 716922 2012-03-12 06:12:38
drop table tab_recover AS "BIN$uv7sdpUIi1TgQAB/AQByfw==$0" ;
恢復(fù)數(shù)據(jù)
6.
SQL> shutdown abort;
SQL> startup mount
[oracle@sq123 db_bak]$ cp *.dbf /oracle/app/oradata/TEST/
SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
7.
SQL> recover database until time '2012-04-24 07:20:34';
SQL> alter database open resetlogs;
8.
SQL> conn sys/123456 as sysdba
SQL> select count(*) from tab_recover; (數(shù)據(jù)恢復(fù)出來了)
=============================================
日志文件恢復(fù)
1.[oracle@sq orcl]$ rm *.log
? SQL> startup force(報(bào)錯(cuò))
2.SQL> alter database open resetlogs;(報(bào)錯(cuò))
3.SQL> recover database until cancel;
(執(zhí)行RECOVER命令,在提示輸入歸檔日志時(shí),應(yīng)用這些歸檔日志提示輸入歸檔日志序列號時(shí),不輸入這個(gè)文件的名稱或者不接受建議的名稱,而是輸入CANCEL)
(恢復(fù)不能成功,因?yàn)槲覀儧]有歸檔日志了)
4.添加隱藏參數(shù)
SQL> alter system set "_allow_resetlogs_corruption"=true scope=spfile;
(強(qiáng)制啟動數(shù)據(jù)庫,設(shè)置此參數(shù)之后,在數(shù)據(jù)庫Open過程中,Oracle會跳過某些一致性檢查,從而使數(shù)據(jù)庫可能跳過不一致狀態(tài),Open打開)
5.SQL> startup force
? SQL> alter database open resetlogs;
? (可以啟動,但是剛才沒有同步到硬盤的數(shù)據(jù)丟失了)
--后續(xù)操作
SQL> create pfile from spfile
然后vi pfile文件?
刪除 *._allow_resetlogs_corruption
SQL> create spfile from pfile;
SQL> startup force
===============================================
轉(zhuǎn)載于:https://blog.51cto.com/chenjisong/1737391
總結(jié)
- 上一篇: 链表常见面试题二:约瑟夫环
- 下一篇: mysql源代码安装