我的数据库blob字段主要是用于存放图片,对我的意义不大,由于Blob字段内容太多,所占空间太大,我想导出数据库中不导blob字段的内容,或者说不导出它所在的空间,如何操作啊,我的数据库是Oracle9i的,谢谢!

解决方案 »

  1.   

    我的意思就是不想导出blob那部分,有那部分文件太大,请问如何导出?
      

  2.   

    用表模式不知道是否符合你的要求,把不包括blob的表列出来,对于包括blob的表,可以用
    create table a as select..
    的方式创建一个表,把blob置换为empty_blob()
    然后导出不包括blob的表导出命令为:
    exp username/passwd file=myfile.dmp log=myfile.log tables=table1,table2,...,tablen
      

  3.   

    谢谢zcs_1 ,这也是一个可行的方法但是我的库表特别多,有一、二百个呢,要是用tables=去列出来的话太麻烦了,有没有反选的方法,呵呵,就是列几个表在那,导出没有列出的表呢?
    或是还有其它更简捷的方法吗?谢谢!
      

  4.   

    让你写上这些表也是不现实的 ,但是你可以使用plsql 把需要导出的表拼成一个字符串 
    然后使用 exp username/passwd file=myfile.dmp log=myfile.log tables=table1,table2,...,tablen ,直接粘帖过去 
      

  5.   

    Oracle也注意到这个问题,在Oracle10g中给数据泵(data pump)加上了EXCLUDE参数,可以反选,但是在exp和imp命令上就没有长劲,估计以后要把exp和imp取消用expdp和impdp代替了
      

  6.   

    我建议楼主用参数文件,把所有的参数放到这个文件中,如:
    exp spfile=myspfile.txt其中myspfile.txt的内容为userid=scott/tiger
    file=myexp.dmp
    log=myexp.log
    tables=table1,
    table2,
    table3,
    table4,
    ...
    tablen其中tables参数部分可以用SQLPLUS得到,在sqlplus下,执行SQL>SELECT table_name||',' from user_tables where table_name not in(select table_name from user_lobs);注意对得到的结果要进行编辑,去掉最后的逗号
      

  7.   

    exp 导出数据本身就无法导出BLOB字段.
      

  8.   

    不好意思,EXP是可以导入导出BLOB的
      

  9.   

    这个确实比较麻烦
    1、用create table 的方式是可以,但是这个方式的表空间和索引好像会丢失
    2、处理上比较麻烦:要用bat文件 调用exp imp  sqlplusw  命令
    如果直接exp imp 好像没有直接达到效果,这个还是有难度的题目 
      

  10.   

    楼主可以用不同版本的ORACLE客户端和服务端试试;也就是说:用9I.0.1版本的客户端去连9I.1.1版本的服务端,反正就是将客户端和服务端的版本不一致就行;这样导出来的数据库只要有BLOB和CLOB的字段的表都会导不出来.正好符合你的需求!哈哈……
      

  11.   

    to zcs_1
    我必须导出BLOG
      

  12.   

    首先在user_column 那个表里把列类型是blob的表名都提取出来,然后汇聚在一起,是在不行就把表名复制出来用ue列编辑好了呃好久没碰数据库了,不晓得上面的那个user表写的对不对。