by Alexey Knyazev
22. декабря 2010 01:03
Сегодня я хочу рассказать более подробно об операторе APPLY, а конкретнее о его типе CROSS APPLY. Этот оператор появился впервые в SQL Server 2005, но к сожалению многие так и не научились им пользоваться, возможно это из-за того, что в BOL (SQL Server Books Online) этот оператор плохо описан и имеет очень "сухие" примеры его использования. В этой статье я покажу несколько интересных демонстраций, где этот оператор может пригодиться.
Основная фича оператора заключается в том, что APPLY позволяет вызывать табличную функцию для каждой строки, возвращаемой внешним табличным выражением запроса. Именно этот пример есть в BOL.
Оператор CROSS APPLY возвращает только строки из внешней таблицы, которые создает результирующий набор из возвращающего табличное значение функции. Оператор OUTER APPLY возвращает и строки, которые формируют результирующий набор, и строки, которые этого не делают, со значениями NULL в столбцах, созданных возвращающей табличное значение функцией.
[Ещё]
by Alexey Knyazev
10. декабря 2010 21:47
В свет вышла схема всех связей системных объектов SQL Server 2008R2:
Прямая ссылка на www.microsoft.com/downloads
Для SQL Server 2008, 2005 и 2000 System Views Map можно найти в одном из моих прошлых постов: http://t-sql.ru/post/SystemViewsMap.aspx
[Ещё]
by Alexey Knyazev
25. ноября 2010 16:10
В качестве ещё одного небольшого приложения на PowerShell я написал небольшой скрипт, который позволит работать с вашими базами данных. Это небольшое самостоятельное Windows-приложение с визуальными формами, которое позволяет писать запросы, а результат запроса можно не долько просматривать в виде удобного GridView, но и применять различные фильтры
[Ещё]
by Alexey Knyazev
19. октября 2010 00:07
Прошло почти два года, как я выкладывал небольшую самописную утилиту на ITCommunity.RU, позволяющую мониторить выполнение Job`ов сразу на нескольких серверах БД. Я и подумать не мог, что она окажется такой полезной. За это время я получил несколько писем с просьбой обновить её и добавить поддержку SQL Server 2000. И вот наконец-то руки дошли до этой утилиты.
Эта версия поддерживает
SQL Server 7.0/2000/2005/2008/2008R2. Если найдете какие-то ошибки, или у вас возникнут пожелания, связанные с доработкой этой программки, то пишите, постараюсь дополнить её полезным функционалом.
[Ещё]
by Alexey Knyazev
5. октября 2010 23:34

В SQL Server есть интересная расширенная хранимая процедура xp_logevent. Процедура заносит определенное пользователем сообщение в файл журнала SQL Server и в средство просмотра событий Windows Event Viewer. Появилась идея немного расширить возможности этой процедуры, для этого я написал небольшую CLR-сборку, с помощью которой можно работать с журналом ошибок Windows.
Задача новой процедуры, не только заносить событие в журнал, но и просматривать события на сервере. Плюс к этому очень полезным будет возможность очищать журнал.
Записи будут заноситься в отдельный журнал SQLServerLog. Сообщения могут быть одним из 5 типов:
- Error
- FailureAudit
- Information
- SuccessAudit
- Warning
Код сборки:
[Ещё]
by Alexey Knyazev
3. октября 2010 15:48
В прошлый раз я писал, как можно организовать автоматическое сжатие резервной копии БД в SQL Server 2000 с помощью бесплатного архиватора 7-Zip, сейчас я покажу процедуру dbo.RestoreArchiveBackup, которая востанавливает из сжатой копии вашу базу данных.
В процедуре 5 параметров:
- @RestoreCommand - Стандартная команда востановления БД на T-SQL, либо команда Help, которая выводит список параметров архиватора 7-zip
- @BackupFile Полный путь и имя файла резервной копии, туда мы будем извлекать бэкап из архива
- @ArchCommand Параметры архиватора, с которыми мы запускаем нашу процедуру
- @ArchFile Имя файла резервной копии БД в сжатом виде (как сжимать описано в предыдушем посте)
- @DeleteAfterRestore Флаг - удалять или нет распакованную копию БД после востановления
[Ещё]
by Alexey Knyazev
1. октября 2010 01:44
Сжатие резервных копий было впервые представлено в выпуске SQL Server 2008 Enterprise. Начиная с версии SQL Server 2008 R2, сжатие резервных копий поддерживается в выпуске SQL Server 2008 R2 Standard Edition и всех выпусках с более широкими возможностями. Сжатую резервную копию можно восстановить в любом выпуске SQL Server 2008 и более поздней версии. ( http://technet.microsoft.com/ru-ru/library/bb964719.aspx )
Для сжатия резервных копий в более ранних версиях использовались утилиты 3-их фирм (как правило платные). Но можно найти и бесплатные аналоги, например небольшая утилита от старого участника сообщества Russian SQL Server Club locky ( http://mcp.itcommunity.ru/blogs/rsug/archive/2010/06/28/110674.aspx ).
Можно сказать на коленке накидал небольшую процедуру на T-SQL, которая с помощью хранимой процедуры xp_cmdshell и бесплатного архиватора 7-zip сжимает резервную копию.
Собственно сама процедура
dbo.BackupWithArchive [Ещё]
by Alexey Knyazev
8. августа 2010 02:03
Как-то я уже писал, как можно разбить строки таблицы на состовляющие ("Разбиваем строки нa слoва"). Но из 4 примеров только 1ый подходил для SQL Server 2000 и ниже. А у меня появилась задача распарсить строки с разделителем в виде запятой и полученные значения занести в отдельную таблицу, как раз в 2000ой версии.
Основная сложность этой задачи в том, что объем таблицы несколько миллионов строк и лочить таблицу на долго нельзя. После нескольких эксперементов получился скрипт, который отработал на достаточно большом объеме за несколько десятков секунд. Вариант не претендует на звание самого изящного, но все-таки размещу его тут.
[Ещё]
by Alexey Knyazev
1. августа 2010 00:21

При установке SQL Server Express возникает ошибка:
Программе установки SQL Server не удалось получить сведения о системной учетной записи для учетной записи ASPNET. Чтобы продолжить, переустановите платформу .NET Framework, а затем снова запустите программу установки SQL Server.
Английский вариант:
SQL Server Setup failed to obtain system account information for the ASPNET account. To proceed, reinstall the .NET Framework, and then run SQL Server Setup again.
Лекарство:
Запускаем CMD:
cd C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727
aspnet_regiis -i
После создания ASPNET-учётной записи, можно повторно запускать установку SQL Server.
[Ещё]
by Alexey Knyazev
23. июля 2010 23:21
Для всех, кто работает с SQL Profiler для отслеживания событий на сервере, хорошо известно, как создавать трассировки. Это не представляет никакой сложности. И действительно, SQL Server Profiler обладает богатым интерфейсом, предназначенным для создания и управления трассировкой, позволяющим анализировать и воспроизводить результаты трассировки.
Но всегда ли есть возможность воспользоваться SQL Profiler`ом!? А самое главное работа Profiler приводит к значительным накладным расходам. Основные затраты идут на создание наборов строк для отправки их клиенту Profiler. В этом плане трассировка с помощью команд T-SQL позволяет минимизировать воздействие на производительность, т.к. она выполняется на стороне сервера и избегает перегрузки.
Кромя того, большинство экспертов по MS SQL Server, в том числе и сотрудники Microsoft рекомендуют отдать предпочтение трассировке на стороне сервера. Это подтверждают и тесты, особый интерес у меня (думаю и у вас) вызвала статья Performance Impact: Profiler Tracing vs. Server Side SQL Tracing.
Разница в замерах чуть ниже, а сейчас скажу о чём собственно это статья и что же это за удобная процедура трассировки: как извесно трассирывание на T-SQL очень трудоёмкая задача и не слишком понятная для начинающих администраторов/разработчиков, поэтому у меня и возникла идея написать что-то более понятное и удобное для повседневного использования.
[Ещё]