请问imp/exp如何实现将数据导入到另外一张表中?两张表结构相同 为什么要imp/exp,直接insert +select不行? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 因为数据量非常大如果用insert + select可能回滚段不够用。 8i的写法,其它版本没用过exp hrms_zsgd/hrms_zsgd file=d:\baoxian.DMP tables=("T_INSURANCESTANDARD","T_INSURANCESTANDARDEMPLOYEEMAP");导出dmp文件后 然后在imp进去 exp user/pass@database file = c:\backup.dmp tables = ...imp user/pass@database file = c:\backup.dmp tables = ... bcsky(皮皮) 我的问题是如何imp到另外一张表(另外一个表名)中。如果exp/imp实现不了,对于数据量很大的情况,还有什么比较的方式实现? 看来我没有描述清楚:A,B表结构完全相同,A表中有数据,B表中没有,现在想把A表中的数据复制一份到B表中。数据量很大,有没有好的办法? bcsky(皮皮) 我的问题是如何imp到另外一张表(另外一个表名)中。如果exp/imp实现不了,对于数据量很大的情况,还有什么比较的方式实现?-----------------------------------------------------------------------关于楼上的这个问题,可以考虑direct insert的方法,具体的sql写法是insert /*+append*/ into B select * from A SQL> select * from t; ID PID---------- ---------- 20 10 30 20 40 30 50 40已用时间: 00: 00: 00.30exp scott/tiger tables=(t) file=c:\scott.dmpimp scott/tiger tables=(t) file=c:\scott.dmp ignore=ySQL> select * from t; ID PID---------- ---------- 20 10 30 20 40 30 50 40 20 10 30 20 40 30 50 40已选择8行。已用时间: 00: 00: 00.30SQL> 在B数据库DROP TABLE TABLENAME;exp USER/PASS@DBLINKa tables=ABLENAME file=c:\TABLE.dmpimp USER/PASS@DBLINKb file=c:\table.dmp exp/imp做不到这一点. 需要先把原表导入,再手工insert 用Exp备份的数据Imp后还是同样的表名。 [ALTER TABLE TABLE_B NOLOGGING;]INSERT INTO TABLE_B /*+APPEND*/ NOLOGGING SELECT * FROM TABLE_A ;COMMIT;[ALTER TABLE TABLE_B LOGGING;]试试看,一般1000万左右的数据我这样处理都很快的 你也可以用create table table1 as table2 然后再给table1 增加索引什么的 1. exp user/pwd@netname file=a.dmp owner=user tables=(A) log=1.log2. 删除B表,把A表重新命名为B表的表名3. imp user/pwd@netname file=a.dmp fromuser=user touser=user tables=(A) log=2.log 如果是在同一库中,为什么不用create table newtable as select * from old table; TO nowait(独行天涯路) 我记得曾看过文章NOLOGGING是指建表时NOLOGGING,实际对表的操作仍然是有LOG的。 INSERT INTO TABLE_B /*+APPEND*/ NOLOGGING SELECT * FROM TABLE_A ;COMMIT;这种方式不占用回滚段吗? 好象imp/exp做不到你所说的要求,如果两个表在如果两个表在同一个数据库中,可以使用触发器来完成实时的数据同步,但不一定是你所需要的。 用下面的语句很快:create table newtablenologgingtablespace tablespacenameas select * from oldtablename 多行记录插入的问题 pl/sql 连接oracle10g 失败...... 小弟初学ora,今天碰到了一个问题,钻进了死胡同,来这里请教大家。 各位兄弟姐妹帮帮忙,求一个trigger 写在oracle DB中的 column value new_val v 是什么意思 帮忙 改下SQL 再给100求满意答复 这sql语句怎么执行都错误 大家帮忙看一下这个SQL如何写? 数据库AMOUNT可以,但是在OPEN时候出现'F:\NONDEN\NONDEN\REDO04.LOG'错误?急!!!! 表空间的后缀名的问题。 先进先去的处理
如果用insert + select可能回滚段不够用。
exp hrms_zsgd/hrms_zsgd file=d:\baoxian.DMP tables=("T_INSURANCESTANDARD","T_INSURANCESTANDARDEMPLOYEEMAP");
导出dmp文件后 然后在imp进去
imp user/pass@database file = c:\backup.dmp tables = ...
我的问题是如何imp到另外一张表(另外一个表名)中。如果exp/imp实现不了,对于数据量很大的情况,还有什么比较的方式实现?
数据量很大,有没有好的办法?
我的问题是如何imp到另外一张表(另外一个表名)中。如果exp/imp实现不了,对于数据量很大的情况,还有什么比较的方式实现?-----------------------------------------------------------------------
关于楼上的这个问题,可以考虑direct insert的方法,具体的sql写法是
insert /*+append*/ into B select * from A
---------- ----------
20 10
30 20
40 30
50 40已用时间: 00: 00: 00.30
exp scott/tiger tables=(t) file=c:\scott.dmpimp scott/tiger tables=(t) file=c:\scott.dmp ignore=y
SQL> select * from t; ID PID
---------- ----------
20 10
30 20
40 30
50 40
20 10
30 20
40 30
50 40已选择8行。已用时间: 00: 00: 00.30
SQL>
exp USER/PASS@DBLINKa tables=ABLENAME file=c:\TABLE.dmp
imp USER/PASS@DBLINKb file=c:\table.dmp
INSERT INTO TABLE_B /*+APPEND*/ NOLOGGING SELECT * FROM TABLE_A ;
COMMIT;
[ALTER TABLE TABLE_B LOGGING;]
试试看,一般1000万左右的数据我这样处理都很快的
2. 删除B表,把A表重新命名为B表的表名
3. imp user/pwd@netname file=a.dmp fromuser=user touser=user tables=(A) log=2.log
create table newtable as select * from old table;
我记得曾看过文章NOLOGGING是指建表时NOLOGGING,实际对表的操作仍然是有LOG的。
INSERT INTO TABLE_B /*+APPEND*/ NOLOGGING SELECT * FROM TABLE_A ;
COMMIT;
这种方式不占用回滚段吗?
create table newtable
nologging
tablespace tablespacename
as
select * from oldtablename