Как администратор базы данных, как мне перейти с Oracle на SQL Server?


32

Я - администратор Oracle, у которого также есть опыт работы с Sybase.

Каковы основные архитектурные и концептуальные различия между двумя платформами RDBMS?

Ответ похож на вопрос SQL Сервер-> Oracle здесь будет наиболее полезным.


3
немного юмора (извините, если OT), вы встречались? dba.stackexchange.com/questions/9765/…
booyaa

Ответы:


49

За последние несколько лет я поменялся местами между работой над Oracle и SQL Server и написал рекламный ролик о том, чтобы пойти другим путем . Существует ряд идиоматических и архитектурных различий, и различные части терминологии по-разному используются сообществами поставщиков и разработчиков / администраторов баз данных, окружающих каждый продукт.

Физическая архитектура

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.

  • Если вам нужно написать код, который перебирает базы данных (в отличие от схем внутри базы данных), рассмотрите возможность использования открытых синонимов для псевдонимов объектов к чему-то локальному и обращения к псевдонимам в коде. Это позволяет избежать жестко закодированных зависимостей от имен баз данных.

  • Если вы избегаете жестко закодированных зависимостей от имен баз данных, базы данных значительно упрощают поддержку нескольких сред на одном сервере.

  • Некоторые вещи, такие как пользовательские агрегатные функции, могут быть реализованы только с помощью sprocs CLR. Кроме того, если вы хотите выйти из контекста транзакции (например, подделать автономную транзакцию для ведения журнала ошибок, защищенных от отката), вы можете использовать sproc 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 и т. Д. В оракуле

Резервное копирование и восстановление

TBA

механическая обработка

Microsoft связывает набор окружающих инструментов с SQL Server. Некоторые из основных поставляемых предметов:

  • SQL Server Management Studio (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) или построитель отчетов и публиковать на веб-портале. Сам сервер 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
Стоит ли добавить немного об эскалации блокировки здесь? Я думаю, это стало неожиданностью для того, что люди из Оракула использовали неограниченные блокировки на уровне строк
Джек Дуглас

8

Наш основной продукт работает как на SQL Server, так и на Oracle, вот некоторые другие отличия, которые нам пришлось обойти, и это может быть полезно иметь в виду:

  • Обработка даты и времени сильно отличается: разная точность, разный набор функций для работы

  • Пустые строки равны NULL в Oracle, а не в SQL Server

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


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