oracle 10gr2 based on debian现在我想要在安装完毕后运行一个建表空间的脚本
要能够判断是否已经存在表空间,如果存在,删除原来的表空间和相关的文件表空间有3类:
    用户表空间
    temp表空间
    undo表空间希望脚本能自动执行,不需要人工干预,不要报错比如 create tablespace AAA XXX等待oracle报错是不行的,因为这样我就不能将这个tablespace恢复到最初的状态

解决方案 »

  1.   

    --1、在sqlplus的脚本命令中没有条件判断。一般的做法是先删除再重建,
    如果drop前对象不存在,报错不可避免。如:
    dorp tablespace tbl_aa;
    create tablespace tbl_aa...--2、当然,你可以在pl/sql中使用动态SQL来完成,但很少有人这样做。如,创建一个tb01表空间:
    DECLARE
      cnt PLS_INTEGER;
    BEGIN
      SELECT COUNT(*)
        INTO cnt
        FROM dba_tablespaces t
       WHERE t.tablespace_name = upper('tb01');
      IF cnt > 0 THEN
        EXECUTE IMMEDIATE 'drop tablespace tb01 including contents and datafiles';
      END IF;
      EXECUTE IMMEDIATE 'create tablespace tb01 datafile 
          ''D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\TB01.DBF'' size 10m';
    END;
    /
      

  2.   


    --用户表空间
    CREATE TABLESPACE data01
    DATAFILE '/oracle/oradata/db/DATA01.dbf' SIZE 500M
    UNIFORM SIZE 128k
    /
    --undo表空间
    CREATE UNDO TABLESPACE UNDOTBS02
    DATAFILE '/oracle/oradata/db/UNDOTBS02.dbf' SIZE 50M
    /
    --temp表空间
    CREATE TEMPORARY TABLESPACE temp_data
    TEMPFILE '/oracle/oradata/db/TEMP_DATA.dbf' SIZE 50M
    /http://www.adp-gmbh.ch/ora/sql/create_tablespace.html
      

  3.   

    1楼的方法我用过了,但是无法删除相关文件,只能drop掉表空间,不知这个是为什么
      

  4.   

    回2楼的,我是想要能够智能判断,如果有表就删除重建,或者类似有表就不做这样的东西,
    就像
    create table t2 if not exists之类的
      

  5.   

    如果表空间包含数据库对象
    drop tablespace tablespace_name include content  
    如果两个表空间之间存在完整性约束
    drop tablespace tablespace_name include content  cascade constraints