exp(imp) 用户名/密码@连接地址:端口/服务名 file=“路劲/文件名.dmp” full=y|tables(tablename1,tablename2...)|owner(username1,username2...)|tablespaces= (tablespace1,tablespace2...);
exp:导出命令,导出时必写。
imp:导入命令,导入时必写,每次操作,二者只能选择一个执行。
username:导出数据的用户名,必写;
password:导出数据的密码,必写;
@:地址符号,必写;
SERVICENAME:Oracle的服务名,必写;
1521:端口号,1521是默认的可以不写,非默认要写;
file=“文件名.dmp” : 文件存放路径地址,必写;
full=y :表示全库导出,此时的账号需要dba权限。可以不写,则默认为no,则只导出用户下的对象,;
tables:表示只导出哪张表
owner:表示导出某些用户的对象
tablespaces:表示导出某些表空间下
full|tables|owner|tablespaces只能使用一种
本文中数据库字符集为AL32UTF8并以这个字符集举例说明,备份还原前一定要核查数据库字符集,字符集的不同会造成数据乱码。
$ export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
导出数据 注意结尾不要些;否则分号会变成文件后缀 即db.dmp;
如果只想导入结构或者数据,可以使用参数CONTENT,默认值为ALL
CONTENT={ALL | DATA_ONLY | METADATA_ONLY}
当设置CONTENT为ALL 时,将导出对象定义及其所有数据.
为DATA_ONLY时,只导出对象数据,
为METADATA_ONLY时,只导出对象结构
$ exp usr_xg/usr_xg2016@x.x.x.x:1521/orcl file=/tmp/db.dmp log=/tmp/db.log
只导出数据结构
$ exp usr_xg/usr_xg2016@x.x.x.x:1521/orcl file=/tmp/db.dmp log=/tmp/db.log CONTENT=METADATA_ONLY
导入数据
$ imp usr_xg/usr_xg2016@x.x.x.x:1521/orcl file=/tmp/db.dmp log=/tmp/db.log
exp和imp是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用。
expdp和impdp是服务端的工具程序,他们只能在ORACLE服务端使用,不能在客户端使用。imp只适用于exp导出的文件,不适用于expdp导出文件;impdp只适用于expdp导出的文件,而不适用于exp导出文件。
expdp或impdp命令时,可暂不指出用户名/密码@实例名 as 身份,然后根据提示再输入,如:
expdp schemas=scott dumpfile=expdp.dmp DIRECTORY=dir;
数据泵包含了 exp/imp实用程序的功能:
1.高效处理大量数据的功能, 可以高效导出和导入大量数据。
2.交互式命令行使用程序,使用它可以先断开连接,然后恢复连接活动的数据泵作业。
3.在不创建数据泵文件的情况下,从远程数据库导出大量数据,并将这些数据直接导入本地数据库。
4.通过导入和导出工作,在运行时更改方案,表空间,数据文件和存储位置;
5.精细过滤对象和数据;
6.对目录对象应用受控安全模式(通过数据库);
7.高级功能,如压缩和加密。
通过expdb命令备份必须要有DIRECTORY目录(转储文件和日志文件所在的目录),11G中默认会有这个目录。我们通过以下命令可以查询出转储文件和日志文件所在的位置:
SQL> select * from dba_directories t where t.directory_name='DATA_PUMP_DIR';
OWNER DIRECTORY_NAME DIRECTORY_PATH
------------------------------ ------------------------------ ------------------------------
SYS DATA_PUMP_DIR /opt/oracle/admin/orcl/dpdump/
如果您不想放在这个默认目录下你也可以手工创建转储文件和日志文件所存放的目录(不推荐自己建目录):
SQL> create or replace directory dump as '/opt/sudytech/oracle/app/oracle/admin/sudy/dump/';
用sys管理员给你的指定用户赋予在该目录的操作权限:
SQL> grant read,write on directory DATA_PUMP_DIR to 用户名;
expdp(impdp) 用户名/密码@连接地址:端口/服务名 schemas=用户名 dumpfile=file1.dmp logfile=file1.log directory=testdata1 remap_schema=test:test;
exp:导出命令,导出时必写。
imp:导入命令,导入时必写,每次操作,二者只能选择一个执行。
username:导出数据的用户名,必写;
password:导出数据的密码,必写;
@:地址符号,必写;
SERVICENAME:Oracle的服务名,必写;
1521:端口号,1521是默认的可以不写,非默认要写;
schemas:导出操作的用户名;
dumpfile:导出的文件;
logfile:导出的日志文件,可以不写;
directory: 如果手工创建了转储文件和日志文件,通过本命令指定导出位置
remap_schema=源数据库用户名:目标数据库用户名,二者不同时必写,相同可以省略;
本文中数据库字符集为AL32UTF8并以这个字符集举例说明,备份还原前一定要核查数据库字符集,字符集的不同会造成数据乱码。
导出数据
$ export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
导出数据,12.1版本之前会导出大量的统计数据,这会在导入时占用大量的内存,所以导出或导入时可以使用EXCLUDE=STATISTICS
$ expdp test8/sudy12344 schemas=test8 dumpfile=file1.dmp logfile=file1.log directory=DATA_PUMP_DIR exclude=STATISTICS
$ cd /opt/oracle/admin/orcl/dpdump/
$ ls
dp.log file1.dmp file1.log
导出数据 注意结尾不要些;否则分号会变成文件后缀 即db.dmp;
如果只想导入结构或者数据,可以使用参数CONTENT,默认值为ALL
CONTENT={ALL | DATA_ONLY | METADATA_ONLY}
当设置CONTENT为ALL 时,将导出对象定义及其所有数据.
为DATA_ONLY时,只导出对象数据,
为METADATA_ONLY时,只导出对象结构
当使用超管账号备份整个数据库
$ su - oracle
$ sqlplus / as sydba;
SQL> select * from dba_directories; 查看DIR_DUMP目录
DIRECTORY_PATH
--------------------------------------------------------------------------------
SYS DIR_DUMP
/u/logic_backup/zs/dump
注意要加上转义符
$ expdp \'sys/admin222@ip:1521/zs(服务名) as sysdba\' directory=DIR_DUMP dumpfile=20230206.dmp logfile=20230206.log full=y
导入数据
$ impdp test8/sudy12344 schemas=test8 dumpfile=file1.dmp logfile=file1.log directory=DATA_PUMP_DIR
当使用IMPDP完成数据库导入时,如遇到表已存在时,Oracle提供参数TABLE_EXISTS_ACTION
TABLE_EXISTS_ACTION:
SKIP:跳过这张表,继续下一个对象,默认值。
REPLACE:先drop已存在的表,然后create并加载数据。
APPEND:追加数据,但不会影响已存在的行,即2行变4行。
TRUNCATE:删除已存在的行,然后加载所有的数据。
$ impdp test8/sudy12344 schemas=test8 dumpfile=file1.dmp logfile=file1.log directory=DATA_PUMP_DIR TABLE_EXISTS_ACTION=TRUNCATE|REPLACE|APPEND
SKIP|TRUNCATE|REPLACE|APPEND只能出现一种
expdp/impdp不同用户,不同表空间的转换
1、假设a用户的默认表空间是a,导出用户a所有数据:
$ expdp a/密码 schemas=a directory=DATA_PUMP_DIR dumpfile=data.dmp logfile=data.log
如果只拿到了dmp文件并不知道用户和表空间,可以使用以下命令获取
$ impdp system/oracle directory=data_pump_dir dumpfile=data.dmp show=y content=metadata_only
此时当前目录下会产生一个data.sql文件,查看sql文件即可获取用户和用户的表空间
2、创建表空间和用户并授权
CREATE TABLESPACE b DATAFILE '/u01/app/oracle/oradata/b.dbf' SIZE 1048M AUTOEXTEND ON NEXT 100M EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;
create user b identified by 密码 default tablespace b;
授予目标用户所需的表空间(例如users)和权限。
grant connect ,resource ,dba to b;
3、导入a用户所有数据到b,并且转换表空间a为b:
$ impdp b/密码 directory=DATA_PUMP_DIR dumpfile=data.dmp remap_schema=a:b remap_tablespace=a:b logfile=data.log
remap_schema=a:b 将数据的schema从a转换为b
remap_tablespace=a:b 将数据的tablespace 从a 转换为b
导入数据