Microsoft SQL Server - S.Khanzhin

Блог посвящен обсуждению вопросов, связанных с Microsoft SQL Server

Рубрика: скрипты, Администрирование | 8 Ноябрь 2007, 13:36 | Sergey Khanzhin

Очередная попытка приручить PowerShell (теперь для администрирования Reporting Service).

Знакомый подкинул идейку - соорудить скрипт, который будет опрашивать экземпляр Reporting Service и возвращать информацию о существующих подписках (subsriptions), их статусе, именах отчетов, для которых эти подписки созданы и пр…

“С лету” решить этот вопрос не получилось - никак не мог найти пространство имен и имя сборки (assembly) для работы с объектами Reporting Service. На сайте Microsoft нашел инфу, что для доступа к объектам Reporting Service надо создать proxy класс для веб-сервиса Reporting Service и обращаться к этому классу.

На практике это выглядит так:

  • Создаем исходник для proxy класса с помощью утилиты WSDL, входящей в состав Microsoft Visual Studio (по-умолчанию лежит здесь - C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin) -
    Команда - wsdl http://localhost/ReportServer/ReportService2005.asmx?wsdl
    где localhost - имя сервера, на котором размещен Report Service (для каждого сервера придется делать отдельный proxy класс).
    ReportServer - имя приложения (application) на web сервере (по-умолчанию Reporting Services создает приложение с названием ReportServer). На выходе получаем файл ReportingService2005.cs в каталоге, откуда запускали wsdl
  • Компилируем полученный файл с помощью утилиты csc, входящей в состав .NET Framework (у меня лежит в папке C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727)
    Команда - csc /target:library ReportingService2005.cs
    Получим файл ReportingService2005.dll (я переименовываю получившийся файл для того, чтобы понимать, к какому экземпляру Reporting Service он относится)

Дальше - проще. В моем случае я решил получать список всех отчетов, опубликованных на сервере и для тех, у которых есть подписки, выводить инфомацию о подписке. Вывод осуществляется на экран, но можно с таким же успехом записывать все в файл. Кому как нравится.

почему-то не получается приаттачить файл со скриптом.. Пока буду разбираться - опубликую сам скрипт под катом.. Копируете, файл сохраняете с расширением ps1 и в добрый путь :)

[Далее…]

Рубрика: News | 21 Сентябрь 2007, 13:31 | Sergey Khanzhin

Засим не пишу :)

Отдых.

У меня уже несколько раз случалась такая беда: в Performance Monitor исчезали все счетчики, относящиеся к экземпляру Microsoft SQL Server. Точнее, не совсем исчезали, а отображались в каком-то цифровом виде, вроде 1846, 1858 и т.д… Ситуация, в целом, неприятная. Хоть убейте, не вспомню, какие мои действия привели к такому результату, это еще предстоит выяснить методом “пристального взгляда”. Но речь не о том. Речь о том, как восстановить порядок.

Итак….

Во-первых, рекомендую все покореженные счетчики выгрузить вообще. Делаем это командой unlodctr имя_инстанса_sql_server. Для дефолтного инстанса команда будет выглядеть так: unlodctr mssqlserver.

Во-вторых, снова загружаем счетчики для экземпляра сервера. Делаем это командой lodctr <path_to_binn_directory_for_sql_instance>\sqlctr.ini. Для дефолтного экземпляра эта команда в будет выглядеть так: (в случае дефолтных путей установки сервера) lodctr “c:\program files\microsoft sql server\mssql.1\mssql\binn\sqlctr.ini”.

В-третьих, перегружаем сервер. Имена счетчиков должны появиться в Performance Monitor.

Рубрика: CLR, скрипты | 1 Сентябрь 2007, 15:50 | Sergey Khanzhin

Если ваша сборка ссылается на пространство имен Microsoft.SqlServer.Smo, то во время регистрации сборки в Microsoft SQL Server 2005 получите ошибку “CREATE ASSEMBLY for assembly ‘Microsoft.SqlServer.Smo’ failed because assembly ‘microsoft.sqlserver.batchparser’ is malformed or not a pure .NET assembly. Unverifiable PE Header/native stub.“. Компания Microsoft официально подтверждает подобное поведение системы в этой статье.

 p.s. А у меня столько интересных идей загнулось по этой причине :(

Рубрика: Администрирование | 28 Август 2007, 13:40 | Sergey Khanzhin

После изменения имени сервера, на котором установлен Microsoft SQL Reporting Services, при попытке коннекта к экземпляру Microsoft Reporting Services посредством SQL Server Management Studio может вывалиться ошибка
The remote name could not be resolved (Microsoft.SqlServer.Management.UI.RSClient)
Для того, чтобы исправить ситуацию, проверьте значение элемента http://localhost/reportserver в файле rsreportserver.config и при необходимости поправьте имя сервера. Как правило, этот файл (rsreportserver.config) находится в каталоге C:\Program Files\Microsoft SQL Server\MSSQL.3\Reporting Services\ReportServer\.

Рубрика: Администрирование, News | 28 Август 2007, 00:10 | Sergey Khanzhin

“На этом месте могла бы быть Ваша реклама” © кто-то :)

Пару дней назад купили RedGate SQL Toolbelt 6

С тех пор удивляюсь, как я все это время жил без этой мегасуперполезной вещи…. В состав этого самого “ремня для инструментов” входят 8 инструментов:

  • SQL Backup
  • SQL Compare
  • SQL Data Compare
  • SQL Dependency Tracker
  • SQL Doc
  • SQL Log Rescue (только для SQL Server 2000 и 7.0)
  • SQL Packager
  • SQL Prompt for Query Analyzer

SQL Backup - создание/восстановление резервных копий баз данных. При работе использует какой-то свой алгоритм, который позволяет “на лету” сжимать файлы бэкапов очень и очень сильно. Например, бэкап 10-метровой базы уместился в 250 килобайтный файл. В комплекте очень красивый и информативный интерфейс и набор API для тех, кому очень хочется… :) Минус этой софтины в том, что бэкап можно развернуть только при помощи этой же софтины, SQL Server не понимает формат :( Логично, но чуда, все-таки, очень хочется ;)

SQL Compare - сравнение двух баз данных на предмет одинаковости самих данных. Проверяются таблицы и для всех расхождений в данных генерится скрипт для исправления ситуации :) Берем одну базу (исходная), берем вторую (конечная), натравливаем на них SQL Compare и на выходе получаем скрипт, после отработки которого в конечной базе будут данные из исходной базы.

SQL Data Compare - сравнивает структуру двух баз данных (структуру таблиц, наличие/отсутствие хранимых процедур, вьюх, схем, пользователей и т.д.) и создает скрипт, призванный создать в конечной базе все объекты исходной. Очень удобно, когда надо сравнить версии баз во время девелопмента. (кто же документирует все изменения????)

SQL Dependency Tracker - самая красивая утилита. Супер анимация, я больше часа забавлялся ;) Рисует в графическом виде зависимости объектов в базе. Выбираешь объект и видишь все объекты, которые зависят и от которых зависит выбранный объект. Красиво и очень полезно, особенно когда сам запутался. Ключи, связи, ссылки - все есть, все видно :)

SQL Doc - вообще супер вещь. Генерит для выбранных объектов документацию в виде HTML страниц, где подробным образом рассказывает о структуре объектов, взаимосвязях и пр. Все сопровождается SQL скриптами для создания этих самых объектов. Ну и вообще… Особенно удобно в чужих творениях разбираться. Что, куда, почему, как… Отличная вещь!!!

SQL Packager - приятная утилита, которая запаковывает в .exe файл скрипты для создания и!!! НАПОЛНЕНИЯ базы данных. Типа пришел к клиенту, запустил .exe файл и получил развернутую базу с данными(!!). Мегавещь!! Правда, где и когда буду ее применять еще не придумал, но тот факт, что утилита для этого уже есть очень радует.

SQL Prompt for Query Analyzer - а вот за эту утилиту должно быть стыдно компании Microsoft. Ну как же так… Не сделать такую очевидную вещь?? Эта утилита работает как интеллектуальный подсказчик (прям как в Visual Studio). пишешь select * from и тут же получаешь список объектов, из которых можешь сделать этот самый select. И не надо вспоминать имя вьюхи, не надо вспоминать имя поля… Все подскажет эта утилитка. Кроме того, есть куча сниппетов, очень приятная функция форматирования текста (я настроил таким образом, что все служебные слова и имена функций при вводе переводятся в верхний регистр. До этого приходилось либо постоянно себя контролировать, либо потом менять регистр. Ну нравится мне такое оформление скрипта :) ) В общем, исключительная вещь.

В общем и целом - очень, очень и очень нужная в повседневной работе вещь. Возможно, я Америку и не открыл, возможно, все уже давно пользуются этим набором программ, но у каждого есть свой период открытий ;) Сейчас моя очередь петь хвалебную песню  RedGate SQL Toolbelt 6

p.s. Стоит, конечно, это удовольствие немало, но оно в итоге того стоит. За свои деньги, конечно, не купил бы. Дорого.

Рубрика: News | 27 Август 2007, 23:22 | Sergey Khanzhin

Как и собирался, в прошедшие выходные мигрировал с 2000 SQL сервера на 2005. Миграция была привязана к смене железа, решил, что не стоит перетаскивать SQL 2000 на новый сервер.
Перед тем, как приступить к апгрейду, читал статьи, посвященные миграции, решал, как лучше и проще поступить в моей ситуации, придумывал схемы реализации. Некую напряженность создавал и тот факт, что на SQL сервере, который предстояло мигрировать, держал свои данные корпоративный SharePoint Server, и как он отнесется к смене не только версии SQL сервера, но и имени экземпляра, не знал никто. Вернее, догадки и предположения были, но точно никто не мог сказать, где и в каком месте аукнется данная операция в будущем
В итоге решили имя экземпляра оставить прежним (хотя у нас в компании есть негласная политика имя при апгрейде железа менять). Долго выбирал способ переноса данных. Как вариант рассматривал создание SSIS пакета, detach/attach баз. Остановился на backup/restore, поскольку выглядел этот процесс менее трудоемко, да и половина дела (бэкап) по плану должен был пройти в ночь на день «Икс» :) Так что природная лень оказалась весьма кстати.

Процесс миграции происходил следующим образом:

  1. Запуск на старом сервере Microsoft SQL Server 2005 Upgrade Advisor и анализ результатов;
  2. Исполнение всех рекомендаций, помеченных как “Before, при желании и наличии времени можно также сделать все, что рекомендуется к выполнению “Anytime”
  3. Полный бэкап всех баз на старом сервере;
  4. Скриптование всех заданий, линкованных серверов, операторов, алертов (из Enterprise Manager);
  5. Выполнение скрипта от Microsoft для создания хранимой процедуры, которая, в свою очередь, при запуске создаст SQL скрипт для создания всех существующих на сервере логинов (для внутренних логинов SQL сервера скриптуется hash пароля, что обеспечивает создание полностью идентичных логинов на новом сервере);
  6. Установка на новом сервере экземпляра SQL Server 2005;
  7. Выполнение на новом сервере скрипта, полученного на шаге 5 (создание логинов);
  8. Восстановление баз данных из бэкапа на новом сервере (при этом маппинг login и соответствующего username баз данных происходит автоматически);
  9. Выполнение скриптов, полученных на шаге 4 (восстановление заданий, операторов, алертов и т.д.);
  10. Проверка работоспособности нового сервера.

У меня процесс прошел без единого сбоя, все как по маслу. После восстановления всех баз я переименовал сервер (дал старое имя). SharePoint совершенно не заметил подвоха и продолжил работать уже на новом (во всех смыслах) сервере как ни в чем не бывало. Это было самое главное.

Отдельное спасибо хочу сказать Microsoft за два инструмента – Microsoft SQL Server 2005 Upgrade Advisor и хранимка, которая скриптует логины. Для переноса логинов, конечно, можно было бы создать SSIS пакет, но вывалилось несколько особенностей при его использовании. Во-первых, как-то очень странно переносились логины SQL сервера. Точнее, они никак не переносились. При создании на целевом сервере вываливалась ошибка “Stack overflow” и все. Точка. Дальше ничего не работало. Попытка понять, откуда «растут ноги» в разумные сроки к желаемому результату не привела, а времени экспериментировать не так чтобы было много… А где-то на форуме прочитал жалобу, что при создании SQL логина с помощью пакета этому логину принудительно выставляется “Enforce Password Policy” опция и пароль прописывается пустой. Вот как… Правда, проверить правдивость этого высказывания не представилось возможным по причине, которую я описал чуть выше. Поэтому скрипт от Microsoft оказался как нельзя более кстати, отработал на «пять с плюсом».

Рубрика: News | 22 Август 2007, 15:04 | Sergey Khanzhin

На этих выходных буду мигрировать с SQL 2000 SP4 Standard Edition на SQL Server 2005. Мануалов в сети как и что делать - масса, но собственный опыт - самый ценный :)

После удачного (надеюсь) переезда пошагово распишу что да как делал. Так сказать, вести с полей :)

Рубрика: Администрирование | 19 Август 2007, 12:19 | Sergey Khanzhin

На сайте sql.ru есть старая, но очень интересная статья для тех, кто хочет получить базовые знания об индексах и статистике в Microsoft SQL Server. Достаточно подробно рассказывается об индексах как сущности, их назначении, создании и анализе.
А в журнале IT Pro - статья Организация индексов в SQL Server 2005 о замене в SQL Server 2005 инструмента анализа фрагментации индексов (DBCC SHOWCONTIG) на другой, более удобный.

Под катом выкладываю текст статьи Организация индексов в SQL Server 2005, поскольку не уверен в том, что на сайте журнала IT Pro эта статья будет жить вечно ;)

[Далее…]

Рубрика: News | 19 Август 2007, 12:03 | Sergey Khanzhin

Сегодня с утра роюсь в своих архивах, навожу порядок. Кое-что буду выкладывать сюда, дабы предотвратить возможную потерю в результате какого-нибудь дизастера (ввернул-таки иностранное словечко :)). Бэкап-бэкапом, но его еще потом и найти надо, а тут все просто - http://sql.khanzhin.info и вся недолга.

Кое-что уже давно занафталинено и покрылось паутиной (архив, как-никак), но актуальности своей не потеряло :)

Итак:

(буду сюда выкладывать интересные (естественно, на мой взгляд) вещи по мере обнаружения и приведения в нормальный вид :)



Страницы

Обо мне

       Mail me

Архив