【问题标题】:Access bfile from other oracle database从其他oracle数据库访问bfile
【发布时间】:2018-06-27 14:50:04
【问题描述】:

我有两个使用 Oracle Standard Edition Two 12.1 的 Oracle 数据库,DB1 和 DB2。 DB1 包含下表一个 FILE_TABLE:

ColumnName  DataType
File_Id     Number
File_Ref    Bfile

我将 Bfile 存储到 FILE_TABLE 表的 File_Ref 中。 我想从 FILE_TABLE 表中访问 Bfile 并在 DB2 中显示它。

我已经使用数据库链接进行了尝试。使用数据库链接,我尝试这样做:

SELECT  FILE_REF FROM FILE_TABLE@dblink;

但它给出了一个错误:ORA-22992: cannot use LOB locators selected from remote tables

我也试过 DBMS_FILE_TRANSFER 但是当我研究它时,我知道我们只能传输系统数据文件而不能传输 Bfile。 这是真的吗? 这是我用来传输文件的语法:

DBMS_FILE_TRANSFER.put_file(
source_directory_object => 'db1_dir',
source_file_name => 'db1test.html',
destination_directory_object => 'db2_dir',
destination_file_name => 'db2test.html');
destination_database => 'db1_to_db2',
END;
/

但我得到一个错误:

ORA-19505: 无法识别文件“/db1_dir/db1test.html”

ORA-27046: 文件大小不是逻辑块大小的倍数

附加信息:1

ORA-02063:db1_to_db2 的前 3 行

ORA-06512:在“SYS.DBMS_FILE_TRANSFER”第 37 行

ORA-06512:在“SYS.DBMS_FILE_TRANSFER”,第 132 行

ORA-06512:在第 2 行

  1. 00000 - “未能识别文件 \"%s\"”

*原因:调用识别文件返回错误

*操作:检查附加消息,并检查文件是否存在

有没有办法使用数据库链接来做到这一点?有没有其他解决方案可以将 Bfile 从一个数据库移动到另一个数据库?

【问题讨论】:

  • 示例 sql 中的表名和列名与表的描述不匹配。请提供对您的表格的正确描述。例如 bfile_col_nm 是什么?
  • 对不起,我只是举个例子。我已经更正了 SQL 查询。
  • 我现在无法测试,但您可以将insert 放入表格而不是selecting 吗?
  • 这是一次性副本还是持续要求?
  • 您尝试过数据泵吗?从 DB1 导出并导入 DB2?

标签: oracle


【解决方案1】:

ora-27046 通常表示在文件传输期间文件已更改。这可能是由防火墙引起的。您是否验证过该文件是相同的。

此外,当您得到 ora-27046 它不是唯一的错误时,您会得到一个包含多个错误的错误堆栈。最好发布完整的错误堆栈。您也没有提及您使用的是哪个 oracle 版本。

【讨论】:

  • 添加了错误堆栈。此外,添加了 Oracle 版本。我使用的是 Oracle 标准版二。
  • 两个数据库之间是否有防火墙/NAT 或类似设备?
  • 这两个数据库都在 AWS RDS Oracle 上。我认为没有防火墙问题。
  • @Dang 我认为 AWS 甚至不允许访问文件系统?您可能希望在问题中添加有关如何访问这些文件的详细信息。此外,还不清楚您到底想做什么。该问题涉及“移动” bfile,但您的评论说您“不是在寻找复制”。一个简单的数据库链接不能用于阅读。即使是写而不读的技巧也不适用于 BFILE。 LOB APIs 也无济于事:“LOB API 不支持将数据加载到 BFILE 中。”
猜你喜欢
  • 2018-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-20
相关资源
最近更新 更多