backupset和backuppiece的区别

| No Comments | No TrackBacks

朋友itpub上问backupsetbackuppiece的区别,我很能理解这位朋友为什么会有这样的疑问,因为我在六年前看9i OCP的培训教材的时候也不明白这两者之间的区别是什么。

 

我们只需要做如下这样一些测试并配合list backup就可以知道backupsetbackuppiece的区别了:

1、多个channel并且指定filesperset

configure device type disk parallelism 3;

run{

backup incremental level=0

format 'D:\oracle\oradata\testdb\backup\testdb_%t_%s_%p.bak' database

filesperset 3;

}

 

2、单个channel且不指定filesperset

configure device type disk parallelism 1;

run{

backup incremental level=0

format 'D:\oracle\oradata\testdb\backup\testdb_%t_%s_%p.bak' database;

}

 

3、单个channel且指定maxsetsize

configure device type disk parallelism 1;

configure maxsetsize to 450M;

run{

backup incremental level=0

format 'D:\oracle\oradata\testdb\backup\testdb_%t_%s_%p.bak' database;

}

 

4、单个channel且指定maxpiecesize

configure device type disk parallelism 1;

configure maxsetsize to unlimited;

run{

allocate channel c1 device type disk maxpiecesize 300M;

backup incremental level=0

format 'D:\oracle\oradata\testdb\backup\testdb_%t_%s_%p.bak' database;

release channel c1;

}

 

5、多个channel且指定filesperset,但请注意filesperset的位置:

configure device type disk parallelism 3;

run{

backup incremental level=0

format 'D:\oracle\oradata\testdb\backup\testdb_%t_%s_%p.bak' database

plus archivelog

format 'D:\oracle\oradata\testdb\backup\testdb_arc_%t_%s_%p.bak'

delete all input

filesperset 2;

}

 

6:多个channel且指定filesperset,但请注意filesperset的位置:

configure device type disk parallelism 3;

run{

backup incremental level=0

format 'D:\oracle\oradata\testdb\backup\testdb_%t_%s_%p.bak' database filesperset 2

plus archivelog

format 'D:\oracle\oradata\testdb\backup\testdb_arc_%t_%s_%p.bak'

delete all input;

}

 

从结果里我们可以得到如下结论:

1、  backupsetbackuppiece组成,每一个backuppiece就是一个单个的物理文件;

2、  如果你在分配channel的时候不指定maxpiecesize,则每个backupset只会包含一个backuppiece;反之一个backupset里会有多个backuppiece(即物理文件);

3、  一次备份中backupset的数量跟分配channel的个数、是否指定filespersetfilesperset的位置、是否指定maxsetsize有关。

 

filesperset的位置很关键,比如我这里有10datafile需要备份,那么上述测试5对这10datafile(不含archivelog)会产生多少个backupset?测试6呢?

 

答案是测试5产生了3backupset,测试6产生了6backupset这里请正确理解filesperset 的含义)。

 

今天上午我一个同事误truncate了一个表uplbth,她问我是否可以恢复?

我们先去看一下这个表现在的状况:

SQL> select owner,object_name,object_id,data_object_id from dba_objects where object_name='UPLBTH';

 

OWNER                        OBJECT_NAME      OBJECT_ID DATA_OBJECT_ID

------------------------------ --------------- ---------- --------------

CAIPRA                         UPLBTH               52210          95137

从结果里我们可以看到,这个表的data object id已经比其object id大了太多,极有可能是曾经被多次truncate

后来我问了一下她是否多次truncate过这个表,她说是。然后我对她说,你等我信儿吧。

 

熊哥曾经在"使用ODU恢复Truncate"这篇文章里提到了如何确定被多次truncate后的data object id,我这里用另外一种方式来精确定位我要恢复的data object id

 

利用的原理就是:oracle里有system回滚段,而oracle对数据字典的操作基本上是DML,既然是DML,那就好办了,我们有很大的概率可以成功执行flashback query

 

回到刚才的例子,我首先从dba_objects里知道了uplbthlast_ddl_time2010-2-3 10:18:57;接着,我们直接执行flashback query来确定在执行truncate操作的那个时间点之前uplbthdata object id

SQL> select  owner,object_name,object_id,data_object_id from dba_objects as of timestamp to_timestamp('2010-02-03 10:18:00','YYYY-MM-DD HH24:MI:SS') where object_name='UPLBTH';

 

OWNER                          OBJECT_NAME      OBJECT_ID DATA_OBJECT_ID

------------------------------ --------------- ---------- --------------

CAIPRA                         UPLBTH               52210          77675

 

可以看到,当时的data object id77675,精确的确定了data object id后,剩下的事情就都交给ODU好了:

ODU> unload table caipra.uplbth object 77675

 

Unloading table: UPLBTH,object ID: 52210

Unloading segment,storage(Obj#=52210 DataObj#=77675 TS#=16 File#=15 Block#=18828 Cluster=0)

1888 rows unloaded

 

可以看到,我们成功恢复出来了1880条数据。

注意,这里你用logmnr在缺省情况下是挖不出来data object id的,朋友们可以自己试一下。

Recent Comments

  • cui hua: 这个图来源于DSI405,DSI系列大家应该都有。 read more
  • 旭日东升: 上面的图是来自哪个文档?有没有相关的文档发给邮件阅读一下了? 谢谢了~ read more
  • cui hua: oracle里data block的16、17位存的是checksum value,我在 http://dbsnake.com/2009/08/fractured-block-fix.html 里贴过一个data block的粗略结构。 read more
  • netwares: "ultraEdit打开,并将其第16个byte的值由C7改为B7",请问这个16是如何来的? read more
  • cui hua: Thanks! What do you mean by 'not complete'? Is it read more
  • Yu "Denis" Sun: I find your blog thourgh twitter. Like your blog read more
  • cui hua: 我所有的资料均来源于oracle的官方文档、metalink和DSI,这些资料大家应该都有。 read more
  • maybe: 很厉害,有没有你学习过程中的资料分享点,谢谢 read more
  • cui hua: 你去看itpub的精华区,里面有怎样unwrap。 read more
  • luzp: 不错,学习了。 另外能否说说怎么unwrap的? read more

Find recent content on the main index or look in the archives to find all content.