小弟想删除某用户下所有表的数据,但不要删除表的结构,怎么办,要彻底删除,因为我的目的是腾出空间,就是删除后要硬盘的大小变大,谢谢

解决方案 »

  1.   

    declare
    strcommit varchar2(10);
    strdel varchar2(100);
    cursor cur_name is select table_name from user_tables ;
    v_tablename user_tables.table_name%type;
    begin
    open cur_name;
    loop
    fetch cur_name into v_tablename;
    exit when cur_name%notfound;
    dbms_output.put_line(v_tablename);
    strdel:='delete '||v_tablename;
    strcommit:='commit;' 
    execute immediate strdel ;
    --execute immediate strcommit ;
    end loop;
    close cur_name;
    end;未提交如要提交把注释那段的注释去掉就可以拉如果表中有外键可能会报错的!
      

  2.   

    exp rows=no 导出一份不带数据的dmp文件
    删除这个用户并重建
    imp导入dmp文件
      

  3.   

    先exp再impexport username/password full=y file=yourdata.dmp  grants=y  rows=n   
    import username/password full=y ignore=y   file=yourdata.dmp   grants=y 
      

  4.   

    个人觉得比较简单的办法
    在命令模式下输入SET PAGES 999,select 'drop table ' || table_name || ';' from user_tables;
    然后执行输出的语句就好了。如:
    SQL> set PAGES 999;
    SQL> select 'drop table ' || table_name || ';' from user_tables;
      

  5.   

    哦,不好意思,看错了。不过你把drop table换成truncate 就可以了
      

  6.   

    建议先truncate table
    再alter   tablespace   tablespace_name   coalesce
      

  7.   

    select   'truncate   table   '   ¦ ¦   table_name   ¦ ¦   ';'   from   user_tables ;
    记得加where条件字句,这样不记日志会快很多的;
      

  8.   

    为什么没人用delete table tablename;delete万一删除还可以通过回滚返回,还有为什么要set pages 999;
      

  9.   

    综合考虑还是先exp rows=no,再imp 
      

  10.   

    删除数据并不能会使硬盘空间变大, 在定义数据库的时候已指明数据库的大小.现在都采用SICS硬盘, 容量不足加一块就是了.
      

  11.   

    安装一个TOAD,再到TABLESPACE选项页,看一下数据文件的使用率是多少,如果是使用率很底,可以直接修改文件的大小,达到楼主的目的
    select 'delete from  table'||table_name||';'from user_tables;