我们测试环境经常会遇到恢复生产数据的情况,我一般比较习惯使用数据泵来搞,这个具体根据自己的业务形态选择适合自己的方式。

此次我们说的是完全恢复用户数据,具体步骤如下:

1.备份数据

expdp test/test dumpfile=test.dmp logfile=test.log directory=DBBAK cluster=no schemas=test,user01

1.删除用户及用户下的数据

drop user user01 cascade;

一般我们会遇到如下报错,说明还有此用户的链接,我们要联系管理员关闭应用接口程序。

drop user tuser01 cascade
*
ERROR at line 1:
ORA-01940: cannot drop a user that is currently connected

再次尝试成功

drop user user01 cascade;

User dropped.

注:如果删除项目较多较大的用户,卡在drop user user01 cascade 这个状态下的时间会比较久,我们可以通过下面语句查看项目是否在被删除

select count(*) from dba_objects where owner='USER01';

如果发现项目数很久不减少,可尝试重启实例后再执行删除操作(如生产环境需保证其他用户处于停机时间中)

2.创建用户

SQL> create user user01 identified by oracle default tablespace USERS temporary tablespace TEMP;

User created.

如果表空间不存在,需要先创建表空间

create tablespace 表间名 datafile '数据文件名' size 表空间大小
create tablespace test datafile '/oracle/oradata/test/test01.dbf' size 3000M;

添加数据文件

alter tablespace TEST add datafile '/oracle/oradata/test/test02.dbf' size 2000M;

临时表空间

alter tablespace TEMP add tempfile '/oracle/oradata/test/temp02.dbf' size 2000M;

3.给用户赋权

SQL> grant connect,resource,dba to user01;

Grant succeeded.

4.创建数据泵目录(此目录必须存在并赋权oracle用户)

SQL> create directory DBBAK as '/bak';

Directory created.

5.查看目录是否存在

SQL> select * from all_directories;

如果目录已存在,可以删除原有目录

SQL> drop directory DBBAK;

Directory dropped.

6.将目录赋权给用户

SQL> grant read,write on directory DBBAK to user01;

Grant succeeded.

7.导入用户数据

[oracle@test1 ~]$  impdp user01/oracle dumpfile=test20200616.dmp logfile=test20200616.log directory=DBBAK

如果需要指定表  tables=t1,t2

remap_table=t1:t11,t2:t22

注:我的dmp文件只备份的test用户数据,所以没使用schemas参数。

REMAP_SCHEMA=orcl:test    --orcl用户下面数据导入到test用户下  使用此参数

remap_tablespace=tablespace01:tablespace02     --如果导入用户对应的表空间为tablespace02 则使用此参数

TRANSFORM

导入和导出的时候,有些表空间不一样。比如导出的时候该对象是在A表空间,导入到另一个库没有表空间A就会报错。但是使用这个参数就会正常导入,该对象会存储在该用户下的默认表空间中。

常用TRANSFORM=segment_attributes:n

如果expdp时使用了parallel并行参数配合%U

RQ=`date +20%y-%m-%d`

expdp test/test dumpfile=test-$RQ-%U.dmp logfile=test-$RQ.log parallel=4 directory=BAK1 cluster=N schemas=user01,user02

impdp test/test dumpfile=test-2021-05-25-%U.dmp logfile=test20210525.log parallel=4 directory=BAK1 schemas=user01,user02

有时会用到transform=OID:N参数

数据泵参数详见ORACLE数据库数据泵备份与恢复

8.可以用下面这个SQL检查一下两边一致性

select OBJECT_TYPE,COUNT(*) from all_objects where OWNER='TEST' group by OBJECT_TYPE;

最新文章

  1. VS2010添加资源文件
  2. Yii2.0 GridView 新增添加按钮
  3. ASP.NET 5 :上传文件(转)
  4. Javascript中最常用的61段经典代码
  5. Js获取当前日期时间及其它操作(转)
  6. URAL1012. K-based Numbers. Version 2
  7. HDU_2022——海选女主角
  8. iOS 8以上的设置的跳转
  9. java的大数类
  10. STL之deque(双向队列)
  11. 开启属于你的GNOME桌面
  12. HTTPS从认识到线上实战全记录
  13. CentOS 7安装Oracle 11gR2以及设置自启动
  14. [Deep Learning] 常用的Active functions & Optimizers
  15. php 常用的自定义函数
  16. CXF安装和配置时出现Exception in thread "main" java.lang.UnsupportedClassVersionError:异常?
  17. iOS UIView 选择性倒角
  18. java开发师笔试面试每日12题(2)
  19. C++ std::pair的用法
  20. LeetCode Weekly Contest 32

热门文章

  1. 每次 git 都需要输入用户名和密码的解决办法
  2. JAVA查漏补缺 1
  3. golang windows程序获取管理员权限(UAC )
  4. vs MFC c++ rc文件的dilog打不开,显示加载失败
  5. Account Manager privacy agreement
  6. Java基础学习:8、构造器(构造方法)和this
  7. element-ui学习之-------input表单验证【各种情况总结】
  8. (原创)odoo中字段默认值的获取顺序
  9. Springboot开发微信支付API-V3
  10. 4口高速USB 2.0 HUB控制器 DPU1.1S,兼容替代FE1.1S