Архив

Архив раздела ‘СУБД’

SQL Server Driver for PHP 1.1 — October 2009

27 Октябрь 2009 Нет комментариев

Майкрософт выпустил собственный драйвер для PHP, с поддержкой возможностей Native SQL Client. Доступен также его исходный код:

http://sqlsrvphp.codeplex.com/SourceControl/ListDownloadableCommits.aspx#DownloadLatest

Сам драйвер можно тут:

http://www.microsoft.com/downloads/details.aspx?FamilyID=ccdf728b-1ea0-48a8-a84a-5052214caad9&displaylang=en

VN:F [1.9.13_1145]
Rating: 0.0/10 (0 votes cast)

История одного восстановления БД(MS SQL Server 2005). Часть 2

22 Октябрь 2009 Нет комментариев

Продолжаю тему восстановления  БД, начатую тут. Закончилось всё довольно таки успешно.

Итак…. Не помог мне

ALTER DATABASE ‘DatabaseName’SET SINGLE_USER
(‘DatabaseName’, REPAIR_REBUILD)
ALTER DATABASE ‘DatabaseName’ SET MULTI_USER

не помог и

DBCC CHECKDB(‘DatabaseName’, REPAIR_ALLOW_DATA_LOSS)

Так как удалось найти битую таблицу(в ней как раз наибольшее кол-во строк), принялся её реанимировать нестандартными способами. Попробовал сделать выборку данных- выкинуло в ошибку, но успело вернуть несколько миллионов записей. Попробовал сделать выборку, с ключом desc — таким образом вытащил ещё кусок данных с конца таблицы. Кстати, select стал выбирать больше записей после того как убил все индексы кроме Primary Key. Пошаманив ещё несколько часов и не получив желаемого результата, создал клон битой таблицы без данных и с помощью:

insert into tablename(fields) select top КОЛ-ВО_СТРОК1 *  from tableoriginal order by fieldnamePK asc

insert into tablename(fields) select top КОЛ-ВО_СТРОК2 *  from tableoriginal order by fieldnamePK desc

заполнил новую таблицу данными. Старую удалил, а эту переименовал так как нужно.

Должен сказать, что таким образом удалось восстановить почти все записи.

Для остальных БД выполнил DBCC CHECKDB() , откуда узнал какие из таблиц битые. Им помогла DBCC DBReidex(‘Tablename’) для битых таблиц.

На этом всё и закончилось.

Желаю вам надёжных хардов и меньше подобных проблем!

VN:F [1.9.13_1145]
Rating: 0.0/10 (0 votes cast)

История одного восстановления БД(MS SQL Server 2005)

15 Октябрь 2009 Нет комментариев

История началась с того, что умер винт в (0). Слава Богам, удалось создать виртуальный образ с помощью RAID Reconstructor от Runtime Software. С помощью приложения Captain Nemo(от того же Runtime Software) часов за 8-10(два винта по 300 ГБ) удалось построить структуру и файловой системы опираясь на виртуальный образ созданный RAID Reconstructor»ом. Ещё за несколько часов восстановились базы, общим весом около 10 ГБ. 70% работы, казалось бы, выполнено! Особо не радуясь, принялся восстанавливать сервер.

Взял новые винты. Установил ту же систему, тот же 2005 с тем же collation. Сделал Attach DataBase для всех восстановленных баз, кроме системных. Для того, чтобы избежать лишних проблем, базы нужно размещать в те же папки что и до того как система упала. Заменил базу master на свою восстановленную(о том как перемещать системные базы, в том числе master и MSDB, читал тут http://msdn.microsoft.com/ru-ru/library/ms345408.aspx; позже выложу у себя весь текст статьи).

Выполнил несколько селектов — кажется, всё ок.

Запускаю приложение, использующие эти базы… и на одной из форм получаю красивенький exception: «SQL Server detected a logical consistency-based i/o error: incorrect pageid».

Выполняю () — не спасло.

Пробую (‘DatabaseName’) - после ряда сообщений, команда прерывается с сообщением об ошибке:

Msg 8967, Level 16, State 216, Line 1
An internal error occurred in DBCC which prevented further processing. Please contact Product Support.

Выполнение остановилось как раз на самой большой таблице в базе.

Деваться некуда, запускаю

ALTER DATABASE ‘DatabaseName’SET SINGLE_USER
DBCC CHECKDB(‘DatabaseName’, REPAIR_REBUILD)
ALTER DATABASE ‘DatabaseName’ SET MULTI_USER

REPAIR_REBUILD-попробует восстановить БД без потери данных.

Жду завершения  выполнения команды.

Если не восстановит, буду пробовать

DBCC CHECKDB(‘DatabaseName’, REPAIR_ALLOW_DATA_LOSS)

Обязательно отпишусь чем всё закончилось. Ещё не выполнял DBCC CHECKDB(‘DatabaseName’) для остальных баз.

Продолжение следует….

VN:F [1.9.13_1145]
Rating: 10.0/10 (1 vote cast)

MySQL 5.1 vs 5.4

25 Сентябрь 2009 Нет комментариев

За взялся и GOOGLE, что обнадёживает :)

Читая о новостях в разработке MySQL, наткнулся на несколько интересных статеек. Всем, кто имеет непосредственное отношение к БД, да и тем, кто раздумывает над выбором , рекомендую ознакомиться:

1. http://dev.mysql.com/doc/mysql-5.4-features/en/smp-improvements.html Scalability Improvements

2. http://dev.mysql.com/tech-resources/articles/mysql-54.html A Quick Look at MySQL 5.4; В статье приведены интересные графики сравнения веток 5.1 и 5.4 по производительности. Описаны улучшения, касающиеся подзапросов(кстати те, которых ждали от ветки 6.0, но так и не дождались :) ), JOIN и другого.

В бонус можно почитать о создании plugin для MySQL(аналог расширенных хранимых процедур в MS )

http://dev.mysql.com/doc/refman/5.1/en/plugin-api.html

Скачать MySQL 5.4 можно тут: http://dev.mysql.com/downloads/mysql/5.4.html

VN:F [1.9.13_1145]
Rating: 0.0/10 (0 votes cast)

Пользуемся триггерами(trigger)

28 Август 2009 Нет комментариев

Ранее я писал об использовании Stored Procedures, теперь пришёл черёд триггеров. В отличие от хранимых процедур, триггера я принял сразу. Очень удобная и полезная штука. Если вы хотите отследить вставку, изменение или удаление записи, то триггеры именно для этих задач. Как вы знаете, триггеры можут быть 3 типов(DML): на delete, insert и update; то есть триггер сработает на указанное действие с данными в таблице БД delete, insert или update , в зависимости от его типа. Выполняться он может до(before) или после(after) того действия(delete, insert или update) которое его вызвало. Триггеры before полезны, например,  для того, чтобы вы могли предупредить какое либо недопустимое, или несогласованное с логикой бизнесс процесса действие с данными. Он выполняется до вызвавшего его действия, а значит с помощью него можно это действие отменить, проверив данные на валидность с помощью sql statements вашего тригера. Триггеры after, выполняютя после действия, которое его инициировало и полезны, например для логирования изменений данных.

Читать далее…

VN:F [1.9.13_1145]
Rating: 9.5/10 (2 votes cast)

Где взять MS SQL Server 2008

16 Август 2009 Нет комментариев

Если вы решили начать работу или обучение с , то вы можете бесплатно тут, на официальном сайте http://www.microsoft.com/express/sql/download/. Бесплатно предоставляется версия 2008 Express. Для скачивания также доступна  2008 Enterprise 180-day evaluation по адресу http://www.microsoft.com/sqlserver/2008/ru/ru/trial-software.aspx с пакетом обновлений Service Pack 1 для 2008

VN:F [1.9.13_1145]
Rating: 10.0/10 (1 vote cast)

Оптимизиция по индексам. Советы. Часть 1.

16 Август 2009 Нет комментариев

Этой записью начинаю цикл статей по оптимизации БД с помощью индексов. Если вы хотите найти точный ответ на вопрос «какие индексы я должен создать чтобы производительность была оптимальной?», то не ищите его(ответ) ни тут, ни где-либо ещё. Нет чёткого правила где и какие индексы нужно создавать. Есть лишь советы рекомендательного характера, а вариантов построения индексов для одной базы данных очень много. Где и какие индексы строить зависит от назначения таблиц, частоты запросов на выборку и частоты изменения этой таблицы, от частоты участия в выборке оперделённой группы полей и т.д. и т.п.

Советы:

Читать далее…

VN:F [1.9.13_1145]
Rating: 10.0/10 (1 vote cast)

Имя базы данных в sql-командах MySqlDataAdapter

15 Август 2009 Нет комментариев

Логично оставить имя базы данных, с которой работает программа, переменным, задаваемым опционально.

Но если Вы используете .NET connector и типизированный DataSet, то столкнетесь с неприятным фактом…
Читать далее…

VN:F [1.9.13_1145]
Rating: 0.0/10 (0 votes cast)

Узнать версию SQL Server

12 Август 2009 Нет комментариев

Чтобы узнать версию экземпляра , достаточно всего лишь выполнить запрос:

select

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

Microsoft (RTM) — 10.0.1600.22 (X64)   Jul  9 2008 14:17:44   Copyright (c) 1988-2008 Microsoft Corporation  Enterprise Edition (64-bit) on Windows NT 6.0 <X64> (Build 6001: Service Pack 1)

VN:F [1.9.13_1145]
Rating: 10.0/10 (2 votes cast)

Из NAMED INSTANCE сделать default

Сегодня обнаружил, что невозможно из сделать default instance, например, чтобы вместо

Servername\instance_name, подключение шло просто через servername. Необходимо будет переустановить новый instance, вернее добавить его при установке  . Запускаем установку заново и добавляем новый Instance, который делаем default’ым.  Между собой эти два экземпляра сервера уживутся нормально. А перенести все БД, jobs и прочее можно с помощью стандартных средств импорта/ экспорта.

VN:F [1.9.13_1145]
Rating: 0.0/10 (0 votes cast)