我想删除与架构相关的所有对象,这可以通过我之前使用的以下查询实现: -
USER_SCHM_NAME=Employee
$ORACLE_HOME/bin/sqlplus -s / as sysdba <<EOF >>$ORA_ERR
set feedback off
set echo off
set trimspool on
set termout off
set serveroutput on size 100000 format wrapped
set lines 500
set pages 0
spool /tmp/drop_obj_$ORACLE_SID_$DATE2.sql
select 'drop table ${USER_SCHM_NAME}.'||table_name||' cascade constraints;' from dba_tables where owner='${USER_SCHM_NAME}' order by table_name;
select 'drop '||object_type||' ${USER_SCHM_NAME}.'||object_name||';' from dba_objects where owner='${USER_SCHM_NAME}' order by object_type;
select 'drop type ${USER_SCHM_NAME}.'||object_name||';' from dba_objects where owner='${USER_SCHM_NAME}' and object_type='TYPE';
select 'drop operator ${USER_SCHM_NAME}.CONVERTTYPES;' from dual;
select 'purge dba_recyclebin;' from dual;
spool off
spool /tmp/op_drop_obj_$ORACLE_SID_$DATE2.log
@/tmp/drop_obj_$ORACLE_SID_$DATE2.sql
spool off
EOF
现在我想删除所有对象,排除与该表相关的两个表和对象,如索引,触发器,过程,函数,包..
我使用下面的查询来排除这两个表: -
select 'drop table ${USER_SCHM_NAME}.'||table_name||' cascade constraints;' from dba_tables where owner='${USER_SCHM_NAME}' and table_name not in ('EMPLOYEE_DETAIL', 'EMPLOYEE_ACCOUNT_DETAILS') order by table_name;
但是如何排除与这两个表相关的对象,请帮助我
1 回答
我建议你单独删除单个
object_types
(索引,触发器,过程,函数,包),而不是像这样使用单个drop语句 .您也可以使用类似的东西排除约束,索引,触发器,过程,函数,包,而不是明确地使用上面的语句 .
user_source
排除应该处理触发器,包,过程,函数