Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 更改具有十亿行的分区表中列的数据类型_Oracle - Fatal编程技术网

Oracle 更改具有十亿行的分区表中列的数据类型

Oracle 更改具有十亿行的分区表中列的数据类型,oracle,Oracle,我们有一个表,在日期范围上有120个分区,而在日期范围上又有子分区 每个分区大约有2亿条记录,传统的改变数据类型的方法会使我们的生产在几个小时内没有响应。有没有更好的方法来改变这样一个巨大表的数据类型 我们已经尝试了以下选项: 交换分区。这是行不通的 创建一个与现有表和更改列结构相同的新表,并使用/*+append*插入数据。这又需要几个小时 当前列大小为varchar2(30)。我们需要将其更改为: ALTER TABLE ORDERS MODIFY (INFO VARCHAR2(50) );

我们有一个表,在日期范围上有120个分区,而在日期范围上又有子分区

每个分区大约有2亿条记录,传统的改变数据类型的方法会使我们的生产在几个小时内没有响应。有没有更好的方法来改变这样一个巨大表的数据类型

我们已经尝试了以下选项:

  • 交换分区。这是行不通的
  • 创建一个与现有表和更改列结构相同的新表,并使用/*+append*插入数据。这又需要几个小时
  • 当前列大小为varchar2(30)。我们需要将其更改为:

    ALTER TABLE ORDERS MODIFY (INFO VARCHAR2(50) );
    
    varchar2(30)
    更改为
    varchar2(50)
    应能立即工作,且不会造成任何故障

    您只修改了一些元数据,但不涉及实际的表数据。

    varchar2(30)
    更改为
    varchar2(50)
    应该可以立即工作,不会造成任何问题


    您只修改了一些元数据,但不涉及实际的表数据。

    如果您只是担心生产没有响应的时间有多长(与操作需要多长时间相反),您可以使用
    dbms\u重新定义
    。这至少需要创建新表的时间,它不会在运行时停止正在进行的操作使varchar2()字段变大是元数据更改,不会更改基础数据。Ref:@JustinCave,对于dbms_重新定义,您需要(临时)两倍的磁盘空间-对于如此大的表可能是一个问题。将
    varchar2(30)
    更改为
    varchar2(50)
    应该可以立即工作,不会造成任何问题。@WernfriedDomscheit-请回答这个问题。您完全正确-扩展VARCHAR2字段的大小“只是”更新系统表中的列定义。不需要对数据进行任何更改。现在,如果您缩小列或将其定义为CHAR,则所有下注都将关闭,但当您扩展VARCHAR2字段时,您应该是金色的。祝你好运。如果你只是担心生产多长时间没有响应(而不是操作需要多长时间),你可以使用
    dbms\u重新定义
    。这至少需要创建新表的时间,它不会在运行时停止正在进行的操作使varchar2()字段变大是元数据更改,不会更改基础数据。Ref:@JustinCave,对于dbms_重新定义,您需要(临时)两倍的磁盘空间-对于如此大的表可能是一个问题。将
    varchar2(30)
    更改为
    varchar2(50)
    应该可以立即工作,不会造成任何问题。@WernfriedDomscheit-请回答这个问题。您完全正确-扩展VARCHAR2字段的大小“只是”更新系统表中的列定义。不需要对数据进行任何更改。现在,如果您缩小列或将其定义为CHAR,则所有下注都将关闭,但当您扩展VARCHAR2字段时,您应该是金色的。祝你好运。这不会马上奏效,我们已经试过了,花了好几个小时。然后我们不得不停止,这又花了很长时间来回滚。可能是因为应用程序一直将数据写入该表,所以表被锁定。暂停应用程序,更改列(只需几秒钟),然后再次启动应用程序。看起来这正是问题所在。我们关闭了所有的应用程序,一切正常。这应该是我的第一张支票,愚蠢的我用手捂住脸。非常感谢你!这并不能立即起作用,我们已经尝试过了,它花了几个小时。然后我们不得不停止,这又花了很长时间来回滚。可能是因为应用程序一直将数据写入该表,所以表被锁定。暂停应用程序,更改列(只需几秒钟),然后再次启动应用程序。看起来这正是问题所在。我们关闭了所有的应用程序,一切正常。这应该是我的第一张支票,愚蠢的我用手捂住脸。非常感谢你!