не может запрашивать системные таблицы SQL Server через ссылку на базу данных, созданную с помощью DG4MSQL - PullRequest
4 голосов
/ 20 декабря 2011

Я пытаюсь создать ссылку на БД из Oracle 11g на SQL Server 2005, используя шлюз DG4MSQL.

После создания ссылки на БД я не могу запрашивать системные представления SQL Server (sys.services или sys.objects), используя драйвер JDBC, но я могу запрашивать все пользовательские таблицы, используя драйвер JDBC.

Если я использую sqlplus, я могу запросить все таблицы, включая системные таблицы.Так как мой проект - проект Java, я обязан использовать драйвер JDBC.

Еще одно наблюдение, которое я сделал, заключается в том, что если я использую DG4ODBC вместо шлюза DG4MSQL, то я могу запрашивать все таблицы SQL Server, включая системные таблицы, с помощью драйвера JDBC.

Пожалуйста, дайте мне знать, если есть какие-либо способы я могу запросить системные таблицы SQL Server, используя драйвер DG4MSQL и JDBC?

1 Ответ

0 голосов
/ 10 июля 2013

это немного сложно объяснить

Шлюз Oracle выполняет 3 типа операций:

  • Перевод SQL (при запросе обычных таблиц, представлений и т. Д.)
  • Перевод словаря данных (при запросе к системным представлениям)
  • Преобразования типов данных (например, дата Microsoft в дату Oracle)

В случае JDBC, JDBC-ODBCБлагодаря мосту драйвер JDBC идеально совместим с драйверами, включенными в DG4ODBC.Следовательно, JDBC plus DG4ODBC позволяет вам выполнять все преобразования, описанные выше.

Проблема в том, что DG4MSQL использует проприетарный драйвер, и только JDBC может быть соединен только с переводами SQL.

В качестве решения вашей проблемы вы можете попытаться создать локальные представления в схеме Oracle на основе представлений системы удаленного сервера SQL.В зависимости от ваших требований вы можете даже создать их как материализованные представления.

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

, а затем запросить sys_services вместо прямого запроса sys.services@dblink

...