--一、 登录sys用户,查询XXX_SCL表空间下所有用户并备份。记录需恢复的用户
select * from dba_users d where d.default_tablespace='XXX_SCL';
--登录给用户授权的相应DBA账号,查询需恢复用户的权限并备份
select * from user_tab_privs where grantee='XXXXX' order by table_name;
--二、查询XXX_SCL表空间的数据文件路径并备份
select * from dba_data_files db where db.TABLESPACE_NAME='XXX_SCL';
--三、导出数据文件备份
--查询数据字典路径
select * from dba_directories d where d.directory_name='XXXX_DATA'; --D:\XXX\XXXXX
--导出数据文件
expdp XXXX/XXXX directory=XXXX_DATA dumpfile=file_gd_20180405_01.dmp logfile=file_gd_20180405_01.log;
--清除需删除的表数据
--导出表清除后的数据文件
expdp XXXX/XXXX directory=XXX_DATA dumpfile=file_gd_20180405_02.dmp logfile=file_gd_20180405_02.log;
--四、删除用户及用户下的对象
select 'drop user '||d.username||' cascade;' from dba_users d where d.default_tablespace='XXX_SCL';
其中遇到部分账号删除时报错:无法删除当前连接用户,处理方法如下:
select username,sid,serial# from v$session where username='XXXX';--查询无法删除的账号存在哪些进程
alter system kill session'1,27367' ;--删除该进程
删除后即可正常删除账户
--五、删除表空间及对应的表空间文件,删除完成后到备份的数据文件目录下查看数据文件是否被删除
drop tablespace XXX_SCL including contents and datafiles cascade constraint;
/*
--删除非空表空间,但是不包含物理文件
drop tablespace tablespace_name including contents;
--删除空表空间,包含物理文件
drop tablespace tablespace_name including datafiles;
--删除非空表空间,包含物理文件
drop tablespace tablespace_name including contents and datafiles;
--如果其他表空间中的表有外键等约束关联到了本表空间中的表的字段,就要加上CASCADE CONSTRAINTS
drop tablespace tablespace_name including contents and datafiles CASCADE CONSTRAINTS;
*/
表空间删除后,路径下数据文件还存在,按照百度方法在该文件上直接创建表空间再删除,数据文件仍未删除。
在文件夹中直接删除该文件,报错该文件已在OracleServiceXXXSCL中打开,无法删除。此时停止服务器所有开启的ORACLE服务,再次删除即成功。
删除成功后开启相应ORACLE服务(注意服务开启顺序)。
--六、创建表空间
create SMALLFILE tablespace XXX_SCL datafile 'E:\APP\XXXX\XXX.DBF' size 3000M autoextend on next 10M
MAXSIZE UNLIMITED NOLOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO DEFAULT NOCOMPRESS;
/*
SMALLFILE:此为oracle10g中加入的新特性。默认创建的表空间就是smailfile类型的,可以支持1022个数据文件个数,而如果在创建表空间的时候显示加上bigfile关键字,
那么创建的就是大数据类型的表空间,这样的表空间的数据文件最多只能为一个,不能使用add datafile扩展。这个大数据文件,最大可以为4GB个块的大小。
创建表空间大小为300m,采用自动扩展方式,每次扩展10m,不限制空间大小
EXTENT MANAGEMENT LOCAL 存储区管理方法 LOCAL方式为本地管理
(在Oracle 8i以前,可以有两种选择,一种是在字典中管理(DICTIONARY),另一种是本地管理(LOCAL ),从9I开始,只能是本地管理方式.因为LOCAL 管理方式有很多优点.
在字典中管理(DICTIONARY): 将数据文件中的每一个存储单元做为一条记录,所以在做DM操作时,就会产生大量的对这个管理表的Delete和Update操作.做大量数据管理时,将会产生很多的DM操作,严得的影响性能,同时,长时间对表数据的操作,会产生很多的磁盘碎片,这就是为什么要做磁盘整理的原因.
本地管理(LOCAL): 用二进制的方式管理磁盘,有很高的效率,同进能最大限度的使用磁盘. 同时能够自动跟踪记录临近空闲空间的情况,避免进行空闲区的合并操作。)
SEGMENT SPACE MANAGEMENT AUTO : 磁盘扩展管理方法 AUTO方式指该表空间的所有块均采用自动管理方式。
(使用该选项时区大小由系统自动确定。由于 Oracle 可确定各区的最佳大小,所以区大小是可变的。)
*/
--七、新建需恢复的账户
--八、导入数据文件
impdp XXX/XXXX directory=XXX_DATA dumpfile=file_gd_20180405_02.dmp;
导入数据文件时,会把相关账户的权限恢复,若存在账号未重建,导入时会报错。
--九、检查导入的数据有无问题