在线求解答!!!!
现在有两种建数据库的方式:
1、用sql脚本建表并导入基础数据。命令大致如下:
create table ...
insert into 他table ....
2、用dmp文件导入。命令大致如下:
imp accuser/accuser@acc file=accbase.dmp log=accbase.log fromuser=accbase touser=accuser
前面两种建库的方式都可以,但是区别就在插入数据的时候:
用(1)这种方式建的数据库,插入数据就很快。大约4个小时内,但是建库复杂很多。(关键是现在sql脚本不健全,变了很多。)
用(2)这种方式建的数据库,插入数据就很慢。大约10个小时以上,但是建库很方便。
我们插入数据的方式是通过dblink从其他库导过来的:
insert into tablename as select * from table@dblink ...
这样的方式来插入历史数据到新库的。因为不是仅仅插入一个表,所以很多导入数据的sql是写在一个存储过程里面的!
为什么(1)就快了,(2)就慢了啊???帮帮忙,分析下原因啊!!!
在线求解答!!!!!!!!!!
------解决方案--------------------确定两种方法建的表都是一样的么?
第1种方法,肯定只是对表进行操作;
第2种方法,是对数据库几乎所有的objects做操作。
------解决方案--------------------1.如果是数据库从头建立的话,建议采用第1种方式,因为这样有利用数据库在开发过程中不断修改和维护。
2.如果是从旧数据库导出再导入,建议采用第2种方式,原因很简单,因为没有建库的sql脚本,再有会有大量的数据需要导过来,这些都是在创建时所没有的。
3.方式1当然速度快,因为只涉及对数据表的操作。方式2当然慢,因为涉及对所有数据库对象的操作,像用户、表空间、数据文件...等等构成Oracel数据库对象。
------解决方案--------------------建议使用第二种方式,以确保完整性
------解决方案--------------------第2种方式导入的内容,看下这个表有没有索引、外键、约束等会影响插入数据的东东,因为第1种方式是不会有这些东东的。