drop 一个表后,实际上并没有真正删除,放在回收上中,通过user_recyclebin可以进行恢复。
具体用法如下:
select * from user_recyclebin; flashback table "BIN$1ygq8CJTQQm2mzqm90N/rg==$0" to before drop ;
外键的删除,启用,禁用
select 'alter table ' || table_name || ' disable constraint ' || constraint_name || ';' from user_constraints where constraint_type='R'; select 'alter table ' || table_name || ' enable constraint ' || constraint_name || ';' from user_constraints where constraint_type='R'; select 'alter table ' || table_name || ' drop constraint ' || constraint_name || ';' from user_constraints where constraint_type='R';
说明:constraint_type R表示外键 forgien key,P表示主键 primary,C表示check
创建数据库中所有索引如下:
select 'create index ' || ui.index_name || ' on ' || ui.table_name || '(' || uic.COLUMN_NAME || ' ' || uic.DESCEND || ') ;' from user_indexes ui, user_ind_columns uic where ui.index_name = uic.index_name;
以上存在一个问题,假如一个表有联合索引,在user_ind_columns中会有多条记录,但索引名都一样,只是列名不同,在创建索引时会提出"名称已由现有对象使用"的错误,以下SQL会解决这个问题:
select 'create index ' || ui.index_name || ' on ' || ui.table_name || '(' || listagg(uic.COLUMN_NAME, ',') within group(order by uic.COLUMN_POSITION) || ' ' || uic.DESCEND || ') ;' from user_indexes ui, user_ind_columns uic where ui.index_name = uic.index_name group by ui.index_name, ui.table_name, uic.DESCEND;
注意:listagg函数只能在11G中使用
更改索引的表空间如下:
select 'alter index ' || index_name || ' rebuild tablespace newTablespace;' from user_indexes
重新创建指定用户下所有索引如下:
select 'drop SEQUENCE ' || x.sequence_owner || '.' || x.sequence_name || ';' from all_sequences x where x.sequence_owner = 'OWNER'; select 'create SEQUENCE ' || x.sequence_owner || '.' || x.sequence_name || ' MINVALUE 1 MAXVALUE 99999999999999999999 INCREMENT BY 1 START WITH ' || x.last_number || ' CACHE 20 NOORDER NOCYCLE' || ';' from all_sequences x where x.sequence_owner = 'OWNER';
重新编译存储过程如下:
select 'alter procedure ' || object_name || ' compile;' From all_objects where status = 'INVALID' and object_type = 'PROCEDURE';
查看所有表的名称,大小,注释等信息
select z.table_name, z.num_rows, bytes / 1024 / 1024 MByte, A.COMMENTS from all_tables z, all_tab_comments A, dba_segments s where A.owner = 'OWNER' AND Z.TABLE_NAME = A.TABLE_NAME and z.table_name = s.segment_name order by num_rows desc;
重新建立同义词如下:
select 'DROP SYNONYM ' || A.TABLE_NAME ||';' from all_tables A where owner in ('OWNER'); select 'create or replace synonym ' || A.TABLE_NAME || ' for ' || A.OWNER || '.' || A.TABLE_NAME || ';' from all_tables A where owner in ('OWNER');
更改所有表空间:
select 'alter table ' || table_name || ' move tablespace newTablespace;' from user_tables;
查看所有表的注释:
select 'comment on table ' || owner || '.' || table_name || ' is ''' || replace(replace(comments, chr(9), ''), chr(10), ' ') || ''';' from all_tab_comments where owner = 'OWNER'
查看所有列的注释:
select 'comment on table ' || owner || '.' || table_name || ' is ''' || replace(replace(comments, chr(9), ''), chr(10), ' ') || ''';' from all_tab_comments where owner = 'OWNER'