@Oracle数据泵导入导出总结TOC
本项目是要从核心数据库(下文中用A库表示,AIX系统,数据库版本:11.2.0.3.0)导出数据库并将其导入到生产库(下文中用B库表示。Linux操作系统,数据库版本:11.2.0.3.0)
A库导出
- 选择导出磁盘
导出数据库时,优先选择空间最大的路径,以防止文件过大,中断操作,致使导出失败。
keshihua01:/#df -g
Filesystem GB blocks Free %Used Iused %Iused Mounted on
/dev/hd4 121.00 114.79 6% 13741 1% /
/dev/hd2 10.00 6.57 35% 68135 5% /usr
/dev/hd9var 10.00 7.74 23% 226206 12% /var
/dev/hd3 10.00 4.64 54% 8109 1% /tmp
/dev/hd1 10.00 9.75 3% 44377 2% /home
/dev/hd11admin 0.50 0.50 1% 5 1% /admin
/proc - - - - - /proc
/dev/hd10opt 10.00 9.88 2% 3874 1% /opt
/dev/livedump 5.00 5.00 1% 4 1% /var/adm/ras/livedump
/dev/g01-lv 100.00 74.72 26% 920305 6% /g01
/dev/u01-lv 100.00 31.50 69% 3236723 30% /u01
/dev/kshlinshi_lv 1000.00 557.79 45% 20 1% /mnt/kshlinshi
/dev/maxgauge_lv 5.00 4.95 1% 233 1% /maxgauge
/dev/kshjk_lv 4.00 2.73 32% 7339 2% /home/ap/monitor
/dev/cdclv 195.00 150.87 23% 32359 1% /cdc
/dev/itjklv 10.00 9.56 5% 1073 1% /itjkfs
可看出/cdc磁盘目录下存储空间较大 所以选择该目录。
2. 用root用户在相应磁盘中创建系统目录
2-1切换root用户
[oracle@01 ~]$ su - root
root’s Password:
2-2进入选定的路径下(ogg)
keshihua01:/#cd /cdc/
[keshihua01 /cdc]#ls -l 查看目录下文件
2-3创建目录
[keshihua01 /cdc]#mkdir dmdump
[keshihua01 /cdc]#ls -l
root用户创建目录,避免了创建目录时出现权限不足的情况,但是此时,创建出来的目录是root的权限,我们需要给他oracle权限
[keshihua01 /cdc]#chown oracle:oinstall dmdump/
- 在数据库中创建目录
3-1切回oracle用户,进入数据库
[keshihua01 /cdc]#logout --注销当前用户,返回上个用户
[okeshihua01:/home/oracle$sqlplus / as sysdba
3-2查询数据库默认目录DATA_PUMP_DIR
sys@COREDB>select * from dba_directories;
这一步的操作是为了避免目录一样,造成冲突
3-3创建导出目录
sys@COREDB>create directory DMDUMP as ‘/cdc/dmdump’;
Directory created.
*/(以下建立用户操作为没有指定用户时可自行建立 ,如数据库有指定用户就用指定用户即可)
- 创建导出用户,并授予相应权限
4-1创建用户dp
sys@COREDB>create user dp identified by dp account unlock;
User created.
4-2授予dp用户dba权限
sys@COREDB>grant dba to dp;
Grant succeeded.
/*
4-3授予dp用户对DMDUMP目录的读写权限
sys@COREDB>grant read,write on directory DMDUMP to dm;
Grant succeeded.
5.对导出的数据量进行预估
5-1退出数据库
sys@COREDB>quit
5-2对导出表进行预估
[oracle@cardb01 ~]$expdp dm/yXvjktS1Ww2! directory=DMDUMP estimate_only=y tables=用户名.表名
estimate_only=y 这个参数,代表数据量预估,
值为Y时,表示只对数据量预估,不会执行导出操作
值为N(默认)时,表示直接执行导出操作
导出表、用户、全库,数据量预估都一样,加上这个参数就行
Total estimation using BLOCKS method: 960 MB
Job “DP”.“SYS_EXPORT_TABLE_01” successfully completed at Fri Jun 29 20:27:33 2018 elapsed 0 00:00:04
可以看出,导出的数据量为960MB,此时要注意,这个大小和导出的实际大小略有出入,但是出入不大
6.导出操作
6-1导出表
[oracle@cardb01 ~]$expdp dm/yXvjktS1Ww2! directory=DMDUMP dumpfile=GWDMFK.dmp tables=dm.表名
expdp dwd/UZydc#Uu!nq8 directory=DMDUMP dumpfile=DWDDUMP.dmp tables=dwd.DWD_GWKSH_SAP_ZTGWCMZZZT_LS1
数据量预估为960MB,实际导出大小为783.3 MB 2147183 rows
6-2导出用户
[oracle@cardb01 ~]$ expdp dp/dp directory=DMDUMP dumpfile=GWDMFK.dmp schemas=dm;
6-3导出全库
[oracle@cardb01 ~]$ expdp dp/dp directory=DMDUMP estimate_only=y full=y logfile=export.log
- 检查导出目录下是否有导出文件
[oracle@cardb01 ~]$cd /cdc/dmdump/
[oracle@cardb01 /cdc/dmdump]$ls -l
- 将导出文件传到B库所在的服务器
[oracle@cardb01 /cdc/dmdump]$ scp GWDMFK.dmp 10.0.125.116:/kshfs/DMDUMP
oracle@192.168.104.11’s password:SfxvJsd%.svb
B库的前期准备工作和A库相同,需要选择磁盘、创建系统目录、创建数据库目录、创建数据泵用户dp、给dp用户授权,做完这些之后,才能执行操作
1 30 2 30 3 40 100 66 14 80 20 ba
- 选择导出磁盘
导出数据库时,优先选择空间最大的路径,以防止文件过大,中断操作,致使导出失败。
df -g
Filesystem GB blocks Free %Used Iused %Iused Mounted on
/dev/hd4 25.00 5.57 78% 54356 5% /
/dev/hd2 20.00 14.12 30% 100914 3% /usr
/dev/hd9var 10.00 9.60 5% 8619 1% /var
/dev/hd3 10.00 1.35 87% 3527 2% /tmp
/dev/hd1 20.00 20.00 1% 13 1% /home
/dev/hd11admin 5.00 5.00 1% 5 1% /admin
/proc - - - - - /proc
/dev/hd10opt 10.00 9.29 8% 13823 1% /opt
/dev/livedump 5.00 5.00 1% 4 1% /var/adm/ras/livedump
/dev/lv00 0.25 0.24 4% 18 1% /var/adm/csd
/dev/itjklv 5.00 5.00 1% 4 1% /itjkfs
/dev/kshlv 5110.00 5108.95 1% 7 1% /kshfs
可看出/kshfs 磁盘目录下存储空间够大,所以选择该目录。
2. 用root用户在相应磁盘中创建系统目录
2-1切换root用户
[oracle@01 ~]$ su - root
root’s Password:
2-2进入选定的路径下(ogg)
keshihua01:/#cd /kshfs/
[keshihua01 /kshfs]#ls -l 查看目录下文件
2-3创建目录
[keshihua01 /kshfs]#mkdir dmdump
[keshihua01 /kshfs]#ls -l
root用户创建目录,避免了创建目录时出现权限不足的情况,但是此时,创建出来的目录是root的权限,我们需要给他oracle权限
[keshihua01 /kshfs]#chown oracle:oinstall dmdump/
- 在数据库中创建目录
3-1切回oracle用户,进入数据库
[keshihua01 /kshfs]#logout --注销当前用户,返回上个用户
[okeshihua01:/home/oracle$sqlplus / as sysdba
3-2查询数据库默认目录DATA_PUMP_DIR
这一步的操作是为了避免目录一样,造成冲突
sys@COREDB>select * from dba_directories;
3-3创建导出目录
sys@COREDB>create directory DMDUMP as ‘/kshfs/dmdump’;
Directory created.
*/(以下建立用户操作为没有指定用户时可自行建立 ,如数据库有指定用户就用指定用户即可)
- 创建导出用户,并授予相应权限
4-1创建用户dp
sys@COREDB>create user dp identified by dp account unlock;
User created.
4-2授予dp用户dba权限
sys@COREDB>grant dba to dp;
Grant succeeded.
/*
4-3授予dp用户对DMDUMP目录的读写权限
sys@COREDB>grant read,write on directory DMDUMP to dm;
Grant succeeded.
root ]chomd 775 DMDUMP.dmp
- B库导入数据
9-1导入表
[oracle@devdb01 dmdump]$ impdp dm/yXvjktS1Ww2! directory=DMDUMP dumpfile=DMDUMP.dmp tables=dm.表名 table_exists_action=truncate logfile=import.log
exp 用户名/密码 directory=DMDUMP dumpfile=DMDUMP.dmp tables=用户名.表名
impdp dwd/UZydc#Uu!nq8 directory=DMDUMP dumpfile=DWDDUMP.dmp tables=dwd.DWD_GWKSH_SAP_ZTGWCMZZZT_LS1 table_exists_action=truncate logfile=import.log
9-2导入用户
导入用户之前,要检查B库里边有没有相应用户的表空间,如果没有需自己手动创建
[oracle@devdb01 dmdump]$ impdp dp/dp directory=XKCDUMP dumpfile=HZCARBIDexpdp.dmp schemas=HZCARBID;
9-3导出全库
[oracle@devdb01 dmdump]$ impdp dp/dp directory=XKCDUMP dumpfile=JJEXPDP.dmp full=y;
remap:
expdp habby/habby schemas=TEST1 directory=dump572 dumpfile=TEST1_20181109.dmp remap_Tablespace=old_tablespacename:new_tablespacename_test1 logfile=TEST1_20181109.log
impdp habby/habby schemas=TEST1 directory=dump572 dumpfile=TEST1_20181109.dmp remap_Tablespace=old_tablespacename:new_tablespacename_test1 logfile=TEST1_20181109.log
按时间点后台导出
nohup expdp dm/yXvjktS1Ww2! directory=DMDUMP dumpfile=DMDUMP1.dmp TABLES=dm.DM_GWKSH_PC_ZDSYXL_M_MX query=dm.DM_GWKSH_PC_ZDSYXL_M_MX:’“where bill_cycle <= ‘20191117’”’ &
20191117 日以前
20191031上月以前
20181231去年以前
后台导入
nohup impdp dm/yXvjktS1Ww2! directory=DMDUMP dumpfile=DMDUMP1.dmp TABLES=dm.DM_GWKSH_PC_ZDSYXL_M_MX table_exists_action=truncate logfile=import.log &