问题:从A、B、C(三个库中表结构完全相同,但数据不同)数据库中导出数据,再汇总到数据库D中。*********************************************************
问题如果再解决不了在下就得下岗了。:(  在线等后....
*********************************************************我从帮助 里得到了下面的提示,可是还是解决不了
可以通过输入 IMP 命令和您的用户名/口令
按照“导出”提示键入参数:实例:IMP SCOTT/TIGER或者, 可以通过输入 IMP 命令和各种自变量来控制“导入”
导入的运行方式。要指定参数,您可以使用关键字:格式:IMP KEYWORD=value or KEYWORD=(value1,value2,...,vlaueN
实例:IMP SCOTT/TIGER IGNORE=Y TABLES=(EMP,DEPT) FULL=N
或 TABLES=(T1:P1,T1:P2),如果 T1 是分区表USERID 必须是命令行中的第一个参数。关键字  说明(默认)        关键字      说明(默认)
------------------------------------------------------------
USERID   用户名/口令           FULL         导入整个文件 (N)
BUFFER   数据缓冲区大小         FROMUSER     所有人用户名列表
FILE     输入文件 (EXPDAT.DMP)     TOUSER       用户名列表
SHOW     只列出文件内容 (N) TABLES      表名列表
IGNORE   忽略创建错误 (N)    RECORDLENGTH  IO 记录的长度
GRANTS  导入权限 (Y)           INCTYPE      增量导入类型
INDEXES 导入索引 (Y)          COMMIT       提交数组插入 (N)
ROWS    导入数据行 (Y)        PARFILE      参数文件名
LOG      屏幕输出的日志文件
DESTROY  覆盖表空间数据文件 (N)
INDEXFILE 将表/索引信息写入指定的文件
CHARSET  导出文件的字符集 (NLS_LANG)
POINT_IN_TIME_RECOVER   表空间时间点恢复 (N)
SKIP_UNUSABLE_INDEXES 跳过未使用索引的维护 (N)
ANALYZE 执行转储文件中的 ANALYZE 语句 (Y)
FEEDBACK 显示每 x 行 (0) 的进度

解决方案 »

  1.   

    如何单独备份一个或多个用户?  
    命令详解: D:\>exp scott/tiger file=导出文件 owner=
    D:\>exp system/manager owner=(用户1,用户2,…,用户n) file=导出文件 如何单独备份一个或多个表?  
    命令详解: D:\>exp 用户/密码 tables=表
    D:\>exp 用户/密码 tables=(表1,…,表2)
    D:\>exp system/manager tables=(用户.表)
    D:\>exp system/manager tables=(用户1.表1,用户2.表2)
     如何导入指定表?  
    命令详解: D:\>exp scott/tiger file=a.dmp 
    D:\>imp test/test@servername fromuser=scott tables=emp file=a.dmp
    D:\>imp test/test@servername tables=dept file=a.dmp full=y(表示全部)说明:
    如果导出用户没有DBA权限,则导入用户可以不用指定fromuser、touser参数
    如果导出用户拥有DBA权限,则导入用户也必须拥有DBA权限
     
      

  2.   

    同意楼上czhai(横扫千军)的建议。
      

  3.   

    如果用导入不行,就只能采用下面的笨办法了:
      首先将A、B、C三个数据库连起来,如果不在一个服务器上就创建DBLINK,如果不能创建DBLINK就
    将A,B,C分别导如不同的用户,总之要在一个用户下可以同时访问这三个数据库。
     其次,创建快照关联这三个数据库中的表(如果是多表用程序实现),查询语句为:
      SELECT * FROM A UNION(或UNION ALL)
      SELECT * FROM B UNION(或UNION ALL)
      SELECT * FROM C;
     将快照的数据导出。
    如果只是一个表,你完全可以用INSER INTO ... SELECT ....,只不过要创建数据库连接,或先导入到不同的用户下。也可以用程序实现多表的处理。但这种办法不能解决LONG,LONG RAW,BLOB...等大对象数据。对与大对象数据需要单独处理。
     
      

  4.   

    我问一问 czhai(横扫千军) ,你写的格式里,并没有提到生成的文件名是什么?还有这个文件保存到哪里去了。
     如何单独备份一个或多个表?  
    命令详解: D:\>exp 用户/密码 tables=表
    D:\>exp 用户/密码 tables=(表1,…,表2)
    D:\>exp system/manager tables=(用户.表)
    D:\>exp system/manager tables=(用户1.表1,用户2.表2)可不可以再指点一下在下啊?谢谢啊
      

  5.   

    再问一问对于导入个别的表时,能不能在原有的表中进行记录的追 加,而不是重新建了一个表。我要把表中的记录进行汇总,而不是把表进行复制。我说过了几个服务器中的用户名,表等是完全一样的,只是表中的记录不会重复。我现在要把几个服务器的表的数据拿出来,然后在大服务器中把所有相同表的数据,全部放在一个大服务器的对应表中(指表结构完全相同)。如果没听懂我的意思,可以用QQ:82899588直接问我。我一直在线的,或者用[email protected]  多谢您 的帮助。在线真的是急啊。头上的汗~擦~
      

  6.   

    你要的不就是数据合并吗?用最简单的INSERT INTO ...SELECT .. FROM .. 就可以。
    至于三个不同的数据库根本不是问题。如果能够同时连接三个服务器,我是说你所说的“大服务器”可以通过DBLINK与其它服务器相连的话,就可以直接导入。
     假如连接A,B,C服务器的DBLINK分别为:DBLa ,DBLb , DBLc
      则可以在“大服务器”上执行这样的语句:
      Insert into 目标表名称 (Select * from 原表名称@DBLa union
                             Select * from 原表名称@DBLb union
                             Select * from 原表名称@DBLc );
      如果还没有创建表,可以直接用Create Table命令创建数据库表。
      如果已经存在目标表了,而且有数据,可以先删掉数据,然后再执行上面语句。如果不可以删除,则要判断是否存在,然后再执行INSERT IN命令。
      如果你的“大服务器”上只为了查询,统计等,可以直接使用快照(物理视图)来实现。  当然上面所说的是可以直接连接三个服务器,如果不能直接连接呢?
      灵活变通一下不就行了,你可以将三个服务器上导出的DMP分别导入到“大服务器”上不同用户下或导入一个“大服务器”可以直接访问的服务器上,再执行:INSERT IN 不就什么都解决了。 如果还有什么不明白可以用QQ与我联系:114796878,.cn