Обновить
34.47

SQL *

Формальный непроцедурный язык программирования

Сначала показывать
Порог рейтинга
Уровень сложности

Определяем логин пользователя по его SID средствами MS SQL

Время на прочтение2 мин
Количество просмотров11K
Здравствуйте. Будучи администратором БД (Microsoft Dynamics NAV), возникла задача выдавать/проверять наличие роли SQL db_datareader для некоторых работников. Но в таблице список пользователей хранился в виде SID windows: S-1-5-21-3879… и записи постоянно добавлялись. Другими словами необходимо было конвертировать из S-1-5-21-38… → aapetrov.

Серверов было около 70-ти и хотелось все сделать стандартными средствами (не использовать, например psgetsid.exe).

Как и положено начал с гугла — ничего полезного не нашел. Пришлось обратиться за помощью на многоуважаемый форум. Было предложено множество вариантов, за что огромное спасибо добрым людям, но увы, решение так и не было найдено.
«Если даже ребята с sql.ru не смогли подсказать — подумал я — значит все, это конец».

Читать дальше →

Отслеживание изменений в SQL Server 2008

Время на прочтение5 мин
Количество просмотров61K
Я думаю, каждый разработчик СУБД рано или поздно сталкивается с задачей отслеживания обращений к БД и событий сервера в целом. И прежде чем выбрать инструмент (или написать его самому), конечно, стоит обратить внимание на решения, которые предлагают сами разработчики СУБД. Хочу поделиться нашим опытом в Brights решения этой задачи для SQL Server 2008.
Читать дальше →

Microsoft готовит «беcсерверный» вариант SQL Server

Время на прочтение1 мин
Количество просмотров2.4K
Microsoft запустила публичный опрос, в котором предлагает всем желающим поучаствовать в поиске названия для новой редакции (или нового режима) SQL Server.
Новый режим SQL Server носит определение “server-less” (беcсерверный). Из описания к опросу можно получить следующие данные:
  • новый режим позволит использовать полнофункциональный SQL Server (Express?) без необходимости его установки, конфигурации и сопровождения;
  • все что вам понадобится для работы с сервером – это строка соединения;
  • новый режим будет работать только с локальными соединениями, а потому предназначен в первую очередь для целей разработки приложений, отладки и тестирования;
  • однако, новый режим смогут использовать и сторонние приложения, в которые можно будет внедрить соответственно настроенный SQL Server;
  • новый режим будет работать в качестве пользовательского процесса, а не сервиса;
  • SQL Server в новом режиме будет “подниматься” при соединении и работать при наличии соединения и отключаться (shutdown), когда последнее соединение будет закрыто.

MS SQL 2005, Parameter Sniffing, тормозящий Stored Procedure

Время на прочтение1 мин
Количество просмотров6.7K
Недавно столкнулся с проблемой: скрипт запущенный в Query Analyzer отрабатывал за секунду, а он же в виде хранимой процедуры аж 50 секунд. Оказалось всему виной Parameter Sniffing который призван… оптимизировать запрос. :)
Читать дальше →

Есть ли альтернатива гигантам рынка СУБД?

Время на прочтение3 мин
Количество просмотров16K
Не редко можно услышать мнение, что существуют такие категории ПО, в которых свободный софт никогда не сможет быть альтернативой проприетарным продуктам. Чаще всего в пример приводятся какие-то сложные, узкоспециализированные, профессиональные программы. Я не знаю, насколько справедливо такое мнение, но некоторые из вышеупомянутых категорий, похоже, можно вычёркивать.

В одном из докладов недавно проходившего CNews Forum я увидел «СУБД для предприятий» в списке ПО, которое навсегда останется проприетарным. Я не могу согласиться с таким тезисом, поэтому написал небольшую статью.
Читать дальше →

Доступен для загрузки SQL Server «Denali» CTP и еще ряд анонсов с конференции PASS 2010

Время на прочтение3 мин
Количество просмотров1.1K
image

Вчера в ходе конференции PASS Summit 2010 была анонсирована и стала доступна для загрузки предварительная версия следующего поколения SQL Server под кодовым именем Denali.

Кроме анонса новой версии SQL Server был сделан ряд других анонсов:
  • анонсирована новая редакция SQL Server 2008 R2 Parallel Data Warehouse предназначенная для высоконагруженных параллельных вычислений и обработки информации;
  • анонсировано партнерство с компанией HP по созданию платформы HP Enterprise Data Warehouse Appliance на базе новой редакции SQL Server 2008 R2 Parallel Data Warehouse;
  • анонсирована программа сертификации Microsoft Certified Master (MCM) для SQL Server;
  • анонсирован новый облачный сервис Atlanta, который позволяет централизованно отслеживать экземпляры SQL Server и определять проблемы с конфигурацией, производительностью, безопасностью, а так же управлять серверами через облако.
Новая версия SQL Server Denali привносит огромное количество нововведений. Их перечисление займет массу времени, здесь перечислено только самое важное:
Читать дальше →

Автоинкрементные первичные ключи (суррогатные ключи) = зло?

Время на прочтение7 мин
Количество просмотров27K
В этой статье я приведу взгляд (отрицательный по большей части) Джоша Беркуса, CEO компании PostgreSQL Experts Inc. на использование суррогатных ключей для таблиц базы данных, тех самых INT NOT NULL AUTO_INCREMENT PRIMARY KEY, к которым мы привыкли. Фактически, это будет вольный, сильно сокращенный перевод его статьи на ittoolbox.

За статьей последует разбор моих собственных ошибок по этой теме, допущенных в одном старом проекте. Я был молод и глуп, но это меня не извиняет.

Честно говоря, прочитав эту статью и не заметив, кто автор, я подумал, что он все же преувеличивает и вообще, я без него как-нибудь разберусь, где и какие ключи мне использовать. Потом я еще немного подумал и полез за дампом структуры базы моего старого проекта. Было интересно.

Если вы опытный DBA, наверное, вам стоит пройти мимо, чтобы не расстраиваться.

Но обо всем по порядку. Сначала ОЧЕНЬ сокращенный перевод:
Читать дальше →

Секционирование. Автоматическое добавление секций

Время на прочтение15 мин
Количество просмотров33K
В версии 11g в Oracle появилась несколько новых замечательных схем секционирования — например, удобная функциональность интервального секционирования — автоматического создания секций по мере выхода range из заданных границ.
В версиях до 11g необходимо периодически вручную либо заранее добавлять секции, либо разбивать секцию по умолчанию. То есть постоянно необходимо отслеживать состояние таких таблиц. В данной статье я поделюсь своими решениями для автоматизации таких задач секционирования.
Сначала приведу пример для 11g:
  1. create table res (
  2.   res_id     number not null,
  3.   res_date  date,
  4.   hotel_id  number(3),
  5.   guest_id  number
  6. )
  7. partition by range (res_id)
  8. interval (100) store in (users)
  9. (
  10.   partition p1 values less than (101)
  11. );

Этот скрипт создает секцию p1 для записей, значение столбца res_id которых находится в диапазоне 1-100. Когда вставляются записи со значением столбца res_id меньшим 101, они помещаются в секцию p1, а когда в новой записи значение этого столбца равно или больше 101, сервер Oracle Database 11g создает новую секцию, имя которой генерируется системой. Подробнее с этим примером и прочими новыми схемами секционирования вы можете познакомиться в переводе статьи Арупа Нанды в русском издании Oracle Magazine.
Рассмотренные ниже решения можно применить и в других СУБД, не поддерживающих автоматическое добавление секций
Читать дальше →

Выпущен SQL Server 2008 Service Pack 2 и еще некоторые обновления

Время на прочтение1 мин
Количество просмотров1.7K
image

Выпущен второй сервисный пакет исправлений для SQL Server 2008.

Полный список нововведений можно найти тут, ниже некоторые из них:
  • представлена поддержка до 15000 разделов для таблиц и индексов. Ранее существовал предел до 1000 разделов. Полное описание нововведения можно найти в этом отдельном документе (.docx);
  • интеграция Reporting Services с SharePoint 2010;
  • SQL Server 2008 R2 Application and Multi-Server Management теперь совместим и может работать с SQL Server 2008;
  • новый административный инструмент SQL Server Utility;
  • поддержка приложениями Data-tier Application (DAC), которая была ранее представлена для SQL Server 2008 R2.
Загрузить второй сервис-пак для SQL Server 2008 можно по этому адресу.
Кроме того, были обновлены следующие инструменты:
  • SQL Server 2008 SP2 Reporting Services Report Builder (link);
  • SQL Server 2008 SP2 Reporting Services Add-in for Microsoft SharePoint Technologies (link).

Обзор типов индексов Oracle, MySQL, PostgreSQL, MS SQL

Время на прочтение6 мин
Количество просмотров208K
В одном из комментариев здесь была просьба рассказать подробнее об индексах, и так как, в рунете практически нет сводных данных о поддерживаемых индексах различных СУБД, в данном обзоре я рассмотрю, какие типы индексов поддерживаются в наиболее популярных СУБД
Взглянем?

Библиотека dklab_rowlog для версионирования строк в таблицах PostgreSQL

Время на прочтение4 мин
Количество просмотров3K
В продолжение сегодняшнего топика Версионность и история данных — поделюсь простеньким инструментом, который мы используем.

Dklab_rowlog — это библиотека из нескольких хранимых процедур PostgreSQL, позволяющая добавить версионирование записей к любой таблице в БД. Иными словами, что бы ни происходило с таблицей, как бы данные там ни менялись (добавлялись/удалялись), это будет отражено в специальной табличке-логе.

Преимущества:
  • Версионирование добавляется к любой таблице за 1 минуту с использованием 1 SQL-команды.
  • Можно указать, какие колонки надо сохранять, а какие — нет (что экономит место). При этом запись в лог добавится только в случае, если хотя бы одна из указанных колонок изменилась.
  • Можно указать колонку, которая будет трактоваться как «ID автора изменения».
  • Можно задать колонки, которые будут логироваться в любом случае, независимо от того, менялись они или нет.

Примеры использования


Предположим, нам нужно логировать изменения вот в такой табличке:
Читать дальше →

Версионность и история данных

Время на прочтение5 мин
Количество просмотров146K
При разработке баз данных зачастую требуется обеспечить поддержку версионности и хранения истории объектов. Например, у работника может изменяться должность, у должности в свою очередь может меняться оклад — в многомерном моделировании это называется Slowly changing dimensions(далее SCD) — редко изменяющиеся измерения, то есть измерения, не ключевые атрибуты которых имеют тенденцию со временем изменяться. Всего существует 6 основных типов(методов) SCD, которые определяют как история изменений может быть отражена в модели.

Подробнее...

О, эти планы запросов

Время на прочтение2 мин
Количество просмотров77K


История стара как мир. Две таблицы:
  • Cities – 100 уникальных городов.
  • People – 10 млн. людей. У некоторых людей город может быть не указан.

Распределение людей по городам – равномерное.
Индексы на поля Cites.Id, Cites.Name, People .CityId – в наличии.

Нужно выбрать первых 100 записей People, отсортированных по Cites.

Читать дальше →

Ближайшие события

Анонсирован SQL Server Compact Edition 4

Время на прочтение1 мин
Количество просмотров13K
Скотт Гатри в своем блоге анонсировал новую версию компактной базы данных SQL Server Compact Edition 4. SQL Server Compact Edition 4 – это бесплатный, встраиваемый движок базы данных, который был спроектирован в том числе для работы в среде веб-приложений ASP.NET.

SQL Server Compact Edition 4 обладает следующими особенностями:
  • работает с существующим API, вы можете использовать ADO.NET, Entity Framework, NHibernate для работы с базами данным SQL CE 4;
  • установка не требуется, вам не нужно ничего устанавливать, стоит только скопировать файл базы данных в соответствующую папку и ваше приложение сможет работать с ней. Кроме того, вам не нужны права администратора для работы с базами данных;
  • для работы с базами данным SQL CE4 поддерживаются сценарии shared-хостинга. Хостерам и разработчикам не требуется ничего предпринимать, все просто работает;
  • полноценная поддержка разработки и дизайна баз данных в Visual Studio 2010 и Visual Web Developer 2010 Express;
  • поддержка многопоточных сценариев веб-приложений и применение в ASP.NET без лицензионных ограничений;
  • простая миграция на полноценный SQL Server или SQL Azure, которая потребует от разработчика просто смены строки подключения в приложении;
Релиз SQL Server Compact Edition 4 намечен на следующую неделю (вместе с IIS Express и рядом других новых вещей).

Ждем!

SAP приобретает Sybase — новый раунд в борьбе за крупных клиентов и (весьме вероятно) лидерство в облачных вычислениях

Время на прочтение3 мин
Количество просмотров2.1K
Сегодня пришла новость о том, что SAP приобретает Sybase за 5.8 миллиардов долларов (новость на Хабре, статья на Yahoo Finance, оригинальный пресс-релиз тут).

Это достаточно знаковая сделка, хотя на первый взгляд может показаться не так — Sybase, по различным оценкам, владеет 2-3% рынка баз данных, за что отдавать 6 миллиардов (тем более в текущей экономической ситуации)? Конечно, статистика о долях рынка вообще вещь лукавая, но факт есть факт — сейчас не лучшие времена Sybase.
В то же время, Sybase является носителем того самого «сокровенного» знания о реляционных базах данных. Основы реляционных СУБД и практические удачные реализации устоялись за последние 20 лет, и основные изменения в СУБД за последнее десятилетие связаны с попытками по максимуму использовать вычислительные мощности и решить, наконец, проблему горизонтального масштабирования.
Основы же были и остаются неизменными, и Sybase обладает большим опытом в развитии ядра.
Уместно вспомнить, что именно на кодовой базе Sybase были основаны первые версии MSSQL, и что именно Sybase одним из первых начал активно продвигать идею хранилищ данных.
И сейчас мы видим, как компания, производящая ERP, приобретает компанию, производящую СУБД и средства data warehousing. Ранее эта же компания приобрела Business Objects, производителя Crystal Reports. Что же за этим стоит?
Читать дальше →

Простой подход к версионированию баз данных MS SQL Server

Время на прочтение8 мин
Количество просмотров12K

Простой подход к версионированию баз данных MS SQL Server



Предисловие.

Очень часто в прикладных программах возникает необходимость использовать современные базы данных, которые предоставляют разработчику очень большой функционал, основанный не только на уровне данных, но также и созданию собственного API для предоставления доступа к этим данным, посредством хранимых процедур, триггеров, функций. Очевидно, что во всей этой структуре в зависимости от обстоятельств, могут понадобятся какие-либо изменения. И в самом безобидном случае, когда разработчик имеет дело с одним клиентом и одной изменяющейся базой данных (предположим на небольшом предприятии), процесс обновления выглядит просто – мы делаем необходимые изменения в структуре, сравниваем с помощью специальных утилит, например SQL Examiner, старую и новую версию и накатываем сгенерированный sql-скрипт на существующую базу. Как видно в описанном случае, миграция данных происходит каждый раз при обновлении структуры базы. Но к сожалению, описанная ситуация встречается крайне редко, чаще — клиенты и соответствующих для них базы данных для какого-либо продукта у разработчиков исчисляется сотнями, если не больше. Таким образом, для нормального жизненного цикла базы данных необходима система версионирования (не путать с системами версионирования исходников типа Subversion).
Читать дальше →

Использование SQLCLR для увеличения производительности

Время на прочтение3 мин
Количество просмотров37K
Начиная c MS SQL Server 2005 в распоряжение разработчиков баз данных была добавлена очень мощная технология SQL CLR.

Эта технология позволяет расширять функциональность SQL сервера с помощью .NET языков, например C# или VB.NET.

Используя SQL CLR можно создавать написанные на высокопроизводительных языках свои хранимые процедуры, триггеры, пользовательские типы и функции, а также агрегаты. Это позволяет серьезно повысить производительность и расширить функциональность сервера до немыслимых границ.

Рассмотрим простой пример: напишем пользовательскую функцию разрезания строки по разделителю используя SQL синтаксис и SQL CLR на базе C# и сравним результаты.
Читать дальше →

Базы данных. Конфликты параллельного доступа (Часть 1 — поиск проблемы)

Время на прочтение4 мин
Количество просмотров15K
Уважаемые коллеги, в данной статье будем рассматривать не виды блокировок в SQL, а способы решения проблем, когда обращаемся к одним и тем же данным из разных подключений, и часть обновлений при этом может быть потеряна. Статья не зависит от конкретной базы данных и может быть одинаково интересна многим.

Всегда может быть такая ситуация, когда в одном соединении мы прочитали какие-то записи, а затем попытались их обновить. Но за момент, пока мы их редактировали, а затем попытались сохранить, в другом соединении эти же записи уже были обновлены. Иначе говоря, первый процесс читает данные, после чего те же данные читает второй процесс, и второй процесс обновляет эти же данные до того, как это сможет сделать первый процесс, то возникнет конфликт, когда первый процесс попытается обновить эти данные.

Если к базе данных обращаться из нескольких соединений и проводить изменения, то возникновение конфликтов — это лишь вопрос времени и везения.

Приложение само должно решать, какие действия ему необходимо сделать, чтобы решить этот конфликт. Например, ситуация может быть такая: администратор сайта зашел на страницу, отображающую данные обычного пользователя (администратор имеет возможность обновлять эти данные).Если после того, как страница администратора прочитает пользовательские данные из базы, и обычный пользователь обратиться к странице, отображающую его пользовательские данных, и внесет измения, то возникнет конфликт, когда администратор сохранит свои изменения. Если же конфликт не возникнет — то изменения обычного пользователя будут перекрыты и потеряны. Может быть и иначе — изменения администратора потеряны. Какое поведение должно быть верным в каждом конкретном случае — это и есть сложная проблема. Первый шаг — обнаружить её. Второй — разрешить. Есть два базовых подхода к разрешению конфликтов параллельного доступа — оптимистичный и пессимистичный.
Читать дальше →

LogParser — привычный взгляд на непривычные вещи

Время на прочтение5 мин
Количество просмотров59K
Когда я в очередной раз использовал LogParser, то чтобы проникнуться и чужим опытом, ввел его название в поиск на Хабре. Как результат — сообщение «Удивительно, но поиск не дал результатов». Вот уж воистину удивительно, когда столь интересный инструмент обойден вниманием. Пришла пора восполнить этот пробел. Итак, встречайте LogParser. Маленькая, но чертовски полезная утилита для любителей SQL.

Из названия инструмента, казалось бы, очень непросто понять, что он делает в разделе SQL. А правда заключается в том, что он такой же LogParser, как и ChartGenerator. В то смысле, что он справляется с обоими задачами с одинаковыми успехом. В целом я бы его охарактеризовал как SQL-процессор гетерогенных данных. Концепция работы в общем такова, что он берет данные из некоторого формата и преобразует их в табличный вид (собственно говоря, только на этом этапе и выполняется иногда парсинг). Затем, посредством выполнения над этими табличными данными некоторого SQL-запроса формирует таблицу с результатом и сохраняет ее опять же в некотором формате. Если коротко, то цепочка выглядит как подготовка входных данных->SQL-процессинг->генерация выходных данных.
Читать дальше →

Оптимизация хранимых процедур в SQL Server

Время на прочтение3 мин
Количество просмотров41K
Доброго дня, хабрачеловек. Сегодня я бы хотел обсудить с вами тему хранимых процедур в SQL Server 2000-2005. В последнее время их написание занимало львиную долю моего времени на работе и чего уж тут скрывать – по окончанию работы с этим делом осталось достаточно информации, которой с удовольствием поделюсь с тобой %пользовательимя%.
Знания, которыми я собираюсь поделиться, к сожалению,(или к счастью) не добыты мной эмперически, а являются, в большей степени, вольным переводом некоторых статей из буржуйских интернетов.
Итак, как можно понять из названия речь пойдет об оптимизации. Сразу оговорюсь, что все действия, которые я сейчас буду описывать, действительно дают существенный(некоторые больший, некоторые меньший) прирост производительности.
Данная статья не претендует на полное раскрытие темы оптимизации, скорее это собрание практик, которые я применяю в своей работе и могу ручаться за их эффективность. Поехали!
Читать дальше →

Вклад авторов