首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏Oracle DBA

    在线重定义(online redefinition)真的在线吗?

    背景   最近用Online Redefinition解决了一批普通大表(超千万级别)转换成分区表,后期方便做数据裁剪(truncate partition),Online Redefinition的优点是支持在线操作 问题二:dbms_redefinition.sync_interim_table 操作异常慢,导致订单超时失败   回溯操作流程:每天凌晨3-7点之间4小时窗口期,计划需要执行1周。 回想第一天与第二天的操作再往前回溯之前的操作经历,然后通过AWR报告分析发现在dbms_redefinition.sync_interim_table执行计划不对的情况。 刷新数据 SQL> exec dbms_redefinition.sync_interim_table('TWO','T1','T1_PART'); PL/SQL procedure successfully 结束重定义,被卡住了,此时访问此表的应用报超时(生产经验) SQL> exec dbms_redefinition.finish_redef_table('TWO', 'T1','T1_PART');

    50710编辑于 2025-01-26
  • 来自专栏C++干货基地

    C++报错已解决:Error:redefinition of ‘a‘

    的变量定义: // a.h int a; 现在,如果我们有两个源文件main.cpp和another_file.cpp,并且它们都包含了a.h,但没有正确地使用头文件保护,那么我们可能会遇到"Error:redefinition 总结: 遇到"Error:redefinition of ‘a’"错误时,请检查您的代码中是否有重复声明或定义的情况,并使用适当的解决方法来修复它。

    80510编辑于 2025-05-20
  • 来自专栏乐沙弥的世界

    基于 dbms_redefinition 在线重定义表

    Oracle提供的重定义包dbms_redefinition即是用与完成此操作。其实质是Oracle使用了智能物化视图及物化视图日志的方式。 / --下面再开启一个新的session,用于在线重定义表 scott@USBO> set serveroutput on; --校验表能否被重定义 scott@USBO> exec dbms_redefinition.can_redef_table ('SCOTT','TB_EMP'); --开始重定义 scott@USBO> exec dbms_redefinition.start_redef_table('SCOTT', 'TB_EMP', ('SCOTT', 'TB_EMP', 'TB_EMP_INT', - > dbms_redefinition.cons_trigger, 'SCOTT', 'tr_bf_tb_emp_hiredate COUNT(*) ---------- 5 --下面的过程用于同步重定义表与临时表 scott@USBO> exec dbms_redefinition.sync_interim_table

    1.3K20发布于 2018-08-13
  • 来自专栏从ORACLE起航,领略精彩的IT技术。

    Oracle在线重定义DBMS_REDEFINITION 普通表—>分区表

    object_id); create index i_objects on t_objects(object_id, STATUS); --表有主键,确认表可以重定义: SQL> EXEC DBMS_REDEFINITION.CAN_REDEF_TABLE --若表无主键 可以采用rowid重定义: SQL> EXEC DBMS_REDEFINITION.CAN_REDEF_TABLE('test1','t_objects',2); PL/SQL procedure SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) tablespace DBS_D_GRNOPHQ ); 3,开始重定义 exec DBMS_REDEFINITION.START_REDEF_TABLE EXEC DBMS_STATS.gather_table_stats('test1', 't_objects_temp', cascade => TRUE); 7,完成重定义 exec DBMS_REDEFINITION.FINISH_REDEF_TABLE (uname => 'test1',orig_table => 't_objects',int_table => 't_objects_temp'); EXEC DBMS_REDEFINITION.FINISH_REDEF_TABLE

    1.1K20发布于 2019-05-24
  • 来自专栏开源部署

    用DBMS_REDEFINITION将普通表转换为分区表

    DBMS_REDEFINITION简介 要将普通表转换为分区表,Oracle官方给出四种方案: 导入/导出; insert … select …; 交换分区法; 在线重定义(DBMS_REDEFINITION 与前三种方案相比,DBMS_REDEFINITION几乎不影响旧表的正常使用,因此也逐渐成为目前普遍使用的转换分区表的方案。 检查普通表能否进行分区 基于主键来确认: SQL> begin   2  DBMS_REDEFINITION.CAN_REDEF_TABLE('HSADM', 'TP_CARD_INFO', Dbms_Redefinition.cons_use_pk 迁移数据 SQL> exec DBMS_REDEFINITION.start_redef_table('HSADM', 'TP_CARD_INFO', 'TP_CARD_INFO_PART'); PL/ 结束重定义过程 begin   2  dbms_redefinition.finish_redef_table('HSADM', 'TP_CARD_INFO', 'TP_CARD_INFO_PART')

    81020编辑于 2022-08-18
  • 来自专栏乐沙弥的世界

    使用DBMS_REDEFINITION在线切换普通表到分区表

    有几种不同的方法来对此进行操作,诸如导出表数据,然后创建分区表再导入数据到分区表;使用EXCHANGE PARTITION方式来转换为分区表以及使用DBMS_REDEFINITION来在线重定义分区表。 本文描述的是使用DBMS_REDEFINITION来实现,下面是具体的操作示例。       有关具体的dbms_redefinition在线重定义表的原理及步骤可参考:基于 dbms_redefinition 在线重定义表       有关分区表的描述请参考:Oracle 分区表 1、准备环境 ('LESHAMI', 'BIG_TABLE'); --开始重定义 BEGIN DBMS_REDEFINITION.start_redef_table( uname => 'LESHAMI RENAME TO bita_look_fk_i; ALTER INDEX bita_created_date_i2 RENAME TO bita_created_date_i; 4、其它 --在使用DBMS_REDEFINITION

    55920发布于 2018-08-13
  • 来自专栏公众号:Lucifer三思而后行

    ORACLE分区表转换之在线重定义(DBMS_REDEFINITION

    一、DBMS_REDEFINITION(在线重定义) 参考MOS文档:How To Partition Existing Table Using DBMS_REDEFINITION (Doc ID 472449.1 7、如果中间表有新增列,则不能有NOT NULL约束 DBMS_REDEFINITION包: ABSORT_REDEF_TABLE:清理重定义的错误和中止重定义; CAN_REDEF_TABLE:检查表是否可以进行重定义 process REDEF_TABLE Procedure Provides a single push-button interface that integrates several redefinition process identified by a redefinition ID START_REDEF_TABLE Procedure Initiates the redefinition process Notes:如果在执行DBMS_REDEFINITION.START_REDEF_TABLE()过程和执行DBMS_REDEFINITION.FINISH_REDEF_TABLE()过程直接在重定义表上执行了大量的

    2.3K30发布于 2021-08-17
  • 来自专栏AIGC

    【AIGC】ChatGPT提示词Prompt高效编写模式:Langchain、Negative Prompt与Concept of Redefinition

    概念的再定义 (Concept of Redefinition) 定义: 概念的再定义 (Concept of Redefinition) 是一种AI提示方法,目的是重新解释或重新定义某个特定的概念, 结论 概念的再定义(Concept of Redefinition)是一种强大的AI提示方法,尤其适用于需要根据特定上下文或用户需求进行概念调整的场合。

    81510编辑于 2024-10-23
  • 来自专栏bisal的个人杂货铺

    Oracle删除字段的方式和风险,你都了解么?

    场景四: 使用DBMS_REDEFINITION包删除字段 create table T_TEST_COL_3 as select ids,dates,vara,varb,varc,vard from ('ENMOTEST','T_TEST_COL_3', DBMS_REDEFINITION.CONS_USE_ROWID); END; / BEGIN DBMS_REDEFINITION.START_REDEF_TABLE col_mapping => 'IDS IDS, DATES DATES, VARA VARA,VARB VARB,VARC VARC', options_flag => DBMS_REDEFINITION.CONS_USE_ROWID ); END; / DECLARE error_count pls_integer := 0; BEGIN DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS('ENMOTEST 业务压力不大的系统可采用dbms_redefinition在线重定义操作,只会在finish那一步出现很短时间的阻塞。 4.

    1.5K10发布于 2020-05-26
  • 来自专栏JiekeXu之路

    Oracle 在线重定义(上)

    DBMS_REDEFINITION 包所需的权限 在 DBMS_REDEFINITION 包中运行子程序需要有执行权限。 在 DBMS_REDEFINITION 中使用多个过程执行在线重定义 您可以使用 DBMS_REDEFINITION 包中的多个过程来执行表的在线重新定义。 使用多个步骤在线重新定义表: 1). 您可以在此参数中指定以下常量: DEMS_REDEFINITION.CONS_INDEX当依赖对象是索引时 DEMS_REDEFINITION.CONS_CONSTRAINT当依赖对象类型是约束时 DEMS_REDEFINITION.CONS_TRIGGER -06512: at "SYS.DBMS_REDEFINITION", line 148 ORA-06512: at "SYS.DBMS_REDEFINITION", line 2807 ORA-06512 查询 DBA_REDEFINITION_ERRORS 视图以检查错误。

    1.1K21编辑于 2024-01-26
  • 来自专栏杨建荣的学习笔记

    关于分区表的在线重定义(r5笔记第98天)

    首先验证表是否可以在线重定义 n1@TEST11G> EXEC dbms_redefinition.can_redef_table('N1','TAB_PART_ONE_PAR',1); BEGIN dbms_redefinition.can_redef_table('N1','TAB_PART_ONE_PAR',1); END; * ERROR at line 1: ORA-12089: cannot TAB_PART_ONE_PAR" with no primary key ORA-06512: at "SYS.DBMS_REDEFINITION", line 139 ORA-06512: at " ,我们可以考虑使用rowid EXEC dbms_redefinition.can_redef_table('N1','TAB_PART_ONE_PAR',dbms_redefinition.cons_use_rowid exec DBMS_REDEFINITION.CAN_REDEF_TABLE('N1','TAB_PART_ONE_PAR',2); exec DBMS_REDEFINITION.START_REDEF_TABLE

    678100发布于 2018-03-16
  • 来自专栏杨建荣的学习笔记

    使用在线重定义重构亿级分区表(r10笔记第34天)

    exec DBMS_REDEFINITION.CAN_REDEF_TABLE('TEST','BILL_LOGOUT_CN',2); exec DBMS_REDEFINITION.START_REDEF_TABLE BEGIN DBMS_REDEFINITION.START_REDEF_TABLE('TEST','BILL_LOGOUT_CN','BILL_LOGOUT_CN_DEF',NULL,2); END; BEGIN DBMS_REDEFINITION.START_REDEF_TABLE('TEST','BILL_LOGOUT_CN','BILL_LOGOUT_CN_DEF',NULL,2); END; "SYS.DBMS_REDEFINITION", line 1490 ORA-06512: at line 1 为了加快处理过程,我们也可以手工处理一部分 删除对应的物化视图和物化视图日志 SQL> SQL> exec DBMS_REDEFINITION.CAN_REDEF_TABLE('TEST','BILL_LOGOUT_CN',2); SQL>exec DBMS_REDEFINITION.START_REDEF_TABLE

    1K80发布于 2018-03-19
  • 来自专栏乐沙弥的世界

    使用导出导入(datapump)方式将普通表切换为分区表

    有几种不同的方法来对此进行操作,诸如导出表数据,然后创建分区表再导入数据到分区表;使用EXCHANGE PARTITION方式来转换为分区表以及使用DBMS_REDEFINITION来在线重定义分区表。 有关具体的dbms_redefinition在线重定义表的原理及步骤可参考:基于 dbms_redefinition 在线重定义表       有关使用DBMS_REDEFINITION在线重定义分区表可参考 :使用DBMS_REDEFINITION在线切换普通表到分区表       有关使用使用exchange方式可参考:使用exchange方式切换普通表到分区表       有关分区表的描述请参考:Oracle

    1.3K10发布于 2018-08-13
  • 来自专栏小麦苗的DB宝专栏

    【DB笔试面试474】普通表转换为分区表有哪些办法?

    DBMS_REDEFINITION.START_REDEF_TABLE(USER,'T','T_NEW','ID ID,TIME TIME',DBMS_REDEFINITION.CONS_USE_PK LHR@DLHR> EXEC DBMS_REDEFINITION.FINISH_REDEF_TABLE(user, 'T', 'T_NEW'); PL/SQL procedure successfully 在线重定义方法(DBMS_REDEFINITION Method) 使用DBMS_REDEFINITION包进行在线转换。 然后执行: LHR@DLHR> EXEC DBMS_REDEFINITION.CAN_REDEF_TABLE(USER, 'T', DBMS_REDEFINITION.CONS_USE_PK); PL/ 然后执行: LHR@DLHR> EXEC DBMS_REDEFINITION.START_REDEF_TABLE(USER,'T','T_NEW','ID ID,TIME TIME',DBMS_REDEFINITION.CONS_USE_PK

    87120发布于 2019-09-30
  • 来自专栏公众号:Lucifer三思而后行

    Oracle 执行在线重定义时,表空间满了报错 ORA-23539,怎么破?

    select mview_name from user_mviews; --删除物化视图的日志 drop materialized view log on T; --终止之前的重定义 exec DBMS_REDEFINITION.abort_redef_table ('LUCIFER','T','T_PAR'); --再次进行重定义 EXEC DBMS_REDEFINITION.START_REDEF_TABLE('LUCIFER','T','T_PAR',NULL ,DBMS_REDEFINITION.CONS_USE_ROWID); 上述中,T 代表原表,T_PAR 代表中间分区表,LUCIFER 代表用户!

    63310发布于 2021-09-23
  • 来自专栏公众号:Lucifer三思而后行

    实战篇:Oracle分区表之在线重定义

    一、介绍 DBMS_REDEFINITION(在线重定义): 支持的数据库版本:Oracle Database - Enterprise Edition - Version 9.2.0.4 and later 如果中间表有新增列,则不能有NOT NULL约束 DBMS_REDEFINITION包: ABSORT_REDEF_TABLE:清理重定义的错误和中止重定义; CAN_REDEF_TABLE:检查表是否可以进行重定义 > 'for all indexed columns',cascade=>TRUE,degree => '8') ; 6、开始在线重定义 sqlplus / as sysdba EXEC DBMS_REDEFINITION.START_REDEF_TABLE sqlplus par/par SET SERVEROUTPUT ON DECLARE l_errors NUMBER; BEGIN DBMS_REDEFINITION.copy_table_dependents 参考MOS文档: How To Partition Existing Table Using DBMS_REDEFINITION (Doc ID 472449.1)

    2K30编辑于 2022-01-08
  • 来自专栏数据和云

    在线重定义“巧改”分区表

    包用于在线重定义操作,主要包含三个过程: DBMS_REDEFINITION.START_REDEF_TABLE 这个过程首先会创建一个快速刷新的物化视图作为过渡表,然后将源表的数据加载到过渡表中,并在源表上创建物化视图日志 ,以支持快速刷新同步数据 DBMS_REDEFINITION.SYNC_INTERIM_TABLE 用来把源表中的数据同步到过渡表 DBMS_REDEFINITION.FINISH_REDEF_TABLE 这个过程的操作步骤比较多,也是做在线重定义时需要特别注意的,但其执行时间通常是非常短的: 1)先调用一次DBMS_REDEFINITION.SYNC_INTERIM_TABLE,同步数据 2)锁定源表 ,锁定之后表数据不再允许发生变化 3)再调用一次DBMS_REDEFINITION.SYNC_INTERIM_TABLE,同步数据 4)交换源表和过渡表的表名 5)删除物化视图和物化视图日志 6)释放表锁资源 oracle提供了dbms_redefinition.copy_table_dependents过程,用于复制源表上的索引、约束、触发器、权限等依赖关系到中间表,但是这个包存在的BUG也不少,可以选择性使用

    1.2K60发布于 2018-03-07
  • 来自专栏数据和云

    14亿条记录,12c 做不到2小时内变更表结构字段类型?

    tname => '&SOURCE_TAB', 4 options_flag => DBMS_REDEFINITION.CONS_USE_PK SQL> set timing on; SQL> begin 2 DBMS_REDEFINITION.START_REDEF_TABLE(uname => '&USERNAME' ) apply_obj_id', --这里只列举了需要变更的字段类型 11 options_flag => DBMS_REDEFINITION.CONS_USE_PK SQL> DECLARE 2 num_errors PLS_INTEGER; 3 BEGIN 4 DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS SQL> begin 2 dbms_redefinition.finish_redef_table(uname => '&USERNAME', 3

    57220发布于 2020-03-25
  • 来自专栏Oracle数据库技术

    自动段指导任务(Automatic Segment Advisor)

    下 的空余空间特别多时,会推荐online segment shrink; 如果该对象并不适合Shrink(如表不是定义在ASSM的表领域等),段指导会推荐在线重定义对象 (online table redefinition ).例如:利用DBMS_REDEFINITION程序包。 下的 空余空间特别多时,会推荐online segment shrink; 如果该对象并不适合Shrink(如表不是定义在ASSM的表领域等), 段指导会推荐在线重定义对象(online table redefinition 例如:利用DBMS_REDEFINITION程序包。・当段指导(Segment Advisor)发现某对象的行链接数大于某个临界值时, 会记录下来作为通知内容。

    1.7K20发布于 2020-03-26
  • 来自专栏杨建荣的学习笔记

    在线重定义的补充测试(r10笔记第26天)

    exec dbms_redefinition.can_redef_table('REF_OWNER','test_online_ref',1); exec DBMS_REDEFINITION.CAN_REDEF_TABLE ('REF_OWNER','test_online_ref',2); exec DBMS_REDEFINITION.START_REDEF_TABLE('REF_OWNER','test_online_ref ','new_ref',NULL,2); exec DBMS_REDEFINITION.FINISH_REDEF_TABLE('REF_OWNER','test_online_ref','new_ref

    76180发布于 2018-03-19
领券