之前刚开始使用oracle的时候 备份还原数据库使用 imp exp 后面发现问题不少,表空间映射 ,空表无法导出等小问题居多
后面使用oracle10G版本新加入的导入导出指令后,就在没使用过imp exp了
首先impdp expdp后需要在orace服务器端执行,不能远程执行,导入导出效率非常高
1.首先编写一个导出数据库模式的指令
userName/password 分别为数据库用户名和密码
schemas=tablespace tablespace 为用户分配的表空间,可使用该用户登录plsql选择一张表便捷查看
dumpfile=xxxx.dmp 导出的文件名
LOGFILE=xxxx.log 导出的日志名称
(expdp还有其他参数,我这边没使用到)
expdp userName/password schemas=tablespace dumpfile=xxxx.dmp LOGFILE=xxxx.log
在数据库服务器cmd窗口执行impdp
导出成功后查看文件存储路径
2.把数据库dmp文件复制到需要导入的服务器指定路径
使用以下sql查询dpdump路径
select * from dba_directories where directory_name='DATA_PUMP_DIR';
然后把导出的dmp文件复制进去
3.新数据库创建用户名,表空间等用于存储数据
我一般都建立和原库一样的用户名,表空间,不用转换,也不易出错,生产环境表空间要设置为无限增长,
我这边开发环境了指定了最大值.
--创建表空间
CREATE TABLESPACE PORTAL_HSS
DATAFILE 'D:\oradata\xxxdata\PORTAL_HSS.dbf'
SIZE 1000M
AUTOEXTEND ON
NEXT 2000M MAXSIZE 2000M;
--以下sql可修改表空间不限制增长
ALTER DATABASE DATAFILE 'D:\oradata\xxxxdata\PORTAL_HSS.dbf' AUTOEXTEND ON NEXT 1000M MAXSIZE UNLIMITED;
--创建用户并设置表空间
CREATE USER portal_hss IDENTIFIED BY portal_hss
DEFAULT TABLESPACE PORTAL_HSS;
生产环境我直接给用户dba权限
--授予用户dba权限
GRANT
dba
TO portal_hss;
4.编写impdp指令
portal_hss/portal_hss 分别为数据库用户名和密码
DIRECTORY=DATA_PUMP_DIR 设置从DATA_PUMP_DIR目录读取dmp文件
DUMPFILE=HSS20200529.DMP 导入的文件名
LOGFILE=HSS20200529log.log 执行生成的日志名称
remap_schema=portal_hss:portal_hss 用户名映射 :前面是原库的 :后面是新库的 我这边都按原库的名称创建的
remap_tablespace=PORTAL_HSS:PORTAL_HSS 表空间名映射 :前面是原库的 :后面是新库的 我这边都按原库的名称创建的
(impdp还有其他参数,我这边没使用到)
impdp portal_hss/portal_hss DIRECTORY=DATA_PUMP_DIR DUMPFILE=HSS20200529.DMP LOGFILE=HSS20200529log.log remap_schema=portal_hss:portal_hss remap_tablespace=PORTAL_HSS:PORTAL_HSS
服务器执行导入指令
。由于我设置的表空间2G不足,导致导入失败,我这边把新库的用户名和表空间删掉重新建了一次
--删除USER。
DROP USER portal_hss CASCADE
--删除表空间。
DROP TABLESPACE PORTAL_HSS INCLUDING CONTENTS AND DATAFILES;
我发现oracle这个坑,原库有一张表数据量千万级,我把数据都清掉了,但是建表语句指定的索引等表空间占用大小没变,
数据清了还需要把这个表的表空间大小重新设置在导出dmp。我直接删除表在重建了
单这个表就不知道需要初始化多少G的表空间了。。。
执行导入指令
导入完毕后可登录查看下数据库数据是否正常
(备注)如果是linux数据库,我这边是centos7测试的,用root用户登录该数据库服务器后
,直接采用impdp命令执行导入操作,会提示:KSH:impdp:not found。因为操作的用户不对,
linux服务器下,执行expdp,impdp命令,必须以oracle用户登录,
即执行指令su - oracle
登录后在执行该命令就可以了。