oracle中用plsql如何把.dmp文件导入到库中?

说实话,Oracle的操作相当复杂,刚开始鼓捣的时候很容易卡在细节上。
你是对的,直接用PL/SQL确实不可能做到这一点,你必须依赖老家伙Data Pump。
上次给客户装系统,迁移了几十G的旧数据,最后发现是靠impdp命令来运行的。

有趣的是,配置目录对象是最容易陷入麻烦的步骤。
想一想,这相当于在数据库中标记了操作系统路径,而且一定要写正确。
我的一个朋友使用了向后斜线的路径,并且 impdp 崩溃了。
我花了很长时间才找到答案。
因此,执行前最好用SQLPlus登录,并使用ALTER SESSION设置NLS_LANG='AMERICAN.AMERICAN',防止出现中文路径乱码的问题。

监控日志也很重要。
我习惯将LOGFILE设置为import_log_$(date +%Y%m%d).log,每天运行一次就会有单独的记录。
最烦人的是当我遇到像ORA-01 2 6 1 这样的错误时。
我花了很长时间才发现转储文件损坏了——当时数据是从另一个系统复制的,可能是硬盘出现了问题。
后来我改变了流程,现在要求先在测试环境下使用expdp运行一下,确认没有问题再去生产。

数据泵有一个小技巧可以帮你省去麻烦。
例如,如果要导入用户表,但又不想覆盖原有数据,可以在impdp命令中添加exclusion='table=YOUR_TABLE_NAME',这样就可以有选择地导入。
当时我重构了一个ERP系统,用这个功能单独恢复历史订单表,比导入整卷效率高很多。

但说实话,我最担心的还是权限问题。
遇到一个运维小伙把文件权限设置得太过硬,导致impdp运行时甚至无法读取文件。
这个时候就需要跟IT部门说清楚。
数据库用户必须具有访问该目录的权限,但没有写入权限。
必须注意安全。

运行数据泵命令行界面时,建议将进度输出重定向到另一个文件,例如2 >error.log。
我有一个项目导入了数千个表,并且日志完全满了。
后来我又加上了这个操作,看看出了什么问题。
另一个小知识:impdp 默认情况下是并行导入的,但是你可以使用 PARALLEL=1 参数将其更改为串行,这有时可以解决某些环境下的锁定问题。

总之,记住impdp不是PL/SQL,但它必须配合数据库操作——创建目录和授权需要SQL。
命令行运行后,不要只盯着进度,要查看日志文件。
这些ORA错误代码背后隐藏着许多隐藏的问题。

oracle如何导入dmp文件并覆盖原有数据

怎么用plsql导入dmp文件

结论:使用PL/SQL导入DMP文件很大程度上依赖于DBMS_DATAPUMP。

第 1 步:创建控制文件。
文件的格式在控件中是固定的。
例如,ABC项目,2 02 3 年5 月,必须定义表名、列顺序和字符。

第 2 步:编写 PL/SQL 脚本。
sql 公告 l_job_name VARCHAR2 (3 0) := 'IMP_JOB_1 2 3 '; l_log_file VARCHAR2 (1 00) := '/path/log_file.dmp'; 开始 DBMS_SCHEDULER.create_job( 工作名称 => l_工作名称, job_type => '执行者', job_action => 'expdp', 参数数量 => 3 , 参数=> '--directory=DATA_PUMP_DIR --dumpfile=ABC.dmp --logfile=' || l_日志文件 ); DBMS_SCHEDULER.start_job(l_job_name); 结束;
执行时间不能超过5 分钟。
必须向 DBMS_SCHEDULER 用户授予目录权限。

第三步:查询状态。
sql SELECT job_name, status, log_file_name FROM dba_scheduler_jobs WHERE job_name = l_job_name;
状态必须为“RUNNING”。
它应该是一个日志文件。

我还在检查:命令行参数的expdp顺序不能错。

评价一下自己。

如何将dmp文件导入新的数据库?