Як DBA, як би я пішов про перехід від Oracle до SQL Server?


32

Я OBA DBA, який також має досвід роботи з Sybase.

Які основні архітектурні та концептуальні відмінності між двома платформами RDBMS?

Відповідь, схожа на питання SQL Server-> Oracle, тут буде найбільш корисною.


3
трохи гумору (вибачте, якщо ЗЗ), ви зустрічалися? dba.stackexchange.com/questions/9765/…
booyaa

Відповіді:


49

Я обмінявся між роботою над Oracle і SQL Server протягом останніх кількох років, і написав розмиття щодо того, щоб піти іншим шляхом . Існує ряд ідіоматичних та архітектурних відмінностей, а різні біти термінології по-різному використовуються спільнотами постачальника та розробника / DBA, що оточують кожен продукт.

Фізична архітектура

SQL Server організовує різні речі трохи по-різному в Oracle і має одну або дві ключові концепції, які не мають прямих аналогів в Oracle.

  • "База даних" - це окремий елемент у SQL Server із власними дозволами користувача, схемами / просторами імен та сховищем. Якщо ви знайомі з Sybase, вони працюють так само, як і бази даних у Sybase, завдяки загальним походженням продукту.

  • Групи файлів приблизно еквівалентні простору таблиць, хоча вони локальні для бази даних.

  • Схема - це відмінне поняття від користувача бази даних у SQL Server, хоча користувачі можуть мати схему за замовчуванням.

  • MVCC працює дещо інакше в SQL Server. Це відносно недавня функція, яка підтримує різні копії рядка до виходу блоків у старій версії. SQL Server не має прямого еквівалента сегменту відката. За замовчуванням він не активний у базах даних SQL Server.

  • Tempdb набагато сильніше використовується в SQL Server. Система використовує його для тимчасових таблиць і проміжних результатів з'єднання. Детальніше про tempdb пізніше.

  • Розбиття таблиць дещо незграбніше, ніж Oracle. Вам потрібно встановити функцію розділу, яка створює ключ розділу з того, що ви його постачаєте, а потім схему розділів для цієї функції розділу. Схема розділів трохи походить на групу файлів, оскільки ви створюєте таблицю на схемі розділів.

    Поміняючи розділи на внутрішні та вихідні частини, потрібно встановити обмеження на порожню таблицю в правій структурі. Обмеження гарантує відповідність значень ключа розділу тому розділу, який ви маєте на нього замінити.

  • Матеріалізовані представлення називаються індексованими представленнями у SQL Server. У цьому GROUP BYпункті є CUBEоператор, і документація натякає на функцію перезапису запитів. Однак ця функціональність недостатньо задокументована і може бути не дуже зрілою. YMMV.

  • SQL Server не підтримує автономні транзакції, хоча він підтримує двофазну фіксацію через протоколи транзакцій XA або OLEDB.

  • Кластеризовані індекси трохи відрізняються від таблиць, упорядкованих індексами в Oracle, оскільки для участі в кластерному індексі вони не потребують усіх стовпців таблиці. Вони значно ширше використовуються в архітектурі SQL Server, ніж IOT в Oracle.

  • SQL Server підтримує індекси, що охоплюють, але не має індексів приєднання. Індекси растрових зображень не підтримуються, хоча він має оператор перетину індексів / зіркових перетворень, який може обчислювати перетини, не потрапляючи в таблицю фактів.

  • Послідовності є відносно недавнім доповненням до SQL Server. Традиційно ключі для автоматичного збільшення робляться через стовпці ідентичності. Ви можете завантажити значення в стовпець ідентичності наскрізь set identity_insert on.

Програмування

Ідіоматичний T-SQL має деякі відмінності від ідіоматичного PL / SQL. Це працює досить інакше, що деякі парадигматичні відмінності заслуговують на пояснення більш глибоко.

  • T-SQL не має поняття пакета. Всі збережені процедури та функції в базі даних живуть у загальному просторі імен, хоча схеми можна використовувати для їх розбиття, а простір імен локальний у базі даних.

  • Подумайте, як використовувати тимчасові таблиці та SELECT INTO. Досить рідко можна зустріти код T-SQL, який насправді потребує курсору; тимчасові таблиці дозволяють розбивати операції на етапи, які можна виконати за допомогою встановлених операцій. SELECT INTOу tempdb мінімально реєструється, і він мінімально реєструється у певних режимах відновлення на базі даних користувачів, тому він так само швидко, як оператор запитів, зберігає проміжний результат з'єднання.

    Ідіоматичний T-SQL використовуватиме таблиці темп у ролі ролей, які ви б бачили змінні курсору в PL / SQL, але значно більше використовуватиме набір операцій. Тимчасові таблиці можуть, однак, створювати досить тугий код, тому використовуйте обережно.

  • Словник системних даних був набагато більш тупим, ніж у Oracle на старих версіях, але він став набагато кращим із SQL Server 2005. Хоча інструменти, що постачаються Microsoft, мають досить багато інтроспективних матеріалів, вбудованих у провідник SSMS, все-таки варто знати, що навколо словника даних. Вона не розрізняє ALL, USERі DBAвиди об'єктів БД, хоча.

  • У SSMS вбудований переглядач плану запитів.

  • Ідентифікатори в T-SQL-коді можуть бути процитовані [] і можуть містити всілякі сміття, якщо вони цитуються. Тим НЕ менше, якщо ми зловимо вас виклик стовпець «Direct / Transfer», ми будемо копіювати ваші нутрощі поза.

  • У SQL Server є функції вікон (з 2005 року IIRC), тому ви можете робити замовлення, запуску сум і подібне в групах вже зараз.

  • T-SQL не має прямого еквівалента CONNECT BY, хоча рекурсія може бути здійснена за допомогою рекурсивних CTE.

  • Якщо вам потрібно написати код, який переходить через базу даних (на відміну від схем у базі даних), подумайте про використання загальнодоступних синонімів для псевдоніму об'єктів на щось місцеве та зверніться до псевдонімів у коді. Це дозволяє уникнути жорсткого кодування залежностей від імен бази даних.

  • Якщо уникнути важко кодованих залежностей від імен баз даних, бази даних дозволяють досить просто підтримувати кілька середовищ на одному сервері.

  • Деякі речі, такі як спеціальні функції сукупності, можна реалізувати лише за допомогою відростків CLR. Крім того, якщо ви хочете вийти з контексту транзакції (наприклад, підробити автономну транзакцію для журналу помилок, відхиленого відкату), ви можете використовувати відродок CLR, оскільки це може створити локальне з'єднання поза поточним контекстом транзакції.

Безпека

Логіни визначаються на рівні екземпляра SQL Server, але кожен логін відображається на нульовій або більше базах даних як "користувач бази даних". Камера дозволів може бути призначена як "входу" (сервер), так і "користувачам" (база даних), але в базі даних "ролі" зазвичай використовуються. Користувачі належать до ролей, дозволу присвоюються ролі. SQL Server 2012 додає "ролі сервера".

  • SQL Server 2012 представляє концепцію, що називається "частково містяться бази даних", яка дозволяє інформації про користувача та ролі зберігатись локально до цієї бази даних.

  • Всередині бази даних відокремлено поняття користувача та схеми. Користувач або роль можуть бути призначені схемі, а схемі належать об'єкти бази даних.

  • Аутентифікація Windows використовує інформацію про вхід за кадром для аутентифікації користувача на машині або домену для входу в систему SQL Server. Підтримка IIRC для цього є додатковою додатком для Oracle.

  • Особлива роль, 'dbo' (скорочення 'власник бази даних') має певний привілей суперкористувача в межах певної бази даних. Кожна база даних має роль 'dbo', і користувачі можуть бути призначені для ролі 'dbo' у певній базі даних.

  • Існує також схема 'dbo' за замовчуванням. Об'єкти можуть належати схемі dbo - Об'єкти, створені користувачами з роллю "dbo" (або дозволами адміністратора для загальної системи), за замовчуванням будуть належати схемі "dbo", якщо інша схема не надається явно.

  • Інформація про безпеку не зберігається із резервною копією єдиної бази даних. Користувачі повинні і ролі повинні бути налаштовані явно на сервері, на якому відновлюється резервна копія. SQL Server 2012 дозволяє локально зберігати дані користувачів та ролей у базі даних з новою функцією "частково містяться бази даних".

  • З SQL Server 2005 збережені процедури можуть бути виконані в контексті безпеки абонента, творця, схеми володіння або визначеного користувача.

  • У поданні на SQL Server дозволи на основні таблиці базуються на дозволах схеми, якій належить подання. Права користувача на базових таблицях не беруть участь у захисті, хоча визначення представлення може включати фільтри, які отримують інформацію про сеанс. В Oracle дозволи користувача на основні таблиці можуть впливати на представлення даних, залежно від конфігурації грантів.

Моніторинг та налаштування

TBA - архітектура пам'яті проти SGA і т.д. в oracle

Резервне копіювання та відновлення

TBA

Інструментальне обладнання

Microsoft постачає набір навколишніх інструментів за допомогою SQL Server. Деякі основні товари, що постачаються:

  • Студія управління SQL Server (SSMS): Це робить щось подібне до SQL Developer в Oracle - це програма для редагування та виконання коду. Деякі корисні функції включають браузер об’єктів бази даних та переглядач плану запитів.

  • Служби аналізу SQL Server (SSAS): це сервер OLAP, який відрізняється від сервера баз даних. Він використовує власну мову запитів (MDX) та API (XML / A) для зв'язку клієнт-сервер. Його не можна запитувати за допомогою SQL. SSMS має можливість редагувати MDX та необроблені запити XMLA та відображати результати. Також надається інструмент запиту командного рядка під назвою ASCMD.EXE.

  • Послуги звітування SQL Server (SSRS): це веб-інструмент звітності для публікації звітів. Звіти можна складати через BI Development Studio (BIDS) або Builder звітів та публікувати на веб-порталі. Сам сервер SSRS має API веб-сервісу для програмного управління сервером. Зауважте, що звіти SSRS можуть споживати дані з різних джерел, а не лише з SQL Server. Інструмент командного рядка під назвою RS.EXE постачається для програмного управління серверами SSRS.

  • Послуги інтеграції SQL Server (SSIS): Це інструмент ETL, що постачається разом із SQL Server. В архітектурному відношенні він досить відрізняється від OWB або ODI тим, що це не інструмент генерації коду. Час виконання працює на стороні клієнта і може знаходитися на окремій машині до сервера баз даних. Пакети SSIS можуть бути розроблені за допомогою BIDS та виконані незалежно за допомогою інструменту командного рядка під назвою DTEXEC.EXE.

  • BI Development Studio (BIDS): Це середовище для візуальної студії для розробки звітів, пакетів SSIS та кубів SSAS. Якщо інстальовано інший інструмент для розробки на основі VS (наприклад, VS Professional), інструмент може бути інтегрований в єдине середовище та загальну групування проектів.

  • Масова копія (BCP): інструмент масового вставлення / вилучення командного рядка, схожий на SQL * Loader

  • SQLCMD: інструмент запиту командного рядка, подібний до SQL * plus

  • SQL Profiler: інструмент відстеження та профілювання, який може фіксувати та оцінювати інформацію про сліди з SQL Server, SSAS та інших інструментів у наборі.

  • Агент SQL Server: утиліта планування завдань, яка може запускати періодичні завдання одного типу іншого.


1
Для T-SQL проти PL / SQL: T-SQL не має різних контекстувань програмування, таких як PL / SQL, тому ви можете вільно змішувати чисті оператори SQL і T-SQL. Наприклад, ви можете запустити TRUNCATE TABLE ...паралельно DML без необхідності робити еквівалент EXECUTE IMMEDIATE. У T-SQL ви також можете повернути наборам результатів клієнтові, використовуючи SELECTпоряд з іншими операціями, тоді як у PL / SQL ви повинні направити вихід SELECTs в таблицю або інше призначення. В Oracle лише чистий SQL може повернути клієнту набір результатів.
Нік Чаммас

1
Також зауважте, що збережені процедури, назва яких починається з "sp_", обробляються спеціально. Не називайте ваші збережені пропозиції таким чином, якщо ви не підтримуєте системну процедуру з нової версії SQL-сервера. Ви можете технічно використовувати це для створення збережених процедур, що зберігаються в базі даних, але це не рекомендується, оскільки майбутні версії можуть створювати нову системну процедуру, що зберігається з тим самим іменем.
Кевін Кеткарт

1
Чи варто тут додати трохи про ескалацію блокування? Я думаю, що це може стати сюрпризом, щоб народ Oracle звик до необмежених замкових рівнів
Джек Дуглас

8

Наш основний продукт працює як на SQL Server, так і на Oracle. Ось деякі інші відмінності, з якими нам довелося подолати, і це може бути добре пам’ятати:

  • Обробка часу-часу дуже різна: різні точності, різний набір функцій, з якими можна працювати

  • Порожні рядки - це NULL в Oracle, а не в SQL Server

  • Поводження з кодуванням символів та Unicode дуже відрізняється. У SQL Server ви можете мати звичайні ( varchar) або Unicode ( nvarchar) стовпці, змішані в одній базі даних, в Oracle ви на рівні бази даних визначаєте, який тип кодування використовувати.


Oracle також дозволяє змішувати типи char / varchar2 та nchar / nvarchar2 з двома різними кодуваннями - див. Символи Unicode можна зберігати в базі даних Oracle двома способами .
Джордж3
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.