有这样的一类需求,快速复制一张表,而这张表的数据量又非常的大。比方说本来是分区表,要把它重新变成非分区表,怎么能够快速的完成这样的操作呢?有下面几种方法:
第一,就是利用CTAS方式来创建一张新表,当然要想加快速度,在数据库不是force logging的前提下,可以使用nologging方式来创建表:
SQL> select force_logging from v$database;
FOR
---
NO
SQL> create table tab_test_bak tablespace ts_test nologging as select * from tab_test;
Table created.
在建立完成表以后,要注意将表的属性重新变成logging:
SQL> select logging from tabs where table_name = 'TAB_TEST_BAK';
LOG
---
NO
SQL> alter table tab_test_bak logging;
Table altered.
CTAS的时候应该可以加PARALLEL参数的,或许会能提升点速度。如果表超大,则导成带分隔符的文本文件,用SQLLOAD,以DIRECT, PARALLEL 方式导入,我试过,这个速度是最快的。
如:
SQL> create table tab_test_bak parallel (n) nologging as select * from tab_test;
第二,就是利用CTAS方式来创建一张无数据新表:CREATE TABLE … AS SELECT .. WHERE 1=2; 然后使用 INSERT /*+ APPEND */ INTO .. SELECT …。最后将表名更改过来,建立一下新的索引,然后就可以了。
SQL> create table tab_test_bak2 tablespace ts_test nologging as select * from tab_test where 1=2;
Table created.
SQL> insert /* +append */ into tab_test_bak2 select * from tab_test;
12612000 rows created.
SQL> commit;
Commit complete.
SQL> drop table tab_test;
Table dropped.
SQL> rename tab_test_bak2 to tab_test;
Table renamed.
在force logging的情况下,sqlldr中的direct=y也是这起作用的。insert /*+ append */ 的时候如果采用并行的话,注意前面加上:alter session enable parallel dml;
第三,在原理上,它其实和第一种方式差不多,就是阻止数据库记录日志来加快速度,大概过程如下:
1、exp出原表(建议compress=n)
2、以nologging的方式,新建表结构和原表一样的空表
3、drop 原表,并rename新表为原表名
4、imp原表至空表中,注意要把ignore设置为y
5、更改新表的属性为logging
如:
D:\>exp 'sys/iamwangnc as sysdba' compress=n tables=tab_test file=d:\tab_test.dmp buffer=1024000
Export: Release 10.2.0.1.0 - Production on Sat Jun 7 20:30:09 2008
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to: Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production
Export done in WE8ISO8859P1 character set and AL16UTF16 NCHAR character set
server uses AL32UTF8 character set (possible charset conversion)
About to export specified tables via Conventional Path ...
. . exporting table TAB_TEST 12612000 rows exported
Export terminated successfully without warnings.
D:\>
SQL> create table tab_test_bak3 tablespace ts_test nologging as select * from tab_test where 1=2;
Table created.
SQL> drop table tab_test;
Table dropped.
SQL> rename tab_test_bak3 to tab_test;
Table renamed.
D:\>imp 'sys/iamwangnc as sysdba' ignore=y tables=tab_test file=d:\tab_test.dmp buffer=1024000
Import: Release 10.2.0.1.0 - Production on Sat Jun 7 20:37:25 2008
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to: Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production
Export file created by EXPORT:V10.02.01 via conventional path
import done in WE8ISO8859P1 character set and AL16UTF16 NCHAR character set
import server uses AL32UTF8 character set (possible charset conversion)
. importing SYS's objects into SYS
. importing SYS's objects into SYS
. . importing table "TAB_TEST" 12612000 rows imported
Import terminated successfully without warnings.
D:\>
SQL> alter table tab_test logging;
Table altered.
做了测试,第三种方式远远快于前两种方式,大概是其10倍的速度。注意以上三种方式都是在数据库没有force logging的前提下完成的。
如 果是10g的话,可以考虑用一下expdp和impdp。我最开始听说10g下的data pump的时候,就无数次的听到这样的观点:“data pump是用专用的api来实现,目的就是为了在10g中提供快的多的数据导入与导出,导出性能比在9i的direct模式下提到10-15倍,导入性能 能提到5倍”。
第四,用批量绑定结合分布commit的方式写存储过程转移,这么做有个好处就是可以降低对现有系统的影响,并且可以实时的知道转移的进度。
- 浏览: 302960 次
- 性别:
- 来自: 北京
最新评论
-
zhou363667565:
看到你的这个配置 有个地方有点问题:
< aop:po ...
spring ibatis 事务配置 -
wo17796452:
[b][/b][i][/i][u][/u]引用[*][img] ...
crowd Jira confluence 集成 -
wo17796452:
<input type="button&quo ...
crowd Jira confluence 集成 -
benbear2008:
这些类图呢?
Spring MVC框架类图与顺序图 -
TTLtry:
谢了 最近学习spring时候 却总是登不上官方网站 很多 ...
Spring 2.5.5 api 帮助文档 chm格式 下载
有这样的一类需求,快速复制一张表,而这张表的数据量又非常的大。比方说本来是分区表,要把它重新变成非分区表,怎么能够快速的完成这样的操作呢?有下面几种方法: 第
- 博客分类:
- database
相关推荐
数据不算太新,内容只有区号,名字,缩写拼音,没其他字段
有在一张表上显示, 还有分三张表(省市县) region.sql 是最全的地区,包括台湾、香港、澳门所有的地区、县
Oracle中比对2张表之间数据是否一致的几种方法
mes系统整套数据库表结构详细说明文档(超300张表结构).docx
有时候,我们的业务可能会这样要求:某张表是动态的,他要求每隔一段时间(如:一个月)自动生成一张结构相同的新表(如:日志表Log),这是我们要判断数据库中是否存在某张表,如果没有,则新建一张表,否者直接...
from 多张表 等于 left join 其他表.
具体查询某张表的大小,相对简洁的方法实现表的查询,可以完成表的查询,非常简单简单的完成表的查询,
工作流的应用越来越广泛,而activiti是公认的现阶段最好的工作流框架之一,详细了解activiti的库表结构有助于您更好的掌握学习工作流框架,共享本资源以供广大编程从业人员学习交流,望本资源可以帮助您更上一层楼。
Activiti 5.22.0数据库表结构添加中文注释MySQL脚本,内含3个脚本,分别是: ...答:因为25张表中有4张是ACT_ID_*开头的表,这几个表用自己业务系统的就行,或者在此基础上根据ACT_ID_*表稍做改造。
SCOTT DEPT EMP SALGRADE三张表的excel格式(xls格式),没有表结构script及insert语句,纯粹的excel数据内容
一个商城的表结构设计(建表语句),共12张表。
activiti 工作流23张表详细介绍activiti 工作流23张表详细介绍activiti 工作流23张表详细介绍activiti 工作流23张表详细介绍activiti 工作流23张表详细介绍activiti 工作流23张表详细介绍activiti 工作流23张表详细...
但是由于数据较多整个库大概有7T的数据量,表也较多,大概有100多张表。有些表较大,最大的表可以达到1T的数据量,另外还有四五张800G左右的数据。所有的表数据量大概有100亿条数据,其中需要删除的估计大概有80亿条...
非常适合初学者的activiti23张表相互关系图,你还在为初学activiti时,23张表各个Id间对应关系晕头转向吗,有了这张图,一目了然。
如何根据表里的一个字段,查出它属于哪张表
主要介绍了Oracle - 如何将多张表中的列合并到一张表中,需要的朋友可以参考下
全国大学名称数据表,共2217所。三张表关联,省份表,城市表,大学名称表。使用MySQL
mes系统整套数据库表结构详细说明文档(超300张表结构).zip
2张表数据匹配更新
sap80000多张表1.rar