oracle使用命令导出dmp

本文详细介绍了使用 Oracle 的 exp 和 imp 命令进行数据导出与导入的过程,包括解决 binary_double 类型导入问题,避免乱码,以及如何处理空表和少表的导出难题。同时提供了调整字符集和表 extent 分配的实用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

cmd :

exp 用户名/密码@实例名 file=导出的dmp文件存放路径 log=导出日志存放路径

exp test/test@orcl file=c:\test\test.dmp log=c:\test\test.log

 

注意: test.dmp  test.log和所在路径必须先创建好

 

然后cm  导入

imp 用户名/密码@实例名 file=导入的dmp文件路径 full=y

imp aichannel/aichannel@HUST full=y   file= d:/data/newsmgnt.dmp ignore=y

 

解决无法导入binary_double 

解决办法,使用expdp/impdp代替exp/imp

参照:https://blog.csdn.net/ajax_yan/article/details/106646326

如果报错,参照排查错误:https://blog.csdn.net/weixin_30488313/article/details/95850553?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

解决exp导出时少表,空表不导出

select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0 or num_rows is null

          上述代码可产生批量的修改表extent的SQL语句(有多少张空表就产生多少条),我们只需要将其生成的所有sql代码全部执行(复制出来执行或者导出来执行这些sql),就可以给每一张已经存在的表来分配                segment,就OK了。

          再用exp命令进行导出即可。

解决乱码

首先查询 客户端与服务器端的字符集格式,在有dba权限的用户下使用下面的sql

SQL> select userenv('language') from dual;

查询服务端结果

USERENV('LANGUAGE')

----------------------------------------------------
AMERICAN_AMERICA.ZHS16GBK

 

发现服务器端和客户端不一致,使用下面的方法将客户端字符集改成与服务器端一致

--linux客户端
env|grep NLS_LANG
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK

--windows客户端

echo %NLS_LANG%
set NLS_LANG=AMERICAN_AMERICA.ZHS16GBK

如果linux环境查询不到NLS_LANG,可以重新设置下客户端字符集环境(export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)

### 使用 Oracle 的 `expdp` 命令导出 DMP 文件 #### 1. 数据泵简介 Oracle 提供了两种主要的数据导入导出工具:传统工具 (`imp/exp`) 和数据泵工具 (`impdp/expdp`)。其中,`expdp` 是基于 Oracle Data Pump 技术的高效导出工具,适用于大规模数据操作[^1]。 #### 2. 准备工作 在执行 `expdp` 命令之前,需完成以下准备工作: - **创建目录对象**:数据库管理员 (DBA) 需要在数据库中定义一个逻辑目录对象,指向实际存储位置。 ```sql CREATE OR REPLACE DIRECTORY dump_dir AS '/path/to/directory'; GRANT READ, WRITE ON DIRECTORY dump_dir TO wisdomgov; ``` - **确认权限**:确保当前用户拥有 `DATAPUMP_EXP_FULL_DATABASE` 或者特定模式下的导出权限。 #### 3. 基本语法 以下是 `expdp` 的基本命令结构: ```bash expdp username/password@connect_string \ DIRECTORY=directory_name \ DUMPFILE=dump_file_name.dmp \ LOGFILE=log_file_name.log \ [其他参数...] ``` #### 4. 参数说明 | 参数名 | 描述 | |---------------|----------------------------------------------------------------------------------------| | `USERNAME/PASSWORD` | 连接数据库所需的用户名和密码 | | `CONNECT_STRING` | 数据库连接字符串 | | `DIRECTORY` | 已经创建好的目录对象名称 | | `DUMPFILE` | 输出的 `.dmp` 文件名 | | `LOGFILE` | 日志文件名 | #### 5. 实际案例 假设需要将名为 `wisdomgov` 的 schema 导出至 `/u01/app/oracle/dumps/WISDOMGOV.dmp` 中,则可以运行如下命令: ```bash expdp wisdomgov/123456@orcl \ DIRECTORY=dump_dir \ DUMPFILE=WISDOMGOV.dmp \ SCHEMAS=wisdomgov \ LOGFILE=WISDOMGOV_expdp.log ``` 上述命令会将指定用户的全部对象及其数据导出到目标路径下,并记录日志信息[^2]。 #### 6. 可选参数 除了基础选项外,还可以通过附加参数实现更精细控制: - **按表空间过滤**: 如果仅希望导出某些表空间中的内容,可设置 `TABLESPACES` 参数。 ```bash TABLESPACES=(TBS1,TBS2) ``` - **按查询条件筛选**: 对于超大数据集,可通过子查询限定范围。 ```bash QUERY=schema.table:"WHERE column='value'" ``` #### 7. 版本兼容性注意事项 由于 `expdp` 属于较新的功能,在低于 Oracle 10g 的版本上无法使用该特性。因此如果遇到旧版环境迁移需求时仍需依赖传统的 `exp` 方法。 --- ### 示例代码片段 下面展示了一个完整的脚本实例用于自动化处理整个流程: ```bash #!/bin/bash USER="wisdomgov" PASSWD="123456" CONN_STR="orcl" DIR_NAME="dump_dir" DUMP_FILE="WISDOMGOV.dmp" LOG_FILE="WISDOMGOV_expdp.log" echo "Starting export process..." expdp ${USER}/${PASSWD}@${CONN_STR} \ DIRECTORY=${DIR_NAME} \ DUMPFILE=${DUMP_FILE} \ LOGFILE=${LOG_FILE} \ SCHEMAS=${USER} if [ $? -eq 0 ]; then echo "Export completed successfully." else echo "Error occurred during export operation!" fi ``` 此 Shell 脚本封装了必要的变量并提供了错误检测机制以便更好地管理批量作业。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

励志重写JDK

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值