вторник, 15 мая 2012 г.

Запуск xp_cmdshell с правами без sysadmin


Чтобы запускать хранимую процедуру xp_cmdshell, нужно иметь разрешения CONTROL  SERVER на сервер, т.е быть в роли sysadmins. Пользователям MS SQL Server-а, которые не входят в данную роль, предоставить права  на выполнение данной процедуры  будет мало только дать права на выполнение данной процедуры, но и нужно создать учетную запись-посредник для процедуры xp_cmdshell.

четверг, 19 апреля 2012 г.

Узнать права у логина на объекты MS SQL сервера

  Как-то дали учетной записи права на выборку из некоторых таблиц БД, учетная запись уже была в БД, но, как оказалось, эта учетная запись уже имела выборку на все таблицы БД, но откуда они шли  из графической оболочки Management Studio не сразу смогли вычислить – смотрел права на таблицы, на роль db_datareader и другие объекты, но как оказалось, права шли с прав на БД, а в графическом интерфейсе Management Studio просто забыли их посмотреть, в конце концов вычислил их через функции безопасности  ms sql server-а и решил законспектировать данный пункт, чтобы лучше запомнить.

  Итак, узнать права  учетной записи можно несколькими способами, приведу их примеры:

вторник, 3 апреля 2012 г.

Off Topic: О работе MS SQL в кластере

    Сейчас нахожусь в поиске работы, приходиться ходить по собеседованиям.
Как на одном собеседование сказали, что вот у них есть система OLTP  на базе MS SQL Server-а, система бронирования билетов, они хотя получить от администратора , советы как увеличить производительность, как пример, организовав кластер MS SQL. Что я могу сказать?! Думаю, сначало нужно изучить теорию, как работает MS SQL в кластере, прежде чем такое говорить .
Кластер MS SQL это не средство увеличения производительности, а средство повышения отказоустойчивости. В кластере экземпляр файлов БД  один, и с ним может работать только один инстанс ms sql-я, независимо от сколько нод в вашем кластере.

     Посмотрите еще в интернете,  много статей по этому поводу.
А тот админ который скажет, что сделает вам кластер и при этом будет настаивать, что увеличиться производительность, то надо его отправить на обучение или дать  почитать книжку.
:)

вторник, 27 марта 2012 г.

Оператор DML MERGE в MS SQL SERVER 2008

На днях все таки применил оператор DML  MERGE, довольно сложный для первоначального понимания, но удобен и есть свои преимущества, если его освоить.
Данный оператор был введен в MS SQL  с версии 2008  в дополнение к сущеcтвующим инструкциям DML. Вкратце, его назначение - это применение нескольких инструкций на основание нескольких операторов сравнения, более подробно в первоисточнике -http://msdn.microsoft.com/ru-ru/library/bb510625.aspx

Попробую его описать на моем примере, т.к довольно трудно его понять сразу:

merge  dbo.INCAS_GRAF as t
using (select a.recid,a.ID,t.graf
 from dbo.temp_graf t inner join ATM a on t.idterminal=a.ID
 )  as s
 on (t.ParentLink_RecID=s.recid)
when matched
 then update set       t.Graf=s.graf,t.LastModDateTime=getdate(),t.LastModBy='admin'
when not matched by target
 then  insert (RecId,LastModDateTime,LastModBy,CreatedDateTime,CreatedBy,ParentLink_RecID,GRAF)
 values(NEWID(),GETDATE(),'admin',Getdate(),'admin',s.recid,s.graf);

что он делает по шагам:
1) merge  dbo.INCAS_GRAF as t -устанавливает, с какой таблицой будут действия(update, insert, delete), в BOL  описана как таблица TARGET, т.е цель
2) (select a.recid,a.ID,t.graf
 from dbo.temp_graf t inner join ATM a on t.idterminal=a.ID
 ) - устанавливает 2-ю таблицу - SOURCE
3) (t.ParentLink_RecID=s.recid) - устанавливает связь двух таблиц
4)when matched   -описание действий при совадение строк, в моем случае это UPDATE
5)when not matched by target   -описание действий со строками которых нет в TARGET,   но есть в SOURCE, точнее в том случае если есть строки, которых нет в TARGET.  В моем примере, это вставка новых строк в таблицу TARGET.

Вот и все, при выполнения данного запроса, если проанализировать план его выполнения, то он будет намного приятным, если мы бы выполняли данные операции отдельно, что довольно хорошо отразится на операциях с I\O.
Еще полезное, возможность применения аргумента OUTPUT, что позволяет нам получить все данные, которые были изменены\вставлены.

Enjoy it!

воскресенье, 19 февраля 2012 г.

Перенос таблицы в другую файловую группу MS SQL Server


Сегодня для тестирования создал таблицу, делаю с ней эксперименты, и тут я понял, что таблицу я создал в не той файловой группе, решил её перенести в другую,  заодно, и потренироваться  в переносе.  Хотя, наверное, проще создать новую таблицу, перенести данные в новую таблицу, старую удалить, новую переименовать, но не всегда такое можно в реальной жизни.
Делается это так , через удаление и создание кластерного индекса с указанием нового расположения таблицы.
К примеру, есть таблица test_tbl, расположенная в  файловой группе «PRIMARY»и  есть кластерный ключ на таблицу PK_test_tbl .
sp_help test_tbl
GO
alter table dbo.test_tbl drop constraint PK_test_tbl  with (move to second)
GO
sp_help test_tbl
  Данный скрипт показывает первоначальное расположени, затем удаление кластерного инедекса с перемещением данных в новую файловую группу "second" и отображает новые результат.
После перемещения, не забудьте заново создать заново кластерный индекс, отсюда вывод чтобы перенести таблицу в другую файловую таблицу, нужно пересоздать кластерный индекс в нужной файловой группе.

понедельник, 13 февраля 2012 г.

Автоматическая загрузка из Excel средствами SSIS- проще простого


Задача организовать периодический импорт из выгружаемых файлов Excel в таблицу MS SQL server. Старые файлы для архива необходимо оставить.

Загрузка из Excel в MS SQL Server (несколько способов)


Несколько примеров работы из MS SQL Server  с таблицами формата Excel(.xls,.xlsx):

понедельник, 23 января 2012 г.

Настройка доставки журналов MS SQL 2008 (Transaction Log Shipping). Шаг за шагом.

Доставка журналов (Transaction Log Shipping) - это один из способов резервирования данных, основанный на резервном копирование журнала транзакций и последующего автоматического восстановления их на другом сервере \инстансе MS SQL сервера.
В данной статье попробуем настроить доставку журналов, а также рассмотреть некоторые нюансы данного механизма.







понедельник, 16 января 2012 г.

Ограничить время работы заданий - джобов в MS SQL Server


У любого администратора БД есть n-е количество заданий на серверах, как минимум то 1 для обслуживания БД точно должно быть, которое вы запускаете по расписанию, когда будет минимальное влияние на обслуживание клиентов БД. Вы рассчитываете, что когда начнется основная активность, ваше задание уже не будет работать. Или, к примеру, есть какое-то задание, которое должно выполняться не более n-е количество времени  и не больше.
Как отследить за работой заданий ?! Как ограничить работу его по времени?! Как узнать, чт задание выполняется сверх нормы?! Ниже я описал как это сдлеать двумя распространёнными методами.

среда, 4 января 2012 г.

Linked Server (связанный сервер) к Mysql - проще простого


  Современные  системы  часто взаимодействуют с другими системами, БД, одна из которых MySql. Попробую описать подключение через Linked Server к MySql, хотя это довольно просто.