在10g中,RMAN备份的时候进行了优化,不再备份表释放空间的数据块。
备份的文档看得是9i的,因此一直认为RMAN备份的时候只备份那些写过数据的BLOCK,至于当前BLOCK是否被释放,RMAN并不关系,因此,随着数据文件中的空间不断被占用,RMAN备份集越是趋向越来越大的。
SQL> SELECT * FROM V$VERSION;
BANNER
----------------------------------------------------------------
Oracle9iEnterpriseEdition Release9.2.0.4.0 -Production
PL/SQL Release 9.2.0.4.0 - Production
CORE 9.2.0.3.0 Production
TNS for Linux: Version 9.2.0.4.0 - Production
NLSRTL Version 9.2.0.4.0 - Production
SQL> CREATE TABLESPACE TEST_RMAN
2 DATAFILE '/data/oradata/testdata/test_rman01.dbf'
3 SIZE200M;
表空间已创建。
SQL> CREATE TABLE T_RMAN
2 TABLESPACE TEST_RMAN
3 AS SELECT *
4 FROM DBA_OBJECTS;
表已创建。
SQL> INSERT INTO T_RMAN
2 SELECT *
3 FROM T_RMAN;
已创建31520行。
SQL> INSERT INTO T_RMAN
2 SELECT *
3 FROM T_RMAN;
已创建63040行。
SQL> INSERT INTO T_RMAN
2 SELECT *
3 FROM T_RMAN;
已创建126080行。
SQL> INSERT INTO T_RMAN
2 SELECT *
3 FROM T_RMAN;
已创建252160行。
SQL> INSERT INTO T_RMAN
2 SELECT *
3 FROM T_RMAN;
已创建504320行。
SQL> INSERT INTO T_RMAN
2 SELECT *
3 FROM T_RMAN;
INSERT INTO T_RMAN
*
ERROR位于第1行:
ORA-01653:表TEST.T_RMAN无法通过1024(在表空间TEST_RMAN中)扩展
SQL> COMMIT;
提交完成。
通过RMAN备份当前的表空间:
[oracle@localhost ~]$ rman target /
恢复管理器:版本9.2.0.4.0 - Production
Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved.
连接到目标数据库: TESTDATA (DBID=2270762593)
RMAN> RUN
2> {
3> ALLOCATE CHANNEL C1 DEVICE TYPE DISK FORMAT '/data/backup/testdata/%U';
4> BACKUP TABLESPACE TEST_RMAN;
5> }
分配的通道: C1
通道C1: sid=19 devtype=DISK
启动backup于27-5月-10
通道C1:正在启动full数据文件备份集
通道C1:正在指定备份集中的数据文件
输入数据文件fno=00029 name=/data/oradata/testdata/test_rman01.dbf
通道C1:正在启动段1于27-5月-10
通道C1:已完成段1于27-5月-10
段handle=/data/backup/testdata/5clenfku_1_1 comment=NONE
通道C1:备份集已完成,经过时间:00:00:07
完成backup于27-5月-10
启动Control File and SPFILE Autobackup于27-5月-10
段handle=/data/backup/testdata/20100526_c-2270762593-20100527-01 comment=NONE
完成Control File and SPFILE Autobackup于27-5月-10
释放的通道: C1
RMAN> LIST BACKUP OF TABLESPACE TEST_RMAN;
备份集列表
===================
BS关键字 类型LV大小 设备类型经过时间 完成时间
------- ---- -- ---------- ----------- ------------ ----------
1181 Full 192M DISK 00:00:04 27-5月-10
BP关键字: 1181 状态: AVAILABLE 标记:TAG20100527T094710
段名:/data/backup/testdata/5clenfku_1_1
备份集1181中的数据文件列表
文件LV类型Ckp SCN Ckp时间 名称
---- -- ---- ---------- ---------- ----
29 Full 1112664434776 27-5月-10 /data/oradata/testdata/test_rman01.dbf
下面利用TRUNCATE TABLE,释放表分配的空间:
SQL> TRUNCATE TABLE T_RMAN;
表已截掉。
再次备份将检查大小:
RMAN> RUN
2> {
3> ALLOCATE CHANNEL C1 DEVICE TYPE DISK FORMAT '/data/backup/testdata/%U';
4> BACKUP TABLESPACE TEST_RMAN;
5> }
分配的通道: C1
通道C1: sid=19 devtype=DISK
启动backup于27-5月-10
通道C1:正在启动full数据文件备份集
通道C1:正在指定备份集中的数据文件
输入数据文件fno=00029 name=/data/oradata/testdata/test_rman01.dbf
通道C1:正在启动段1于27-5月-10
通道C1:已完成段1于27-5月-10
段handle=/data/backup/testdata/5elenfo7_1_1 comment=NONE
通道C1:备份集已完成,经过时间:00:00:03
完成backup于27-5月-10
启动Control File and SPFILE Autobackup于27-5月-10
段handle=/data/backup/testdata/20100526_c-2270762593-20100527-02 comment=NONE
完成Control File and SPFILE Autobackup于27-5月-10
释放的通道: C1
RMAN> LIST BACKUP OF TABLESPACE TEST_RMAN;
备份集列表
===================
BS关键字 类型LV大小 设备类型经过时间 完成时间
------- ---- -- ---------- ----------- ------------ ----------
1181 Full 192M DISK 00:00:04 27-5月-10
BP关键字: 1181 状态: AVAILABLE 标记:TAG20100527T094710
段名:/data/backup/testdata/5clenfku_1_1
备份集1181中的数据文件列表
文件LV类型Ckp SCN Ckp时间 名称
---- -- ---- ---------- ---------- ----
29 Full 1112664434776 27-5月-10 /data/oradata/testdata/test_rman01.dbf
BS关键字 类型LV大小 设备类型经过时间 完成时间
------- ---- -- ---------- ----------- ------------ ----------
1183 Full 192M DISK 00:00:03 27-5月-10
BP关键字: 1183 状态: AVAILABLE 标记:TAG20100527T094855
段名:/data/backup/testdata/5elenfo7_1_1
备份集1183中的数据文件列表
文件LV类型Ckp SCN Ckp时间 名称
---- -- ---- ---------- ---------- ----
29 Full 1112664435199 27-5月-10 /data/oradata/testdata/test_rman01.dbf
在10.2中,Oracle优化了RMAN备份集,已经释放的空间不再进行备份:
SQL> SELECT * FROM V$VERSION;
BANNER
----------------------------------------------------------------
Oracle Database10gEnterpriseEdition Release10.2.0.3.0 - 64bi
PL/SQL Release 10.2.0.3.0 - Production
CORE 10.2.0.3.0 Production
TNS for Linux: Version 10.2.0.3.0 - Production
NLSRTL Version 10.2.0.3.0 - Production
SQL> CREATE TABLESPACE TEST_RMAN
2 DATAFILE '/data/oradata/testzj/test_rman01.dbf'
3 SIZE200M;
表空间已创建。
SQL> CREATE TABLE T_RMAN
2 TABLESPACE TEST_RMAN
3 AS SELECT *
4 FROM DBA_OBJECTS;
表已创建。
SQL> INSERT INTO T_RMAN
2 SELECT *
3 FROM T_RMAN;
已创建50335行。
SQL> INSERT INTO T_RMAN
2 SELECT *
3 FROM T_RMAN;
已创建100670行。
SQL> INSERT INTO T_RMAN
2 SELECT *
3 FROM T_RMAN;
已创建201340行。
SQL> INSERT INTO T_RMAN
2 SELECT *
3 FROM T_RMAN;
已创建402680行。
SQL> INSERT INTO T_RMAN
2 SELECT *
3 FROM T_RMAN;
已创建805360行。
SQL> INSERT INTO T_RMAN
2 SELECT *
3 FROM T_RMAN;
INSERT INTO T_RMAN
*
第1行出现错误:
ORA-01653:表TEST.T_RMAN无法通过1024 (在表空间TEST_RMAN中)扩展
SQL> COMMIT;
提交完成。
利用RMAN进行备份:
[oracle@yanttest backup]$ rman target /
恢复管理器: Release10.2.0.3.0 - Production on星期四5月27 10:54:56 2010
Copyright (c) 1982, 2005, Oracle. All rights reserved.
连接到目标数据库: TESTZJ (DBID=3397373484)
RMAN> RUN
2> {
3> ALLOCATE CHANNEL C1 DEVICE TYPE DISK FORMAT '/data/backup/testzj/%U';
4> BACKUP TABLESPACE TEST_RMAN;
5> }
使用目标数据库控制文件替代恢复目录
分配的通道: C1
通道C1: sid=139 devtype=DISK
启动backup于27-5月-10
通道C1:启动全部数据文件备份集
通道C1:正在指定备份集中的数据文件
输入数据文件fno=00022 name=/data/oradata/testzj/test_rman01.dbf
通道C1:正在启动段1于27-5月-10
通道C1:已完成段1于27-5月-10
段句柄=/data/backup/testzj/09lenjke_1_1标记=TAG20100527T105510注释=NONE
通道C1:备份集已完成,经过时间:00:00:03
完成backup于27-5月-10
释放的通道: C1
RMAN> LIST BACKUP OF TABLESPACE TEST_RMAN;
备份集列表
===================
BS关键字 类型LV大小 设备类型经过时间 完成时间
------- ---- -- ---------- ----------- ------------ ----------
8 Full 192.09M DISK 00:00:03 27-5月-10
BP关键字: 8 状态: AVAILABLE 已压缩: NO 标记: TAG20100527T105510
段名:/data/backup/testzj/09lenjke_1_1
备份集8中的数据文件列表
文件LV类型Ckp SCN Ckp时间 名称
---- -- ---- ---------- ---------- ----
22 Full 8660160996 27-5月-10 /data/oradata/testzj/test_rman01.dbf
将表进行TRUNCATE释放空间:
SQL> TRUNCATE TABLE T_RMAN;
表被截断。
下面再次备份并检查空间:
RMAN> RUN
2> {
3> ALLOCATE CHANNEL C1 DEVICE TYPE DISK FORMAT '/data/backup/testzj/%U';
4> BACKUP TABLESPACE TEST_RMAN;
5> }
分配的通道: C1
通道C1: sid=139 devtype=DISK
启动backup于27-5月-10
通道C1:启动全部数据文件备份集
通道C1:正在指定备份集中的数据文件
输入数据文件fno=00022 name=/data/oradata/testzj/test_rman01.dbf
通道C1:正在启动段1于27-5月-10
通道C1:已完成段1于27-5月-10
段句柄=/data/backup/testzj/0alenjlb_1_1标记=TAG20100527T105539注释=NONE
通道C1:备份集已完成,经过时间:00:00:01
完成backup于27-5月-10
释放的通道: C1
RMAN> LIST BACKUP OF TABLESPACE TEST_RMAN;
备份集列表
===================
BS关键字 类型LV大小 设备类型经过时间 完成时间
------- ---- -- ---------- ----------- ------------ ----------
8 Full 192.09M DISK 00:00:03 27-5月-10
BP关键字: 8 状态: AVAILABLE 已压缩: NO 标记: TAG20100527T105510
段名:/data/backup/testzj/09lenjke_1_1
备份集8中的数据文件列表
文件LV类型Ckp SCN Ckp时间 名称
---- -- ---- ---------- ---------- ----
22 Full 8660160996 27-5月-10 /data/oradata/testzj/test_rman01.dbf
BS关键字 类型LV大小 设备类型经过时间 完成时间
------- ---- -- ---------- ----------- ------------ ----------
9 Full 608.00K DISK 00:00:00 27-5月-10
BP关键字: 9 状态: AVAILABLE 已压缩: NO 标记: TAG20100527T105539
段名:/data/backup/testzj/0alenjlb_1_1
备份集9中的数据文件列表
文件LV类型Ckp SCN Ckp时间 名称
---- -- ---- ---------- ---------- ----
22 Full 8660161333 27-5月-10 /data/oradata/testzj/test_rman01.dbf
可以看到,随着表占用的空间的释放备份集的大小也随之减小。
其实对于本地表空间而言,通过数据文件头部的BITMAP信息完全可以获取数据文件中使用的BLOCK和空闲的BLOCK,只不过从10g开始,Oracle才开始在RMAN备份时利用这个信息。
oracle视频教程请关注:http://u.youku.com/user_video/id_UMzAzMjkxMjE2.html