完全脱机备份(冷备份)(noarchivelog | archivelog)
- 优点:安全
- 缺点: OS Copy(生产环境,数据文件较大)
- 缺点:需要shutdown(生产环境,风险较大)
部分脱机备份(表空间tablespace offline,相当于局部的shutdown)
- 缺点:OS Copy - 整个数据文件的拷贝,没有解析出有效数据
- 有些表空间无法offline - system, undo
SQL> alter tablespace system offline;
alter tablespace system offline
*
ERROR at line 1:
ORA-01541: system tablespace cannot be brought offline; shut down if necessary
SQL> alter tablespace UNDOTBS1 offline;
alter tablespace UNDOTBS1 offline
*
ERROR at line 1:
ORA-30042: Cannot offline the undo tablespace
- offilne + copy + online
SQL> alter tablespace SYSAUX offline;
Tablespace altered.
SQL> alter tablespace SYSAUX online;
Tablespace altered.
- 案例:损坏sample数据文件
-- 插入系列数据到指定tablespace,之后offile指定tablespace
SQL> alter tablespace "sample" offline;
Tablespace altered.
-- ========== 删除 指定tablespace==========
-- online指定tablespace,会报错:无法锁定
SQL> alter tablespace "sample" online;
alter tablespace "sample" online
*
ERROR at line 1:
ORA-01157: cannot identify/lock data file 5 - see DBWR trace file
ORA-01110: data file 5: 'E:\ORACLE\WPENG\WPENG\SAMPLE.DBF'
-- 此时数据库显示open状态,没有shutdown
SQL> select status from v$instance;
STATUS
------------
OPEN
-- ======== copy恢复之前的备份tablespace =======
-- 再次online 指定tablespace,报错:需要介质恢复(数据文件和控制文件的scn不相符)
SQL> alter tablespace "sample" online;
alter tablespace "sample" online
*
ERROR at line 1:
ORA-01113: file 5 needs media recovery
ORA-01110: data file 5: 'E:\ORACLE\WPENG\WPENG\SAMPLE.DBF'
-- 控制文件 和 数据文件头的 SCN 不符
SQL> select file#, checkpoint_change# from v$datafile where file# = 5;
FILE# CHECKPOINT_CHANGE#
---------- ------------------
5 2798236
SQL> select file#, checkpoint_change# from v$datafile_header where file# = 5;
FILE# CHECKPOINT_CHANGE#
---------- ------------------
5 0
-- 进行recover 恢复 datafile 5
SQL> recover datafile 5;
ORA-00279: change 2798091 generated at 09/29/2012 09:13:56 needed for thread 1
ORA-00289: suggestion : E:\APP\WPENG\PRODUCT\11.1.0\FLASH_RECOVER_AREA\WPENG\ARCHIVELOG\2012_09_29\O1_MF_1_127_86DLZ4TD_
.ARC
ORA-00280: change 2798091 for thread 1 is in sequence #127
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
auto
Log applied.
Media recovery complete.
-- 第三次online datafile 5,成功
SQL> alter tablespace "sample" online;
Tablespace altered.
-- 查看控制文件和数据文件头的SCN
SQL> select file#, checkpoint_change# from v$datafile where file# = 5;
FILE# CHECKPOINT_CHANGE#
---------- ------------------
5 2798388
SQL> select file#, checkpoint_change# from v$datafile_header where file# = 5;
FILE# CHECKPOINT_CHANGE#
---------- ------------------
5 2798388
- 哪个数据文件坏了,可以offline哪个
SQL> alter database datafile 5 offline;
Database altered.
SQL> alter database datafile 5 online;
alter database datafile 5 online
*
ERROR at line 1:
ORA-01113: file 5 needs media recovery
ORA-01110: data file 5: 'E:\ORACLE\WPENG\WPENG\SAMPLE.DBF'
SQL> recover datafile 5;
Media recovery complete.
SQL> alter database datafile 5 online;
Database altered.
- 非归档模式,表空间是不可以offline的
部分联机备份(热备份)
- 不需要shutdown + 不需要offline
- 记录数据恢复的起点SCN,就是数据文件头的checkpoint_change#
SQL> alter tablespace USERS begin backup;
表空间已更改。
-- 记录数据库恢复的起点
SQL> select file#, checkpoint_change# from v$datafile_header;
FILE# CHECKPOINT_CHANGE#
---------- ------------------
1 1177691
2 1164232
3 1164232
4 1177920
SQL> select * from v$backup;
FILE# STATUS CHANGE# TIME
---------- ------------------ ---------- --------------
1 NOT ACTIVE 1177691 12-10月-12
2 NOT ACTIVE 0
3 NOT ACTIVE 0
4 ACTIVE 1177920 12-10月-12
--========COPY需要备份的数据文件==========
SQL> alter tablespace USERS end backup;
表空间已更改。
--==========RECOVER的时候,会从记录的BEGIN处开始恢复
SQL> recover datafile 4
ORA-00279: 更改 1177920 (在 10/12/2012 14:00:48 生成) 对于线程 1 是必需的
ORA-00289: 建议:
C:\APP\WPENG\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2012_10_12\O1_MF_1_29_87HDP56C_
.ARC
ORA-00280: 更改 1177920 (用于线程 1) 在序列 #29 中
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
- 缺点:仅仅只是记录数据头的checkpoint_change#,但是数据文件其他部分会发生变化
- 操作系统的块大小:512 bytes;数据库系统的块大小:8K(16个操作系统块)。我们备份copy的时候(512 bytes),数据库系统可能会修改数据块(8K)。 备份出去的文件是正确的;但是对于数据库逻辑上,可能是不一致的,导致不可用的情况发生。
- Oracle规定:凡事数据文件处于热备份模式下,有进程操作这个数据文件上的数据块 - Oracle会首先对这个数据块进行备份,以日志的形式进行备份。
- 处于热备份的情况,参照上述,那么数据块将会产生多余平常情况下的日志文件 - 而且是多了多!!!
-
SQL> select distinct sid from v$mystat;
SID
----------
47
SQL> select STATISTIC#, NAME from v$statname where name = 'redo size';
STATISTIC# NAME
---------- ------------------------------------------------------------
169 redo size
SQL> select * from v$mystat where sid=47 and statistic#=169;
SID STATISTIC# VALUE
---------- ---------- ----------
47 169 0
SQL> select *from t;
ID SCN
---------- ----------
11 1178189
12 1178215
13 1178223
14 1178238
15 1178252
SQL> select * from v$mystat where sid=47 and statistic#=169;
SID STATISTIC# VALUE
---------- ---------- ----------
47 169 116
SQL> insert into t values(1,1);
已创建 1 行。
SQL> select * from v$mystat where sid=47 and statistic#=169;
SID STATISTIC# VALUE
---------- ---------- ----------
47 169 116
SQL> commit;
提交完成。
SQL> select * from v$mystat where sid=47 and statistic#=169;
SID STATISTIC# VALUE
---------- ---------- ----------
47 169 612
SQL> alter tablespace USERS begin backup;
表空间已更改。
SQL> select * from v$mystat where sid=47 and statistic#=169;
SID STATISTIC# VALUE
---------- ---------- ----------
47 169 1328
SQL> insert into t values(1,1);
已创建 1 行。
SQL> commit;
提交完成。
SQL> select * from v$mystat where sid=47 and statistic#=169;
SID STATISTIC# VALUE
---------- ---------- ----------
47 169 10168
SQL> select 10168-1328 from dual;
10168-1328
----------
8840
SQL> select 612-116 from dual;
612-116
----------
496
SQL> alter tablespace USERS end backup;
表空间已更改。 由此可以看到,同样的SQL语句,执行相同的操作,在热备份模式下数据库的日志文件会增加8840 bytes;而在正常模式下,数据的日志文件仅仅增加496 bytes