哦,我的DMP是从9i上用exp备份出来的,而现在要倒进去的是8i 。再则,每个表里面至少有一个字段是唯一的,是其它表关连的主键 。有没有现成的script。

解决方案 »

  1.   

    dmp和本地库都有内容,且不一定一致,有部是更新的,有部分是新的,而本地库的内容更多,怎么能随便用imp呢?我想过用以下方法:
    //插入不存在库中的记录
    INSERT INTO person_tab@db_link(...)
     SELECT SEQ_NUM.NEXTVAL,... FROM person_tab WHERE person_on
    NOT IN 
     (SELECT person_no FROM person__tab@db_link)//处理education_tab...
    //插入不在education_tab的记录
    INSERT INTO education_tab@db_link(...)
     SELECT SEQ_NUM.NEXTVAL,... FROM education_tab WHERE  education_no 
    NOT IN
     (SELECT education_no FROM person_education_tab@db_link)......不知是否可行?但如果是更新的数据呢?如何处理?
      

  2.   

    还有,如果主键值与sequence有关,最好先插入参照表中的主键值,不要用sequence生成,做完操作后,可以做个函数使sequence的当前值变得合理,也可以修改sequence
      

  3.   

    有没有如何更新的语句?对了,怎么查看当前sequence的值?
      

  4.   

    可以从user_sequences中查到,就是那个last_number字段
    也可以看看有关sequence的帮助,应该有这方面的说明"有没有如何更新的语句?"
    什么意思?更新什么?
      

  5.   

    不好意思,last_number是sequence的nextval
      

  6.   

    谢谢 chenyanzhen(大法师),
    我查看到了sequence的值了: 
    select last_number from seq where sequence_name = 'sequence_name'
    我的问题是这样的,
    我从分部上备份了一个dmp回来,要更新进我现在总部数据库中,但出现在问题如下:
    1)分部用的是oracle9i ,总部用的是oracle8i
    2) 这个dmp和总部的数据有部分是相同的,因为分部的初始数据是从总部拿过去的;
    3)当然,dmp中有部分数据做了更新;
    4) 有部分数据是分部自行加的,但可能数据序号和总部的一样。我现在想不出什么好的办法更新。对不起,顺便说一下,我是一个oracle初学者。
    大致的tab如下:1. PERSON_TAB
       PERSON_NO                                 NOT NULL NUMBER(11)
       NAME                                      NOT NULL VARCHAR2(8)
       ID                                                 VARCHAR2(15)
       SEX                                                VARCHAR2(1)2.EDUCATION_TAB
      EDUCATION_NO                       NOT NULL NUMBER(10)
      PERSON_NO                                 NOT NULL NUMBER(11)
      BEGIN_DATE                                         DATE
      END_DATE                                           DATE
      EDUCATION_SCHOOL                                   VARCHAR2(50)
      SPECIALITY                                         VARCHAR2(50)
      ACHIEVE_DEGREE                                     VARCHAR2(2)4.WORK_TAB
      WORK_NO                            NOT NULL NUMBER(10)
      PERSON_NO                          NOT NULL NUMBER(11)
      BEGIN_DATE                                  DATE
      END_DATE                                    DATE
      UNIT_NAME                                   VARCHAR2(50)
      DEPARTMENT                                  VARCHAR2(50)
      DUTY                                        VARCHAR2(20)
      

  7.   

    我也希望有,但是真的没有,至少我知道的。而且表记录都是几万以上的,我试过:
    select count(*) from local.person_tab a, person_tab@db_link b 
       where a.person_no!=b.person_no sql_plus就死掉了。更新的记录项是没有的。 有没有现成的例子(同种库表的移植)?至少可以从中得到启示。