понедельник, 22 октября 2012 г.

Сравнение Oracle и MS SQL Server

Oracle и MS SQL Server – де-факто стандарты СУБД корпоративного уровня. У каждой из них имеются свои преданные сторонники и ярые противники. Обе СУБД выполняют примерно одинаковые задачи для примерно одинаковых пользователей и управляются примерно одинаковыми dba. В чём же разница? Далее в этом посте предлагаю экспресс-сравнение функциональности Oracle и SQL Server, пусть достаточно поверхностное и без залезания в глубокие дебри на уровень "прожжёных админов", зато пригодное для начального сопоставления.

Оба продукта развиваются, правят косяки, реализуют удачные фичи и пр. Так что, по правде говоря, сравнивать можно только конкретные версии/редакции (2k5 vs. 10g, 2k8 vs. 11g). И всё-таки, если попытаться обращать внимание только на самые обобщённые характеристики... 

Экспресс-сравнение функциональности SQL Server и Oracle
Экспресс-сравнение функциональности SQL Server и Oracle

  • SQL Server работает только на windows (зато может сосредоточиться именно на этой связке СУБД – ОС). Oracle же выпускает версии для разных платформ (windows, linux, solaris, solaris sparc, aix, hp-ux itanium, hp-ux pa-risc, z/linux, z/os, mac os), что означает возможность использовать бесплатные ОС для серверов СУБД.
  • Обе СУБД поддерживают файловые системы и СХД. Но у oracle есть один очень классный инструмент – automatic storage management. Фишка в том, что oracle-dba приходится вникать в особенности файловых систем тех ОС, на которых разворачивается СУБД. Чтобы помочь ему, asm скрывает в себе такие особенности и позволяет работать в стандартном и привычном oracle-окружении (в том числе с помощью sql). Фактически, asm можно сказать "вот есть массив неотформатированных дисков, ты будешь работать с ним", и asm самостоятельно отформатирует диски, разместит на них данные и будет ими управлять. Причём – по субъективным ощущениям – получится гораздо эффективнее, чем управление "вручную" (один коллега, участвовавший в курсах по администрированию oracle, признался, что сами тренеры не особенно представляют, как этот asm работает "внутри").
  • С портами всё ясно – обе СУБД имеют стандартные порты и могут быть настроены на использование другого значения, отличного от дефолтного. В sql server имеется также возможность запуска инстанса на случайном, динамически выделяемом порту (чтобы узнать этот порт, клиенту потребуется обратиться к СУБД по 1434).
  • Что касается базовых сервисов (в windows). MSSQLSERVER – самая главная служба одноимённой СУБД, обеспечивает хранение данных, их обработку и управление доступом. SQLServerAgent осуществляет планирование и исполнение заданий, оповещений, извещений и планов обслуживания базы данных. В oracle основных служб также две: OracleService[SID] и Oracle[oracle_home]TNSListener. Первая служба обеспечивает функциональность БД (за исключением разного рода надстроек, аналитики и т.д.), вторая – это диспетчер подключений. Есть важная особенность – при остановке или поломке TNSListener-а все активные подключения продолжают работать.
  • По разграничению прав доступа также есть интересное отличие. Если в ms sql server пользователю дать права администратора, то он может выполнять любые операции, в т. ч. – передать такие же права dba другому пользователю. В oracle же возможны два варианта – передача прав with grant option (с разрешением дальнейшей передачи прав) и без такого разрешения.
  • Также интересные моменты касаются соответствия терминов.
    • С инстансом понятно – это экземпляр СУБД, установленный на сервере. В sql server он имеет имя, по которому можно к нему обратиться (тут ещё такая фишка, как возможность использовать неименованный инстанс – когда на сервер устанавливается только один экземпляр этой СУБД, то он получает дефолтное имя, и обращаться к СУБД можно без указания такого имени). В oracle каждый инстанс имеет SID, который указывать обязательно.
    • А вот с базой и схемой дела обстоят сложнее. Пользователи sql server привыкли к тому, что база данных – это какое-то хранилище для размещения таблиц, процедур, представлений и прочих объектов, к которому они могут получить доступ; и что на одной СУБД может быть любое количество баз данных. И когда такие пользователи приходят к oracle-dba и просят "сделать им базу данных", админы сильно пугаются. Ведь в oracle база данных – это фактически инстанс. А вот "хранилищу для размещения ... объктов, к которому ... могут получить доступ" соответствует понятие "схема".
  • Далее – соответствие состояний. Фактически sql server либо работает (служба MSSQLSERVER успешно стартовала), либо нет. В oracle же целый набор состояний:
    • не работает – все службы остановлены;
    • смонтирован (mount) – особенное состояние, в которое СУБД может перейти сама (при каких-то проблемах), либо в которое её может перевести администратор. В какой-то мере это безопасный режим, в котором можно изменять критические параметры конфигурации СУБД. Естественно, в этом состоянии СУБД не обслуживает пользователей;
    • запущен и работает, обслуживает старые подключения и не принимает новые. В этом состоянии запущена служба OracleService[SID] и остановлена Oracle[oracle_home]TNSListener. Иногда бывает так, что разработчик Вася никак не может соединиться с СУБД и громко ругается, в то время как разработчик Коля отлично работает с ней же – причина такой ситуации зачастую кроется в том, что Коля уже давно установил соединение, затем была отключена служба TNSListener, и новое соединение от Васи не принимается;
    • запущена и работает в полной мере (запущены обе службы).
  • Обе СУБД используются свои диалекты языка запросов. И хотя они основаны на одном и том же стандарте ansi sql, диалекты получились разные, а многие их функции – специфичными и несовместимыми. Следует отметить, что PL/SQL мощнее T-SQL.
  • Для управления sql server используется management studio – большой и полноценный клиент, достаточный для выполнения подавляющего большинства операций любого уровня – от простого пользователя до администратора. В свою очередь из-за обилия платформ oracle предлагает web-консоли для работы и администрирования СУБД.
Представленное сравнение не претендует на полноту и абсолютную достоверность, а специфичных моментов перечислено всего несколько, выбранных субъективно. Но надеюсь, что и в таком виде информация будет полезной. Если есть желание добавить - u r welcome!

4 комментария:

  1. Хорошее сравнение, спасибо

    ОтветитьУдалить
  2. дань моде, не более...
    ну и скажем RAC, а в остальном, один йух

    ОтветитьУдалить
  3. Спасибо за сравнение, мне помогло узнать некоторые нюансы Oracle

    ОтветитьУдалить