--备份原理
主要备份一下3类文件
1.datafile
select * from dba_data_files --数据文件位置
2.controlfile
select * from v$controlfile --控制文件位置
3.redo
select * from v$logfile --日志文件位置
select * from v$archived_log
--开启归档模式
S1 shutdown immediate;
s2 startup mount
s3 alter database archivelog
s4 alter database open
select name,log_mode from v$database; --查看归档模式
SQL> archive log list;
数据库日志模式 非存档模式
自动存档 禁用
存档终点 USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列 70
当前日志序列 72
归档模式只有一种模式
非归档模式
1.完全脱机备份
s1 shutdown immediate
s2 copy datafile controlfile redo
s3 startup
scn: system change number --oracle 内部逻辑时钟
select dbms_flashback.get_system_change_number from dual;--查询当前scn,每个3秒变一次
select * from v$datafile
FILE# CREATION_CHANGE# CREATION_TIME TS# RFILE# STATUS ENABLED CHECKPOINT_CHANGE# CHECKPOINT_TIME UNRECOVERABLE_CHANGE# UNRECOVERABLE_TIME LAST_CHANGE# LAST_TIME OFFLINE_CHANGE# ONLINE_CHANGE# ONLINE_TIME BYTES BLOCKS CREATE_BYTES BLOCK_SIZE NAME PLUGGED_IN BLOCK1_OFFSET AUX_NAME FIRST_NONLOGGED_SCN FIRST_NONLOGGED_TIME
1 1 8 2013-7-22 12:50:13 0 1 SYSTEM READ WRITE 1473005 2013-10-2 00:49:08 0 0 0 314572800 38400 314572800 8192 C:\ORADATA\TEST\SYSTEM01.DBF 0 8192 NONE 0
-- 可以看见的最小scn是1号文件的CREATION_CHANGE# 8,以上结果
select current_scn from v$database --也是查询scn 的方法,类似序列,每次查都不一样
select dbms_flashback.get_system_change_number,current_scn from v$database; --一起查就一直一样
SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------------
1 1 70 52428800 1 NO INACTIVE 1415541 30-9月 -13
2 1 71 52428800 1 NO INACTIVE 1446572 01-10月-13
3 1 72 52428800 1 NO CURRENT 1472435 02-10月-13 --当前信息放在日志文件的第三组里,REDO03.LOG
select * from dba_tablespaces
create table t (id int,scn number) tablespace users;
insert into t values(1,dbms_flashback.get_system_change_number);
alter session set nls_date_format='yyyy/mm/dd hh24:mi:ss';
SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME --FIRST_CHANGE#
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- -------------------
1 1 70 52428800 1 NO INACTIVE 1415541 2013/09/30 22:56:45
2 1 71 52428800 1 NO INACTIVE 1446572 2013/10/01 18:36:32
3 1 72 52428800 1 NO CURRENT 1472435 2013/10/02 00:36:43
alter system switch logfile; --手动归档
SQL> select * from v$log; --归档后
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- -------------------
1 1 73 52428800 1 NO ACTIVE 1475700 2013/10/02 01:13:40
2 1 74 52428800 1 NO CURRENT 1475722 2013/10/02 01:14:10
3 1 72 52428800 1 NO ACTIVE 1472435 2013/10/02 00:36:43
--数据文件损坏,copy回第一个数据文件,需要进行介质恢复
SQL> select file#,checkpoint_change# from v$datafile; --信息来源于控制文件
FILE# CHECKPOINT_CHANGE#
---------- ------------------
1 1523942
2 1523942
3 1523942
4 1523942
5 1523942
6 1523942
7 1523942
8 1523942
9 1523942
10 1523942
11 1523942
SQL> select file#,checkpoint_change# from v$datafile_header; --完全来源于每个数据文件的文件头
FILE# CHECKPOINT_CHANGE#
---------- ------------------
1 1473004 --目前只copy回来1号文件,只有1号文件存在
2 0
3 0
4 0
5 0
6 0
7 0
8 0
9 0
10 0
11 0
--以上两个视图会横向对比每个数据文件的CHECKPOINT_CHANGE#是否一致,oracle open的必要条件就是两个视图CHECKPOINT_CHANGE#一致,不一致
select sequence#,first_change#,first_time,next_change#,next_time from v$archived_log where first_change#<=1473004 and next_change#>=1473004
select * from v$log
select * from dba_data_files
1524379
select sequence#,first_change#,first_time,next_change#,next_time from v$archived_log where first_change#<=1524379 and next_change#>=1524379
recover database --把所有数据文件拷贝回来,一并进行介质恢复,数据恢复的起点在数据文件头中记录,数据恢复的重点在控制文件的视图里记录
recover database utill cancel --数据恢复进行到archive日志的最后,而不是数据恢复的终点(记录在控制文件视图中),
--没归档的记录在log里,用recover database utill cancel恢复会提示最后一个归档日志找不到路径,因为最后操作的记录记录在log中,还没有归档,也就没有生成对应的归档日志,所以就找不到系统路径
--可以在最后一步直接写上重做日志的路径,enter 同样能恢复
shutdown immediate --用recover database utill cancel 最后alter database open不能成功,暂时不管,删除数据文件用 recover database重新恢复
alter database open resetlogs; --会重建重做日志,日志序列号从0开始
--打开数据库一下两个视图scn一致了,数据库恢复完成。v$datafile_header中scn加2,v$datafile加1
select file#,checkpoint_change# from v$datafile_header;
select file#,checkpoint_change# from v$datafile;
SQL> archive log list;
数据库日志模式 存档模式
自动存档 启用
存档终点 USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列 90
下一个存档日志序列 92
当前日志序列 92
show parameter log_arch
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_duplex_dest string
log_archive_format string ARC%S_%R.%T ---R
log_archive_local_first boolean TRUE
log_archive_max_processes integer 2
log_archive_min_succeed_dest integer 1
log_archive_start boolean FALSE
log_archive_trace integer 0
select * from v$archived_log --如果不alter database open resetlogs,生成的归档日志会重名,oracle不允许,所有要用alter database open resetlogs重建重做日志
备份原理
最新推荐文章于 2021-08-28 11:02:24 发布