plsql无法完整导入pde文件

各位请指点!
从oracle数据库(9i)用plsql导出了400W条包含图片(BLOB)的数据,现在在另一台数据库想导入(数据库和PLSQL保证了版本一致),死活导不进去,每次导到8W多条就显示完成了,日志也没有报错信息。我的pde文件有100G多,与导出的数据表大小一致,导入后只有6G左右显然没有导完。现在导出数据库已无法访问了,所以无法重新导出,求各位想想办法怎么完整导入现在的pde文件,谢谢!

根据你提供的信息,可以尝试以下几个步骤来解决你的问题:

  1. 确认导入的目标数据库的表结构与导出的源数据库的表结构一致,包括表结构、列的顺序、列的数据类型和约束等。同时,检查是否有触发器或其他的数据库对象依赖该表,确保也一并导入。

  2. 分析导入过程的日志和错误信息,查看导入停止的位置和原因。可以尝试增加日志级别或开启调试模式来获得更多的信息。

  3. 调整导入的参数,尝试分批次导入或者关闭文件大小限制等参数。在导入时可以使用 commit_interval 参数,调整每次 commit 的记录数,减少内存占用和减小操作时间。

  4. 尝试使用 Oracle 的数据泵工具(Data Pump),它可以将数据导出为一个或多个文件,再将这些文件导入另一个数据库中。使用数据泵工具可以避免出现如 BLOB 数据无法导入等问题,同时也可以更好地控制导入过程和进行备份和恢复。

  5. 如有必要,可以考虑重建导入数据的表结构,重新创建表并导入数据。但需要注意的是,这可能会影响到表的依赖关系和其他数据库对象,谨慎操作。

总之,调试和解决这种大规模数据导入的问题需要整体思考和全面分析,建议先备份好数据,针对具体情况分步骤进行分析和解决,避免出现更严重的问题。

由于导出的数据库已经无法访问,无法重新导出数据,您可以尝试以下几种方法来完整导入当前的pde文件:
1.分批次导入数据:将大文件分割成小文件进行导入,可以通过编写脚本来实现自动分割和导入数据。首先,可以将pde文件分割为多个小文件,每个文件包含不同的数据行,然后使用 PL/SQL 逐个导入这些小文件,直到全部数据导入为止。
2.提高导入的缓存大小:默认情况下,Oracle 导入数据时使用的缓存大小为 64KB。可以通过在导入时使用 COMMIT_INTERVAL 参数来增加缓存大小。例如,使用如下命令将缓存大小设置为 1MB:
impdp scott/tiger DIRECTORY=data_pump_dir DUMPFILE=exp.dmp LOGFILE=imp.log COMMIT_INTERVAL=1000000
3.使用第三方工具:您还可以尝试使用一些第三方工具来导入数据。例如,可以使用 SQL Developer 或 Toad 等工具,这些工具可以提供更高级别的导入功能,并且可以处理大文件的导入。如果您的数据文件过大,可以考虑使用外部表来加载数据。
4.检查导入日志:在导入数据时,Oracle 会生成日志文件。可以查看导入日志文件以查找导入过程中的错误或警告信息。如果您在日志中没有发现任何有用的信息,可以尝试增加日志级别,例如使用以下命令:
impdp scott/tiger DIRECTORY=data_pump_dir DUMPFILE=exp.dmp LOGFILE=imp.log LOGLEVEL=ALL

引用chatGPT作答,这种情况可能是由于导入过程中出现了错误或者中断导致的。由于您的 pde 文件非常大,可能会很难确定问题的确切原因。

以下是一些可能的解决方案:

1.尝试将数据表分成更小的块进行导入。这将有助于确定哪些数据可能是导致导入失败的原因。

2.确保导入的数据表的结构与导出的数据表的结构完全一致。如果结构不同,导入过程可能会失败。

3.重新创建导出时使用的表空间,然后尝试重新导入数据。

4.尝试使用 SQLLoader 工具,它可以更好地处理大型数据集。您可以将数据表导出为文本文件,然后使用 SQLLoader 将其导入到目标数据库中。

5.联系 Oracle 支持团队,他们可能能够提供更详细的诊断和解决方案。

最后,无论您选择哪种方法,建议在进行任何重要的数据操作之前备份数据库。这可以帮助您在出现问题时还原数据。

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
首先,您可以尝试使用Oracle的数据泵工具来导入数据。数据泵工具比PL/SQL Developer更稳定,可以处理大型数据集。

以下是使用数据泵工具的基本步骤:

  1. 在源数据库中创建导出文件夹:
CREATE DIRECTORY exp_dir AS 'path/to/export/folder';
  1. 导出数据使用expdp命令:
expdp username/password@source_database schemas=schema_name directory=exp_dir dumpfile=data.dmp logfile=expdp.log
  1. 将导出文件传输到目标数据库,并在目标数据库中创建导入文件夹:
CREATE DIRECTORY imp_dir AS 'path/to/import/folder';
  1. 导入数据使用impdp命令:
impdp username/password@destination_database schemas=schema_name directory=imp_dir dumpfile=data.dmp logfile=impdp.log

如果仍然无法完成导入,您可以尝试将数据文件拆分为多个较小的文件,然后使用数据泵工具逐个导入这些文件。

以下是将大型数据文件拆分为多个文件的Python代码示例:

import os

def split_file(input_file, output_directory, chunk_size):
    with open(input_file, "rb") as f:
        chunk_num = 0
        while True:
            chunk = f.read(chunk_size)
            if not chunk:
                break
            output_path = os.path.join(output_directory, "chunk-{}.pde".format(chunk_num))
            with open(output_path, "wb") as chunk_file:
                chunk_file.write(chunk)
            chunk_num += 1

split_file("large_file.pde", "chunks", 100000000) # 每个文件大小为100MB

请注意,这样的文件拆分可能会增加导入的时间,因为需要逐个导入多个文件。如果导入速度很慢,请尝试使用更快的硬件或通过网络传输文件来加快速度。
如果我的回答解决了您的问题,请采纳!

以下内容引用CHATGPT:

首先,针对导入过程中出现的问题,建议逐步排查可能的原因。可以尝试以下几个方向:

  1. 检查导入过程中的日志,看是否有任何异常信息。如果没有异常信息,说明可能是导入过程中出现了某种死锁或者其他异常情况,可以尝试在导入过程中加入一些调试信息,帮助定位问题。

  2. 检查导入过程中的网络连接是否稳定。如果网络连接不稳定,可能导致数据传输出现问题,可以尝试在导入过程中加入一些网络连接测试,看是否存在问题。

  3. 检查导入过程中的内存和磁盘空间是否足够。如果内存或者磁盘空间不足,可能导致数据传输出现问题,可以尝试在导入过程中加入一些空间检查,看是否存在问题。

针对导入过程中出现的问题,可以尝试使用以下几种方法来解决:

  1. 尝试将导出的数据分成多个小文件,然后逐个导入。这样可以避免一次性导入过多数据导致的问题。

  2. 尝试使用专业的数据迁移工具,如Oracle Data Pump等,来进行数据导入。这些工具可以更好地处理数据导入过程中可能出现的异常情况,提高数据导入的成功率。

  3. 尝试使用其他方式进行数据迁移,如使用数据同步工具或者备份恢复工具等。这些工具可以更好地处理数据迁移过程中可能出现的异常情况,提高数据迁移的成功率。

总之,针对导入过程中出现的问题,需要逐步排查可能的原因,并采取相应的解决方法,以提高数据导入的成功率。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^