Отправляет email-рассылки с помощью сервиса Sendsay

MS SQL Server

  Все выпуски  

MS SQL Server - дело тонкое...


Информационный Канал Subscribe.Ru

#239<<  #240

СОДЕРЖАНИЕ

1.СТАТЬИ
1.1.Знакомьтесь - SQLOS
1.2.Репликация пользовательского кода в SQL Server
2.ССЫЛКИ НА СТАТЬИ
2.1.Статьи на русском языке
2.2.Англоязычные статьи
3.ФОРУМ SQL.RU
3.1.Самые популярные темы недели
3.2.Вопросы остались без ответа

СТАТЬИ

Знакомьтесь - SQLOS

По материалам статьи Slava Oks: SQLOS - unleashed
Перевод Александра Гладченко

Если Вы изучали SQL Server 2005 Beta 1 и Beta 2 Вы могли заметить, что в каталоге bin больше нет файла ums.dll. Причина этого проста, его больше не существует. В SQL Server 2000 библиотека ums.dll обеспечивала работу SQL Server в непривилегированным режиме и неприоритетное планирование ресурсов (non-preemptive scheduling). Так что же произошло с ней в новой версии? Теперь больше не используется неприоритетное планирование? Ответом на это будет - "Нет", SQL Server 2005 по-прежнему использует такое планирование ресурсов и, как показывают многие исследования в области реляционных баз данных, для повышения производительности и обеспечения требований масштабирования, нужно и дальше развивать возможности использования неприоритетного планирования.

Примечание переводчика: В SQL Server реализована кооперативная, неприоритетная модель потоков, согласно которой они обслуживаются периодически, а также могут ожидать снятия блокировок или очереди ввода-вывода. Кооперативная многозадачность подразумевает, что каждая программа должна сама предоставлять другим программам возможность использования процессора, для чего она отслеживает в своём коде циклы передачи управления другим, активным программам. Эта модель была присуща 16-ти битным версиям Windows, современные операционные системы используют модель приоритетной многозадачности. Видимо поэтому автор в своих статьях называет используемую SQLOS модель - неприоритетной.

В SQL Server 2005 разработчики сохранили модель неприоритетного планирования, создав новую библиотеку компонент SQLOS, которую иногда называют SOS. SQLOS - это операционная система непривилегированного режима, в которой реализованы механизмы планирования приоритетов, управления памятью, контроля ресурсов, обработки исключений, обслуживания ввода-вывода, обеспечение синхронизации и функций хостинга. Имейте в виду, что для SQL Server возможности SQLOS не представляют собой ещё один уровень абстракции операционной системы, и она не подменяет ни одного из интерфейсов Windows API, ни в целях повышения мобильности ни по другим причинам. Наоборот, она служит для связи SQL Server с Windows, опираясь на возможности масштабирования и обеспечения высокой производительности операционной системы.
Целью SQLOS является организация взаимодействия со всеми необходимыми системными компонентами, поддержка новшеств SQL Server в масштабируемости и повышения производительности, а также нововведений, относящихся к управляемости сервера баз данных и к его поддержке. Она предоставляет разработчикам интерфейсы, с помощью которых можно легко задействовать возможности операционной системы и аппаратных средств. Внутренняя организация SQLOS устроена таким образом, чтобы упростить процесс разработки для платформ начального и высшего уровня.
Подсистема планирования SOS включает в себя такие компоненты, как узлы планирования, планировщики, задачи, обработчики и системные потоки. Узел планирования представляет собой уровень абстракции для процессорных групп. В поддерживающих NUMA - архитектуру системах, такой узел будет представлять один из NUMA узлов. Для SMP систем узел планирования - это один процессор.

Примечание переводчика: NUMA - архитектура (non-uniform memory access) применяется для платформы Intel и отличается от широко распространенной SMP - архитектуры многопроцессорных серверов тем, что процессоры разбиваются на группы по два или четыре процессора, и каждой такой группе - узлу предоставляется своя выделенная область памяти, доступ к которой для группы будет быстрым, в отличие от остальной памяти, доступ к которой будет медленнее. Каждый узел имеет свою шину, которая соединяет его процессоры с платформой через специализированный контроллер, обеспечивающий при необходимости когерентность кэшей узлов и переключение задач между узлами. Появление этой платформы обусловлено тем, что платформа Intel не поддерживала более 4-х процессоров, а также тем, что необходимо было решение для повышения пропускной способности системной шины, которая становиться "узким местом" в симметричных многопроцессорных системах.

Редактируя системный реестр Windows можно изменить число узлов. Программное обеспечение, умеющее это делать, разработчики называют поддерживающими NUMA - архитектуру программами. Как Вы могли догадаться, каждый такой узел представляет собой несколько планировщиков. Планировщик - это абстракция процессора. Планировщики имеют дело с задачами/процессами (tasks), которые исполняются т.н. обработчиками, которые в свою очередь оперируют системными потоками и нитями.

Примечание переводчика: Под обработчиком имеется в виду UMS worker - представляющий собой некую абстракцию концепции поток/нить, позволяющую скрыть от программы такие тонкости, как потоки или нити.

Описанию планирования SQLOS можно посвятить очень много времени, так что автор вернётся к более глубокому описанию этой темы в следующих статьях.
Механизм управления памятью SQLOS состоит из узлов памяти, клерков памяти, кэшей, пулов и объектов памяти. Узел памяти - это некая абстракция, связывающая память с узлом планирования. Узел планирования - это собственное подмножество узла памяти. Разделение понятий планирования и узлов памяти предоставляет возможность моделирования различных аппаратных конфигураций. Каждый из компонент взаимодействует со своим клерком памяти, что позволяет распределять большие блоки памяти. Для распределения памяти, клерки используют объекты памяти, хип (динамическую память). В процессе работы SQL Server создает несколько разных клерков и объектов памяти. Контролировать их вызовы можно с помощью имеющихся у SQL Server специализированных для задач диагностики и управления представлений: Dynamic Management Views (DMV). В дополнение к узлам, клеркам и объектам памяти, SQLOS использует уникальные механизмы структур кэширования и пулинга. Вся подсистема памяти стоит того, что бы ей посвятить несколько статей, и автор обещает в скором будущем предоставить их на суд читателей.
Для обеспечения контроля и адекватного распределения ресурсов, SQLOS организует несколько потоков. Кроме этого SOS предоставляет интерфейсы хостинга (Hosting API). Эти интерфейсы значительно упрощают интеграцию SQL Server и CLR. CLR взаимодействует с этими Hosting API при обращении к операционной системе, включая пулинг потоков и управление памятью.
Существует очень много информации об SQLOS, которую стоит знать. По каждому из подобных аспектов можно написать целую книгу. В следующих статьях автор собирается приступить к подробному описанию менеджера памяти SQLOS. В связи с этим, если Вы не читали его предыдущие статьи об управлении памятью в Windows, он рекомендует предварительно ознакомиться с ними, что бы Вы были подготовлены к той информации, которая будет излагаться в следующих статьях. Также, автор приглашает задавать ему любые возникшие в ходе прочтения этой статьи вопросы, и присылать ему ваши комментарии.

[В начало]

Репликация пользовательского кода в SQL Server

По материалам статьи Baya Pavliashvili: Replicating Code Modules in SQL Server
Перевод Маргариты Баскаковой

Репликация стаей - таблиц помогает синхронизировать данные в нескольких базах данных. Но что относительно хранимых процедур, представлений, и пользовательских функций? Вы должны применить те же самые изменения кода на множестве серверов, которыми управляете? К счастью, есть способ синхронизировать схему статей, основанных не на таблице; а репликация исполнения хранимых процедур может обеспечить более высокую производительность, чем репликация отдельных команд при добавлении, изменении или удалении строк в таблице. Продолжайте читать, чтобы узнать, как это сделать!
Предыдущие статьи автора познакомили Вас с репликацией в Microsoft SQL Server 2000. После прочтения их, Вы должны иметь хорошее представление о концепции репликации и быть готовы изучить некоторые полезные детали. Эта статья продемонстрирует Вам, как реплицировать пользовательский код: хранимые процедуры, пользовательские функции (UDFs) и представления.

Реплицирование Статей, основанных не на таблицах

Каждая публикация SQL Server состоит из статей. Статья - объект базы данных: таблица, представление, хранимая процедура, или UDF. Реплицирование пользовательского кода базируется на той же самой концепции, что и реплицирование таблиц; однако, есть существенное отличие.
При реплицировании статей таблицы, изменения данных немедленно читаются log reader agent и затем доставляются подписчикам с помощью distribution agent. Вы можете так настроить агентов репликации, что бы они работали непрерывно (таким образом, гарантируя более быструю доставку изменений) или периодически. По умолчанию, SQL Server использует хранимые процедуры для применения реплицируемых транзакций на подписчиках.
Когда Вы реплицируете представления, пользовательские функции (UDFs) и хранимые процедуры изменения на эти объекты не посылаются подписчикам постоянно; действительно, трудно представить среду с потребностью постоянно модернизировать пользовательский код базы данных. Вместо этого, репликация пользовательского кода способна предоставить администратору баз данных (DBA) более удобный способ, помогающий поддерживать актуальную копию всего пользовательского кода на множестве серверов. Например, предположите, что Вы - администратор базы данных, управляющий 30 серверами, которые составляют основу некоторого приложения, каждый из которых обслуживает различные пользовательские базы. Когда Вы развертываете изменения для Вашего приложения, у вас есть выбор: Вы можете запустить некоторые скрипты на 30 различных серверах, или развертывать скрипты однократно и реплицировать схему вашего пользовательского кода остальной части серверов. Если Вы похожи на автора и любите спать ночью, Вы выберите последний вариант.
Еще одно различие заключается в том, что изменения в пользовательском коде не применяются через хранимые процедуры. Вместо этого, такие изменения доставляются посредствам создания на издателе, содержащего эти изменения, моментального снимка, и затем этот снимок применяется на подписчике(ках).
Репликация хранимых процедур предлагает очень интересную возможность; Вы можете реплицировать не только схему процедур, но также и их выполнение. Фактически, репликация выполнения хранимых процедур может использоваться как альтернатива репликации таблиц. Если Вы реплицируете таблицы, log reader agent должен прочитать в журнале запись каждой модификации данных и перевести это в команду репликации. Например, если Вы выполняете публикуемую хранимую процедуру, изменяющую таблицы sales, titles и discount в базе данных PUBS, репликация разбивает это действие на три транзакции - по одной для обновления каждой таблицы.
Одна хранимая процедура может изменять несколько таблиц, значит, репликация ее исполнения может быть значительно эффективней, чем разбиение каждой команды на INSERT, UPDATE и DELETE отдельных строк и репликация изменений данных таким способом.
Следующая глава продемонстрирует Вам, как настроить репликацию хранимых процедур, представлений и UDFs (обсудив все "за" и "против" каждого способа).

Установка

Настройка репликации представлений, UDFs и хранимых процедур очень похожа на настройку репликации транзакций для статей таблицы. Пожалуйста, обратитесь к более ранним статьям автора для детализации краткого обзора установки репликации транзакций.
На шаге "Specify Articles" Мастера Создания Публикации (Create Publication Wizard) Вы можете выбрать представления, хранимые процедуры или UDFs вместо таблиц, как показано на следующем рисунке (См. Рис. 1).


Рис. 1

Обратите внимание, что к базе данных Pubs были добавлены хранимая процедура populate_discounts и UDF udf_check_business_day специально для этой статьи. Если Вы хотите опробовать примеры, показанные здесь, запустите следующий скрипт в вашей базе данных Pubs:

IF EXISTS (SELECT 1 FROM sysobjects WHERE type = 'p' AND name = 'populate_discounts') BEGIN DROP PROCEDURE populate_discounts END GO CREATE PROC populate_discounts ( @discounttype VARCHAR(45), @stor_id INT, @lowqty INT, @highqty INT, @discount INT) AS SET NOCOUNT ON BEGIN TRAN INSERT discounts ( discounttype, stor_id, lowqty, highqty, discount) SELECT @discounttype, @stor_id, @lowqty, @highqty, @discount IF @@ERROR <> 0 BEGIN RAISERROR ('did not work, please try again', 16, 1) ROLLBACK RETURN END UPDATE sales SET payterms = 'Net 120' WHERE stor_id = @stor_id IF @@ERROR <> 0 BEGIN RAISERROR ('did not work, please try again', 16, 1) ROLLBACK RETURN END COMMIT TRAN GO IF EXISTS (SELECT 1 FROM sysobjects WHERE type = 'fn' AND name = 'udf_check_business_day') BEGIN DROP FUNCTION udf_check_business_day END GO CREATE FUNCTION udf_check_business_day (@ord_num VARCHAR(15)) RETURNS BIT AS BEGIN DECLARE @business_day INT SELECT @business_day = CASE WHEN DATEPART (WEEKDAY, ord_date) NOT IN (1, 7) THEN 1 ELSE 0 END FROM sales WHERE ord_num = @ord_num RETURN @business_day END

Каждый тип пользовательского кода имеет различные опции репликации, которые Вы можете выбрать в ходе установки. Все объекты позволяют Вам включить расширенные свойства вместе со схемой статьи. Если Вы не знакомы с расширенными свойствами - это способ четко отследить специфические для приложения метаданные базы данных. При репликации представлений, Вы также можете реплицировать и триггеры, построенные на представлениях. Обратите внимание, что хотя триггеры - по существу особый случай хранимых процедур, Вы не можете явно реплицировать исполнение или схему триггеров. Хранимые процедуры позволяют Вам реплицировать каждое выполнение процедуры или только исполнение в рамках сериализуемой транзакции (serializable transaction). Все эти варианты репликации формируются, используя закладку статей "Other". Следующий рисунок демонстрирует закладку"Other" окна Stored Procedure Article Properties (См. Рис. 2).


Рис. 2

Когда Вы издаете пользовательский код, Мастер Создания Публикации (Create Publication Wizard) предупреждает Вас, что вашему приложению потребуются изменения, чтобы оно правильно работало. Для создания представлений, определяемых пользователем функций и хранимых процедур на подписчике необходимо наличие всех таблиц, представлений или UDFs, на которых базируются эти модули кода. После того, как Вы убедитесь, что все необходимые объекты существуют на подписчике (ах), Вы можете завершить работу мастера.
Настройка подписки для публикации, включающей статьи, основанные не на таблицах, идентична подписке на табличные публикации.

ПРИМЕЧАНИЕ: Пожалуйста, обратитесь к статье автора "Setting Up Transactional Replication with SQL Server" на сайте InformIT для более подробного изучения вышеизложенного.

Несмотря на то, что Вы можете реплицировать исполнение хранимых процедур, которые только читают данные, Вы должны реплицировать только такое исполнение ваших хранимых процедур, которое вносит изменения в данные. Если процедура не вносит никаких изменений в данные, то действительно не имеет смысла реплицировать ее исполнение, если только Вы не хотите имитировать нагрузку на тестовый компьютер аналогичной промышленному серверу в целях тестирования производительности. Если это так, то рассмотрите возможность использования механизмов нагрузочного тестирования, доступных в SQL Profiler вместо того, чтобы реплицировать хранимые процедуры.

Синхронизация реплицируемых модулей кода

Статьи, основанные не на таблицах, будут синхронизированы только когда Snapshot agent запущен, и инициализированы базы данных подписчика. Для этой статьи, была созданы хранимая процедура и UDF, которые Вы видели ранее, так же как представление titleview, включенное в базу данных Pubs.
Сразу после создания подписки, Enterprise Manager сообщит, что статус подписки принял значение "Pending" (как показано на следующем рисунке), потому что Snapshot agent еще не собрал снимок статей (См. Рис. 3).


Рис. 3

После того, как Вы запустите Snapshot agent, он создаст сценарии, чтобы сгенерировать реплицируемые статьи для подписчика. Эти сценарии находятся в папке снимка, которую Вы определили в процессе установки публикации. (По умолчанию, это папка - Program Files\Microsoft SQL Server\MSSQL\REPLDATA\UNC\server_name_publication_name_subscription_name). После того, как отработают log reader agent и distribution agent, SQL Server удалит сценарии снимка. Когда снимок будет доставлен, колонка Status примет значение "Active".
Хотя Вы можете запускать Snapshot agent так часто, как Вам нравится, он производит снимок изданных статей, только если подписки помечены для реинициализации. Если Snapshot agent не находит подписок, которые нужно реинициализировать, он просто возвращает сообщение, видимое в мониторе репликации (как показано на следующем рисунке): "снимок не создан, потому что нет подписок, нуждающихся в инициализации" (См. Рис 4).


Рис. 4

Вы могли подумать о том, что если Вы измените определение реплицируемого пользовательского кода, то SQL Server автоматически реинициализирует подписки, но если Вы измените реплицируемую хранимую процедуру и запустите Snapshot agent вручную - Вы получите то же самое сообщение. Кроме того, если Вы проверите код реплицируемой процедуры на подписчике, Вы заметите, что изменения там не были применены.
Чтобы повторно инициализировать подписку, Вы должны навести курсор на публикацию в Enterprise Manager, щелкнуть правой кнопкой мыши на нужной подписке и выбрать реинициализацию. Тогда SQL Server выполнит системную хранимую процедуру sp_reinitsubscription, которая в свою очередь вызовет хранимую процедуру sp_changesubstatus - эта процедура изменит колонку Status системной таблицы syssubscriptions, находящейся в базе данных издателя. Это колонка Status, которая определяет реинициализируется ли подписка. Когда Вы реинициализируете подписку, Enterprise Manager изменит значение колонки Status на "Pending", так же, как это было в момент начальной синхронизации. В следующий раз запуск Snapshot agent выдаст сообщение о том, что был создан моментальный снимок реплицируемых статей, как это показано на следующем рисунке (См. Рис. 5).


Рис. 5

Если Вы проверите реплицируемые статьи, Вы увидите, что на подписчике изменения были сделаны.

ПРИМЕЧАНИЕ: Вы также можете реинициализировать подписчиков для проверки свойств публикации, наведя курсор на Subscriptions и выбрав Re-initialize.

Варианты выполнения хранимой процедуры

Статьи, основанные на хранимых процедурах, могут реплицироваться каждый раз, когда они выполняются на издателе или только когда они исполняются в рамках сериализуемой транзакции (serializable transaction). Если Вы вернётесь к экрану свойств публикации и попытаетесь изменить свойства статьи, Вы увидите, что Вы не можете изменить опции выполнения хранимой процедуры - они недоступны (см. рис. 6).


Рис. 6

Чтобы сделать опции выполнения хранимой процедуры доступными, Вы должны удалить все подписки на эту публикацию и удалить статью из публикации. После того, как Вы снова вернёте статью в публикацию, все опции опять будут Вам доступны.
Для чего Вам может понадобиться репликация выполнения хранимой процедуры? Пример процедуры, которым автор снабдил эту статью, наполняет данными таблицу discounts и затем обновляет связанные строки в таблице sales. Предположим, что мы реплицировали таблицы discounts и sales вместо того, чтобы реплицировать выполнение хранимой процедуры populate_discounts. И предположим, что мы выполнили процедуру следующим образом:

    EXEC populate_discounts 'great discount', 6380, 10, 90, 20

Результатом стали бы следующими три команды, переданные в базу данных дистрибутора и затем далее серверу подписчика:

    {CALL sp_MSupd_sales (NULL, NULL, NULL, NULL, 'Net 120',NULL,'6380','6871','BU1032',0x10)}
    {CALL sp_MSupd_sales (NULL, NULL, NULL, NULL, 'Net 120',NULL,'6380','722a','PS2091',0x10)}
    {CALL sp_MSins_discounts ('great discount', '6380', 10, 90, 20.00)}

Обратите внимание, что для каждой строки, измененной в таблице sales, репликация сделает отдельный вызов процедуры sp_MSupd_sales; точно так же каждая строка, добавленная в таблицу discounts, приведёт к вызову процедуру sp_MSins_discounts. Теперь давайте посмотрим, что происходит, если мы реплицируем только выполнение хранимой процедуры populate_discounts. Сначала, как только мы выберем репликацию выполнения хранимой процедуры, SQL Server выдаст следующее разумное предупреждение (См. Рис. 7).


Рис. 7

Пока, выберите Yes, что бы продолжить. После того, как мы подписались на публикацию, содержащую процедуру populate_discounts, выполним процедуру на издателе следующим образом:

    EXEC populate_discounts 'fabulous discount', 7067, 100, 1000, 25

Если мы проверим базу данных дистрибутора, исполнение приведенной выше процедуры превращается в единственную команду на подписчике:

    {call "dbo"."populate_discounts" ('fabulous discount', 7067, 100, 1000, 25)}

Поскольку мы имеем меньше команд, для перемещения от издателя дистрибутору и затем подписчику, реплицируемые транзакции будут доставляться более эффективно. Результатом станет более масштабируемое приложение, которое может поддерживать больше транзакций, чем, если бы мы должны были тиражировать изменения в таблицах индивидуально.
Однако SQL Server не выдавал предупреждение по ошибке, которое мы видели ранее; чтобы гарантировать, что все изменения данных реплицируются подписчикам, мы должны будем реплицировать исполнение всех хранимых процедур, которые изменяют данные. Кроме того, мы должны будем гарантировать, что издатель и подписчик всегда имеют те же самые данные во всех таблицах, которые затрагивают реплицируемые хранимые процедуры. Иначе, вызов хранимой процедуры, который был успешным на издателе, может потерпеть неудачу на подписчике.

Выполнение процедур внутри сериализуемых транзакций

Вспомните, что Вы можете реплицировать каждое выполнение хранимой процедуры или только то выполнение, которое происходит в пределах сериализуемой транзакции (serializable transaction). Сериализуемые транзакции требуют (и это не удивительно), чтоб уровень изоляции транзакции был установлен в значение SERIALIZABLE.

ПРИМЕЧАНИЕ: Пожалуйста, обратитесь к статье автора "SQL Server: Details of Locking", чтобы узнать о различных уровнях изоляции транзакций, поддерживаемых SQL Server.

Если мы реплицируем каждое выполнение хранимой процедуры, SQL Server будет делать попытку реплицировать даже такое исполнение, которое закончилось ошибкой на издателе. Например, предположим, что выполняется процедура populate_discounts с неправильным значением store id:

    EXEC populate_discounts 'special special discount', 134567, 100, 1000, 25

В результате получим:

    Server: Msg 547, Level 16, State 1, Procedure populate_discounts, Line 10
    INSERT statement conflicted with COLUMN FOREIGN KEY constraint 'FK__discounts__stor___0F975522'. The conflict occurred in database 'pubs', table 'stores', column 'stor_id'.
    Server: Msg 50000, Level 16, State 1, Procedure populate_discounts, Line 24
    did not work, please try again
    The statement has been terminated.

Даже если выполнение процедуры потерпело неудачу на издателе, SQL Server все еще пытается выполнять это на подписчике. Процедура sp_browsereplcmds, выполненная на базе данных дистрибутора сообщает о следующем:

    {call "dbo"."populate_discounts" ('special special discount', 134567, 100, 1000, 25)}

Кстати, этот вызов хранимой процедуры также потерпит неудачу на сервере подписчика, потому что store id = 134567 также не существует в базе данных подписчика.
Теперь посмотрим, что произойдёт, если мы хотим реплицировать только то выполнение процедуры, которое заключено в пределах SERIALIZABLE транзакции. Имейте в виду, что Вы должны будете удалить подписку, а так же статью populate_discounts из публикации прежде, чем Вы сможете настроить эту процедуру, для репликации исполнения только в рамках сериализуемой транзакции (serializable transaction). После того, как Вы настроили репликацию, попробуйте выполнить следующее:

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE GO BEGIN TRAN EXEC populate_discounts 'fabulous customer special', 114251, 50, 1000, 25 IF @@ERROR <>0 BEGIN ROLLBACK END ELSE COMMIT

Выполнение приведенного выше скрипта потерпит неудачу, потому что store id = 114251 не существует. Если Вы проверите базу данных дистрибутора - эта команда никогда не рассматривалась для репликации. Log reader agent просто сообщил, что нет транзакций, доступных репликации. Теперь выполним ту же самую процедуру с существующим store id:

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE GO BEGIN TRAN EXEC populate_discounts 'customer appreciation special', 7066, 50, 1000, 25 IF @@ERROR <>0 BEGIN ROLLBACK END ELSE COMMIT

Выполнение приведенного выше скрипта отработает на издателе и реплицируется подписчику. Таким образом, репликация исполнения процедур только в рамках сериализуемой транзакции (serializable transaction) гарантирует, что они будут выполнены на подписчике, только если они достигли цели на издателе. Имейте в виду, однако, что SERIALIZABLE уровень изоляции - самый ограничивающий способ блокировки и может иметь отрицательное воздействие на производительность вашего приложения.

Резюме

Цель этой статьи состоит в том, чтобы продемонстрировать пошаговую инструкцию применения репликации транзакций для тиражирования схемы и исполнения хранимых процедур, а так же схемы представлений и UDFs. Репликация пользовательского кода, хотя и похожа на репликацию данных таблицы, имеет существенное отличие, потому что требует переинициализации подписок. В отличие от репликации данных таблицы, схема пользовательского кода реплицируется только, когда Snapshot agent запущен и генерирует снимок для инициализации подписок.
SQL Server поддерживает репликацию исполнения хранимых процедур. При внимательном планировании, Вы можете использовать эти функциональные возможности в своих интересах, чтобы тиражировать изменения данных более эффективно, чем в случае с репликацией таблицы.

[В начало]

ССЫЛКИ НА СТАТЬИ

Статьи на русском языке

SQL Server 2005: версии, лицензии и стоимость
Брайан Моран
MSSQLServer: На прошлой неделе представители Microsoft объявили о новой версии SQL Server Workgroup Edition и назвали предположительные цены на продукты SQL Server 2005. Изменение цен не касается SQL Server 2000, хотя новая версия SQL Server 2000 Workgroup Edition выйдет в первой половине текущего года. Четырем версиям SQL Server 2005 дано следующее описание...

Программная сортировка DataGrid
Terry Denham
ADO: Эта статья показывает как программно отсортировать System.Windows.Forms.DataGrid. Другими словами, как сэмулировать <щелчок> по заголовку столбца...

[В начало]

Англоязычные статьи

Inside the SQL Server 2000 User Mode Scheduler
Ken Henderson
Ken Henderson profiles the User Mode Scheduler (UMS) in SQL Server 2000 that requires developers to write code that runs efficiently, and yields often enough in the appropriate places. UMS provides more control and allows the server to scale better than it could with the Windows scheduler. (10 printed pages)

Introduction to MSSQL Server Analysis Services: Point-and-Click Cube Schema Simplification
William Pearson
In this article, we will explore another tool that MSAS offers for the enhancement of cube processing, the Optimize Schema option. Optimize Schema attempts to identify unnecessary joins between our fact and dimension tables, and then to remove them. In many cases, the tool works effectively to accomplish this, leading to a significant reduction in a cube's processing time. Elimination of the joins means more rapid resolution of MSAS' queries to the relational database, upon which our cube is dependent as a data source. This, in turn, means that data is pulled into Analysis Services in less time, contributing to a more rapid cube build overall

SQL Server 2005 Security - Part 4
Marcin Policht
In this article, we will conclude our coverage of security related changes in SQL Server 2005 Beta 2 (although we will continue discussion of improvements in other functionality areas throughout the reminder of this series). The topics we will focus on here are code and module signing, modifications of SQL Server Agent and SQL Profiler operations, as well as monitoring and auditing changes

SP_WHO_3
Mike A. Barzilli
SP_WHO_3 is a very powerful utility for all DBAs. It displays processes connected to the system and what they are doing. It can find blocking processes, can return the Input Buffer for everything in the recordset returned, and provides immense filtering and sorting capabilities

Effective Database Design: Choosing The Right Process
Rebecca M. Riordan
This chapter examines the process of project design, and discusses the various models of project life-cycle, with the intention of helping you to choose the right one for your database design project

An Interview with Idera CEO, Rick Pleczko
Steve Jones
Rick Pleczko, CEO of Idera, took time out of his busy schedule to spend a few minutes answering some questions from me about his company, SQL Server 2005 and more. If you're in a large SQL Server environment, then you might want to take a look at some of the Idera tools and products

SQL Server 2005 Integration Services: Lessons from Project REAL
Richard Waymire, Len Wyatt, John H. Miller, Donald Farmer
In Project REAL we are using large volumes of real data and scenarios from real companies to implement business intelligence systems using early releases of Microsoft SQL Server 2005. In the process, best practices are being developed and potential problems uncovered. This article reports some of the lessons learned while working on the data extraction, transformation, and loading (ETL) portion of the first phase of Project REAL. (61 printed pages)

How do I find a stored procedure containing <text>?
aspfaq
I see this question at least once a week. Usually, people are trying to find all the stored procedures that reference a specific object. While I think that the best place to do this kind of searching is through your source control tool (you do keep your database objects in source control, don't you?), there are certainly some ways to do this in the database

Protect database resources with clean code
Tony Patton
Following simple rules for object cleanup in your .NET code can do wonders for database perfomance. We show you how

Naming SQL Server Objects: Part I
Andrew Novick
When you pick a name for a SQL object what are you trying to do? When I name an object I want several things to happen. I want the programmer who sees the object to know

Finding patterns with very small support
DMTeam
Learn how to detect patterns that are supported by a very small number of cases within a large data set using the Microsoft Decision Trees algorithm

CSHADigest: A fast and single class implementation of SHA1 Digest algorithm
Adrien Pinet
A single class implementation of SHA1 Digest in Unix/Win - simple and fast

SQL Server 2005 CTP3 Reporting Enhancements
Brian Moran
Last week, Microsoft announced the availability of SQL Server 2005's third Community Technical Preview (CTP3). Each CTP build releases a few new features and provides improved stability over the earlier CTP versions. Among other things, CTP3 includes improvements to Management Studio and adds improved 64-bit support. CTP3 is available only to BetaPlace and Microsoft Developer Network (MSDN) subscribers; however, anyone can download the SQL Server 2005 Express Edition CTP3 at http://lists.sqlmag.com/t?ctl=4D4A:7B3DB. This is a great way to play with SQL Server 2005, even if you don't have direct access to the CTP builds

Code Camp 3 wrapup
Thanks again to Thom Robbins for giving me the opportunity to talk at this weekend's New England Code Camp! I had a great time and got hit with some very interesting questions
FOR XML...XMLSCHEMA and schema validation
Bob Beauchemin's Blog
When reading the CTPNotes file from the new Feb CTP build I stumbled across the fact that the XML schema that contains SQL data types (http://schemas.microsoft.com/sqlserver/2004/sqltypes) is now built-in to the server. Although this may not mean much to most people, it gave me the chance to try something that Dan Sullivan thought up for the first rev of our SQL Server 2005 class. It works now

Finding the currentmember on all dimensions, take#3
Chris Webb's BI Blog
Following on from Mosha's comment revealing the new .CurrentOrdinal function, I thought I'd mention how this solves the problem even though, for me, it's still not quite resolved...

SSIS: Datetime variables don't always do what you expect
Jamie Thomson's Blog
I recently came across some slightly strange behaviour on one of my SSIS packages and I thought it was worth posting up here to make people aware of it

Subscribing a broker service to SQL events
Write Ahead Blog
One of the cool uses of SQL Service Broker is event notification. SQL Server 2005 introduces a mechanism for notifying events such as execution of a DDL statement or occurence of a SQL Trace event to a Service Broker service. Notifications are delivered as messages to the subscribing service via dialogs using a simple contract. Multiple services can subscribe to the same event and a service can get notifications from multiple events. Event notifications can be used both for monitoring some activity (eg> logging server memory changes) as well as taking action asynchronously (eg> sending a message to a remote service whenever table is created). In a previous post, I explained how to use the QUEUE_ACTIVATION event. There are over a hundred different events that can be subscribed to

All about the 'Case'
Muthusamy Anantha Kumar
When installing SQL Server, regardless of versions and editions, SQL Server database administrators tend to choose the default collation and sort-order, which is SQL_Latin1_General_CP1_CI_AS. Though case insensitiveness makes the life of the database developers and database administrator's easy, there are situations where case sensitivity should be enforced just as password checking is enforced

Tips On Optimizing Index Performance
Kalpesh Thaker
In this article I want to explain the Sql Server Database developers to consider important tips while designing/creating indexes for improving the performance of T-sql queries by choosing the appropriate indexes. This article is meant for experienced database developers who have knowledge about Sql Server indexes and can take into considerations following tips

Programming Replication from Heterogeneous Data Sources
Microsoft
Microsoft® SQL Server™ enables third-party products to become Publishers within the SQL Server replication framework. The Replication Distributor Interface allows replication from heterogeneous databases that provide 32-bit OLE DB drivers to Subscribers running SQL Server 2000

Security is the catch word for SQL Server's sequel
Margie Semilof, Senior News Writer
Improved security in SQL Server 2005 is the No. 1 reason database professionals will tell their senior managers why they need to start planning a move up to Microsoft's newest database management platform when it becomes available later this year

Report Casts Doubt on SQL Server 2005 Scalability
Lisa Vaas
SQL Server 2005 will likely be a dud at delivering high-performance computing, according to a new report from Forrester Research Inc

Moving A SQL Server Database
Desiree Harris
A database move can be done a couple different ways, but when the database is updated frequently and the move needs to be completed with minimal downtime and no data loss, it is best to move it by detaching and then reattaching the database on the new server. The database will be offline during the move but it is better to have it offline than to miss transactions when backing up and then restoring the database on the new server

Get better SQL Server performance before you improve the queries
Robert L. Bogue
When looking at SQL performance there's an immediate desire to jump into the queries that the SQL Server is being forced to process and see what can be done to improve them. Unfortunately, it's not always that simple. Sometimes the queries are coming from packaged software that cannot be changed. Other times the queries come from report writing tools and there's just no way to make the queries any better

Improving SQL Performance
Marisa Pellegrino
How do you know how much hardware is really needed by your applications? And what do you do when your applications are overloading your system? The answer lies with improving your SQL performance. You have to tune your hardware SQL server and monitor performance, all of which will be explained as clearly as possible on this page

Features by Edition
Microsoft
Compare editions1 of SQL Server 2000 and learn more about the mission-critical features included with Enterprise Edition. For an in-depth look at the differences between editions of SQL Server 2000, read the Choosing an Edition of SQL Server 2000 white paper

Replication for high availability
Rick Cook
Replication for high availability can be simple and cheap or it can be elaborate and expensive. It all depends on what you want to replicate -- and what you consider to be acceptable performance

Performance Tips Part 2
Leo Peysakhovich
In a recent article (Performance Tips Part 1) I discussed some potential performance issues and tips to improve performance. Let-s proceed with performance tips and check another 4 scenarios

Quick! Which specific SQL Server user is logged into which database?
Serdar Yegulalp
SQL Server's master database stores tables with important and constantly updated information about the state of the SQL server. One of these tables, sysprocesses, can be used to track (in SQL Server itself) which SQL Server users are currently logged in and which database(s) they are accessing

Some "Hints" for Mastering SQL Tuning
Raghu Donepudi
My wife and I recently had a baby. In the labor and delivery room, the medical staff connected several sensors to my wife's tummy to monitor the baby's heartbeat, contractions, blood pressure etc. Every few hours, the obstetrician pulled all the data from different times. While I was eagerly looking for normal values, I was surprised to see how fast the system retrieved and displayed data. The data-retrieval queries it used must have been highly optimized. This experience inspired me to write an article on SQL tuning

Version Control - Part 2 - Tracking Changes
Steve Jones
This article is part 2 of my series on version control

Help Improve Yukon Setup
Press Release
The Yukon setup team is looking for feedback related to your setup and installation experience. They've setup a survey that asks for a few demographics as well as your experience and any issues with the setup of the Betas or CTPs

Exploring 'ON DELETE SET NULL' in SQL Server 2005
Rob Garrison
At first glance, the 'ON DELETE SET NULL' option in SQL Server 2005 may not seem like a big deal, but once you've seen how it can be used, I think you will be impressed. The basics? If Order.CustomerID has a foreign key to Customer.CustomerID and a customer is deleted, 'ON DELETE SET NULL' causes the CustomerID field in each of that customer's orders to be set to NULL. It allows the "parent" record to be deleted and sets the "child" record's column to NULL. A normal foreign key says Order.CustomerID must match a record in Customer. An 'ON DELETE SET NULL' foreign key says that if Order.CustomerID is not null, then its value must match a record in Customer

Replicating to Tables of Different Schemas
by Hilary Cotter
The scope of this article is how to replicate to tables of different schemas using SQL Server 2000. There are four cases we will be looking at in this article

Report Casts Doubt on SQL Server 2005 Scalability
Lisa Vaas
SQL Server 2005 will likely be a dud at delivering high-performance computing, according to a new report from Forrester Research Inc

Users Express Confidence in SQL Server 2005 Performance
Lisa Vaas
SQL Server 2005 is performing just fine in at least one beta customer's site, contrary to a recent report that expressed doubt as to the upcoming relational DBMS' ability to do high-performance computing

Hardening SQL Server hardware
Barrie Sosinsky
When most people think of the phrase "hardening a server," they tend to think in terms of security practices that make it difficult for people to gain unintended access to your database. That is only one kind of hardening. From the standpoint of Windows server technology, hardening not only includes application and system settings, but technologies you implement in hardware as well

A workaround to SQL Server's 8,060-byte row length limit
Serdar Yegulalp
The total amount of space used to store an individual row of data in SQL Server cannot exceed 8,060 bytes

Chapter Download: ADO.NET and System.Xml v. 2.0 -- The Beta Version -- Chapter 5, 'ADO.NET and SQL Server 2005'
Alex Homer
ADO.NET 2.0 and SQL Server 2005 share a great deal of functionality and complementary technologies. This chapter concentrates on three core areas of functionality: Multiple Active Results Sets (MARS), SQL Server Query Notifications and SQL Server user-defined types (UDTs)

Ask The SQL Server Expert
SearchSQLServer.com
SearchSQLServer.com's Ask the Experts. We try to answer as many questions as possible, however, questions that are of general interest have priority. Questions are answered frequently, but if you need a more immediate response, please visit TechTarget's ITKnowledgeExchange.com. You can send your question to the IT pros who have experience in the technical area related to your question

Naming SQL Server Objects
Andrew Novick
When you pick a name for a SQL object what are you trying to do? This article is Part II of a short serise about database object names. Part I started with the structure of a name and discussed prefixes that distinguish different types of database objects such as stored procedures, user-defined functions, and tables. This article is more about how to use the structure of the name to make it easier to find

Data Integration - Part II - UDTs and OPENROWSET to parse custom file formats
TSQLNet Weblog - Cihangir Biyikoglu
SQLCLR is the Swiss Army knife with a 1000s of foldable parts. You cannot beat the ability to plug right in and reuse good set of framework functions from the DBMS. If your DBA is one of those that say; “no way. I am not letting C# into my database”, this is what I’d tell him… I am sure one day someone insane enough will to try to write the entire framework using sql but until then we need SQLCLR

SQL Server 2005 Service Broker and WSE2.0 SOAP Messaging
Mike Taulty's Weblog
Following up on this previous post about SQL Server 2005 Service Broker, I've been writing a SOAP message transport for the Web Services Enhancements (WSE) 2.0 to move messages using ServiceBroker whilst still gaining advantage of the security, policy, addressing features of WSE2.0

Update On SQL Server 2005 (UK MSDN Flash Article)
Mike Taulty's Weblog
This is an "Update on SQL Server 2005" article that I wrote for the MSDN Flash in the UK that went out today. Publishing it here in case there's a gap between people who view this site and people who view the UK MSDN Flash

Securing SQL Backups
Brian Kelley
By now most folks have heard about the loss of backup tapes belonging to Bank of America. These tapes contained financial records for, among other customers, the US government. As the story goes, the tapes were stolen as they were being transported. In other words, they were completely out of Bank of America's hands. This raises the issue of backup security, especially with regards to SQL Server. Since SQL server backups contain data, and often sensitive data for a given organization, the wise DBA takes the time to understand how these backups are being handled and secured. That's what I'll discuss in this article

[В начало]

ФОРУМ SQL.RU

Самые популярные темы недели

ХП против View
Прошу помочь с оптимизацией
HELP!!! Удалил юзера dbo из базы!
Пермиссии для доменного аккаунта, под которым стартует SQL Server Agent
Больше книг хороших и разных!
Шаманство при Paralellism в процедурах.
Таблица Inserted
Куда девать Иванова?
MD5,SHA1 на T-SQL
Распределить базу на несколько серверов
удаление записей из представлений
альтернатива циклу
VSS + MSSQL (принципы работы)
Можноли переименовать Логины в SQL Server 2000
Импорт данных из MS Excel
ВОССТАНОВЛЕНИЕ БАЗЫ ДАННЫХ (ОЧЕНЬ, ОЧЕНЬ НУЖНО)
Как улучшить очень медленный запрос?
И снова round
Как влияет количество коннектов к серверу?
Возможно ли Linked server c "windows pass-through authentication"?

[В начало]

Вопросы остались без ответа

Оператор INSERT
Литература
Посоветуйте железку для MSSQL в районе 6K$
QA для винмобайл 2003 se (4.21.1088), железка ipaq 2110
Alternate Synchronization Partner
Помогите с FAQ по DBF
Enforce Distributed transaction
Подскажите в вопросе про уведомления
ОПРОС: Вопросы по установке SQL Server 2005
Доступк SQL Server'у из интернета
САЙЗИНГ для железа под SQL Server от HP

[В начало]


Вопросы, предложения, коментарии, замечания, критику и т.п. оставляйте Виталию Степаненко и Александру Гладченко в форуме: Обсуждение рассылки

СЕМИНАРЫ  КОНФЕРЕНЦИИ

МИНИФОРМА
ПОДПИСКИ



ПУБЛИКАЦИИ  АРХИВ


http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.winsoft.sqlhelpyouself
Отписаться

В избранное