还原oracle数据库-九五小庞
- 创建表空间及用户
Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。
C:\Users\pxy>sqlplus/nolog
SQL*Plus: Release 11.2.0.1.0 Production on 星期日 8月 30 15:54:19 2020
Copyright (c) 1982, 2010, Oracle. All rights reserved.
SQL> select name from v$datafile;
SP2-0640: 未连接
SQL> conn/as sysdba
已连接。
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
E:\APP\PXY\ORADATA\PXY\SYSTEM01.DBF
E:\APP\PXY\ORADATA\PXY\SYSAUX01.DBF
E:\APP\PXY\ORADATA\PXY\UNDOTBS01.DBF
E:\APP\PXY\ORADATA\PXY\USERS01.DBF
SQL> create temporary tablespace RIS_TEMP
2 tempfile 'E:\APP\PXY\ORADATA\PXY\RIS_TEMP.dbf'
3 size 200m
4 autoextend on
5 next 200m maxsize 20480m
6 extent management local;
表空间已创建。
SQL> create tablespace RIS_DATA
2 logging datafile 'E:\APP\PXY\ORADATA\PXY\RIS_DATA.dbf'
3 size 200m autoextend on
4 next 200m maxsize 20480m
5 extent management local;
表空间已创建。
SQL> create user ris identified by jfris_1234
2 ACCOUNT UNLOCK
3 default tablespace RIS_DATA
4 temporary tablespace RIS_TEMP;
用户已创建。
SQL> grant connect,resource,dba to ris;
授权成功。
SQL> commit;
提交完成。
SQL>
- 还原数据库
(1)imp导入dmp文件
imp 用户名/密码@127.0.0.1/orcl file=E:\yxb\yx_base.dmp log= E:\yxb\yx_base.log owner=用户名
(2)impdp ris/jfris_1234@orcl dumpfile=ris20200830.DMP directory=mydata remap_tablespace=RIS_DATA:RIS_DATA remap_schema=RIS:RIS logfile=RIS20200830.log table_exists_action=replace
table_exists_action参数说明
使用imp进行数据导入时,若表已经存在,要先drop掉表,再进行导入。
而使用impdp完成数据库导入时,若表已经存在,有四种的处理方式:
1) skip:默认操作
2) replace:先drop表,然后创建表,最后插入数据
3) append:在原来数据的基础上增加数据
4) truncate:先truncate,然后再插入数据
2020年5月的一天,某客户将数据库中的业务核心用户NC65导入数据库中。不幸的是事情就注定要发生,导入的目标数据库是当前运行的生产数据库,并且在impdp导入时,添加了table_exists_action=replace选项(此选项时到impdp导入对象时,如发现对象已经存在,就会先删除对象,再创建对象)。来了,不幸的事情发生了,生产环境的NC65用户数据被还原到备份时的状态,最近几天新产生的数据被清空,惨了,要被领导批了。此生产环境中数据库还无rman备份、在导入前也没有做expdp备份,不幸的事情真是这么相似。但幸运的是数据库运行在归档模式,并且有完整的最近7天的归档日志。此时可以在归档日志上面动动手脚,利用归档日志来手动前滚数据库。 恢复思路