<>强摘要:强>甲骨文12 c能否在2小时内完成一14张亿条记录的表结构字段类型变更
原文链接:
https://www.modb.pro/db/22782?cyn概述
-
<李>前面分享过甲骨文大表在线修改的脚本(在线重定义),经过几轮的测试发现,都存在些缺陷,效率始终不是很满意。这次把索引和统计信息拆出来后发现效率相对算是最高的。李>
<李>主要测试常见的2种场景,如下:李>
-
<李>
<>强场景1:强>
复制全部依赖——COPY_TABLE_DEPENDENTS(索引+约束+统计信息),触发器和权限这种基本没有,就没有复制。
优点:操作方便,脚本直接把原表所有依赖全部复制过去,改后的表直接使用,不需要额外处理,适合百万或千万的表,且对效率没要求可用。
李> <李>缺点:上亿的表测试发现效率非常低。
李> <李>
<>强场景2:强>
有主键的表只复制约束——COPY_TABLE_DEPENDENTS(会复制主键和唯一索引),其它索引和统计信息等重定义完成后再开并行重建和收集,这里要补充说明一下为什么要复制约束,因为创建主键不能并行操作,等重定义完成数据转换后,相当于在普通大表上创建主键,效率非常低。
优点:目前针对10个亿以上的表测试发现效率是最高的,14个亿的表全部弄完约2小时左右。
李> <李>缺点:操作过程稍微麻烦一点,别的还好。
李> <李>复制规则,如下:
李>由于场景1的效率比较差,我这里就只列举场景2的测试过程,后续实际业务变更也是在场景2中进行,以下是整个变更过程:
-
<李>硬软配置一般,如下:李>
-
<李> CPU:英特尔?至强?CPU e7 - 4820 v3 @ 1.90 ghz(物理4个,10个核心,80个逻辑CPU) 李>
<李>内存:500 GB李>
<李>存储:华为某型号李>
<李>数据库软件:Oracle 12.2 Nocdb RAC,未打补丁。李>
-
<李>我们先看一下原表数据行数,接近亿14条,人工造的,表实际大小和生产相差1倍以上。李>
-
<李>创建临时表,有35个分区,部份省略了,主键,索引等都不要建。李>
CREATE TABLE "CUSTINFO"."INT_OM_OFFERING_INST_TEST" ( "BUSINESS_SEQ" VARCHAR2(20), "PROD_ID" NUMBER(20, 0), "OFFERING_INST_ID" NUMBER(20, 0), "OFFERING_ID" NUMBER(20, 0), "OFFERING_NAME" VARCHAR2(256), "OFFERING_CODE" VARCHAR2(50), "CUST_TYPE" VARCHAR2(20), "CUST_ID" NUMBER(20, 0), "BRAND" VARCHAR2(50), ……,,,,“RECORD_STATUS",,,,,,,,,,,,,,数量(3,0),DEFAULT 1),,,, PARTITION BY LIST (,“BE_ID",), (, PARTITION “P_000", VALUES (, & # 39; 000 & # 39;,),,,,,,,,, PARTITION “P_001", VALUES (, & # 39; 001 & # 39;,),,,,,,,,, PARTITION “P_002", VALUES (, & # 39; 002 & # 39;,),,,,,,,,,, PARTITION “P_100", VALUES (, & # 39; 100 & # 39;,),,,,,,,,,, PARTITION “P_200", VALUES (, & # 39; 200 & # 39;,),, ..........甲骨文12 c能否在2小时内完成一14张亿条记录的表结构字段类型变更