Oracle数据库在导入dmp文件时报错12504

作者在使用DOS窗口导入dmp格式数据库文件时遇到ORA-12504报错,按网上修改tnsnames.ora文件配置的方法未解决,卸载两次数据库仍未解决。最终偶然发现使用“imp USER/PASS@SID file=xxx.dmp FULL=Y”指令导入成功,并分享此方法供有类似问题的人参考。

在使用DOS窗口导入dmp格式的数据库文件时报错ORA-12504

这个问题困扰我很久,一直没有解决,在网上搜索12504异常都说的是tnsnames.ora文件出了问题,需要改里面的配置,但是我试了很久,各种改都没有成功,很烦,为此吧数据库都卸载了两次,刚才把问题又拉出来了,试图解决,在网上一个不起眼的拐角发现了某位大神说的一句话,我试了一下竟然导入成功了,特此记录,以便有类似问题的朋友可以参考解决;

以前我在导入dmp数据文件的时候用的是:imp user/password@127.0.0.1 file=xxx.dmp full=y;      其中user是创建的用户名,password是用户名对应的密码,如果数据库安装在本地就可以直接写ip地址127.0.0.1,如果在虚拟机,那我也不知道,哈哈哈哈。。。。。。我猜应该是写虚拟机里面的ip吧,或者直接在虚拟机里面导入,(瞎猜的,猜错了朋友们手下留情。。。。)写法如图:

这种方法之前也导入成功了,但是后面又不行了,一直报错ora-12504,我也不知道为什么,在网上搜的方法也解决不了。后来偶然看到有人说用下面这个指令,果然成功了,指令是:imp USER/PASS@SID file=xxx.dmp FULL=Y ;

### 解决 DBeaver 导出 Oracle 数据导入另一 Oracle 数据库时的冲突误 #### 1. **问题根源** 在使用 DBeaver 工具导出 Oracle 数据并将其导入到另一个 Oracle 数据库的过程中,可能会因为以下几种常见原因导致冲突误: - 插入语句过长:DBeaver 默认每条 `INSERT` 语句最多包含 10 条记录。如果单条 `INSERT` 语句长度超过 Oracle 的最大限制,则会引发语法误[^1]。 - 主键或唯一索引冲突:目标数据库中可能存在重复数据或者违反主键/唯一约束的情况。 - 序列号不匹配:某些表依赖序列生成自增字段值,但在迁移过程中未正确初始化序列状态。 #### 2. **解决方案** ##### 方法 A: 修改 DBeaver 导出配置以适应 Oracle 特性 配置 DBeaver 的导出选项使其生成更符合 Oracle 接受标准的 SQL 文件- 设置每次仅插入一条记录而非批量写入多条; ```sql INSERT INTO table_name (column1, column2) VALUES ('value1', 'value2'); ``` - 启用单独事务提交模式 (`Commit after each statement`) 减少失败影响范围; 此外还可以调整其他参数比如字符串转义字符集编码等确保兼容性良好[^1]. ##### 方法 B: 清理目标数据库中的现有数据 如果确认源数据应该完全覆盖旧有内容的话,那么可以在执行任何加载动作之前先删除对应实体及其关联对象再重新创建它们从而避免一切形式的关键字碰撞现象的发生: ```sql BEGIN FOR rec IN (SELECT object_name FROM user_objects WHERE object_type='TABLE') LOOP EXECUTE IMMEDIATE 'DROP TABLE "' || rec.object_name || '" CASCADE CONSTRAINTS'; END LOOP; EXCEPTION WHEN OTHERS THEN NULL; -- Ignore errors during drop. END; / ``` 上述代码片段遍历当前方案下的所有表格逐一销毁掉以便稍后重建[^3]. ##### 方法 C: 处理序列与触发器的关系 对于那些依靠自动增长机制维护特定属性值的场合来说特别要注意同步相关联序列表现行为的一致性。可以通过下面方式实现这一点: - 查询原生系统视图取得最新数值作为初始偏移量应用至新环境里去; ```sql SELECT last_number FROM all_sequences WHERE sequence_owner = '<SCHEMA>' AND sequence_name = '<SEQUENCE>'; CREATE SEQUENCE my_seq START WITH <VALUE> INCREMENT BY 1 NOCACHE ORDER; ``` - 更新涉及该计数逻辑的所有地方使之反映最新的起点设定情况; ##### 方法 D: 利用 EXPDP 和 IMPDP 实用程序代替手动编写脚本 考虑到直接操控原始二进制镜像文件往往更加高效稳定而且不容易出差所以推荐采用官方提供的 Data Pump API 完成整个转移过程无需担心格式转换等问题带来的麻烦[^2]: ```bash expdp username/password DIRECTORY=dir_dump DUMPFILE=file.dmp LOGFILE=log_exp.log SCHEMAS=schema_name FULL=Y impdp username/password DIRECTORY=dir_dump DUMPFILE=file.dmp LOGFILE=log_imp.log REMAP_SCHEMA=old:new TRANSFORM=disable_archive_logging:y ``` --- ###
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值