导入dmp全文件或指定表至Oracle

为了便于定位生产问题,常常会需要导入一些运维提供的 dmp 数据文件,生产数据整体往往过大,可以酌情考虑仅导入需要的部分表数据...

dmp 导入

导入 dmp 文件的命令非常简单。

先创建数据库用户和表空间,这里不再赘述。

以全文件导入为例。

-- 帐号名与密码 可以追加服务名 一般在本地单板上处理可以忽略
-- full=Y 可选 全文件导入
-- ignore=Y 建议选择 忽略创建过程报错 
-- fromuser=serv 源用户 生产的数据库用户可能和本地不同名
-- touser=mebugs 导入用户 本地数据库用户
imp 'mebugs/mebugs' file=/home/oracle/Mebugs_Table.dmp full=Y ignore=Y fromuser=serv touser=mebugs 
​

指定表导入

导入指定表时,如果表存在需要先 drop 掉,否则会出错。

sqlplus -s mebugs/mebugs
drop table me_bugs_user;
exit
​

导入命令

imp 'mebugs/mebugs' file=/home/oracle/Mebugs_Table.dmp tables=me_bugs_user ignore=Y fromuser=serv touser=sdujsn 
-- tables参数支持制定多个表
imp 'mebugs/mebugs' file=/home/oracle/Mebugs_Table.dmp tables=(me_bugs_user,me_bugs_role) ignore=Y fromuser=serv touser=sdujsn 
​

同理多表导入时,这些表也不能存在。

其他

生产数据多库数据如果不同步(存在差异),现在需要已 A 库为基准,B 库存在的数据更新到 A 库(B 库多余的忽视)。

  1. 首先导入 B 库
  2. 将 B 库导入完成后,备份表,删掉导入的表
  3. 导入 A 库
  4. 执行同步
-- 先导入B库
-- 拷贝一个备份表
create table me_bugs_user as select * from  me_bugs_user_bak;
-- 删掉源表,然后导入A库
drop table me_bugs_user;
-- 执行同步(数据量大的话,需要检查和添加索引)
UPDATE me_bugs_user T1 SET (T1.SENTERPRISEID, T1.SGROUPID, T1.SPNPN, T1.SSERVICENO, T1.SDEPARTMENTID, T1.SUSERNAME, T1.NNETWORKTYPE, T1.SPROPERTY) = (SELECT T2.SENTERPRISEID, T2.SGROUPID, T2.SPNPN, T2.SSERVICENO, T2.SDEPARTMENTID, T2.SUSERNAME, T2.NNETWORKTYPE, T2.SPROPERTY FROM t_sobest_mem_bak T2 WHERE T1.NAME=T2.NAME) WHERE T1.NAME in (select NAME from me_bugs_user_bak);
-- 删除备份表
drop table t_sobest_mem_bak;
​

更多推荐

章节目录