作家先容梁铭图真钱老虎机娱乐网,新炬积贮首席架构师,十多年数据库运维、数据库打算、数据治理以及系统决策开垦教会,领有Oracle OCM、Togaf企业架构师(谗谄级)、IBM CATE等认证,曾获dbaplus年度MVP以及华为云MVP等荣誉,并参与数据钞票管制国度设施的编写职责。在数据库运维管制和架构打算、运维体系决策、数据钞票管制方面有长远究诘。王涛,新炬积贮资深数据库众人,永远劳动于运营商、金融、制造业及政企客户。扎根客户一线,屡次主导运营商数据库大版块升级,擅长数据割接及同步技能的究诘和应用,割接实战教会丰富。配景从Oracle数据库官方劳动撑握生命周期表,咱们不错明晰看到Oracle 11g已过主撑握生命周期,2020年后不再撑握。基于这个配景,某客户的应用系统数据库将从IBM AIX袖珍机环境迁徙到某国产数据库一体机,同期数据库版块从11g径直升级为19c。LOB字段带来的问题历程分析,此数据库的数据量不大,唯有戋戋3TB,同期由于停机时辰十分充分,不错探讨采用数据泵datapump的步地达成数据迁徙。然而在仔细搜检后,发现数据库中有个单表2TB,仔细再查2TB基本全是lob字段,且不是分区表,这个问题就有点难办了。笔据以往的教会来看,这种大容量TB级的lob表,使用以宽泛规导出的步地,大要率会报Ora-01555。稍微测试一下,果如其言。治理门径一般的门径不错修改一下undo_retention参数以及lob字段的retention成立来治理,大要如下:alter system set undo_retention=7200 scope=both;alter table table_name MODIFY LOB(col_name)(retention);关连词现时的数据库是一个坐蓐环境,参数修改这么的风险工程也曾少作念为妙,因此需要别具肺肠。既然ORA-01555是由于万古辰查询引起,咱们不错尝试减少倒出的数据量。临了决定用Expdp的Query试一试,然而2TB的数据量的单表lob也曾第一次,那么笔据哪个条目进行Query导出呢?领先需探讨到是笔据主键和索引列进行导出,这么的成果会比拟高。证明后,问题又来了,索引列不闲适均匀分批条目,故这个想路走欠亨了。要若何才智中分呢?看来只可用Rowid碰幸运。领先Rowid是用于定位数据库中一笔纪录的一个相对惟一地址值。时常情况下,该值在该行数据插入到数据库表时即被详情且惟一。Rowid是一个伪列,它并伪善际存在于实体表中。它是Oracle在读取表中数据行时,笔据每一瞥数据的物理地址信息编码而成的一个伪列。是以笔据一瞥数据的Rowid能找到一瞥数据的物理地址信息,从而快速地定位到数据行,况兼使用Rowid来进行单纪录定位速率是最快的。上图是Rowid的结构图,主要包含4个部分:第一部分6位暗示:该行数据方位的数据对象的Data_object_id第二部分3位暗示:该行数据方位的相对数据文献的id第三部分6位暗示:该数据行方位的数据块的编号第四部分3位暗示:该行数据的行的编号一个彭胀Rowid选拔10个byte来存储,共80bit,其中obj#32bit, rfile#10bit, block#22bit, row#16bit。是以相对文献号不可跨越1023,也等于一个表空间的数据文献不可跨越1023个(不存在文献号为0的文献),一个Datafile只可有2^22=4M个 block,一个block中不可跨越2^16=64K行数据的由来。了解了Rowid后,如何进行均匀分批呢?咱们不错哄骗Oracle提供的DBMS_ROWID 包。导出剧本修改如下:参数评释:Content=DATA_ONLY:只导出表中的数据,导出会更快,导入时也更快,index之类的对象在data导入后单并立理;COMPRESSION=DATA_ONLY:数据量太大,自便空间,传输到新环境时效更高;Query=“……”:将表数据笔据条目进行分批导出一皆数据。为什么选用rowid_block_number呢?因为导出这个大表的需求下,Object_id就一个,分不了批次,Fileid唯有150个,BLOCK_ID 是126924个,ROW_NUMBER是19,数据量数值进行Mod取余分批的各异就越小,是以使用rowid_block_number。使用这个门径后也曾很凯旋地导出了数据。将参数文献复制并修改取模的尾数值,分为十个程度并发施行。搜检一皆导出日记,每个批次耗时收支不大,闲适均匀分批导出的见识。小结
遭遇超大lob表导出需要,一般的想路是尽可能通过分区或者过滤查询减少单表数据导出的数据量,减少合座耗时,见识不错分为:
1、搜检是否是分区表,分区表的话按分区导出:
userid=' / as sysdba'directory=DMPdumpfile=export.dmplogfile=export.logCONTENT=DATA_ONLYCOMPRESSION=DATA_ONLYtables=(onwer.tbale_name:part_name)
2、业务同样,是否存在均匀分离的字段值,按照字段值分批导出,举例:
USERID=' / as sysdba'directory= DMPCONTENT=DATA_ONLYCOMPRESSION=DATA_ONLYdumpfile=export.dmplogfile=export.logtables=owner.table_nameQUERY="WHERE column_name > 100000
3、不闲适以上的都不错使用本文rowid步地进行导出:
Cat exp_owner_table_seq.parUSERID='/ as sysdba'directory= DMPCONTENT=DATA_ONLYCOMPRESSION=DATA_ONLYdumpfile=export.dmplogfile=export.logtables=owner.table_nameQUERY="wheremod(dbms_rowid.rowid_block_number(rowid)真钱老虎机娱乐网,10)=1"