说实话oracle备份好麻烦!!

尝试了好多种方式,终于成功了,记录一下

第一步,先相看一下备份的目录

select * from dba_directories

注意为什么要查看呢?

我一开始用了网上的方法,创建备份的目录

$sqlplus /nolog
$conn sys /as sysdba
SQL> create directory expdata as '/home/oracle/oraclebak';
Directory created.
SQL> grant read,write on directory expdata to backupuser;  
SQL> exit

$chmod -R oracle:oinstall /home/oracle/oraclebak

但是呢,这种方法创建的目录备份时会出问题

比如我上面创建的目录名是expdata

执行备份:expdp loginuser/123456@ORCL directory=expdata dumpfile=FULL_8.dmp FULL=y

一直报错:

Connected to: Oracle Database 11g Release 11.2.0.4.0 - 64bit Production

ORA-39002: invalid operation

ORA-39070: Unable to open the log file.

ORA-39087: directory name expdata is invalid

不行,我就找了一个oracle自己创建好的目录,比如DATA_PUMP_DIR

再执行:expdp c##shopdb/123456@orclshop directory=DATA_PUMP_DIR dumpfile=FULL_8.dmp FULL=y

等待了一段时间,竟然备份成功了

导入数据

先创建一个账户用来导入数据

#创建用户
create user c##impuser identified by 123456;

#创建表空间
create tablespace 表空间名 datafile 'D:\oracle11\oradata\库名\XXX.pdf' size 200M autoextend on next 50m maxsize 1000m ;

#用户授权

grant connect ,resource to  c##impuser;

#用创建的用户名和密码登录oracle数据库

conn c##impuser/123456

#最该权限授权

#用最高权限账号登录

grant dba to c##impuser
#如果没有权限,就切换成sys授权

在导入机上,我把导出的文件FULL_8.dmp 放到了d盘,然后在cmd中执行命令impdp c##impuser/123456 file=d:\FULL_8.dmp full=y ignore=y

报错

PS C:\WINDOWS\system32> impdp c##impuser/123456 file=d:\FULL_8.dmp full=y ignore=y;

Import: Release 12.1.0.2.0 - Production on 星期二 12月 17 13:37:39 2019

Copyright (c) 1982, 2014, Oracle and/or its affiliates.  All rights reserved.

连接到: Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
ORA-39001: 参数值无效
ORA-39000: 转储文件说明错误
ORA-39088: 文件名不能包含路径说明

找解决方法,google之,大致的解决方法就是“impdp程序之前先创建directory,如名字为oracle_backup,路径d:\backup,文件位置不需要指出,impdp程序会自动去之前创建的directory中查找impdp命令中指定的文件名是否存在”

所在要先创建备份目录,然后把导出的文件放到备份的目录中,再执行命令:impdp c##impuser/123456 directory=oracle_backup file=FULL_8.dmp full=y ignore=y;

大致该差不多了!!