1、冷備份:
當數據庫的全部可讀寫的物理文件具備相同的系統改變號(SCN)時進行的備份,這個狀態的惟一方法是數據庫正常關閉,
因此也叫一致性備份。使用於歸檔和非歸檔模式;
優勢:快速簡單(拷貝);容易恢復到備份的時間點上;低度維護高度安全
缺點:備份時數據庫必須關閉;一致性還原只能恢復到備份時間點;
備份步驟:
1.查看數據庫物理文件的位置(數據,控制,日誌,參數)文件
SELECT file_id,online_status,tablespace_name, file_name FROM dba_data_files;
SELECT file#,status,NAME FROM v$datafile;
SELECT * FROM v$controlfile;
SELECT * FROM v$logfile;
show parameter spfile;
2.正常關閉數據庫
shutdown immediate;
拷貝各個文件到備份路徑;
dos:
copy C:\oracle\product\10.2.0\oradata\orcldb\*.log C:\orabackup\back0319\*
copy C:\oracle\product\10.2.0\oradata\orcldb\*.dbf C:\orabackup\back0319\* --查詢默認不包括TEMP01表空間
copy C:\oracle\product\10.2.0\oradata\orcldb\*.ctl C:\orabackup\back0319\*
copy C:\oracle\product\10.2.0\db_1\database\SPFILEORCLDB.ORA C:\orabackup\back0319\spfile\*
linux:
cp /u01/app/oracle/oradata/ipemsdb/datafile/* /u01/app/ipemsdb_back/datafiles/
cp /u01/app/ipemsdb_back/redologs/o1_mf_3_7p5b35yp_.log /u01/app/oracle/oradata/ipemsdb/onlinelog/
cp /u01/app/ipemsdb_back/controlfiles/o1_mf_7p5b2y0c_.ctl /u01/app/oracle/flash_recovery_area/ipemsdb/controlfile/
3.備份實驗
無spfile文件時的錯誤:
SYS@ orcldb >startup
ORA-01078: failure in processing system parameters
ORA-01565: error in identifying file 'C:\oracle\product\10.2.0\db_1/dbs/spfileorcldb.ora'
ORA-27041: unable to open file
OSD-04002: ????????????
O/S-Error: (OS 2) ??????????????????????
缺失數據文件:
數據庫裝載完畢。
ORA-01157: 沒法標識/鎖定數據文件 4 - 請參閱 DBWR 跟蹤文件
ORA-01110: 數據文件 4: 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCLDB\USERS01.DBF'
數據庫啓動到monted狀態
缺失控制文件和數據文件
ORA-00205: ?????????, ??????, ???????
數據庫started狀態
缺失日誌文件
數據庫裝載完畢。
ORA-00313: 沒法打開日誌組 1 (用於線程 1) 的成員
ORA-00312: 聯機日誌 1 線程 1:
'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCLDB\REDO01.LOG'
注:1.確認好各個物理文件包括個數,名稱,大小,位置等,恢復時要徹底按照原來路徑進行
2.temp01數據文件及temp表空間不在恢復查詢中
實驗:
create table test1(a int);
insert into test1 values (1);
commit;
shutdown immediate;
--備份數據庫(controlfile,datafile,logfile,spfile)
startup
insert into test1 values (2);
commit;
shutdown immediate;
--刪除數據庫物理文件
startup --啓動報錯,狀態爲nomount
--恢復物理文件
alter database open;
select * from test1;--1
ORA-38760: 此數據庫實例沒法啓用閃回數據庫:alter database flashback off;
注:正常關閉數據庫,拷貝備份(datafile,controlfile,logfile,spfile),還原備份,啓動數據庫;整個過程不涉及對日誌的操做。 linux
2、熱備份:
針對7*24數據庫只能用熱備,數據庫的物理文件SCN號處於不一致狀態下進行備份;主要是控制文件和系統數據文件SCN不一致,
只使用於archivelog模式,(只備份數據文件和控制文件)。
優勢:可在表空間,數據文件級別備份;備份時數據庫仍可用;可達到秒級恢復;
缺點:不能出錯不然備份不可用;方法複雜難維護
一、備份步驟:
alter system archive log current;--是歸檔當前的重作日誌文件,無論自動歸檔有沒有打開都歸檔。
alter tablespace system begin backup;--開始
--複製備份表空間文件
alter tablespace system end backup;--結束
--整庫備份時先備份system表空間,再依次備份其餘的表空間
alter database backup controlfile to 'orabackup\controlfile.bak';--在線備份控制文件,經過它開庫前須要利用舊控制文件恢復
alter database backup controlfile to trace as '';--生成udump目錄下控制文件從新生成腳本
alter system archive log current;--對當前的重作日誌進行歸檔
二、備份恢復實驗:
--2.一、非system表空間數據文件損壞恢復
archive log list;
create table test2(b int) tablespace users;
insert into test2 values (1);
commit;
--熱備份users表空間
insert into test2 values (2);
commit;
alter system switch logfile;--是強制日誌切換,不必定就歸檔當前的重作日誌文件(若自動歸檔打開,就歸檔前的重作日
--志,若自動歸檔沒有打開,就不歸檔當前重作日誌。)
shutdown immediate;
--刪掉users表空間對應的數據文件
startup;--啓動時報錯,數據庫狀態爲mounted
select * from v$recover_file;--查待恢復文件
alter database datafile 4 offline drop;--文件脫機
alter database open;--打開數據庫
--拷回數據文件
recover datafile 4;--恢復4號文件
alter database datafile 4 online;
select * from test2;
--非system表空間數據文件損壞無備份恢復
alter tablespace users add datafile 'C:\oracle\product\10.2.0\oradata\orcldb\users02.dbf' size 10M;
create table test3 tablespace users as select * from dba_objects where 1=2;
alter table test3 allocate EXTENT (size 5M datafile 'C:\oracle\product\10.2.0\oradata\orcldb\users02.dbf');
select extent_id,file_id,block_id,blocks from dba_extents where segment_name = 'TEST3';
insert into test3 select * from dba_objects;
commit;
--刪掉test3表所在的數據文件
alter system checkpoint;
select count(1) from test3;
--系統報錯
alter database datafile 'C:\oracle\product\10.2.0\oradata\orcldb\users02.dbf' offline;
--要求該數據文件建立的比控制文件建立的晚
alter database create datafile 'C:\oracle\product\10.2.0\oradata\orcldb\users02.dbf';
recover datafile 14;
alter database datafile 'C:\oracle\product\10.2.0\oradata\orcldb\users02.dbf' online;
select count(1) from test3;
--system表空間對應的數據文件,或大量數據文件受損恢復
alter system archive log current;--對當前的重作日誌進行歸檔
alter tablespace system begin backup;--開始
--複製備份表空間文件
alter tablespace system end backup;--結束
shutdown immediate;
--刪除system表空間數據文件
startup;
--拷回表空間備份
recover database;
alter database open;
--至關於全庫數據文件備份恢復
--不徹底恢復
--基於時間time的恢復:能夠將數據庫恢復到過去的某個時間點,用戶誤刪的表恢復,備用機器上恢復後,導給正式服務器
create table test4(a int) tablespace users;
insert into test4 values (1);
commit;
alter system archive log current;
--須要備份除temp外全部表空間的數據文件,由於不徹底恢復須要將全部表空間都恢復到過去的同一個時間點,備
--份時表空間要一個一個的備份
insert into test4 values (2);
commit;
alter system switch logfile;
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
drop table test4;
create table test5 (b int);
insert into test5 values (1);
commit;
alter system archive log current;
shutdown immediate;
--用備份的數據文件替換當前數據文件(全部)
startup mount;
recover database until time '2015-03-22 14:18:37';
alter database open resetlogs;
select * from test4;
select * from test5;
--恢復到時間點後,以後的操做都沒了
--基於SCN的恢復:能夠將數據庫恢復到過去的某個SCN,用戶誤刪的表恢復,備用機器上恢復後,導給正式服務器
create table test4(a int) tablespace users;
insert into test4 values (1);
commit;
alter system archive log current;
--須要備份除temp外全部表空間的數據文件,由於不徹底恢復須要將全部表空間都恢復到過去的同一個時間點,備
--份時表空間要一個一個的備份
insert into test4 values (2);
commit;
alter system switch logfile;
select crrent_scn from v$databae;
drop table test4;
create table test5 (b int);
insert into test5 values (1);
commit;
alter system archive log current;
shutdown immediate;
--用備份的數據文件替換當前數據文件(全部)
startup mount;
recover database until change 800124;
alter database open resetlogs;
select * from test4;
select * from test5;
--回滾數據文件恢復
show parameter undo
shutdown immediate;
--刪掉undntbs01.dbf
startup;--ORA-01110: 數據文件 2: 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCLDB\UNDOTBS01.DBF'
alter system set undo_management=manual scope = spfile;
shutdown immediate;
startup mount;
alter database datafile 'C:\oracle\product\10.2.0\oradata\orcldb\UNDOTBS01.DBF' offline drop;
alter database open;
drop tablespace undotbs1;
create undo tablespace undotbs1 datafile 'C:\oracle\product\10.2.0\oradata\orcldb\UNDOTBS01.DBF' size 50M autoextend on next 1M maxsize 1024M;
alter system set undo_management=auto scope = spfile;
shutdown immediate;
startup;
--臨時表空間恢復
--10g後刪掉temp01.dbf後數據庫open時會自動重建
shutdown immediate;
--刪掉temp01.dbf
startup;
--9i的恢復方法
startup mount;
alter database datafiel 'C:\oracle\product\10.2.0\oradata\orcldb\temp01.DBF' offline drop;
alter database open;
drop tablespace temp;
create temporary tablespace temp datafile 'C:\oracle\product\10.2.0\oradata\orcldb\temp01.DBF' size 20M autoextend off;
shutdown immediate;
startup;
--控制文件損壞後恢復
--單個控制文件損壞後恢復
shutdown immediate;
--刪掉control01.ctl文件
startup;
--將control02.ctl拷貝一份命名爲control01.ctl
alter database mount;
alter database open;
--減小控制文件,修改pfile中控制文件,從pfile啓動數據庫
startup open pfile = 'C:\oracle\product\10.2.0\db_1\database\initorcldb.ora';
select name from v$controlfile;
--多個控制文件被損壞恢復
--找到最近的udmp目錄下的trc文件,用其中語句重建控制文件
alter database backup controlfile to trace;
--刪掉控制文件
startup;
CREATE CONTROLFILE DATABASE "ORCLDB" NORESETLOGS
LOGFILE
GROUP 1 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCLDB\REDO01.LOG' SIZE 50M,
GROUP 2 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCLDB\REDO02.LOG' SIZE 50M,
GROUP 3 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCLDB\REDO03.LOG' SIZE 50M
-- STANDBY LOGFILE
DATAFILE
'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCLDB\SYSTEM01.DBF',
'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCLDB\UNDOTBS01.DBF',
'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCLDB\SYSAUX01.DBF',
'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCLDB\USERS01.DBF',
'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCLDB\EXAMPLE01.DBF',
'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCLDB\USERS101.DBF',
'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCLDB\USERS102.DBF',
'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCLDB\USERS02.DBF'
CHARACTER SET ZHS16GBK
;
alter database open; -- NORESETLOGS 若是是 RESETLOGS alter database open resetlogs;
--當控制文件的命名開啓了OMF時,利用trace文件重建控制文件會報ORA-01503: CREATE CONTROLFILE failed ORA-01276: Cannot add file
--錯誤,須要註釋掉pfile中的控制文件配置,重建後控制文件回到最初配置位置sql
--日誌文件損壞恢復
--正常關機狀況非當前聯機日誌文件損壞
insert into test5 values (123);
commit;
select * from v$log;
--刪掉inactive狀態的日誌
startup;--ORA-00313: 沒法打開日誌組 3 (用於線程 1) 的成員
select * from v$log;
alter database clear logfile group 1;--歸檔模式,從新生成日誌文件
alter database clear unarchived logfile group 1;--非歸檔模式
alter database open;
select * from test5;
--正常關機狀況下當前聯機current(或全部)日誌文件損壞
insert into test5 values (10);
commit;
shutdown immediate;
startup;--
select * from v$log;
recover database until cancel;
alter database open resetlogs;
select * from test5;
--運行時或非正常關閉狀況下已歸檔active日誌被損壞
insert into test5 values (234);
commit;
alter system switch logfile;
select * from v$log;
shutdown abort;
--刪掉active日誌
startup
recover database until cancel;
--默認執行
--輸入當前日誌文件路徑
alter database open resetlogs;
select * from test5;數據庫
3、閃回
閃回flashback:將數據庫恢復到過去的某個時間點或SCN點的狀態包括,行級,表級,庫級閃回
1.開啓,關閉閃回
2.行級閃回
show parameter undo;--查看閃回設置
alter system set undo_management = auto;--手動管理閃回功能失效
alter system set undo_retention = 86400;--閃回時長
grant connect,resource to scott;
grant execute on dbms_flashback to scott;
grant select any transaction to scott;
--scott登錄後對錶中數據進行增,改,刪處理並提交
select versions_startscn,versions_endscn,versions_xid,versions_operation,a from test1 versions between timestamp minvalue and maxvalue;
--查詢閃回查詢表的時間點
select operation,undo_sql from flashback_transaction_query where xid = '02001C00C8070000';
--查詢閃回交易號(事物爲單位)對應的sql語句
select * from test1 as of scn 3429232;
--scn狀態時表中的數據
alter table test1 enable row movement;--須要對被刪行從新分配rowid
flashback table test1 to scn 3429248;
第 1 行出現錯誤:
ORA-00604: 遞歸 SQL 級別 1 出現錯誤
ORA-25153: 臨時表空間爲空
select tablespace_name,file_name from dba_temp_files;
alter tablespace temp add tempfile 'C:\oracle\product\10.2.0\oradata\orcldb\testtemp.DBF' size 100M autoextend on;
--應該是臨時表空間恢復的時候沒有值特殊指定
flashback table test1 to timestamp to_timestamp('','');
--行級閃回,當前時間到閃回時間點以前不能有DDL操做,不然閃回失敗,sys用戶的表不支持閃回
3.表級閃回
create tablespace yy datafile 'C:\oracle\product\10.2.0\oradata\orcldb\yy01.dbf' size 8m;
create table yy1 tablespace yy as select * from dba_objects;
select sum(bytes) from dba_extents where segment_name = 'YY1';
select bytes from dba_free_space where tablespace_name = 'YY';
drop table yy1;
alter database datafile 'C:\oracle\product\10.2.0\oradata\orcldb\yy01.dbf' resize 5m; --報錯
SYS@ orcldb >alter database datafile 'C:\oracle\product\10.2.0\oradata\orcldb\y
y01.dbf' resize 5m;
alter database datafile 'C:\oracle\product\10.2.0\oradata\orcldb\yy01.dbf' resi
ze 5m
*
第 1 行出現錯誤:
ORA-03297: 文件包含在請求的 RESIZE 值之外使用的數據
show recyclebin
flashback table yy1 to before drop;
select * from yy1;
drop table yy1 purge;
purge table yy1;
purge recyclebin;
alter database datafile 'C:\oracle\product\10.2.0\oradata\orcldb\yy01.dbf' resize 5m;
drop tablespace yy including contents and datafiles;
create tablespace yy datafile 'C:\oracle\product\10.2.0\oradata\orcldb\yy01.dbf' size 8m;
create table yy1 tablespace yy as select * from dba_objects;
select sum(bytes) from dba_extents where segment_name = 'YY1';
select bytes from dba_free_space where tablespace_name = 'YY';
drop table yy1;
show recyclebin
create table yy2 tablespace yy as select * from dba_objects;
show recyclebin --已被清空
drop table yy1 purge;
flashback table yy1 to before drop;
--drop table後表空間未自動釋放(drop table purge),直到表空間中無空閒空間的時候才按FIFO順序清空recyclebin中的表,釋放空間,
--system表空間被drop的表刪除後不進入recyclebin中
create table zz (a int) tablespace yy;
insert into zz values (11);
drop table zz;
create table zz (a int) tablespace yy;
insert into zz values (22);
drop table zz;
create table zz (a int) tablespace yy;
insert into zz values (33);
drop table zz;
show recyclebin
flashback tables zz to before drop;
select * from zz;--33
flashback table zz to before drop rename to zzz;
select * from zzz;
flashback table zz to before drop rename to zzzz;
select * from zzzz;
--在表空間充足的狀況下屢次drop表後,按照FILO順序進行恢復安全
4.庫級閃回
show parameter db_recovery_file_dest;--查看閃回數據保存位置
show parameter db_recovery_file_dest_size;--默認2G
show parameter db_flashback_retention_target;--閃回數據保存的時間
select file_type,number_of_files,percent_space_used,percent_space_reclaimable from v$flash_recovery_area_usage;
--查詢閃回區使用狀況
shutdown immediate;
startup mount;
alter database archivelog;--啓用歸檔模式
alter database flashback on;--啓用庫級閃回
alter database open;
select name,log_mode,flashback_on from v$database;
--rvwr進行
alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss';
select * from v$flashback_database_log;--查詢當前閃回狀況
--閃回到時間點
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
drop table test1;
select to_char(oldest_flashback_time,'yyyy-mm-dd hh24:mi:ss') from v$flashback_database_log;--最先可用的閃回時間
shutdown immediate;
startup mount;
flashback database to timestamp to_date('2015-03-24 16:42:05','yyyy-mm-dd hh24:mi:ss');
alter database open resetlogs;
select * from test1;
--閃回到SCN
select current_scn from v$database;
truncate table test1;
select oldest_flashback_scn from v$flashback_database_log;
shutdown immediate;
startup mount;
flashback database to scn 3431724;
alter database open resetlogs;
select * from test1;
--閃回期間不能有恢復重建控制文件,刪除表空間,收縮數據文件操做
2、LogMiner日誌分析
--logMiner:分析數據庫二進制日誌文件,分析出操做的執行時間點和SCN
alter database add supplemental log data;--啓用加強信息記錄
execute dbms_logmnr_d.build(options=>dbms_logmnr_d.store_in_redo_logs);--配置logminer運行環境
exit--從新登陸使得配置生效
create table TEST2 (a int);
insert into TEST2 values (1);
commit;
select * from v$log;
execute dbms_logmnr.add_logfile(logfilename=>'C:\oracle\product\10.2.0\oradata\orcldb\REDO03.LOG',options=>dbms_logmnr.new);--創建日誌分析列表,添加分析日誌
execute dbms_logmnr.add_logfile(logfilename=>'C:\oracle\product\10.2.0\oradata\orcldb\REDO02.LOG',options=>dbms_logmnr.addfile);--添加歸檔文件
execute dbms_logmnr.add_logfile(logfilename=>'C:\oracle\product\10.2.0\oradata\orcldb\REDO02.LOG',options=>dbms_logmnr.removefile);--刪除歸檔文件
execute dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog);--啓動日誌分析
select username,to_char(timestamp,'yyyy-mm-dd hh24:mi:ss'),sql_redo from v$logmnr_contents where table_name = 'TEST1';
--查看分析結果
execute dbms_logmnr.end_logmnr;
ora-38760 :此數據庫沒法啓用閃回數據庫,問題處理
select flashback_on from v$database;
show parameter flash
show parameter control
show parameter recovery
alter database flashback off;
alter database open;
刪掉數據文件:
使用offline數據文件的方法
非歸檔模式使用:alter database datafile '...' offline drop;
歸檔模式使用: alter database datafile '...' offline;
10g能夠經過如下命令來刪除一個空的數據文件
Alter tablespace USERS drop datafile 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCLDB\USERS02.DBF';
select file_id,file_name,tablespace_name from dba_data_files
select SEGMENT_NAME,FILE_ID,BLOCKS from dba_extents where file_id=8;
服務器