|
MS Access + ORACLE
|
|||
---|---|---|---|
#18+
Приветствую форумчан! На работе у меня в стационарном компьютере была установлена MS SQL Server Express Edition, а Access служил как интерфейс для пользователей. Но по мере роста данных (ежедневно получал несколько сот тысяч записей из БД в ORACLE, а по отдельным отчётам почти млн. записей) компьютер стал страшно тормозить, да и юзеры начали жаловаться, что база работает страшно медленно. Было решено, от MS SQL Server отказаться и перейти на ORACLE, да и базу перенести в серверную машину. Начал потихоньку переносить вручную базу (не стал использовать программки для автоматического переноса, хотел научиться сам). Приходилось решать по ходу множества проблем. Вот некоторые из них. 1. Как создать хранимую процедуру, которая возвращает набор записей, в ORACLE и получить данные в MS Access В MS SQL Server создать хранимую процедуру, возвращающую набор записей, проще простого: Код: sql 1. 2.
А вызвать ХП в запросе к серверу ещё проще. Код: sql 1.
А вот в ORACLE после многочисленных проб и ошибок и после чтения многочисленных, отрывочных статьей наконец-то нашёл вот такой способ (наверняка не единственный, а 1 из многочисленных способов). Итак создаём ХП так. Код: plsql 1. 2. 3. 4. 5.
А вот в запросе к серверу после многочисленных проб и ошибок смог наконец-то получить набор записей. Код: sql 1.
Причём в конце не стоит ставить ; Здесь "VIEW%" значение для параметра (аргумента) "TableName". А для "Data" разумеется ничего не передаём, т.к. он только для "выхода" данных (OUT). Можно конечно написать и функцию, но это отдельная песня (как-нибудь напишу здесь). 2. Грабли с "CASE WHEN ... END" в ORACLE. Когда Вы пишите обычный запрос "SELECT ... FROM ..." и при этом используете "CASE WHEN ... END" для какого-либо столбца, где для текстового значения используете апостроф, то вот примерно такой запрос к серверу возвращает ошибку: Код: plsql 1. 2. 3. 4. 5.
Как Вы видите, я использовал апостроф внутри "CASE WHEN ... END". Когда запускаете запрос ORACLE ругается. Вроде бы простейший запрос. Когда этот же запрос запускаю в программе "PL/SQL Developer", то там не ругается. Оказывается причина в пробеле после "END" (я отметил красным). Здесь в этом запросе "SSS" это псевдоним столбца. Вот если убрать пробел и псевдоним спустить хотя бы на 1 строчку вниз, вуаля! ORACLE не ругается. Код: plsql 1. 2. 3. 4. 5. 6.
Думал это косяк Access, который при передаче на сервер что-то там видать мудрит сильно. Но к моему удивлению в другой программе WinSQL та же картина. Скорее всего проблема в ODBC драйвере, а быть может и ОС Windows тоже как-то причастен к косяку. (На всякий случай пишу здесь: у меня 64-битный Win 7, а офис 32-битный. ODBC драйвер "Oracle in XE", устанавливается совместно с ORACLE Express Edition). Если у Вас "нормальный" драйвер, то возможно такой проблемы не возникает. 3. Разные типы данных между ORACLE и Access. Само собой разумеется, что это абсолютно разные программы разных разработчиков и поэтому совместимость отдельных типов данных скорее случайность чем закономерность. :) Взять хотя бы целые числа. Если ключевое поле - целое число, то на стороне ORACLE не стоит использовать INETEGER, ибо в этом случае Access будет принимать его как строка, после чего начнётся веселая жизнь в случае обновления или удаления данных. Лучше использовать что-то вроде NUMBER(n). Также следует учесть, что в ORACLE нет пустой строки '', если строка пустая, то там она автоматически NULL. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.06.2016, 14:02 |
|
MS Access + ORACLE
|
|||
---|---|---|---|
#18+
studierenбазу перенести в серверную машину. какой-то туманный альбион... а ведь это и есть самое главное! если сказать обычному компу, что с завтрашнего дня я буду звать тебя серверной машиной - от этого ничего не изменится. - оракл максимально эффективен на ос типа линукс. - у оракла есть тонкие настройки, без них не будет нужного эффекта. - если это винда, то ОС должна быть обязательно сервер (от W2008(64) сервер и выше) иначе будет задействован только один процессор (из желательных минимум 4-х камней) - если оперативной памяти менее 8 гиг, то при таких объемах лучше даже не дергаться - в общем если системный блок стоит меньше 150 - 200 т.р., можно не продолжать изыскания Обычно для каждой СУБД есть описание требований к железу сервера и ОС в зависимости от объемов и нужно сначала проверить это соответствие (хотя они и занижены минимум в 3-5 раз от реальных, это те условия, при которых через час, но всё хотя бы запустится) Сетка должна быть везде 1Gb, сотка тут уже не комильфо иначе пока один смотрит - другие курят бамбук... Ну и я бы начал не с перехода на оракл а с перехода на полноценный MS SQL Server (не Express) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.06.2016, 19:05 |
|
MS Access + ORACLE
|
|||
---|---|---|---|
#18+
автор Было решено, от MS SQL Server отказаться и перейти на ORACLE, да и базу перенести в серверную машину MS SQL Server довольно неплох и вполне способен обслуживать миллионі запросов и записей. Что мешает поднять на "серверной" машине w2008r2? куча отличных опций "из коробки". Оракл - система неплохая, но по ней манов поменьше и требовательность у нее к программисту повыше. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.06.2016, 20:51 |
|
MS Access + ORACLE
|
|||
---|---|---|---|
#18+
Alex Panchoавтор Было решено, от MS SQL Server отказаться и перейти на ORACLE, да и базу перенести в серверную машину MS SQL Server довольно неплох и вполне способен обслуживать миллионі запросов и записей. Что мешает поднять на "серверной" машине w2008r2? куча отличных опций "из коробки". Оракл - система неплохая, но по ней манов поменьше и требовательность у нее к программисту повыше. Вся база по биллингу построена на ORACLE, да и лицензионная она. Переносить на SQL Server никто не собирается. А то, что я сам создал для некоторых отчётов для нужд нашего отдела это просто "мелочь" по сравнению с биллингом. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2016, 03:17 |
|
MS Access + ORACLE
|
|||
---|---|---|---|
#18+
[quot Alex Pancho]автор... Оракл - система неплохая, но по ней манов поменьше и требовательность у нее к программисту повыше. После SQL Server очень трудно было адаптироваться к ORACLE. Если сравнить оба СУБД, то многие вещи в SQL Server интуитивно понятные и простые для понимания по сравнению с ORACLE. Чего стоит один только триггер в ORACLE? P.S. Я честно говоря даже рад, что перевожу базу на ORACLE несмотря ни на что. Так я более или менее научусь. Как говорится "век живи, век studieren". :)) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2016, 03:29 |
|
MS Access + ORACLE
|
|||
---|---|---|---|
#18+
Добрый день уважаемые форумчани! Когда открываю какую-либо форму или вношу изменения в записях (ввод, изменение, удаление), то какие запросы уходят в сторону ORACLE как можно узнать? Допустим, источником данных для формы служит линкованная таблица. Подозреваю, что Access отправляет не только запрос "SELECT * FROM ..." или "UPDATE ... SET ", но и что-то вроде "COMMIT", чтобы сразу же закрыть транзакцию. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2016, 09:20 |
|
MS Access + ORACLE
|
|||
---|---|---|---|
#18+
Я использовал акс как интерфейс к оракловой базе, но не использовал линкованных таблиц. Нужное мне выкачивал через ADO - Recordset - ы, заполнял таблицы, потом после редактирования сам посылал назад. Так есть контроль над сессиями. что касается ф-ций, возвращающих наборы данных - https://docs.oracle.com/cd/B19306_01/appdev.102/b14289/dcitblfns.htm или как вариант, можно работать с Global Temporary Tables https://docs.oracle.com/html/E25494_01/tables003.htm#i1006400 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2016, 09:38 |
|
MS Access + ORACLE
|
|||
---|---|---|---|
#18+
Я подозреваю, что из оракла можно делать дблинки http://oracledba.bigresource.com/Link-Oracle-10g-XE-To-Sql-Server-Express-ayAFVVokV.html на домашнюю SQL Express базу, интерфейс к которой будет на ACCESS. В общем можно по разному. Welcome to Oracle С уважением ..... ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2016, 09:48 |
|
MS Access + ORACLE
|
|||
---|---|---|---|
#18+
Vladimir Baskakov, Увы, для меня не вариант. Все формы надо будет переделывать. Слишком трудоёмко, да и не люблю я в форму "подложить" ADO вместо "естественного" DAO. Если не ошибаюсь, когда юзер нажимает на фильтр, то часто возникают ошибки при таком раскладе. Пробовал когда-то. Не понравился. Ну если кто-то знает, please хотя бы ссылку. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2016, 09:57 |
|
MS Access + ORACLE
|
|||
---|---|---|---|
#18+
studierenда и не люблю я в форму "подложить" ADO вместо "естественного" DAO Это что еще за естественный DAO? DAO устаревшая технология. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2016, 10:13 |
|
MS Access + ORACLE
|
|||
---|---|---|---|
#18+
Используйте встроенные в Оракл средства мониторинга запросов к базе от клиента, Акцесс здесь не помощник. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2016, 12:31 |
|
MS Access + ORACLE
|
|||
---|---|---|---|
#18+
studierenVladimir Baskakov, Увы, для меня не вариант. Все формы надо будет переделывать. Слишком трудоёмко, да и не люблю я в форму "подложить" ADO вместо "естественного" DAO. Если не ошибаюсь, когда юзер нажимает на фильтр, то часто возникают ошибки при таком раскладе. Пробовал когда-то. Не понравился. Ну если кто-то знает, please хотя бы ссылку. - не пере-делать а до. до-писать адаптеры, которые загружают в акс пулы данных. Пользователь обрабатывает-смотрит-отчетит. потом, адаптер, исправленное заливает в материнскую базу. или адаптер - оракл => SqlServer [обработка в аксе, сохранение на SQL-Server] SQLSerwer=>оракл Иначе, допустим. Поймете что аксессовая прилинкованная таблица делает не то. Гоняет лишние данные, или коммитит-роллбэчит не так как хочется. запросы строит нехинтованные. А она скорее всего с ораклом будет неидеально дружить. И что? туда то не подлезешь. остается - оборачивать. Ну и - вопрос цены кода в аксессине... ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2016, 13:01 |
|
MS Access + ORACLE
|
|||
---|---|---|---|
#18+
Вопрос к знатокам. Можно ли через ADO связаться с ORACLE, но при этом не устанавливать ODBC драйвер на клиентскую машину? Я не знаю как грамотно написать строку подключения. Пробовал вот так: Omiting tnsnames.ora This is another type of Oracle connection string that doesn't rely on you to have a DSN for the connection. You create a connection string based on the format used in the tnsnames.ora file without the need to actually have one of these files on the client pc. SERVER=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=MyHost)(PORT=MyPort))(CONNECT_DATA=(SERVICE_NAME=MyOracleSID))); uid=myUsername;pwd=myPassword; Текст взял отсюда . Но к сожалению не пашет. Заранее благодарю за помощь. P.S. Из-за текучки кадров (увольнений / переходов на другой отдел), а также из-за замены машины (потихоньку обновляют компы сотрудникам) приходится слишком часто устанавливать ODBC драйвер. А эти драйверы устанавливать ох как не проста, слишком много "танцев с бубнами", нужно учитывать битность системы и многое, многое многое. А некоторым сотрудникам нужно дать доступ всего лишь только к 1 таблице и из-за этого мучиться с драйверами. :( ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2016, 12:49 |
|
MS Access + ORACLE
|
|||
---|---|---|---|
#18+
studieren, Клиент Оракла, надеюсь, стоит? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2016, 13:04 |
|
MS Access + ORACLE
|
|||
---|---|---|---|
#18+
MrShinstudieren, Клиент Оракла, надеюсь, стоит? Идея как раз таки такая: по возможности вообще ничего не устанавливать на клиентские машины, только Access (ну это в идеале для меня). P.S. Тут сотрудники ИТ отдела рекомендует потихоньку изучать ORACLE APEX (или что-то на подобие этого), создать там WEB морду и пускай через WEB заходят в базу. Как раз получается "тонкий клиент". Установка ODBC драйверов реально достал и изрядно надоело. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2016, 14:17 |
|
MS Access + ORACLE
|
|||
---|---|---|---|
#18+
К сожалению, ответа на свой вопрос пока не нашёл. ОК. Допустим, то, что задумал не возможно осуществить без драйверов. А можно ли тогда пойти другим путём? Предположим на серверной машине установлена некая программа (ну даже предположим ODBC драйвер для ORACLE). Условно назовём эту программу "Сервер". Можно ли каким-нибудь образом запустить / обратиться к программе "Сервер" находясь на клиентской машине и получить программно набор записей? Ну что-то наподобие почти "тонкого клиента". В идеале если в режиме онлайн несколько пользователей смогут получить данные, то это был бы неплохой вариант. Т.е. если не придётся "встать в очередь" пользователям, то такой вариант был бы идеальным. Никто не сталкивался с похожей проблемой? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2017, 14:13 |
|
MS Access + ORACLE
|
|||
---|---|---|---|
#18+
studierenМожно ли каким-нибудь образом запустить / обратиться к программе "Сервер" находясь на клиентской машине и получить программно набор записей? Вам придется на клиентской машине либо клиента этого "сервера" ставить, либо ОДБЦ настраивать :)) Тонкий клиент - браузер или удаленный рабочий стол/приложение, другие варианты обязательно потребуют каких-либо действий на клиенте. Проще разобраться с административным режимом установки клиента Оракла, тогда не потребуется заходить на каждый комп и ставить/настраивать. Если сеть нормально настроена, то выкатить клиента на нужные компьютеры с необходимыми установками можно автоматически. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2017, 14:43 |
|
MS Access + ORACLE
|
|||
---|---|---|---|
#18+
studierenК сожалению, ответа на свой вопрос пока не нашёл. ОК. Допустим, то, что задумал не возможно осуществить без драйверов. А можно ли тогда пойти другим путём? Предположим на серверной машине установлена некая программа (ну даже предположим ODBC драйвер для ORACLE). Условно назовём эту программу "Сервер". Можно ли каким-нибудь образом запустить / обратиться к программе "Сервер" находясь на клиентской машине и получить программно набор записей? Ну что-то наподобие почти "тонкого клиента". В идеале если в режиме онлайн несколько пользователей смогут получить данные, то это был бы неплохой вариант. Т.е. если не придётся "встать в очередь" пользователям, то такой вариант был бы идеальным. Никто не сталкивался с похожей проблемой? Подозреваю, что акцесс из коробки умеет общаться с MS SQL Server, в том числе Express, который может жить на ==серверной== машине и общаться ораклом Так и написал ранее: автор... из оракла .... делать дблинки http://oracledba.bigresource.com/Link-Oracle-10g-XE-To-Sql-Server-Express-ayAFVVokV.html на домашнюю SQL Express базу, интерфейс к которой будет на ACCESS. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2017, 09:35 |
|
MS Access + ORACLE
|
|||
---|---|---|---|
#18+
Vladimir BaskakovПодозреваю, что акцесс из коробки умеет общаться с MS SQL Server, в том числе Express, который может жить на ==серверной== машине и общаться ораклом Так и написал ранее: автор... из оракла .... делать дблинки http://oracledba.bigresource.com/Link-Oracle-10g-XE-To-Sql-Server-Express-ayAFVVokV.html на домашнюю SQL Express базу, интерфейс к которой будет на ACCESS. Предлагаете установить SQL Server Express Edition на серверной машине, а там установить link к ORACLE, а в клиентской машине ссылаться на SQL Server? Ну в общем-то как обход проблемы быть может и такой вариант сгодиться, но тормозить будет конкретно (был у меня опыт, когда между двумя базами приходилось данные гонять туда сюда), да и совместимостью типов данных могут быть проблемы, а ещё таблицы станут не обновляемыми, придётся самому придумать самопальный INSERT, UPDATE, DELETE. Неужели ADODB как-то не умеет обращаться к серверу? Или быть может как-то JDBC прикрутить? Ну на JAVA какой либо скрипт сваять, а потом через ADODB как-нибудь вытащить данные из JAVA посредника? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2017, 16:45 |
|
MS Access + ORACLE
|
|||
---|---|---|---|
#18+
Я не пойму, а как WEB морды работают с базой ORACLE? Там ведь точно не устанавливают ODBC драйвер. Значит как-то умеют WEB морды вытаскивать данные? Подозреваю, что всё-таки и с ADODB как-то можно вытаскивать, знать бы как! ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2017, 16:48 |
|
MS Access + ORACLE
|
|||
---|---|---|---|
#18+
studierenЯ не пойму, а как WEB морды работают с базой ORACLE? Веб морды работают не с Ораклом, а с сервером приложений, а уже он знает, как вытащить данные из Оракла. Это 3-х уровневая архитектура. А у вас 2-х уровневая. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2017, 08:46 |
|
MS Access + ORACLE
|
|||
---|---|---|---|
#18+
studierenНеужели ADODB как-то не умеет обращаться к серверу? Или быть может как-то JDBC прикрутить? Ну на JAVA какой либо скрипт сваять, а потом через ADODB как-нибудь вытащить данные из JAVA посредника? ...... не ну чего-то на клиентской машине ставить надо. и конфигурировать. Может и не оракловый клиент, но что-то все равно надо. Или джаву с jdbc - драйверами, или odac ( https://habrahabr.ru/post/127603/) ну грубо говоря наверное можно из клиента ораклового надергать длл ек, сложить их в кучку со своей программкой и типа говорить ==какой такой клиент оракла? нет , никакого клиента не видали, не слыхали о таком== .... наверное. но чем больше самодельничаешь, тем времени больше уйдет. ======================================== может можно засофтить клиентские машины ODP https://docs.oracle.com/cd/E48297_01/doc/win.121/e41125/installODPmd.htm через копирование файлов и написать свою дотнетовскую прожку, которая до оракла ходить будет. может оттуда длль к прожке закинуть, и тоже будет.... не уверен, может на все хватит Oracle.ManagedDataAccess.dll. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2017, 09:56 |
|
|
start [/forum/topic.php?fid=45&msg=39261362&tid=1612685]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
37ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 136ms |
0 / 0 |