资讯专栏INFORMATION COLUMN

数据倒换LOB字段过大解决方法

IT那活儿 / 1227人阅读
数据倒换LOB字段过大解决方法

点击上方“IT那活儿”公众号,关注后了解更多内容,不管IT什么活儿,干就完了!!!

01

在割接情况时如原库过于老旧,遇到了过大的lob字段表导致表迁移报错快照过旧问题,通过使用下面的方法可以解决进行数据割接时遇到存在过大的lob字段表所导致的表无法正常迁移报错问题

02

详解与实例
首先通过该语句查询出大的lob字段表:
select a.owner,a.table_name,a.SEGMENT_NAME,a.COLUMN_NAME,sum(b.bytes)/1024/1024/1024  SIZE_GB from dba_lobs a,dba_segments b
where a.segment_name=b.segment_name
and a.owner=b.owner
and a.owner not in (SYS,SYSTEM,MDSYS,XDB,APEX_040200)
group by a.owner,a.table_name,a.SEGMENT_NAME,a.COLUMN_NAME order by 5;

select owner, tablespace_name,segment_type, segment_name,PARTITION_NAME, sum(bytes) / 1024 / 1024 size_m
from dba_segments
where segment_type = LOBSEGMENT and owner not in (SYS,SYSTEM,XDB,APEX_040200,MDSYS) AND tablespace_name not in (SYSAUX,SYSTEM)
group by owner, tablespace_name,segment_type, segment_name,PARTITION_NAME
order by 6 desc ;
如上图,lob字段大小为176G当系统过于老旧时,无法正常使用expdp导出,我们可以选择将该表切割成多个分别导出。
我们以该表为例子:AAAAAA.BBBBBB。
本次为了方便举例仅将表切割为5个部分,正常割接情况下需要将表割接为多个部分。
首先准备一个model脚本。
脚本:
cat > exp_gg_big_XXOWNER_XXTAB_XXSEQ.mod_par
USERID=*****/*******
##FLASHBACK_SCN=15696871445525
(如需要导出相应时刻的表数据请加上)
DIRECTORY=逻辑目录
CONTENT=DATA_ONLY
DUMPFILE=exp_gg_bcvbig_XXOWNER_XXTAB_XXSEQ.dmp
LOGFILE=exp_gg_bcvbig_XXOWNER_XXTAB_XXSEQ.log
TABLES=AAAAAA.BBBBBB
QUERY=AAAAAA.BBBBBB:"WHERE rowid IN (SELECT sou_rowid FROM system.seq_test_XXTAB where sb_seq=XXSEQ)"

切割表脚本:

cat > create_exp_gg_bcvbig1.sh
. /home/oracle/.profile
#Used by ogg.AUTO EXP WITH SCN
Usage()
{
echo "------------------------------------------------------------"
echo " Usage"
echo " ksh create_exp_gg_bcvbig.sh -o OWNER -t OR_PRTCNTT_202205 &"
echo " Sample:"
echo " ksh create_exp_gg_bcvbig.sh -o DBORDERADM -t OR_PRTCNTT_202205"
echo "------------------------------------------------------------"
}
# Main
if [ $# -ne 4 ]
then
Usage
exit 1
fi
while getopts :o:t: OPTION
do
case $OPTION in
o) V_OWNER=$OPTARG;;
t) V_TABLE_NAME=$OPTARG;;
?) Usage
exit 1;;
esac
done
SQL_FILE=create_seq_test_$V_TABLE_NAME".sql"
cat /dev/null>$SQL_FILE
echo "set time on timing on">>$SQL_FILE
echo "ALTER SESSION FORCE PARALLEL QUERY PARALLEL 8;">>$SQL_FILE
echo "ALTER SESSION FORCE PARALLEL DDL PARALLEL 8;">>$SQL_FILE
echo "ALTER SESSION FORCE PARALLEL DML PARALLEL 8;">>$SQL_FILE
echo "alter session enable parallel ddl;">>$SQL_FILE
echo "alter session enable parallel dml;">>$SQL_FILE
echo "create table system.seq_test_"$V_TABLE_NAME" tablespace 表空间 as select mod(rownum,5#将表切割为多少个#) sb_seq,rowid sou_rowid from "$V_OWNER"."$V_TABLE_NAME" ##as of scn 15696871445525##;">>$SQL_FILE
echo "alter session disable parallel ddl;">>$SQL_FILE
echo "alter table system.seq_test_"$V_TABLE_NAME" noparallel;">>$SQL_FILE
echo "exit">>$SQL_FILE
echo "cat exp_gg_big_XXOWNER_XXTAB_XXSEQ.mod_par|sed s/XXDIR/SOU_EXPA/g|sed s/XXSEQ/00/g|sed s/XXOWNER/"$V_OWNER"/g|sed s/XXTAB/"$V_TABLE_NAME"/g > exp_gg_bcvbig_"$V_TABLE_NAME"_00.par"|sh
echo "cat exp_gg_big_XXOWNER_XXTAB_XXSEQ.mod_par|sed s/XXDIR/SOU_EXPA/g|sed s/XXSEQ/01/g|sed s/XXOWNER/"$V_OWNER"/g|sed s/XXTAB/"$V_TABLE_NAME"/g > exp_gg_bcvbig_"$V_TABLE_NAME"_01.par"|sh
echo "cat exp_gg_big_XXOWNER_XXTAB_XXSEQ.mod_par|sed s/XXDIR/SOU_EXPA/g|sed s/XXSEQ/02/g|sed s/XXOWNER/"$V_OWNER"/g|sed s/XXTAB/"$V_TABLE_NAME"/g > exp_gg_bcvbig_"$V_TABLE_NAME"_02.par"|sh
echo "cat exp_gg_big_XXOWNER_XXTAB_XXSEQ.mod_par|sed s/XXDIR/SOU_EXPA/g|sed s/XXSEQ/03/g|sed s/XXOWNER/"$V_OWNER"/g|sed s/XXTAB/"$V_TABLE_NAME"/g > exp_gg_bcvbig_"$V_TABLE_NAME"_03.par"|sh
echo "cat exp_gg_big_XXOWNER_XXTAB_XXSEQ.mod_par|sed s/XXDIR/SOU_EXPA/g|sed s/XXSEQ/04/g|sed s/XXOWNER/"$V_OWNER"/g|sed s/XXTAB/"$V_TABLE_NAME"/g > exp_gg_bcvbig_"$V_TABLE_NAME"_04.par"|sh
执行脚本将属主和表名作为参数传入。
执行脚本语句:
ksh create_exp_gg_bcvbig1.sh -o AAAAAA -t BBBBBB

--o为属主,t为表名。

此时我们会生成出一个sql文本create_seq_test_BBBBBB.sql和5个par文件。
使用相应的用户进入数据库 @create_seq_test_BBBBBB.sql调用该脚本创建出中间表。
Par文件例子:
exp_gg_big_AAAAAA_BBBBBB_00.par
USERID=*****/*******
##FLASHBACK_SCN=15696871445525
(如需要导出相应时刻的表数据请加上)
DIRECTORY=逻辑目录
CONTENT=DATA_ONLY
DUMPFILE=exp_gg_big_AAAAAA_BBBBBB_00.dmp
LOGFILE=exp_gg_big_AAAAAA_BBBBBB_00.log
TABLES=AAAAAA.BBBBBB
QUERY=AAAAAA.BBBBBB:"WHERE rowid IN (SELECT sou_rowid FROM ogg.seq_test_BBBBBB where sb_seq=00)"

在执行脚本前要确保中间表已经创建成功。

最后执行脚本:
nohup expdp parfile=exp_gg_big_AAAAAA_BBBBBB_00.par &(一共5个)

注意:生成的5个脚本需要依次执行不能同时执行。


本文作者:李孝林(上海新炬王翦团队)

本文来源:“IT那活儿”公众号

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/129370.html

相关文章

  • Multi-Model多模数据库引擎设计与实现

    摘要:数据库多模是指同一个数据库支持多个存储引擎,可以同时满足应用程序对于结构化半结构化非结构化数据的统一管理需求。多模式数据管理能力,使得数据库能够进行跨部门跨业务的数据统一存储与管理,实现多业务数据融合,支撑多样化的应用服务。 如今,随着业务互联网化和智能化的发展以及架构 微服务和云化的发展,应用系统对数据的存储管理提出了新的标准和要求,数据的多样性成为了数据库平台面临的一大挑战,数据库...

    UCloud 评论0 收藏0
  • NewSQL数据库大对象块存储原理与应用

    摘要:图元数据与数据文件结构映射在建立集合的过程当中,大对象存储必须依附于普通集合存在,一个集合中的大对象仅归属于该集合,不能被另外一个集合管理。 前言 企业内容管理(Enterprise Content Management,ECM)系统是一种管理非结构化内容的系统,传统代表为EMC Documentum或IBM Filenet等ECM解决方案。随着大数据技术的越发普及,越来越多的客户开始...

    Jenny_Tong 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<