海量数据迁移之通过rowid切分大表

  

  在之前的章节中,讨论过了通过分区+并行等方式来进行超大的表的切分,通过这种方式能够极大的提高数据的平均分布,但是不是最完美的。   
  比如在数据量再提高几个层次,我们假设这个表目前有1 t的大小,有10个分区,最大的分区有400克,那么如果我们想尽可能的平均的导出数据,使用并行就不一定能够那么奏效了。   
  比方说我们要求每个转储文件控制在200总有,那样的话400 g的分区就需要800个并行才能完成,在实际的数据库维护中,我们知道默认的并行数只有64个,提高几倍,也不可能超过800   
  所以在数据量极大的情况下,如果资源紧张,可能生成的转储就会比较大。   
  
  我们考虑使用rowid来满足我们的需求。   
  我们可以根据需要来指定需要生成几个转储文件。比如表用户有600,那么如果按照200米为一个单位,我们需要生成3个转储文件。   
  如果想数据足够平均,就需要在rowid上做点功夫。   
  我们先设定一个参数文件,如下的格式。   
  可以看到表备忘录数据量极大,按照200一个单位,最大的分区(P9_A3000_E5)需要800个并行。   
  表ICE_AGREEMENT比较小,不是分区表,我们以x来临时作为分区表的代名,在处理的时候可以方便的甄别   
  
  MEMO ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,P9_A3000_E0 ,,,,,,,,,,,,,,,,,,,,,,,,,156   
  MEMO ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,P9_A3000_E1 ,,,,,,,,,,,,,,,,,,,,,,,,,170   
  MEMO ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,P9_A3000_E2 ,,,,,,,,,,,,,,,,,,,,,,,,,190   
  MEMO ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,P9_A3000_E3 ,,,,,,,,,,,,,,,,,,,,,,,,,200   
  MEMO ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,P9_A3000_E4 ,,,,,,,,,,,,,,,,,,,,,,,,,180   
  MEMO ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,P9_A3000_E5 ,,,,,,,,,,,,,,,,,,,,,,,,,800   
  MEMO ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,PMAXVALUE_AMAXVALUE_EMAXVALUE ,,,,,,,1   
  ICE_AGREEMENT ,,,,,,,,,,,,,,,,,,,,,,x ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,36   
  CRIBER_HISTORY ,,,,,,,,,,,,,,,,,,,,,x ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,11   
  
  可以使用如下的脚本来完成rowid的切分。   

  

  # # # # 1美元dba康涅狄格州的细节   
  # # # # $ 2表的所有者   
  # # # # table_name 3美元   
  subobject_name # # # # 4美元   
  # # # # parallel_no 5美元   
  函数normal_split   
  {   
  sqlplus - s $ 1 & lt; & lt; 1 eof   
  设置线宽200   
  设置页面0   
  设置反馈了   
  假脱机列表/rowid_range_ _x.lst 3美元   
  选择rownum | | & # 39; & # 39;| | & # 39;rowid之间& # 39;| |   
  科(39)| | dbms_rowid。rowid_create (1 DOI lo_fno lo_block 0) | |科(39)| | & # 39;以及& # 39;||   
  科(39)| | dbms_rowid。rowid_create (1 DOI hi_fno hi_block, 1000000) | |科(39)数据   
  从(   
  选择不同的DOI、grp   
  first_value (relative_fno)/(DOI分区,grp relative_fno秩序,block_id行之间的前和后无限)lo_fno,   
  first_value (block_id)/(DOI分区,grp relative_fno秩序,block_id行之间的前和后无限)lo_block,   
  last_value (relative_fno)/(DOI分区,grp relative_fno秩序,block_id行之间的前和后无限)hi_fno,   
  null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

海量数据迁移之通过rowid切分大表