无法通过使用DG4MSQL创建的数据库链接查询SQL Server系统表

时间:2011-12-20 10:21:23

标签: oracle jdbc oracle11g dblink

我正在尝试使用DG4MSQL网关创建从Oracle 11g到SQL Server 2005的数据库链接。

创建db链接后,我无法使用JDBC驱动程序查询SQL Server系统视图(sys.services或sys.objects),但我能够使用JDBC驱动程序查询所有用户表。

如果我使用sqlplus,我可以查询所有表,包括系统表。由于我的项目是Java项目,我必然会使用JDBC驱动程序。

我做的另一个观察是,如果我使用DG4ODBC而不是DG4MSQL网关,那么我可以使用JDBC驱动程序查询所有SQL Server表,包括系统表。

如果有任何方法可以使用DG4MSQL和JDBC驱动程序查询SQL Server系统表,请告诉我吗?

1 个答案:

答案 0 :(得分:0)

这个解释有点棘手

Oracle Gateway执行3种类型的操作:

  • SQL转换(当您查询常规表,视图等时)
  • 数据字典翻译(查询系统视图时)
  • 数据类型转换(例如Microsoft的日期到Oracle的日期)

对于JDBC,JDBC-ODBC桥使JDBC驱动程序与DG4ODBC中包含的驱动程序完美兼容。因此,JDBC plus DG4ODBC允许您执行上面的所有转换。

问题是DG4MSQL使用专有驱动程序,只有SQL转换可以桥接到JDBC。

作为您的问题的解决方案,您可以尝试基于远程SQL Server系统视图在Oracle架构上创建本地视图。根据您的要求,您甚至可以将它们创建为物化视图。

CREATE OR REPLACE VIEW sys_services 
AS SELECT * 
FROM sys.services@dblink;

然后查询sys_services,而不是直接查询sys.services@dblink