两个误解了的问题

来源:互联网 发布:android源码哪里下 编辑:程序博客网 时间:2024/05/01 21:28

第一个问题:

       我原本以为当create 了用户,并且为该用户指定了默认的表空间,使用imp时,数据肯定会存到该用户的默认表空间中的,但其实不然。详细描述如下:我用A用户导出了dmp文件,A用户的默认表空间是users ,我想把A用户的数据imp到B用户中,而B的默认表空间是tablespace_B,这样,当我导入A用户的数据到B用户时,此时B用户的数据是存在A的默认表空间users中的,遇到这种问题,解决的方法有三个:

     1、使用alter 语句将B的表挪到B的默认表空间中。

     2、使用expdp 生成dmp文件,然后impdp 时通过使用remap_tablespace:users:tablespace_B ,这样实现表空间的映射。

     3、使用plsqldeveloper 导出全部的对象的sql,讲sql中表空间的名字改为tablespace_B,或者是导出时选择不包含存储信息,将这个sql文件在B用户下执行,然后导入是使用ignore=Y ,这样数据也会存到B的默认表空间中。

    对上述问题的补充:出现上述问题的原因是因为在导入A用户的数据时,A用户的默认表空间B用户是可见的,这种情况多发生在同库不同用户之间;如果在不同库间导入时,如果B用户发现不了A用户的默认表空间,即A、B是不同库的,在B用户所在的库中是不存在A用户的默认的表空间的,那么数据会被正确的导入到B用户的默认的表空间中。因此得出的结论是:imp导入时搜索表空间的顺序是:首先搜索导出的数据中指定的表空间,如果找不到才会导入到导入用户的默认表空间中!

第二个问题:

       我原本以为含有BLOB类型的表在表空间不同时是不能实现exp,imp的,实际不然。源数据所在的数据库版本10.1,目的数据库版本为10.2,想通过10.2 的客户端exp出10.1 上的,不可能的,根本不让链接。我尝试了用9i的客户端,导出,但是含有blob类型的数据根本导不出来,更别谈导入。后来尝试用10.1 的客户端能完全的导出 ,在目的数据库上新建用户,然后导入,blob类型的表能够成功导入,一点问题没有。

 

总结:

        有些时候可能自己认为完全正确的东西,实际上不是那样的,blob类型的换表空间导入在9i之前是不可以的,但是在10g及之后的版本中已经改好了。

 

原创粉丝点击