1.手工备份
2.rman
3.异构平台exp
4.相同平台数据迁移
主机 存储 都换
主机 不换,换存储
存储不换,换主机 直接挂上去
5.dul强行打开
ora-00060 死锁,
alert.log 里面有子trace,里面有sql
数据库瘫痪
1.db起不来 ①.nomount起不来: 参数文件,内核参数;
②.mount 起不来: 存储mount (df -g), 控制文件 cp ,都坏了create
③.open 某文件需要recover,做实例恢复
如果半小时没 打开,可能是redo,或undo损坏
ipcs 共享内存段 shmmax>=sga 没回收
如果遇到文件需要恢复:不要立刻恢复, 有两种
redo: 每组redo2个成员,最少3组,放到raid10上 v$logfile
current :当前正在往redo里面写的
active:所有脏数据还没写到,数据文件中
checkpoint检测的是数据文件
inactive :可以删掉,使用过的
unused:未被使用过的,一般是刚建库时
当前redo不能归档,如果存储丢了,就会丢数据
dataguard:只能备份归档
2.改归档:
归档之前一定要把数据库关掉
监听停掉
kill -9 ' ps -ef|grep local=no|awk '{print $2}' ' 杀掉所有不是本地连接
shutdown immediate
log_archive_dest_1=location=/oracle/arch'
log_archive_start=true --10g之前必须改为true 自动备份,否则是手动,会导致经常挂起
log_archive_format=dbname_%T_%S
步骤:
mount状态:alert database noarchivelog/archivelog;--改为非归档/归档
alter system set log_archive_dest_1='location=/oradata/arch/' scope=spfile; 路径
alter system set log_archive_format='arch_%s_%t_%r' scope=spfile; 格式
show parameters log_archive_start
alert system archive log current;切归档,手动归档
归档路径改错了: create pfile ='/tmp/initten' from spfile;
%r 重置标识符
%s sequence
*********************************************************************************************************************
备份中,未结束
alter tablespace zw begin backup;
shutdown abort;
starup
ORA-01113: file 5 needs media recovery
ORA-01110: data file 5: '/oradata/orcl/zw.dbf'
先不要recover
select * from v$backup;
FILE# STATUS CHANGE# TIME
---------- ------------------ ---------- ------------
1 NOT ACTIVE 0
2 NOT ACTIVE 0
3 NOT ACTIVE 0
4 NOT ACTIVE 0
5 ACTIVE 276614 09-JUL-14
有一个active 说明 没有结束;
alter tablespace zw end backup;
alter database open;
2.recover
starup
ORA-01113: file 5 needs media recovery
ORA-01110: data file 5: '/oradata/orcl/zw.dbf'
select * from v$backup;
recover datafile 5;
*************************************************************************************************************************
dba_extents --各个文件存放哪些表
生成控制文件脚本,所有控制文件损坏情况下
alter datbase backup controlfile to trace; noresetlogs; 不完全后恢复 ?????
noresetlogs
resetlogs:redo重新格式化了
alter database backup controlfile to ''
select distinct sid from v$mystat;
select spid from v$process a, v$session b where a.addr=b.paddr and b.sid=160;
select sid from v$process a, v$session b where a.addr=b.paddr and a.spid=5636;
create table aa(id number);
insert into test values(1);
desc dba_tables;
select num_rows from dba_tables where table_name='AA' and owner='SYS';
analyze table aa compute statistics;--分析 很耗资源 记录不超过%10 不分析
select num_rows from dba_tables where table_name='AA' and owner='SYS'; --查操作系统进程
如果某个进程很久不释放,不能alter system kill '' kill -9
cd udump
ls *5636*
**********************************************************************************************************************
全库备份
1. select 'alter tablespace '||tablespace_name||' begin backup;' from dba_tablespaces;
2. cp -r oradata1 oradata
3. select 'alter tablespace '|| tablespace_name ||' end backup ;' from dba_tablespaces;
切归档 alter system archive log current; 全被之后一定要切归档,把当前redo的数据写到归档
/
***********************************************************************************************************************
缺点:redo多,找业务不忙的时候做
参数文件 备不备都行
①.cd bdump
②.直接vi一个
控制文件全坏
备份没?
物理还是逻辑?
备到哪?
数据文件不能跟备份放一个存储
**********************************************************************************************************************
恢复
提交scn:
检查点scn
检测 控制文件
v$archived_log;
select name,first_change#,next_change# from v$archived_log;--查看当前scn,和下一个scn
select file#,checkpoint_change#,last_change# from v$datafile; --数据文件scn号一致 数据库才能正常启动
数据库正常关闭的时候,会把scn写入各个数据文件中
select checkpoint_change# from v$datafile_header;
三个值必须一样: checkpoint=stop=last
完全恢复: 不丢数据 control+redo 不能丢
完全全恢复的三个阶段:
数据库级别:
数据文件级别:
表空间级别:
1.只需要恢复受损的数据文件
2.如果不是system或者undo表空间损坏,那么可以在数据库打开的情况下进行恢复
全库完全恢复
***********************************************************************************************************************
删除system01表空间
1. rm system01.dbf
2. shutdown immediate;关不了
3. shutdown abort;
4. startup 会报错,需要恢复
ORA-01157: cannot identify/lock data file 1 - see DBWR trace file
ORA-01110: data file 1: '/oradata/orcl/system01.dbf'
5.把备份的文件cp过来:cp zw.dbf /oradata/orcl1/
6. alter database open;
ERROR at line 1:
ORA-01113: file 1 needs media recovery
ORA-01110: data file 1: '/oradata/orcl/system01.dbf'
7.查看scn是否一致,如果不一致需要恢复
select checkpoint_change#,last_change# from v$datafile;
select checkpoint_change# from v$datafile_header;
8.恢复
recover database;
auto; --自动恢复
9.启动数据库:alter database open;
**********************************************************************************************************************
删除undo
1. rm undo*
2. shutdown immediate;
3.startup
Database mounted.
ORA-01157: cannot identify/lock data file 2 - see DBWR trace file
ORA-01110: data file 2: '/oradata/orcl/undotbs01.dbf'
4. cp undotbs01.dbf /oradata/orcl
5.alter database open; --它说需要恢复
ERROR at line 1:
ORA-01113: file 2 needs media recovery
ORA-01110: data file 2: '/oradata/orcl/undotbs01.dbf'
6.查看一下版本号
select checkpoint_change#,last_change# from v$datafile;
select checkpoint_change# from v$datafile_header;
CHECKPOINT_CHANGE#
------------------
347676
273890
347676
347676
347676
版本号不一致
7.恢复 recover database;
8.选 auto
9. alter database open; 成功
*********************************************************************************************************************
应用文件损坏: redo和ctl文件不丢失
1. rm zw.dbf
2. shutdown immediate; --报错管不到
SQL> shutdown immeidate
SP2-0717: illegal SHUTDOWN option
3.shutdown abort; --强制关
4.startup --报错
Database mounted.
ORA-01157: cannot identify/lock data file 5 - see DBWR trace file
ORA-01110: data file 5: '/oradata/orcl/zw.dbf'
5.alter database datafile 5 offline; --先把这个文件offline,然后启动数据库,让应用先起来
6. alter database open;
7.cp zw.dbf /oradata/orcl
8.alter database datafile 5 online;
ERROR at line 1:
ORA-01113: file 5 needs media recovery
ORA-01110: data file 5: '/oradata/orcl/zw.dbf'
9.recover datafile 5;
10.alter database datafile 5 online;
********************************************************************************************************************
不要再生产上,找个测试库,恢复之后,再倒入到生产
不完全恢复: 丢数据 control文件 或 redo 丢失
归档如果误删了,立刻作全备
场景: 1.丢失了一个或多个归档,日志文件,
2.对视了redolog,而redolog未归档
3.误删表里的数据,误删了表,truncate
4.控制文件全部丢失,并使用了备份的控制文件进行恢复,
前提:
1.具有所有数据文件的备份
2.备份完成的时间点开始,到恢复时间点之间的归档文件
open resetlogs ;重置redo 10g以前 立刻全备份
*******************************************************************************************************************
控制文件 手工 ,恢复 手工原理:把redo,数据文件的scn生成出来
①手工:
1.生成重建控制文件和修复数据库的脚本,脚本会放在$ORACLE_BASE/admin/sid/udump路径下,其中sid是数据库实例名。
alter database backup controlfile to trace;
2.生成控制文件的镜像拷贝
alter database backup controlfile to '/home/oracle/c.bak' ----引号部分是目录和备份文件名
******************************************************************************************************************
1.rm control*
2.alter database backup controlfile to trace;
3. /u01/app/oracle/diag/rdbms/orcl/orcl/trace/alert_orcl.log
4.startup nomount
5.@/tmp/ctl.sql
6. SQL> select status from v$instance; --查看当前实例状态
7.SQL>alter database open resetlogs;
如果不一致性关闭,需要恢复
recover database;
*****************************************************************************************************************
② .恢复 旧文件恢复
先检查数据文件的scn和控制文件的scn哪个新
recover 更新控制文件跟数据文件一样新
1.rm control*
2.shutdown immediate
SQL> shutdown immediate;
ORA-00210: cannot open the specified control file
ORA-00202: control file: '/oradata/orcl/control01.ctl'
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
3. shutdown abort
4. cp control01.ctl /oradata/orcl
cp control02.ctl /oradata/orcl
cp control03.ctl /oradata/orcl
5.startup
ORA-01122: database file 1 failed verification check
ORA-01110: data file 1: '/oradata/orcl/system01.dbf'
ORA-01207: file is more recent than control file - old control file
6. SQL>alter database mount; --启动数据库到mount状态
select checkpoint_change#,last_change# from v$datafile;
select checkpoint_change# from v$datafile_header;
7. recover database using backup controlfile until cancel ;
auto;
**********************************************************************************************************
SQL> select file#,status from v$datafile;
**************************************************************************************************************
没找到报错
8. recover database using backup controlfile until cancel ;
用redo当归档用
rm redo*
alter database open resetlogs; 重新生成redo文件,归档废了,重新生成 必须全被
2.redo
3. temp
alter database tempfile '' drop ;
alter database temp add tempfile '' size 100M resuse;
4.rm *
ctl文件新,数据文件旧
alter session set nls_date_format='yyyy/mm/dd hh24:mi:ss';
recover database until time '2014/07/09 17:40:00' using backup controlfile;
alter database open resetlogs;