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;
服务器