代码之家  ›  专栏  ›  技术社区  ›  simao

如何在oracle上将一个110gb的带有blob的表从一个模式复制到另一个模式

  •  3
  • simao  · 技术社区  · 14 年前

    我有一个表在一个模式中包含110GB的blob,我想将它复制到另一个模式到另一个表中。

    我只想复制源表的一列,所以我正在使用update语句,但是复制3gb的数据需要2,5个小时。

    有没有更快的方法来做这个?

    更新:

    我使用的代码非常简单:

    update schema1.A a set blobA = (select blobB from schema2.B b where b.IDB = a.IDA);

    IDA和IDB是索引。

    3 回复  |  直到 8 年前
        1
  •  1
  •   Michael MacDonald    14 年前

    检查目标表上是否有导致性能问题的索引,如果有,请暂时禁用它们,然后在数据从源表中的一列复制到目标表中的列后重新创建它们。

        2
  •  0
  •   zendar    14 年前

    如果您使用的是Oracle 10或11,请检查addm以查看是什么导致了问题。可能是I/O或事务日志问题。

    这是什么样的光盘存储器?您是否尝试将110 GB文件从该光盘系统的一个位置复制到另一个位置?需要多长时间?

        3
  •  0
  •   ChrisLively    14 年前

    我不知道Oracle是否会自动增大数据库大小。如果是,则在运行查询之前,增加分配给数据库的空间量,使其超过您将要增加的空间量。

    我知道在sql server中,在默认设置下,当您开始填充数据库时,它会自动分配额外的10%的数据库大小。当它充满,然后它停止一切,重新分配10%。当运行大量加载数据的查询时,这会严重减慢查询速度。

    同时,正如zendar指出的,检查磁盘io。如果它的队列长度很长,那么您可能会受到驱动器工作速度的限制。