Oracle命令行导入导出
exp导出
exp用户名/密码@数据库实例owner=用户名file=文件存储路径
例如:exp test/123456@ORCL owner=test file=F\abcd.dmp
expdp导出
登陆sqlplus
sqlplus /as sysdba
创建目录
create directory dump_test as '/home/oracle/dump_test';
然后在服务器上创建该真实目录:/home/oracle/dump_test,然后将需要导入的DMP文件放到该目录中
将目录授权给用户
grant read,write on directory dump_test to TEST;
执行导出命令
expdp 用户名/密码 directory=目录名 dumpfile=test.dmp logfile=test.log
指定不导出某些表
expdp pams/manager directory=DATA_PUMP_DIR EXCLUDE=TABLE:\"IN\(\'T_T1\',\'T_T2\'\)\" dumpfile=pams.dmp
指定导出某些表
expdp pams/manager directory=DATA_PUMP_DIR TABLES=pams.T_PERSON,pams.T_BIMS_MOBILE,pams.T_DEPARTMENT dumpfile=pams_20210126.dmp
创建表空间和用户
查询表空间路径
select * from dba_data_files;
创建表空间
create tablespace TEST
datafile '/home/oracle/oradata/xdjadb/test.dbf' size 200M autoextend on next 100M;
创建用户
create user TEST identified by manager default tablespace TEST;
给用户授权
grant dba to TEST;
imp命令
imp用户名/密码@数据库
fromuser=用户名
touser=用户名
file=d:\cu.dmp ignore=y
例如:imp test/123456@ORCL fromuser=test touser=new_test file=F:\test.dmp ignore=y
impdp命令
创建目录
create directory dump_test as '/home/oracle/dump_test';
然后在服务器上创建该真实目录:/home/oracle/dump_test,然后将需要导入的DMP文件放到该目录中
将目录授权给用户
grant read,write on directory dump_test to TEST;
执行导入命令
impdp 新的用户名/新的用户密码@SID
DIRECTORY=新建的目录名称
DUMPFILE=导入的DMP文件名
tablespaces=表空间名
remap_schema=DMP文件中用户名:新的用户名
例如:
impdp test/manager@xdjadb
DIRECTORY=dump_test
DUMPFILE=TEST.DMP
tablespaces=TEST
remap_schema=origin_user:test
指定导入某些表
impdp pams1/manager directory=DATA_PUMP_DIR dumpfile=pams.dmp remap_schema=pams:pams1 parallel=2 tables=pams.T_DEPARTMENT,pams.T_PERSON,pams.T_BIMS_MOBILE
指定不导入某些表
impdp pams1/manager directory=DATA_PUMP_DIR dumpfile=pams_20210126.dmp remap_schema=pams:pams1 EXCLUDE=TABLE:\"IN\(\'T_PERSON\',\'T_BIMS_MOBILE\'\)\"
导入之后乱码问题
首先确认执行imp命令的客户端编码是否和oracle数据库编码相同,否则会出现中文乱码现象,假如Oracle编码为:SIMPLIFIED CHINESE_CHINA.ZHS16GBK,需要查询客户端编码(linux):使用locale命令查看客户端使用的编码类型,如果不支持中文则会出现乱码。
解决办法
- 将编码类型改为支持中文的: export LANG=zh_CN.UTF-8
- 设置 NLS_LANG环境变量和Oracle数据库编码一致:export NLS_LANG=AMERICAN_AMERICA.AL32UTF8