一般我们采用复制表的方式主要是

create table table_name

as select /*+ parallel (t 10)*/ * from t_name t ...

insert /*+ append */ into table_name

select /*+ parallel (t 10)*/ * from tname t ...

这两者方法都没有问题,但如果数据量到达一定程度,比如说10亿,大小400G,而且表上还存在业务,这样的话,很容易出现01555的问题。 我在运行了3个小时后遇到了恼人的01555,将undo_retention改到一个足够大的值还是不行,毕竟表太大,而且表上有业务在更新数据。

有一种方式可以避免01555,可以从物理备库恢复到某个时刻后,从备库表拖数据,这样上面的问题是没有了,不过有一点是需要考虑的,通过单dblink的话是有网络流量限制的,一般是20M/S,这样400G的表需要7个小时,还是太慢了。

最终考虑采用extent的方式,一块一块的拖,在我预想这样的速度应该会比直接在主库复制一个新表要慢一下的。

事实胜于雄辩,采用extent的方式,开12个进程,花了2个半小时完成了整个表的复制。不开12个并行直接复制表快了30%,而且采用extnt的方式比较灵活,可以在很多情况下继续上次为完成的工作,就是所谓的断点了,当然这种方式也是有一定代价的,负载会比前面的方法至少高一倍以上

------------------------------------------------------------

create table MY_ROWID

(

ID        NUMBER,

ROWID_MIN VARCHAR2(100),

ROWID_MAX VARCHAR2(100),

HAS_DEAL NUMBER

);

insert into my_rowid(id,rowid_min,rowid_max,has_deal)

select rownum,

DBMS_ROWID.ROWID_CREATE(1,o.data_object_id,e.RELATIVE_FNO,e.BLOCK_ID,0),

DBMS_ROWID.ROWID_CREATE(1,o.data_object_id,e.RELATIVE_FNO,e.BLOCK_ID+e.BLOCKS-1,10000),

0

from dba_extents e,dba_objects o

where e.segment_name=upper('base_table')

and e.owner='FBADMIN'

AND o.object_name = upper('base_table')

AND o.owner='FBADMIN';

commit;

----------------------------------------------------------------------

CREATE OR REPLACE PROCEDURE SP_XF_COPY_TABLE(N NUMBER) IS

/*

复制评价表

2009-8-26

*/

V_SQLERRM VARCHAR2(200);

BEGIN

FOR C IN (SELECT ID, ROWID_MIN, ROWID_MAX

FROM MY_ROWID

WHERE HAS_DEAL = 0

AND MOD(ID, 12) = N) LOOP

INSERT INTO

SELECT /*+ rowid(t) */

*

FROM base_table t

WHERE ROWID >= CHARTOROWID(C.ROWID_MIN)

AND ROWID <= CHARTOROWID(C.ROWID_MAX);

UPDATE MY_ROWID SET HAS_DEAL = 1 WHERE ID = C.ID;

COMMIT;

END LOOP;

COMMIT;

EXCEPTION

WHEN OTHERS THEN

V_SQLERRM := SUBSTR(SQLERRM, 1, 200);

DBMS_OUTPUT.PUT_LINE(V_SQLERRM);

ROLLBACK;

END SP_XF_COPY_TABLE;

---------

尽量使用后台跑脚本

nohup $HOME/worksh/sp_xf_tmp00.sh >/tmp/sp_xf_tmp00.txt &

--check data

SELECT COUNT(*) from my_rowid t WHERE has_deal = 0;

~~~~~~~~~~~~~~~~~~~~~

很多情况下可以使用extent来处理大表的数据

--EOF--

insert /*+APPEND */into mytable(select 列名,列名,...... from i_mytable);这样估计要快很多

如果需要更快

需要用PLSQL

declare

i number(10);

begin

insert /*+APPEND */into mytable(select 列名,列名,...... from i_mytable);

i:=sql%rowcount;

if i%1000=0 then

commit;

end if;

end;

强制批量插入  并且 不要在大表使用*函数  是SQL优化的关键

oracle 复制表方法,(转)oracle数据库之间 表复制方法一(extent 方法)相关推荐

  1. mysql表之间怎么联动_数据库之间的数据联动调整方法、装置及系统的制作方法...

    数据库之间的数据联动调整方法.装置及系统的制作方法 [技术领域] [0001]本发明涉及一种信息处理技术领域,特别是涉及一种数据库之间的数据联动调整方法.装置及系统. [背景技术] [0002]随着信 ...

  2. 不同数据库之间表数据的copy及CPY 0012错误的解决办法

    刚做了一个不同数据库之间表数据的copy,使用的是oracle数据库,使用如下语句: copy from ime_db_hgjs/ime_db_hgjs@IMENEWDB to IMEYDGGLM14 ...

  3. linux查看mongo表大小,MongoDB_mongodb 查看数据库和表大小,1,查看数据库db.stats() - phpStudy...

    mongodb 查看数据库和表大小 1,查看数据库 > db.stats(); { "db" : "test", //当前数据库 "collec ...

  4. 数据库地区表sql语句,数据库地区表包含省市县

    数据库地区表sql语句,数据库地区表包含省市县 包含省市县的数据表,需要的可以参考,sql语句一个博客字数太多发布不了,剩下的在下一个博客里面,之前也是在网上找的,感谢分享 -- ---------- ...

  5. oracle数据库迁移部分表,oracle 数据库之间 表数据的 迁移

    主要是 需要将 正式环境的数据库 和测试环境的数据库的 表 数据同步一下,方便测试. 这样的效果, 可以使用 数据库的 备份 , exp imp 等其他的方式, 可是这样的方式, 需要 在 电脑里面 ...

  6. sql oracle复制一张表里,Oracle如何复制表的sql语句

    以下的文章主要是介绍Oracle复制表的sql语句,其中包括如何复制表结构的sql.以及如何复制相关表的结构又复制表中的数据sql.以下就是相关内容的具体介绍,望你浏览完以下的内容会有所收获. 如下, ...

  7. SQL 利用merge 同步数据库之间表的数据

    同步两个数据库之间两表的数据也许的数据库管理员偶尔需要做的一件事情,下面来记录一下常用的两种方法: 方法一:使用delete.truncate 方法二:使用 merge into  ,Merge是在S ...

  8. 如何在mysql上输入数据表_向MySQL数据库的表中录入数据的方法

    MySQL数据库应用范围相对来说还是比较广泛的,MySQL数据库操作涉及到的知识还是很多的,其中,当你建好了数据库及表时,你首先想到的就是向数据库的表中输入数据.这就牵涉到如何向数据库增加数据.下面我 ...

  9. php检测表大小,查询mysql数据库、表的大小

    一.关于mysql表数据大小 mysql存储数据文件一般使用表空间存储 : 当mysql使用innodb存储引擎的时候,mysql使用表存储数据分为共享表空间和独享表空间两种方式 .共享表空间:Inn ...

  10. 数据库建表原则,SQL数据库建表前期优化,SQL数据库操作优化,数据库命名规范...

    2019独角兽企业重金招聘Python工程师标准>>> 关键字: 数据库建表原则 ·1. 原始单据与实体之间的关系 可以是一对一.一对多.多对多的关系.在一般情况下,它们是一对一的关 ...

最新文章

  1. 自己写的内存池Slabs
  2. hdu 3681(bfs+dfs+状态压缩)
  3. sudo apt-get install libstdc++6
  4. Extjs利用iframe无弹窗导出下载文件
  5. 管理感悟:主管加班,员工才会加班
  6. PHP如何获取客户端/服务端 IP,以及客户端真实IP
  7. dtcms 数据库结构分析
  8. 开发分布式WebIm--1(设想)
  9. 用3ds max 2020制做一个VRay油漆木材材质
  10. 东方财富:公司总经理陶涛辞任 其实将担任总经理职务
  11. 查看分区表linux,通过lsblk命令查看分区表
  12. 2017苹果开发者大会看点汇总
  13. TCL彩电总线调整进入宝典――1
  14. ipad的服务器是什么系统,ipad cellular版是什么意思 与WLAN版有什么区别
  15. java自动化测试语言高级之MySQL 连接
  16. 植物大战僵尸java版_植物大战僵尸:M8版 JAVA版下载
  17. 李宏毅机器学习|Task02
  18. 5.5 5个小红书月销售10W+的商家【玩赚小红书】
  19. i.MX 8M Mini Cortex-M4 Hello World
  20. 被说一知半解,await不懂你别乱用

热门文章

  1. 直播回顾|基于格雷码结合相移技术的高鲁棒性高效率动态三维面形测量
  2. 七夕福利 | 3D视觉从入门到精通系统学习教程
  3. 为什么一线互联网公司的校招高薪都是算法类,工程岗校招很难拥有高薪吗?...
  4. 脚本控制向Android模拟拨打电话,发送短信,定位设置功能
  5. Android四大基本组件和生命周期的介绍
  6. python mysql类里_Python MySql 操作类
  7. R语言|又来一个气泡图
  8. ​纽约伊坎医学院房刚组诚聘博士后: 表观基因组, 宏基因组, 精准医疗
  9. MPB:中科院生态环境中心邓晔组-环境样本中原核生物的总量测定
  10. 一站式论文提升服务,助您顺利发文章!