大家好,小弟昨天从一台机器上导数据,由于企业的数据库数据量非常大,我也只想建立一个测试环境而已,所以导数据的时候用的是如下语句:
exp file=c:\filename1.dmp owner=(数据库名) rows=n  意思就是导出来一个没有数据的备份文件,其实俺的意思就是导出结构,果然导出一个20多M的一个dmp文件来,但是在我自己的电脑上导入数据的时候发现久久也到不完(原来磁盘剩余空间17G左右),后来竟然提示磁盘空间不足,我一看才发现表空间文件都老大了,就是他们的事,所以我想到了可能导入的时候要保持和原服务器一致,所以开发出了那么大的空的表空间,所以我想到了压缩表空间执行alter database datafile 'D:\oracle\product\10.2.0\oradata\orcl\XXX.DBF' resize 1024M ,竟然报了一个错“ora-03297 文件包含在请求的resize 值以外使用的数据”,我自己的理解就是有部分的小数据在表空间的末尾处,而且末尾处在1024开外的地方,哪位Oracle高手帮小弟解解维阿,先谢过了....

解决方案 »

  1.   

    导出所有表结构:
    mkdir       c:\temp
    set       my_temp=c:\temp
    mkdir       e:\backup
    set       my_bakdir=e:\backup    
    set       my_tables=(t_base_tank)  
    exp   username/password@servername     file=%my_bakdir%\myexp.dmp       log=%my_bakdir%\myexp.log   buffer=1024000   tables=%my_tables%  
    rows=n
      

  2.   

    我要导出的数据库就是因为表里的数据太多了,所以我用rows=n来控制一下,然后我用另外一种方式导出每个表的前2000行,以为分两步导入先导入结构,再导入后来的比较少的数据,结果第一步就没过去,表空间文件越来越大,后来把我的磁盘空间吃没了,兄弟们有什么良策没有,帮帮忙吧........55555
      

  3.   

    如果要导出视图的话就改成view就可以了
      

  4.   

    要不楼主参考下这个:
    1.创建目录utl_dir用于存放导出的创建脚本
    create or replace directory utl_dir as 'd:\';2.给所有用户赋予读写utl_dir的权限
    grant write,read on directory utl_dir to public;3.创建存储过程,用来导出所有对象(表、索引、视图、同义词)的创建脚本
    create or replace procedure exportddl_all(p_filename varchar2) is
    begin  for x in (select table_name from user_tables) loop
           exportddl('TABLE',x.table_name,p_filename);
      end loop;  for x in (select index_name from user_indexes) loop
           exportddl('INDEX',x.index_name,p_filename);
      end loop;  for x in (select view_name from user_views) loop
           exportddl('VIEW',x.view_name,p_filename);
      end loop;  for x in (select synonym_name from user_synonyms) loop
           exportddl('SYNONYM',x.synonym_name,p_filename);
      end loop;end exportddl_all;4.使用过程导出scott用户所有对象的创建脚本
    conn scott/tigerexec exportddl_all('123');
      

  5.   

    exportddl是什么函数啊,是系统自带的么
      

  6.   

    exp file=c:\filename1.dmp owner=(数据库名) rows=n 这里这个owner是指你要导出那个方案下的数据对象啊,这里应该是你要指定的用户方案啊,你指定数据库名干嘛啊?
    如果你只想到数据的话,可以在指定rows来指定数据。
      

  7.   

    感觉和exp没有关系吧。表空间是你导入前建立的。和exp有什么关系呢。你可以查查看看是哪个数据文件膨胀的厉害了。这里没有data。变化的也就是system表空间而已。