Экспорт данных из SAP в SQL Server

У меня есть приложение, которое использует SQL Server 2008 для хранения данных, которые должны кормить кучу финансовой информации из SAP (которая в этой компании использует Oracle 11 как конец).

Я попросил парней SAP получить доступ к чтению таблиц, они сказали, что нет. Я попросил их напрямую подключиться к моей базе данных, чтобы заполнить мои таблицы, они не сказали. (У меня есть канал из базы данных Oracle, другое приложение, отличное от SAP, с прозрачным шлюзом без проблем, так что почему это задано)

Говорят, что единственным способом взаимодействия с SAP является использование веб-сервисов. Но из-за огромного количества данных я не думаю, что путь.

Есть ли у кого-нибудь опыт в создании интерфейса между SAP и SQL Server?

Я продолжу объяснение. Мое текущее приложение уже кормится тремя другими приложениями (это большое предприятие), которые все идут в те же таблицы, где я получаю данные для дальнейшего процесса. Все остальные приложения (1 Oracle, 2 SQL Server) выполняют либо прямое обновление, либо хранимые процедуры, которые сохраняют данные. Эти 3 приложения управляются разными командами, не имеющими отношения друг к другу. Все они жаловались вначале, но в конце все согласились экспортировать свои данные в это приложение.

Итак, идеальным было бы убедить парней SAP сделать то же самое: открыть соединение с SQL Server и выполнить некоторые вставки или запустить хранимые процедуры.

Ответ 1

Основной вопрос - нажать или потянуть? У вас может быть какая-то настройка, которая заставляет систему SAP R/3 периодически экспортировать некоторые данные, которые вы затем захватываете, или вы можете заставить внешнюю систему протянуть руку и захватить данные. Что касается "единственной необходимости взаимодействовать с SAP - это использование веб-сервисов" - технически говоря, что как можно ближе к фекалиям коровьего партнера. Могут возникнуть нетехнические проблемы - странные политики или нежелательные системные администраторы, но можно сосредоточиться на деталях.

Что касается "push" -решения, вы можете либо установить один из существующих отчетов, который будет периодически запускаться, либо сохранить файл в файл или отправлен по почте. Это относительно легко сделать, но для этого требуются отчеты, которые дают вам нужные данные. Если их там нет, запишите спецификации и запрограммируйте их или попросите кого-нибудь их запрограммировать. Это не волшебство, просто еще один язык программирования.

Если вы хотите потянуть, вы можете напрямую обращаться к базе данных, но я бы сильно отговорил ее. Как только вы нажмете свою первую таблицу , вы достигнете тупика. Если вы думаете о большом количестве данных, лучшим способом их вывести будет, вероятно, создание RFC-соединения (проприетарный протокол, см. Множество других вопросов здесь) и либо использовать BAPI, если он существует (что интерфейс программирования, который выпущен для официального использования и поддерживается SAP) или используйте RFC_READ_TABLE для доступа к данным. Имейте в виду, что последний не используется для всех таблиц, это зависит от структуры таблицы (общий размер и типы полей). Веб-сервисы просто добавляют еще один уровень кодирования и шумный - не очень подходит для процессов с большим объемом ETL.

Ответ 2

Я делал это несколько раз на протяжении многих лет и получал в основном тот же ответ от команд SAP, которые у вас есть. Практически в каждом случае решение заканчивалось плоскими файловыми "отчетами", сгенерированными SAP, которые мы загрузили в SQL Server с использованием пакетов SSIS. Трюк заключается в том, что отчеты настроены должным образом. Я видел, что команды SAP включали фильтры "по умолчанию" при создании этих отчетов, о которых они не упоминали, пока процесс не был в режиме реального времени, и данные отсутствовали. Удачи.

Ответ 3

Мы запускаем SQL, а не Oracle, и имели аналогичную проблему. Нам сказали, что прямой доступ к уровню БД системы SAP приведет к аннулированию гарантии. Поэтому мы попросили SAP напрямую - они в порядке с выполнением выборок в БД, если вы не обновляете, не вставляете и не удаляете, не просматривая уровень приложения. Если вы обновляете, вставляете или удаляете за пределами уровня приложения, вы аннулируете гарантию, так что это не стартер. Вы можете заставить команду SAP открыть сообщение OSS, если ему нужен тот же ответ.

Тем не менее, если это постоянный интерфейс, а не одноразовая загрузка данных, я просто хочу, чтобы кто-то создал вам RFC, веб-службу или текущий экстракт, чтобы захватить данные из приложения.

Ответ 4

Как вы знаете, для такого интерфейса приложения лучший вариант зависит от ряда факторов, таких как объем данных, режим интерфейса, требуемый в реальном времени и пакетный, синхронный и асинхронный. Если объем данных велик и вам не нужны обновления в реальном времени для вашего приложения, то выполнение отчета на стороне SAP и создание файла данных для загрузки в приложение должно быть приемлемым. Для обновления в реальном времени можно использовать IDocs (несколько файлов данных). В противном случае вы можете использовать стандартные SAP API (BAPI) для вытаскивания необходимой вам информации из SAP. Вы также можете создать репозитарии SAP для создания пользовательского RFC для функции RFC_READ_TABLE и использовать SQL-запрос для получения данных из SAP.

Можно обновить базу данных приложений напрямую с помощью Native SQL в программе ABAP со стороны SAP. Я сделал это для сервера MS-SQL и не вижу никаких ограничений использовать его для Oracle.