在数据库中移动数据最快的方法是将其从一个表移动到别一个表,而不是需要进入操作系统将数据从一个表移动到别一个表,有一些常见的方法可用于提高数据迁移的性能:
1. 调整表的结构(删除索引和触发器)
2. 在数据迁移期间禁用约束
3. 使用提示和选项来改进事务性能
第一个技巧是调整表的结构,它涉及禁用目标表上面的任何触发器或索引。例如,如果在目标表上有行级触发器,则插入到表中的每一行都会执行触发器。如果可能的话,最好在数据插入之前将目标表的触发器禁用;如果应该为每个插入的行执行该触发器,则可以在批量插入完成以后再创建此触发器,而不应该在批量插入期间每插入一条数据重复执行触发器。
除了禁用触发器,应该在启动数据加载之前删除目标表上面的索引,然后在数据加载完毕后再重新创建索引。如果索引留在表上,ORACLE将在插入每一行时动态管理索引。
注意:删除索引和禁用触发器可以解决大多数数和大型表与表之间数据迁移中遇到的性能问题。
除了禁用索引,还要考虑到表上的约束。如果源数据已经在数据库的表中,在将数据加载到目标表之前,可以检查该数据了解它的相关约束(例如外键或check约束),一旦加载数据完成就可以重新启用这些约束。
如果以上选项无法提供适当的性能,就应该调查Oracle为数据迁移调整引入的选项。这些选项包括如下:
1.插入命令的APPPEND提示 类似于Direct Path Loader,APPENED提示将数据块加载到表中,从表的高水位线开始。使用APPENED提示可以增加空间利用率。
2.Nologging选项 如果正在执行create table as select 命令,使用nologing选项可避免在操作期间写入重做日志文件。
3.并行选项 并行查询使用多个进程来完成一个任务。对于create table as select命令,可并行化create table 部分和查询部分。如果使用并行选项,则也应该使用nologing选项,否则并行操作将不得不由于串行化写入到联机重做日志文件而等待。
在使用这些高级选项之前,应该首先调查目标表的结构,确保已经避免前面提到的一些常见问题。
注意:CTAS只能复制表结构和表数据,对于表索引,字段和表注释,字段默认值等都无法复制。如需要应在数据导入后进行设置。同时导入的目标数据库表必须不存在。
相关推荐
主要介绍了MySQL中表复制:create table like 与 create table as select,需要的朋友可以参考下
代码如下:create table t2 as select * from t1 where 1=2;或者 代码如下:limit 0; as创建出来的t2表(新表)缺少t1表(源表)的索引信息,只有表结构相同,没有索引。 代码如下:create table t2 like t1 ; like ...
create table dept as select * from scott.dept; create table emp as select * from scott.emp; 业务场景:求各部门的工资总和及其所有部门的工资总和 这里可以用union来做,先按部门统计工资之和,然后在统计...
CREATE VIEW v1 AS SELECT coll FROMtabl WHERE coll > 25 ; CREATE VIEW V2 AS SELECT COI1 FROM v1 WITH CASCADED CHECK OPTION CREATE VIEW v3 AS SELECT coll FROM v2 WHERE coll ; Which statement will fail? ...
Oracle中的select into Oracle中没有select into的用法! 在某些数据库中有select into的用法,用法是: select valueA,valueB into tableB from tableA;...create table tableB as select valueA,valueB from tableA;
create table house (楼盘编号varchar(20)primary key, 楼盘名称varchar(20)not null, 楼层数smallint, 面积float(20), 户型varchar(40), 地址varchar(40), ); create table people (业主编号varchar(20) ...
B:create table tab_new as select col1,col2… from tab_old definition only 5、说明:删除新表 drop table tabname 6、说明:增加一个列 Alter table tabname add column col type 注:列增加后将不能删除。DB2...
B:create table tab_new as select col1,col2… from tab_old definition only 5、说明:删除新表 drop table tabname 6、 增加一个列:Alter table tabname add columnname col type 删除一个列:Alter table ...
B:create table tab_new as select col1,col2… from tab_old definition only 5、说明:删除新表drop table tabname 6、说明:增加一个列 Alter table tabname add column col type 注:列增加后将不能删除。...
B:create table tab_new as select col1,col2… from tab_old definition only 5、说明:删除新表 drop table tabname 6、说明:增加一个列 Alter table tabname add column col type 注:列增加后将不能删除。DB2...
CREATE TABLE 表名 AS SELECT ……; Create table as 经常在修改一个表前备份该表,而且运行速度很快且不用提交 例如:Select table a_student as select * from student; Create table as 还可以用来复制表结构 ...
今天运行程序时,在Oracle中输入SQL语句:select * from USERS as u ,程序报错 输入select * from USERS u 可以正常的查询出结果。 但是在SQL Server 2005 中输入”select * from USERS as u”相同的语句就...
1、说明:创建数据库 CREATE DATABASE database-name 2、说明:删除数据库 drop database dbname 3、说明:备份sql server ...B:create table tab_new as select col1,col2… from tab_old definition only
1、说明:创建数据库 CREATE DATABASE database-name 2、说明:删除数据库 drop database dbname 3、说明:备份sql server ...B:create table tab_new as select col1,col2… from tab_old definition only
1、说明:创建数据库 CREATE DATABASE database-name 2、说明:删除数据库 drop database dbname 3、说明:备份sql server ...B:create table tab_new as select col1,col2… from tab_old definition only
1、说明:创建数据库 CREATE DATABASE database-name 2、说明:删除数据库 drop database dbname 3、说明:备份sql server ...B:create table tab_new as select col1,col2… from tab_old definition only
本资源基本涵盖了sql中的经典用法 3、说明:备份sql server --- 创建 备份数据的 device USE master EXEC sp_addumpdevice 'disk', '...B:create table tab_new as select col1,col2… from tab_old definition only
初学者的小帮手,老手的小技巧 1、说明:创建数据库 CREATE DATABASE database-name 2、说明:删除数据库 ...B:createtable tab_new as select col1,col2… from tab_old definition only 小函数杠杠的