用于在 Bambo 数据泵进程期间清理数据库的 Oracle 脚本

问题描述 投票:0回答:1

我将准备一个自动化的 Oracle 脚本,用于在数据泵过程中通过 Bambo 清理数据库。

到目前为止,我在 sql Developer 中手动执行这些查询,以便在导入数据泵文件之前清理数据库。

select 'drop TABLE ' || object_name || ';' from user_objects where object_type = 'TABLE';

select 'drop view ' || object_name || ';' from user_objects where object_type = 'VIEW';

select 'drop INDEX ' || object_name || ';' from user_objects where object_type = 'INDEX';

select 'drop PACKAGE ' || object_name || ';' from user_objects where object_type = 'PACKAGE';

select 'drop TYPE ' || object_name || ';' from user_objects where object_type = 'TYPE';

select 'drop sequence ' || object_name || ';' from user_objects where object_type = 'SEQUENCE';

select 'drop synonym ' || object_name || ';' from user_objects where object_type = 'SYNONYM';

select 'drop PROCEDURE ' || object_name || ';' from user_objects where object_type = 'PROCEDURE';

select 'drop FUNCTION ' || object_name || ';' from user_objects where object_type = 'FUNCTION';

select 'drop DATABASE LINK ' || object_name || ';' from user_objects where object_type = 'DATABASE LINK';

select 'drop JOB ' || object_name || ';' from user_objects where object_type = 'JOB';

select 'drop MATERIALIZED VIEW ' || object_name || ';' from user_objects where object_type = 'MATERIALIZED VIEW';

我现在需要自动执行这些下降,无需任何手动操作。因此,我需要创建 sql 脚本来删除这些对象:TABLE、VIEW、MATERIALIZED VIEW、INDEX、PACKAGE、TYPE、SEQUENCE、SYNONYM、PROCEDURE、FUNCTION、DATABASE LINK 和 JOB

我完成了这个脚本:

BEGIN
   FOR cur_rec IN (SELECT object_name, object_type
                   FROM user_objects
                   WHERE object_type IN
                             ('TABLE',
                              'VIEW',
                              'MATERIALIZED VIEW',
                              'PACKAGE',
                              'TYPE',
                              'PROCEDURE',
                              'FUNCTION',
                              'SEQUENCE',
                              'SYNONYM',
                              'INDEX',
                              'DATABASE LINK',
                              'JOB',
                              'PACKAGE BODY'
                             ))
   LOOP
      BEGIN
         IF cur_rec.object_type = 'TABLE'
         THEN
            EXECUTE IMMEDIATE 'DROP '
                              || cur_rec.object_type
                              || ' "'
                              || cur_rec.object_name
                              || '" CASCADE CONSTRAINTS';
         ELSE
            EXECUTE IMMEDIATE 'DROP '
                              || cur_rec.object_type
                              || ' "'
                              || cur_rec.object_name
                              || '"';
         END IF;
      EXCEPTION
         WHEN OTHERS
         THEN
            DBMS_OUTPUT.put_line ('FAILED: DROP '
                                  || cur_rec.object_type
                                  || ' "'
                                  || cur_rec.object_name
                                  || '"'
                                 );
      END;
   END LOOP;
   FOR cur_rec IN (SELECT * 
                   FROM all_synonyms 
                   WHERE table_owner IN (SELECT USER FROM dual))
   LOOP
      BEGIN
         EXECUTE IMMEDIATE 'DROP PUBLIC SYNONYM ' || cur_rec.synonym_name;
      END;
   END LOOP;
END;

我不确定它是否完全符合我的需求以及是否会进行优化(没有任何可能的问题)。

你能帮我吗?

提前感谢您的帮助

oracle bamboo drop datapump
1个回答
0
投票

我建议

DROP SCHEMA schema_name CASCADE
担任 DBA。

然后使用

CREATE USER...
重新创建用户 完全干净且更易于管理,因为您不必担心尚未编码的对象类型。

© www.soinside.com 2019 - 2024. All rights reserved.