oracle备份恢复(dmp文件)
jidmp文件恢复方式:只能通过代码恢复
注意: Oracle expdp/impdp导出导入命令及数据库备份 2者之间的区别
使用EXPDP和IMPDP时应该注意的事项:
EXP和IMP是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用。
EXPDP和IMPDP是服务端的工具程序,他们只能在ORACLE服务端使用,不能在客户端使用。
IMP只适用于EXP导出的文件,不适用于EXPDP导出文件;IMPDP只适用于EXPDP导出的文件,而不适用于EXP导出文件。
expdp或impdp命令时,可暂不指出用户名/密码@实例名 as 身份,然后根据提示再输入,如:
expdp schemas=scott dumpfile=expdp.dmp DIRECTORY=dpdata1;
参考博客:https://www.cnblogs.com/zhangruiBlog/p/4682616.html
附imp导入命令:
imp SKZY2018/skzy2018 file='F:\backup\20200807120000.DMP' full=y
dmp备份文件为EXPDP导出的文件 因此只能在服务端使用impdb命令导入
alter user sys identified by SKZY 修改oracle 用户密码
开始导入数据:
参考博客:https://www.cnblogs.com/hellowood23/p/5249630.html
由于我的数据库备份文件指定了库名,因此必须创建相同的用户进行数据导入
创建用户(启动cmd )
以dba运行sqlplus:
sqlplus "/as sysdba"
创建用户SKZY :
CREATE USER SKZY PROFILE DEFAULT IDENTIFIED BY SKZY
DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE temp ACCOUNT UNLOCK ;
赋予用户SKZY 权限
GRANT UNLIMITED TABLESPACE TO SKZY;
GRANT CONNECT,RESOURCE TO SKZY;
grant dba to SKZY;
在我的电脑里面,建立文件夹D:/SKZY,把要还原的DMP文件拷贝进该文件夹
创建DIRECTORY,并且赋权限给SKZY用户
CREATE OR REPLACE DIRECTORY tempdump AS 'D:/SKZY/';
GRANT READ, WRITE ON DIRECTORY tempdump TO SKZY;
新开cmd窗口运行impdb导入数据:
导入数据:impdp SKZY/SKZY@ORCL full=Y directory=tempdump dumpfile=20200807120000.DMP
正常来说运行上述程序即可导入数据成功,但是也有特殊情况:
实际遇上的问题:
表空间不存在
第一次导入数据时提示表空间“BJHYS”不存在,导入失败
解决方案:创建表空间BJHYS
首先删除刚才创建的用户,然后在sqlplus dba模式下新建表空间:
create tablespace BJHYS datafile 'D:/SKZY/BJHYS.dbf' size 2000m autoextend on next 100m maxsize unlimited;
(创建表空间BJHYS 初始大小2000M 自动增加大小100M)
附:删除用户出现问题:无法删除当前已连接用户
网上解决办法:
select username,sid,serial# from v$session 查看当前oracle连接
alter system kill session '14,60596' 杀死oracle连接
drop user SKZY2018 cascade ///删除oracle用户
但是我在运行上述解决办法时并不成功,于是我用了最直接的办法,重启server服务
找到OracleServiceORCL服务 直接停止重新启动即可删除用户及用户数据
字符集问题
解决表空间问题之后重新导入,出现导入失败,ORA-02374 ,ORA-12899,ORA-02372
参考博客:https://www.linuxidc.com/Linux/2018-05/152228.htm之后发现是数据库字符集不对
正式环境的字符集是ZHS16GBK 而测试环境安装oracle之后默认字符集是AL32UTF8
由于utf8人为汉字是3个字符,而gbk汉字是两个字符,所以一直导入失败
解决办法:修改测试环境字符集
参考博客:https://www.cnblogs.com/test-7/p/10454758.html
https://www.cnblogs.com/zhangxiaokui/p/13100488.html
select * from nls_database_parameters 查看当前oracl数据库字符集
cmd下sqlplus 以dba模式启动运行
正常关闭数据库 :shutdown immediate
将数据库启动到mount状态:startup mount
将数据库设置为首先模式: ALTER SYSTEM ENABLE RESTRICTED SESSION;
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;(只用于复制环境)
ALTER SYSTEM SET AQ_TM_PROCESSES=0; 【如果大于零, 就会启用对队列消息的时间监视。该时间值可用于指定消息的延迟和失效属性 (用于应用程序的开发)。】
打开数据库:alter database open;
alter database character set INTERNAL_USE ZHS16GBK;
或者ALTER DATABASE character set INTERNAL_USE AL32UTF8;
关闭数据库:shutdown immediate
将数据库启动:startup;
由于之前你设置了restricted限制了其他用户的登录,可能导致其他客户不能通过pl/sql来登录影响正常使用,
alter system disable restricted session;
第一次运行shutdown immediate出现ORA-24324
参考博客:https://blog.csdn.net/qq_36998053/article/details/82758843
解决办法:简单粗暴,重启OracleServiceORCL服务即可