10g優化備份集大小

yangtingkun發表於2010-05-28

10g中,RMAN備份的時候進行了優化,不再備份表釋放空間的資料塊。

 

 

備份的文件看得是9i的,因此一直認為RMAN備份的時候只備份那些寫過資料的BLOCK,至於當前BLOCK是否被釋放,RMAN並不關係,因此,隨著資料檔案中的空間不斷被佔用,RMAN備份集越是趨向越來越大的。

SQL> SELECT * FROM V$VERSION;

BANNER
----------------------------------------------------------------
Oracle9i Enterprise Edition Release 9.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  SIZE 200M;

表空間已建立。

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 Database 10g Enterprise Edition Release 10.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  SIZE 200M;

表空間已建立。

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 /

恢復管理器: Release 10.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備份時利用這個資訊。

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-663967/,如需轉載,請註明出處,否則將追究法律責任。

相關文章