我们测试环境经常会遇到恢复生产数据的情况,我一般比较习惯使用数据泵来搞,这个具体根据自己的业务形态选择适合自己的方式。
此次我们说的是完全恢复用户数据,具体步骤如下:
1.删除用户及用户下的数据
drop user test cascade;
一般我们会遇到如下报错,说明还有此用户的链接,我们要联系管理员关闭应用接口程序。
drop user test cascade
*
ERROR at line 1:
ORA-01940: cannot drop a user that is currently connected
再次尝试成功
drop user test cascade;
User dropped.
2.创建用户
SQL> create user test identified by oracle default tablespace USERS temporary tablespace TEMP;
User created.
3.给用户赋权
SQL> grant connect,resource,dba to fyerp;
Grant succeeded.
4.创建数据泵目录(此目录必须存在并赋权oracle用户)
SQL> create directory DBBAK as '/bak';
Directory created.
5.查看目录是否存在
SQL> select * from all_directories;
6.将目录赋权给用户
SQL> grant read,write on directory DBBAK to test;
Grant succeeded.
7.导入用户数据
[oracle@test1 ~]$ impdp test/oracle dumpfile=test20200616.dmp logfile=test20200616.log directory=DBBAK
如果需要指定表 tables=t1,t2
remap_table=t1:t11,t2:t22
注:我的dmp文件只备份的test用户数据,所以没使用schemas参数,数据泵参数详见ORACLE数据库数据泵备份与恢复
8.可以用下面这个SQL检查一下两边一致性
select OBJECT_TYPE,COUNT(*) from all_objects where OWNER='TEST' group by OBJECT_TYPE;