Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
commit = rollback!!! (SQL Server2000 и Oracle)
|
|||
|---|---|---|---|
|
#18+
После миграции приложения с SQL Server2000 на Oracle (8i) в одном из триггеров остался вызов процедуры, в которой при определенных условиях вызывался commit. В общем случае в Oracle, как известно, операции с транзакциями в триггерах запрещены (не рассматривая специфические случаи типа автономных транзакций...), но компилирует при этом без всяких проблем. Ситуация усугублялась тем, что в блоке обработки исключиельных ситуаций на верхнем уровне именно это исключение перехватывалось "молча" (when others) и выполнялся rollback. Работало потрясающе, но иногда вместо ожидаемого commit в транзакции получался rollback!!! Докапаться было не очевидно, тем более эти случаи были очень редки... Вывод: написав commit в одной БД можете получить rollback в другой - и все в соответствии со стандартом ANSI... Песенка ослика-ораклиста ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2003, 17:04 |
|
||
|
commit = rollback!!! (SQL Server2000 и Oracle)
|
|||
|---|---|---|---|
|
#18+
После миграции приложения с SQL Server2000 на Oracle (8i) в одном из триггеров остался вызов процедуры, в которой при определенных условиях вызывался commit. В общем случае в Oracle, как известно, операции с транзакциями в триггерах запрещены (не рассматривая специфические случаи типа автономных транзакций...), но компилирует при этом без всяких проблем. Ситуация усугублялась тем, что в блоке обработки исключиельных ситуаций на верхнем уровне именно это исключение перехватывалось "молча" (when others) и выполнялся rollback. Работало потрясающе, но иногда вместо ожидаемого commit в транзакции получался rollback!!! Докапаться было не очевидно, тем более эти случаи были очень редки... Вывод: написав commit в одной БД можете получить rollback в другой - и все в соответствии со стандартом ANSI... Песенка ослика-ораклиста ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2003, 18:10 |
|
||
|
commit = rollback!!! (SQL Server2000 и Oracle)
|
|||
|---|---|---|---|
|
#18+
а вот в дибите такой фигни нет! (про песенку) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2003, 18:17 |
|
||
|
commit = rollback!!! (SQL Server2000 и Oracle)
|
|||
|---|---|---|---|
|
#18+
Хотелось бы высказаться по поводу некоторых различий, с которыми довелось столкнуться (прежде всего с позиции разработчика), в указанных базах данных, высказать свое и узнать мнение уважаемого сообщества. Поправьте, если не так (но с аргументацией). 1) Одно из примечателных различий, на мой взгляд, в том, что выборка данных в SQL Server-е может блокировать DML-операции. В Oracle чтение никогда не блокирует запись, хотя может блокировать некоторые ресурсы. Это серьезно влияет на разработку, требуя разных подходов. 2) Радикально различаются подходы к транзакциям. В SQL Server не рекомендуются длительные транзакции, т.к. потребляют значительные ресурсы, в Oracle, наоборот, излишние commit могут серьезно снизить производительность. 3) На серверной части SQL Server не желательно использовать сложную бизнес-логику, вызываю большую загрузку сервера БД. Разумнее переложить часть бизнес-логики на среднее звено. Т.е. лучше много отосительно коротких и простых операций, чем меньше В Oracle всю возможную работу с данными лучше предоставить БД, для сопуствующих операций - среднее звено и java процедуры. 4) Для клиентской части, наверное, немаловажно, что API для SQL Server проще в использовании. Чтобы в Oracle вернуть результаты запросов из процедур, придется использовать курсоры, и не всегда поддерживаются все его возможности (например вложенные таблицы или объектные типы). 5) В SQL Server: до сих пор нет триггеров на уровне строки, ограничения по рекурсионным вызовам, суммарному размеру индексов (в Oracle типов индексов больше) и стобцов, что зачастую невозможно создавать единую таблицу и приходится искусственно ее расщеплять, и т.д. Oracle - чтобы сказать, что у него чего-то нет, надо найти это в других базах, и не найти соответствующего аналога. 5) Сравнение Transact SQL и PL/SQL - вообще отдельная тема. В плюс Transact SQL - его относительная простота и удобство работы с документацией. Минусов по сравнению с Oracle - гораздо больше: - отсутствует перехват и обработка исключительных ситуаций (конечно, можно извратиться и сделать проверку на возможность, например, конвертнуть один тип данных в другой...); - нет массивов и нет возможности хранить переменные для сессии иначе как во временных таблицах; - нет возможности вернуть результаты динамического запроса в саму же вызывающую процедуру на сервере (только через временные таблицы)... Возможно обсуждение этих вопросов поможет кому-то сделать осознанный выбор базы данных для приложений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2003, 19:10 |
|
||
|
commit = rollback!!! (SQL Server2000 и Oracle)
|
|||
|---|---|---|---|
|
#18+
>В Oracle чтение никогда не блокирует запись, хотя может блокировать некоторые ресурсы. Это какие ресурсы? Что-то сходу не могу вспомнить... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2003, 00:49 |
|
||
|
commit = rollback!!! (SQL Server2000 и Oracle)
|
|||
|---|---|---|---|
|
#18+
4) Для клиентской части, наверное, немаловажно, что API для SQL Server проще в использовании. Чтобы в Oracle вернуть результаты запросов из процедур, придется использовать курсоры, и не всегда поддерживаются все его возможности (например вложенные таблицы или объектные типы). Стоит, внимательней поизучать документацию, или спросить и почитать форум об Oracle, на этом же сайте и тогда не будет подобных проблем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2003, 21:48 |
|
||
|
commit = rollback!!! (SQL Server2000 и Oracle)
|
|||
|---|---|---|---|
|
#18+
Одно из примечателных различий, на мой взгляд, в том, что выборка данных в SQL Server-е может блокировать DML-операции. А может и не блокировать. Очень легко можно задать уровень блокировки от полного отсутствия до блоктрования всей таблицы. Самый простой способ Select f1, f2.. from t1(nolock) И нечего поклеп. А ежели нужна действительно сложная логика на MS SQL сервере, пиши XP - результат тебя удивит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2003, 07:46 |
|
||
|
commit = rollback!!! (SQL Server2000 и Oracle)
|
|||
|---|---|---|---|
|
#18+
2 killed: Подразумевались внутренние блокировки и защелки, а также влияние на буферный кеш у сложных запросов с возвратом большого результирующего набора... Подробней об этом, наверное уместно на форуме по Oracle... 2 DimaR: Разумеется проблемы решаются, но все же удобнее это в SQL Server-е. 2 vdimas: READ UNCOMMITTED Implements dirty read, or isolation level 0 locking, which means that no shared locks are issued and no exclusive locks are honored. When this option is set, it is possible to read uncommitted or dirty data; values in the data can be changed and rows can appear or disappear in the data set before the end of the transaction. This option has the same effect as setting NOLOCK on all tables in all SELECT statements in a transaction. This is the least restrictive of the four isolation levels. Т.е. без блокировки доступен только этот уровень, у Oracle без блокирования достигается уровень READ COMITTED и SERIALIZABLE. А вот еще одна фича - отсутствие нумерации строк в результирующем наборе у SQL Server, вроде мелочь, но из-за этого по-разному реализуется, например, постраничный вывод на браузер записей от 190 до 200 с заданой сортировкой: В Oracle: select t.* from ( select rownum rw , t.* from (select * from mytable t order by param1 desc, param2) t where rownum <= 200) t where t.rw >= 190; В SQL Server: нужно использовать либо временные таблицы, либо джойнить еще на что-нибудь, либо дополнительный подзапрос in..., решений много, но такого же простого - не знаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2003, 20:45 |
|
||
|
commit = rollback!!! (SQL Server2000 и Oracle)
|
|||
|---|---|---|---|
|
#18+
отсутствует перехват и обработка исключительных ситуаций (конечно, можно извратиться и сделать проверку на возможность, например, конвертнуть один тип данных в другой...); Можно не извращаться, а использовать @@ERROR ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2003, 22:11 |
|
||
|
commit = rollback!!! (SQL Server2000 и Oracle)
|
|||
|---|---|---|---|
|
#18+
>Подразумевались внутренние блокировки и защелки, а также влияние на буферный кеш у сложных запросов с возвратом большого результирующего набора... Подробней об этом, наверное уместно на форуме по Oracle... это все Internals... ты думаешь в других СУБД все "бесплатно" дается ? ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2003, 16:48 |
|
||
|
|

start [/forum/topic.php?fid=35&msg=32225347&tid=1554306]: |
0ms |
get settings: |
10ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
38ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
65ms |
get tp. blocked users: |
1ms |
| others: | 272ms |
| total: | 425ms |

| 0 / 0 |
