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

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

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

我还发现,如果我使用DG4ODBC而不是DG4MSQL网关,则可以使用JDBC驱动程序查询所有SQL Server表,包括系统表。

请让我知道是否可以使用DG4MSQL和JDBC驱动程序查询SQL Server系统表?

最佳答案

这个解释有点棘手

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

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

  • 如果是JDBC,则JDBC-ODBC桥使JDBC驱动程序与DG4ODBC中包含的驱动程序完全兼容。因此,JDBC加DG4ODBC允许您执行上述所有转换。

    问题在于DG4MSQL使用专有的驱动程序,并且只有SQL转换可以桥接到JDBC。

    作为解决此问题的方法,您可以尝试基于远程SQL Server系统视图在Oracle模式上创建本地视图。根据您的要求,您甚至可以将它们创建为实例化视图。
    CREATE OR REPLACE VIEW sys_services
    AS SELECT *
    FROM sys.services@dblink;
    

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

    10-01 05:23
    查看更多