备份原理

--备份原理
主要备份一下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重建重做日志

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值