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

MS SQL Server

  Все выпуски  

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


Служба Рассылок Subscribe.Ru проекта Citycat.Ru

#061<<  #062

СОВЕТЫ

Кто такой - DBA? - Краткий обзор
По материалам статьи Steve Jones на sqlservercentral.com: " What's a DBA? - An Overview"
Перевод Александра Гладченко

Я получаю этот вопрос уже больше чем несколько раз. Обычно он исходит от кого-то, кто желает стать DBA или только начинает свой путь на этом поприще, но я думаю, что администраторы также часто задаются вопросом, чем же является DBA и почему он так необходим. Почему не возможно эту работу поручить только системному администратору? Или старшему разработчику? Есть большое количество серьезных причин, по которым и я думаю, что DBA выполняет важную, узкоспециализированную работу в компании.
Я начал писать эту статью в прошлом году, но это быстро превратилось в длинный цикл статей. Сейчас, я хочу нарушать последовательность изложения цикла и сделать краткий обзор того, чем должен заниматься DBA с учётом полученных от читателей замечаний, предложений и т.п. Эта статья о том, как я вижу роль DBA, и основывается на более детальных статьях, относящихся к режимам работы и ролям различных типов DBA, которые я вижу в мире.

Кто такой - DBA?

Существует большое количество различных режимов работы DBA и не существует хорошего описания содержания его работы. Из того, что я видел, есть несколько основных типов DBA:
Administrative DBA - Работа по поддержке сервера и обеспечение его работоспособности. Резервирование, защита, установка заплат и SP, настройка репликаций и т.д. А также всё, что касается фактического программного обеспечения сервера.
Development DBA - работы по формированию запросов, хранимых процедур и т.д., которые обеспечивают бизнес-задачи. Такой DBA - эквивалент программиста. Он, прежде всего, пишет T-SQL запросы.
Architect - Design schemas. Строит таблицы, FKs, PKs и т.д. Работа по построению структур, которые встречают бизнес-задачи общего характера. Разработанный таким DBA дизайн используется разработчиками и всеми DBA для поддержки пользовательских приложений.
Data Warehouse DBA. Это новая роль, отвечающая за объединённые данные из множественных источников, в хранилище данных. Вероятно, придется проектировать хранилище, оптимизировать данные хранилища, стандартизировать данные, обрабатывать данные перед загрузкой. В SQL Server, этот DBA использовал бы в основном DTS.
OLAP DBA. Строит многомерные кубы для поддержки задач принятия решений или OLAP систем. Основной язык в SQL Server - это MDX, а не SQL.
Быть DBA (вообще) утомительное занятие. Вы должны планировать развитие базы на будущее, резервировать место, где ваша схема будет размещаться или расширяться. План роста чреват множеством ошибок и просчётов. Эта работа не похожа на программирование с помощью "C" или Visual Basic, когда ответственность ограничивается уровнем пользовательского приложения. Ваши решения затрагивают все данные и имеют далеко идущие последствия. Так как Вы работаете в ориентируемой на установку среде (set-oriented), Вы можете легко допустить ошибку, которая затронет большое количество элементов системы. В отличие от класса или структуры, где Вы имеете дело с не большими порциями данных (то есть, один пользователь), единственный SQL запрос может затронуть всех пользователей структуры. Скольких из Вас мучили сомнения при написании delete <имя_таблицы> с предложением where?

Кто должен заботится о системе?

В разных компаниях это может выполняться по-разному. Вообще, в малых компаниях, DBA мог бы исполнять все перечисленные выше роли и применять сервисные пакеты, обновления и т.д. В больших фирмах, DBA не успеет делать дополнительно что-нибудь на NT/UNIX, а сможет только обслуживать само приложение (SQL/Oracle/DB2, и т.д.). В моей компании, я обслуживаю всё, что связано с SQL, включая сервисные пакеты для SQL. Сервисные пакеты для NT/2000 и заплаты применяются sysadmin-ом. Он также заменяет/добавляет жесткие диски, память и т.п. Исполняет резервирование на ленты. Я просто гарантирую, что SQL Server будет работать в требуемом режиме и довожу до сисадмина, нуждаюсь ли я в чём-либо.
Трудно решить, хотите ли Вы стать DBA. С одной стороны это может быть скучно, если всё работает хорошо (для меня это теперь вид раздражения). Но когда что-либо ломается, возникает огромное давление и напряжение. Варианты поведения, когда база данных "умерла" и Президент компании заходит в Ваш офис, чтобы спросить о её состоянии, не преподают ни в какой школе.

Подготовка к DBA-DOM

Изучайте реляционную теорию баз данных. Читайте об этом, и о том, что люди думают по этому поводу. IMHO (по моему скромному мнению), нет никакого "правильного" пути, но существует большое количество особенностей в любом отдельно взятом дизайне. Учитесь столько, сколько Вы можете, и затем принимайте решение, которое соответствует вашей ситуации. Я имею большой опыт в организации сети также как и в программировании, и я думаю, что это действительно мне помогает. Я понимаю, как построена операционная система, и я имею представление, что происходит внутри компьютера. Знание того, как данные перемещаются по сети, также поможет спроектировать лучшую систему и избежать многих проблем. В сегодняшнем мире, я думаю, понимание принципов сетевых соединений является очень важным. В MS мире умение программировать систему требуется только если Вы хотите быть системным программистом. В *nix мире, знание того, как разрабатываются системные утилиты полезно, но я не думаю, что это обязательно требуется.

Заключение

Всё, что изложено в этой статье - это моё мнение и мои эмоции, основанные на личном опыте и изучении соответствующих материалов. Я уверен - некоторые люди, не согласятся со мной, но я хочу иметь обратную связь, чтобы вносить изменения в эту статью. Я особенно хотел бы получить замечания и дополнения от non-SQL Server DBAs. Если Вы знаете кого-то, кто является Oracle, DB2 или другого типа DBA, пожалуйста перешлите ему(ей) эту статью, и попросите, чтобы они послали мне своё мнение об этой статье Steve Jones

Хранимая процедура "For Each Table"
По материалам статьи Neil Boyle на swynk.com: " "For Each Table" Stored Procedure"
Перевод Александра Гладченко

Микрософт предлагает для использования с SQL Server очень удобную системную хранимую процедуру по имени sp_msForEachTable. Эта SP предназначена для того, чтобы позволить администратору базы данных исполнять многие простые операции над таблицами с помощью всего одной команды.
В то время как sp_msForEachTable прекрасно работает в большинстве случаев, существует всё же одна проблема: если Вы попытаетесь обслуживать множество владельцев объектов в базе данных, используя синтаксис [владелец].[объект]. Это ещё не было бы большой проблемой, если бы не то, что многие команды (включая 'sp_recompile' и все команды 'DBCC') не могут иметь дело с владельцами; они могут иметь дело только с простым, "старым" именем таблицы.
Учитывая, что многие администраторы баз данных избегают применение множественных владельцев в базе данных (просто, потому, что это лишняя администраторская головная боль) я решил написать версию стандартной процедуры, которая обходится без включения в предложение запроса имени владельца объекта, и привожу полный текст этой процедуры в статье. Написанная мной процедура является, в основном, прямой копией существующей SP (все подтверждения авторских прав MS), только с одной поправкой - я удалил ссылки на владельцев объектов так, что новая процедура будет работать только для таблиц, принадлежащих текущему пользователю. Поскольку объекты наиболее часто принадлежат DBO, а Вы являетесь администратором базы данных, это не должно вызвать проблемы.
Я переименовал сценарий и включил двойной символ подчеркивания в его имя. 'sp_' позволяет мне размещать её в базе данных master и обращаться из контекста любой другой базы, а второй символ подчеркивания позволяет мне легко отличить мой собственный код от стандартного кода MS.

Вот полный код новой SP:

drop proc sp__foreachtable
go

create proc sp__foreachtable

/*** Built from the Microsoft original sp__msForEachTable
**** Use at your own risk
***/

 @command1 nvarchar(2000), @replacechar nchar(1) = N'?',
 @command2 nvarchar(2000) = null,
 @command3 nvarchar(2000) = null,
 @whereand nvarchar(2000) = null,
 @precommand nvarchar(2000) = null,
 @postcommand nvarchar(2000) = null

as
  /* This proc returns one or more rows for each table (optionally,
  matching @where), with each table defaulting to its own result set */
  /* @precommand and @postcommand may be used to force a single
  result set via a temp table. */

  /* Preprocessor won't replace within quotes so have to use str(). */
  declare @mscat nvarchar(12)
  select @mscat = ltrim(str(convert(int, 0x0002)))

  if (@precommand is not null)
      exec(@precommand)

  /* Create the select */

  exec(N'declare hCForEach cursor global for select (object_name(id))
        from dbo.sysobjects o ' + N' where
        OBJECTPROPERTY(o.id, N''IsUserTable'') = 1 ' + N' and
        o.category & ' + @mscat + N' = 0 ' + @whereand)

  declare @retval int
  select @retval = @@error
  if (@retval = 0)
        exec @retval = sp_MSforeach_worker @command1, @replacechar, @command2, @command3

  if (@retval = 0 and @postcommand is not null)
        exec(@postcommand)

  return @retval

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

sp__foreachtable 'dbcc showcontig(?)' /*** SQL 2000 only ***/
sp__foreachtable "dbcc dbreindex(?)"
sp__foreachtable 'sp_recompile ?'

Ограничения использования

Есть ещё множество возможностей для усовершенствования этой процедуры. Предлагаемый Вам сценарий не обрабатывает имена таблиц, которые можно использовать, а также команды, которые ожидают, что им будет передан object_id, а не имя таблицы - именно поэтому пример с DBCC SHOWCONTIG подходит для использования только в SQL 2000.

Примечание к работе ряда хранимых процедур "ForEach"

Ряд хранимых процедур 'ForEach' включает sp_msForEachTable (представленную выше), sp_msForEachDB - которая работает на уровне базы данных, и sp_msForEachWorker - которая является утилитой, называемой "other two".
Когда Вы выполняете команду, используя sp_msForEachTable или sp_msForEachDB, хранимая процедура использует методы динамического SQL, чтобы копировать вашу команду для каждой таблицы или объекта. Эти команды сохранены в курсоре по имени 'hcForEach'. Как только курсор будет построен, вызывается sp_msForEachWorker, которая выбирает и выполняет команды из курсора одну за другой. Если Вы знакомы с динамическим SQL, то можете рассмотреть эти SP, чтобы увидеть что они будут делать.

Дополнительная литература

sp__ForEachTable способна к более сложной работе чем простые примеры, показанные в этой статье. Поскольку она в основном построена на основе аналога SP от Микрософт (sp_msForEachTable), Вы можете читать о её расширенных возможностях в Books Online для получения дополнительной информации. Эта SP была проверена на SQL 7 и SQL 2000.

ПОЛЕЗНОСТИ

Вышел в свет очередной номер журнала SQL Server Magazine ONLINE, №5, 2001г.

Диалоги об XML
Автор: Рич Ролман.
Как реализовать рекурсивные запросы, используя заложенные в XML возможности работы с иерархиями. И о точности... [подробнее]
Советы и подсказки
Автор: Брайан Моран.
Иногда полезно прочитать в readme.txt о системе безопасности, паролях, пакете SP3... [подробнее]
Microsoft отвечает
Автор: Ричард Веймир.
На вопросы читателей отвечает один из руководителей разработчиков корпорации Microsoft...[подробнее]
Постучитесь в Windows 2000
Автор: Майкл Оти.
Приведены семь самых значительных с точки зрения SQL Server усовершенствований в работе Windows 2000... [подробнее]
Проверка кэша записи в контроллере диска
Автор: Ара Барседжьян, Линчи Ши.
Администратору баз данных необходимо знать конфигурацию кэша записи контроллера диска и следить за ней, потому что кэш записи часто оказывает огромное влияние на производительность баз данных, особенно если в базу данных интенсивно записывается информация. К сожалению, на многих больших предприятиях у администраторов баз данных зачастую нет удобного доступа к этим сведениям. Это происходит отчасти из-за того, что дисковые системы обычно относят к сфере деятельности администраторов сети, которые находятся в различных внутренних подразделениях предприятия. А отчасти потому, что набор инструментов для наблюдения за работой контроллеров зависит от производителя... [подробнее]
Советы мастеров SQL Server
Автор: Группа ГУРУ.
Эти советы и подсказки адресованы, прежде всего, тем программистам, которые пока еще не могут отнести себя к категории мастеров, но стремятся к этому...[подробнее]
30 идей применения OLAP
Автор: Владимир Некрасов.
Также как электронная таблица может отобразить любые данные с регулярной структурой, OLAP применим везде, где есть задача анализа многофакторных данных. Вообще, при наличии некоторой таблицы с данными, в которой есть хотя бы одна описательная колонка и одна колонка с цифрами OLAP-инструмент, как правило, будет эффективным средством анализа и генерации отчетов... [подробнее]
Использование сегментов в Хранилище данных Microsoft SQL Server 2000
Автор: Joy Mundy.
Эта статья рассуждает о роли сегментации данных в Хранилище. И реляционное Хранилище данных, и кубы Analysis Services поддерживают сегментацию данных. Логический принцип, положенный в основу сегментации, аналогичен принятому в обеих машинах Microsoft® SQL Server™: горизонтальная сегментация данных с помощью некоторого ключа, например - даты. В реляционной базе данных сегментация сопровождается созданием отдельных физических таблиц - например, одной таблицы для данных каждого месяца - и определением общего представления (view) таблиц элементов. Таким же образом Analysis Services в SQL Server Enterprise Edition поддерживает явную сегментацию кубов. Как в реляционной базе данных, так и в машине OLAP сложность физического хранения скрыта от пользователя-аналитика...[подробнее]
Data Center - решение для огромных Хранилищ данных
Автор: По материалам Microsoft и Compaq.
Новый проект корпорации Microsoft - операционная система Windows 2000 Datacenter Server предназначена для крупных корпоративных пользователей. Однако эта ОС не продается в виде коробки . Ее поставляют предустановленной на свой компьютер производители мощных серверов как комплексное решение Data Center . В состав комплекса может входить и СУБД. При этом поставщики предоставляют гарантии на весь программно-аппаратный комплекс и продают решение клиентам напрямую, без дилеров. На сегодняшний день в мире сертифицировано 10 поставщиков.... [подробнее]
Загадка времени
Автор: Кэлен Дилани.
Одним из самых интересных типов данных, существующих в SQL Server, является datetime. Я заметила, что в сетевых конференциях чаще всего обсуждаются вопросы, относящиеся именно к этому типу данных. Мне казалось, что я знаю о нем почти все, и я уверенно отвечала на множество вопросов в дискуссионных форумах. Но в последние несколько недель я вдруг обнаружила, что некоторые аспекты поведения datetime, которые я считала очевидными, оказались совсем не такими. В этой статье я постараюсь пролить свет на некоторые неясные моменты, связанные с этим обманчивым типом данных... [подробнее]
Как повысить производительность Web-приложений
Автор: Джеффри Бэйн.
У Web-приложений есть особенность - в них , в основном , выполняются операции выборки...[подробнее]
Проблемные типы данных
Автор: Уэйн Снайдер.
Иногда вещи ведут себя совсем не так, как ожидаешь. Особенно типы данных...[подробнее]
Иерархические структуры, не требующие сопровождения
Автор: Ицик Бен-Ган.
Немного триггеров, чуть-чуть T-SQL – вот и готова иерархическая структура, которая сама себя поддерживает... [подробнее]
Иерархии на практике
Автор: Ицик Бен-Ган.
Несколько практических советов по реализации подхода, предложенного в статье "Иерархические структуры, не требующие сопровождения"... [подробнее]
Динамическое создание строки связи с помощью OLE DB Data Link из программ на VB6
Автор: http://relib.com.
Вам необходимо, чтобы в Вашей программе на VB можно было легко создать(изменить) строку связи (ConnectionString) с БД (например SQL Server, Oracle, Jet и др.) или другим источником данных. Кроме этого желательно, чтобы для работы с базой данных, OLE DB провайдер использовался напрямую, а не через ODBC посредника... [подробнее]
Преодоление иерархий
Автор: Джонатан Люри, Шарик Мансур.
Что общего у деревьев, графов и карт? Все они - иерархические структуры...[подробнее]
Запросы с индивидуальными счетчиками
Автор: Рас Уитни.
Тонкости анализа покупательской корзины средствами OLAP... [подробнее]
Обновление данных в витринах
Автор: Роберт Пфайф.
Изменения в исходной базе данных происходят часто, а обновлять витрину лучше большими порциями... [подробнее]
Универсальные системы управления документами
Автор: Константин Пьянзин.
Универсальные системы управления документами позволяют автоматизировать деятельность предприятия... [подробнее]
Метамодель для розничной торговли
Автор: Мишель Пуле.
Проектировать базы данных совсем не так сложно, как кажется новичкам. Надо только начать...[подробнее]
Постигаем основы SQL-DMO
Автор: Рик Добсон.
Распределенные управляющие объекты SQL-DMO предназначены для решния административных задач в SQL Server... [подробнее]

Новости проекта SQL.RU

Опубликован альтернативный проекту Устава вариант "Соглашения об участии" в Russian SQL User Group (Русская группа пользователей SQL, RSUG). Все желающие приглашаются к обсуждению.

Новые технические статьи Microsoft

BUG: SQL Server XML Bulk Load Object Retains First Schema Information and Uses it For Subsequent Invocation of the Execute Method (Q298990)
FIX: SQL Server Profiler Stops Responding When Saving Output to Hard Disk That Is Out of Space (Q300388)
BUG: Identity Range Not Adjusted on Publisher When Merge Agent Runs Continuously (Q304706)
FIX: Pull Subscribers Experience Non-Convergence After Running sp_mergecleanupmetadata Against a Published Database (Q304703)
FIX: Edit/Update Fails for SQL 7.0 for Column of Type Text When CursorDriver Is Set to rdUseODBC (Q257657)
INF: How to Obtain Service Pack 3 for Microsoft SQL Server 7.0 and Microsoft Data Engine (MSDE) 1.0 (Q274799)
PRB: Unable to Register OLAP Client Files with MDAC 2.6 Installed (Q283880)
INF: How to Obtain the Latest SQL Server 2000 Service Pack (Q290211)
INF: List of Bugs Fixed in SQL Server 2000 Service Pack 1 (1 of 2) (Q290212)

ФОРУМ SQL.RU: САМЫЕ ПОПУЛЯРНЫЕ ТОПИКИ НЕДЕЛИ

Нужна ли блокировка в следующем случае?
Помощь ...
Auto shrink
Добавление нескольких значений при помощи одного INSERT'a.
Как заменить ошибки сервера (ошибки модификации данных) на свои собственные?
Есть ли смысл создавать не ключевые и не кластерные индексы в MS SQL Server 7.0?
Чем грозит совместная установка SQL-server и Terminal Server?
КАК вернуть из базы отсортированной по времени n последних записей
Special For Professional
Фотографии со второй встречи RSUG - куда кидать?
Дублирование позиций справочников ленивыми юзерами
Что-то типа вложеной таблицы

ФОРУМ SQL.RU: ВОПРОСЫ ОСТАЛИСЬ БЕЗ ОТВЕТА

Как выполнить DTS Package из Visual C ?
Как поместить изображение в базу?
Знак "_u" в конце имени всех системных сох. процедур?

#061<<  #062

Вопросы, предложения, коментарии, замечания, критику и т.п. присылайте Александру на адрес: MSSQLHelp@pisem.net

sql.ru

Описание рассылки
 Поиск на SQL.RU
Искать: 
Результатов на странице: Формат:
Тип запроса: Раздел:
МИНИФОРМА
ПОДПИСКИ




http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться Рейтингуется SpyLog

В избранное