<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Компания "Венец"</title>
	<atom:link href="http://www.venec.com.ua/index.php/feed" rel="self" type="application/rss+xml" />
	<link>http://www.venec.com.ua</link>
	<description>компьютеры и все что с ними связано</description>
	<lastBuildDate>Wed, 03 Feb 2010 05:35:39 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Выгружаем в EXCEL с помощью ADO</title>
		<link>http://www.venec.com.ua/index.php/vygruzhaem-v-excel-s-pomoshhyu-ado</link>
		<comments>http://www.venec.com.ua/index.php/vygruzhaem-v-excel-s-pomoshhyu-ado#comments</comments>
		<pubDate>Wed, 03 Feb 2010 05:27:02 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[1C Программирование]]></category>
		<category><![CDATA[1С]]></category>
		<category><![CDATA[Excel]]></category>

		<guid isPermaLink="false">http://www.venec.com.ua/?p=192</guid>
		<description><![CDATA[ Наверное уже многие знают что с помощью технологии ADO можно быстро читать большие объемы информации из книг excel. Но ведь с помощью данной технологии можно так же легко создавать и заполнять файлы excel. Неверите ? Смотрите &#8230;
Скачать ПримерADO.epf (6.91 kb)
Итак, постановка задачи: Создать с помощью механизма ADO файл excel и выгрузить в него из [...]]]></description>
			<content:encoded><![CDATA[<!---checkcontext_start--><sape_index><div style="text-align: justify;"> <strong>Наверное уже многие знают что с помощью технологии ADO можно быстро читать большие объемы информации из книг excel. Но ведь с помощью данной технологии можно так же легко создавать и заполнять файлы excel.<br /> Неверите ? Смотрите &#8230;</strong></div>
<p><a href="http://infostart.ru/public/download.php?file=65049" title="Скачать ПримерADO.epf">Скачать ПримерADO.epf (6.91 kb)<br /></a></p>
<p style="text-align: justify;">Итак, постановка задачи: Создать с помощью механизма ADO файл excel и выгрузить в него из справочника номенклатура код и наименование.</p>
<p><span class="Code"></p>
<pre>&nbsp;&nbsp;&nbsp; ИмяФайлаЭксель = &quot;D:\Export.xls&quot;; // Имя создаваемого файла</pre>
<pre>&nbsp;&nbsp;&nbsp; </pre>
<pre>&nbsp;&nbsp;&nbsp; // Собираем строку подключения</pre>
<pre>&nbsp;&nbsp;&nbsp; СтрокаПодключения = &quot;</pre>
<pre>&nbsp;&nbsp;&nbsp; |Provider=Microsoft.Jet.OLEDB.4.0;</pre>
<pre>&nbsp;&nbsp;&nbsp; |Data Source=&quot;+ИмяФайлаЭксель+&quot;;</pre>
<pre>&nbsp;&nbsp;&nbsp; |Extended Properties=&quot;&quot;Excel 8.0;HDR=No;&quot;&quot;;&quot;;</pre>
<pre>&nbsp;&nbsp;&nbsp; </pre>
<pre>&nbsp;&nbsp;&nbsp; // Создаем объект ADOX.Catalog</pre>
<pre>&nbsp;&nbsp;&nbsp; Catalog = Новый COMОбъект(&quot;ADOX.Catalog&quot;);</pre>
<pre>&nbsp;&nbsp;&nbsp; Catalog.ActiveConnection = СтрокаПодключения;</pre>
<pre>&nbsp;&nbsp;&nbsp; </pre>
<pre>&nbsp;&nbsp;&nbsp; // Создаем таблицу и добавляем в неё два столбца</pre>
<pre>&nbsp;&nbsp;&nbsp; Table = Новый COMОбъект(&quot;ADOX.Table&quot;);</pre>
<pre>&nbsp;&nbsp;&nbsp; Table.Name = &quot;Table&quot;;</pre>
<pre>&nbsp;&nbsp;&nbsp; </pre>
<pre>&nbsp;&nbsp;&nbsp; Table.Columns.Append(&quot;Code&quot;);</pre>
<pre>&nbsp;&nbsp;&nbsp; Table.Columns.Append(&quot;Description&quot;);</pre>
<pre>&nbsp;&nbsp;&nbsp; </pre>
<pre>&nbsp;&nbsp;&nbsp; // Присоединяем таблицу</pre>
<pre>&nbsp;&nbsp;&nbsp; Catalog.Tables.Append(Table);</pre>
<pre>&nbsp;&nbsp;&nbsp; </pre>
<pre>&nbsp;&nbsp;&nbsp; Table = Неопределено;</pre>
<pre>&nbsp;&nbsp;&nbsp; Catalog = Неопределено;</pre>
<pre>&nbsp;&nbsp;&nbsp; // Создаем соединение</pre>
<pre>&nbsp;&nbsp;&nbsp; Connection = Новый COMОбъект(&quot;ADODB.Connection&quot;);&nbsp;&nbsp;&nbsp; </pre>
<pre>&nbsp;&nbsp;&nbsp; Connection.Open(СтрокаПодключения);</pre>
<pre>&nbsp;&nbsp;&nbsp; </pre>
<pre>&nbsp;&nbsp;&nbsp; Command = Новый COMОбъект(&quot;ADODB.Command&quot;);</pre>
<pre>&nbsp;&nbsp;&nbsp; Command.ActiveConnection = Connection;</pre>
<pre>&nbsp;&nbsp;&nbsp; Command.CommandType = 1;</pre>
<pre>&nbsp;&nbsp;&nbsp;     // Получаем номенклатуру для выгрузки    Запрос = Новый Запрос(&quot;</pre>
<pre>&nbsp;&nbsp;&nbsp; |ВЫБРАТЬ</pre>
<pre>&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; Номенклатура.Код,</pre>
<pre>&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; Номенклатура.Наименование</pre>
<pre>&nbsp;&nbsp;&nbsp; |ИЗ</pre>
<pre>&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; Справочник.Номенклатура КАК Номенклатура&quot;);</pre>
<pre>&nbsp;&nbsp;&nbsp; Результат = Запрос.Выполнить();</pre>
<pre>&nbsp;&nbsp;&nbsp; Выборка = Результат.Выбрать();</pre>
<pre>&nbsp;&nbsp;&nbsp; </pre>
<pre>&nbsp;&nbsp;&nbsp; // Заполняем таблицу данными выборки</pre>
<pre>&nbsp;&nbsp;&nbsp; Пока Выборка.Следующий() Цикл</pre>
<pre>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Command.CommandText = &quot;</pre>
<pre>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; |INSERT INTO [Table] VALUES ('&quot;+Выборка.Код+&quot;','&quot;+Выборка.Наименование+&quot;')&quot;;</pre>
<pre>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Command.Execute();</pre>
<pre>&nbsp;&nbsp;&nbsp; КонецЦикла; </pre>
<pre>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; </pre>
<pre>&nbsp;&nbsp;&nbsp; // Закрываем соединение</pre>
<pre>&nbsp;&nbsp;&nbsp; Command = Неопределено;</pre>
<pre>&nbsp;&nbsp;&nbsp; Connection.Close();</pre>
<pre>&nbsp;&nbsp;&nbsp; Connection = Неопределено;</pre>
<p></span></p>
<p style="text-align: justify;">Все, готово !</p>
<p style="text-align: justify;">Плюсы данного способа формирования файла excel:</p>
<p style="text-align: justify;">- Большая скорость</p>
<p style="text-align: justify;">- Не требуется запуск самого процесса excel.exe, как это происходит в случае использования OLE-сервера excel.application, а следовательно нет необходимости отслеживать и перехватывать ошибки. Те кто использовал OLE-cоединение &#8211; тот поймет о чем я говорю, мало радости когда в случае программной или пользовательской ошибки процесс excel остается висеть в памяти.</p>
<p style="text-align: justify;">- Не требуется самого приложения EXCEL, достаточно что бы на компьютере был установлен OLEDB провайдер Microsoft.Jet.OLEDB.4.0</p>
<p style="text-align: justify;">Минусы тоже имеются:</p>
<p style="text-align: justify;">- Нельзя красиво оформить ячейки &#8211; шрифт, рамки и т.д.</p>
<p style="text-align: justify;">P.S. Возможен &quot;комбинированный&quot; способ: с помощбю ADO формируется файл, а затем с помощью OLE &quot;наводится марафет&quot;.</p>
<p>Источник: <a href="javascript:void(0);/*1265181829746*/">http://infostart.ru/public/65045/</a></p>
</sape_index><!--c26057899413--><!---checkcontext_stop-->]]></content:encoded>
			<wfw:commentRss>http://www.venec.com.ua/index.php/vygruzhaem-v-excel-s-pomoshhyu-ado/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ведение журнала и восстановление в SQL Server</title>
		<link>http://www.venec.com.ua/index.php/sql-server-vedenie-zhurnala-i-vosstanovlenie-v-sql-server</link>
		<comments>http://www.venec.com.ua/index.php/sql-server-vedenie-zhurnala-i-vosstanovlenie-v-sql-server#comments</comments>
		<pubDate>Tue, 02 Feb 2010 06:38:14 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[1C Программирование]]></category>
		<category><![CDATA[MS SQL]]></category>

		<guid isPermaLink="false">http://www.venec.com.ua/?p=186</guid>
		<description><![CDATA[ Одними из самых непонятных составных частей SQL Server являются механизмы ведения журнала и восстановления. Складывается впечатление, что сам факт существования журнала транзакций и то, что неправильное управление этим журналом может приводить к неполадкам, ставит в тупик многих &#171;невольных администраторов баз данных&#187; (DBA). Почему журнал транзакций может неограниченно увеличиваться в размере? Почему в некоторых ситуациях [...]]]></description>
			<content:encoded><![CDATA[<!---checkcontext_start--><sape_index><div style="text-align: justify;"><!-- статья --> Одними из самых непонятных составных частей SQL Server являются механизмы ведения журнала и восстановления. Складывается впечатление, что сам факт существования журнала транзакций и то, что неправильное управление этим журналом может приводить к неполадкам, ставит в тупик многих &laquo;невольных администраторов баз данных&raquo; (DBA). Почему журнал транзакций может неограниченно увеличиваться в размере? Почему в некоторых ситуациях требуется слишком много времени для того, чтобы база данных стала доступной после сбоя системы? Почему невозможно полностью отключить ведение журнала? Почему не удается надлежащим образом восстановить базу данных? Что из себя представляет журнал транзакций, и зачем он существует? </div>
<p style="text-align: justify;">Все эти вопросы я постоянно вижу на форумах SQL Server, поэтому в данной статье я собираюсь предоставить обзор системы ведения журнала и восстановления и объяснить, для чего существует эта неотъемлемая часть модуля хранилищ SQL Server. Будет рассмотрена архитектура журнала транзакции и то, каким образом три модели восстановления, доступные для базы данных, могут изменить поведение журнала транзакций и сам процесс ведения журнала. Заодно я предоставляю некоторые ссылки на ресурсы, описывающие оптимальные методики упрвления журналом транзакций.</p>
<div style="text-align: justify;"> </div>
<h3 style="text-align: justify;">Что из себя представляет ведение журнала?</h3>
<div style="text-align: justify;"> </div>
<p style="text-align: justify;">Ведение журнала и процедура восстановления присущи не только SQL Server&nbsp;&mdash; во все коммерческие системы управления реляционными базами данных (RDBMS) должны входить эти средства для обеспечения поддержки различных свойств ACID транзакций. Сокращение ACID обозначает Atomicity (атомарность), Consistency (согласованность), Isolation (изоляция) и Durability (устойчивость), являющиеся фундаментальными свойствами систем обработки транзакций (таких как RDBMS). Подробнее об этом можно прочитать в <a href="http://msdn.microsoft.com/library/aa719484">разделе &laquo;Свойства ACID&raquo; библиотеки MSDN</a>.</p>
<div style="text-align: justify;"> </div>
<p style="text-align: justify;">Операции, выполняемые в RDBMS, регистрируются (или записываются) на физическом и логическом уровне в терминах событий, происходящих в структурах хранилища базы данных. Для каждого изменения в структурах хранилища имеется отдельная запись журнала, описывающая изменяемую структуру и собственно изменение. Это выполняется способом, позволяющим повторить изменение или, при необходимости, отменить изменение и вернуть все в исходное состояние. Записи журнала хранятся в специальном файле, который называется журналом транзакций&nbsp;&mdash; далее это будет описано подробнее, а пока его можно представлять в виде файла с последовательным доступом.</p>
<div style="text-align: justify;"> </div>
<p style="text-align: justify;">Набор из одного или нескольких изменений можно сгруппировать (и, фактически, так всегда и делается) в транзакцию, обеспечивающую базовую единицу процесса внесения изменений (атомарность) в базу данных, когда речь идет о пользователях, разработчиках приложений и DBA. Транзакция завершается успешно (фиксация) или завершается аварийно или отменяется (откат). В первом случае гарантируется, что операции, формирующие транзакцию, отражены в базе данных. Во втором случае гарантируется, что операции не будут отражены в базе данных.</p>
<div style="text-align: justify;"> </div>
<p style="text-align: justify;">Транзакции в SQL Server бывают явными и неявными. При явной транзакции пользователь или приложение выдает оператор BEGIN TRANSACTION T-SQL, оповещающий о запуске данным сеансом группы связанных изменений. Явная транзакция успешно завершается, когда выдается оператор COMMIT TRANSACTION, оповещающий об успешном выполнении группы изменений. Если вместо него выдается оператор ROLLBACK TRANSACTION, все изменения, выполненные в данном сеансе с момента выдачи оператора BEGIN TRANSACTION, обращаются (откатываются), и транзакция отменяется. Откат транзакции может быть принудительно вызван внешним событием, например, нехваткой для базы данных свободного места на диске или выходом из строя сервера. Эти случаи будут рассмотрены далее.</p>
<div style="text-align: justify;"> </div>
<p style="text-align: justify;">При неявной транзакции пользователь или приложение не выдает явно оператора BEGIN TRANSACTION до выдачи оператора T-SQL. Однако, поскольку все изменения в базе данных должны быть оформлены в транзакцию, модуль хранилищ скрытым образом автоматически запускает транзакцию. По завершении выполнения оператора T-SQL модуль хранилищ автоматически фиксирует транзакцию, запущенную для создания оболочки для пользовательского оператора.</p>
<div style="text-align: justify;"> </div>
<p style="text-align: justify;">Вам может показаться, что в этом нет необходимости, поскольку один оператор T-SQL не может генерировать большое число изменений в структурах хранилища базы данных, но рассмотрите, например, оператор ALTER INDEX REBUILD. Хотя этот оператор не может содержаться в явной транзакции, он может генерировать огромное число изменений в базе данных. Поэтому необходим механизм, обеспечивающий в случае неправильного развития событий (например, если отменяется выполнение оператора) надлежащее выполнение обращения изменений.</p>
<div style="text-align: justify;"> </div>
<p style="text-align: justify;">В качестве примера рассмотрим, что происходит, если в неявной транзакции обновляется одна строка таблицы. Представим себе простую неупорядоченную таблицу, содержащую столбец c1 с целочисленными данными и столбец c2 с символьными данными. В таблице имеется 10 000 строк, и пользователь отправляет запрос на обновление следующим образом.</p>
<div style="text-align: justify;">
<pre>UPDATE SimpleTable SET c1 = 10 WHERE c2 LIKE '%Paul%';</pre>
</div>
<p style="text-align: justify;">Выполняются следующие операции.</p>
<div style="text-align: justify;"> </div>
<ul style="text-align: justify;">
<li>Страницы данных из SimpleTable считываются с диска в память (буферный пул), поэтому можно выполнять поиск соответствующих строк. Оказывается, что на трех страницах данных имеется пять строк, соответствующих предикату предложения WHERE.</li>
<li>Модуль хранилищ автоматически запускает неявную транзакцию.</li>
<li>Эти три страницы и пять строк данных блокируются для выполнения обновлений.</li>
<li>Изменения вносятся в пять записей данных на трех страницах данных, находящихся в памяти.</li>
<li>Изменения записываются также в записи журнала транзакций на диске.</li>
<li>Модуль хранилищ автоматически фиксирует эту неявную транзакцию.</li>
</ul>
<div style="text-align: justify;"> </div>
<p style="text-align: justify;">Обратите внимание, что я не отметил шага, на котором три обновленных страницы данных записываются обратно на диск. Это связано с тем, что в такой операции нет необходимости; до тех пор, пока записи журнала, описывающие изменения, присутствуют в журнале транзакций на диске, данные изменения защищены. Если после внесения изменений эти страницы потребуется прочитать или вновь изменить, самая последнияя актуальная копия страницы уже находится в памяти, а не на диске (пока). Страницы данных будут записаны на диск при следующей операции контрольной точки или если память, занимаемая ими в буферном пуле, потребуется для изображения другой страницы.</p>
<div style="text-align: justify;"> </div>
<p style="text-align: justify;">Контрольные точки существуют по двум причинам&nbsp;&mdash; для группирования операций ввода/вывода с целью повышения производительности и для сокращения вермени, требуемого для восстановления после сбоя. В терминах производительности, если бы страница данных вытеснялясь на диск при каждом ее обновлении, число операций ввода/вывода в активно используемой системе могло бы превысить возможности подсистемы ввода/вывода. Разумнее с некоторой периодичностью записывать на диск &laquo;грязные&raquo; страницы (те, которые были изменены с момента их считывания с диска), чем записывать на диск страницы незамедлительно после внесения в них изменений. Чуть ниже я рассмотрю контрольные точки с точки зрения восстановления.</p>
<div style="text-align: justify;"> </div>
<p style="text-align: justify;">Одно из распространенных заблуждений относительно контрольных точек состоит в том, что они выполняют запись измененных страниц из зафиксированных транзакций. Это не так&nbsp;&mdash; контрольная точка всегда записывает на диск все &laquo;грязные&raquo; страницы, независимо от того, зафиксирована или нет транзакция, изменившая страницу.</p>
<div style="text-align: justify;"> </div>
<p style="text-align: justify;">Ведение журнала с упреждающей записью является механизмом, в котором записи журнала, описывающие изменения, записываются на диск до записи на диск самих изменений. Это обеспечивает часть свойств ACID, отвечающую за устойчивость. До тех пор, пока записи журнала, описывающие изменения, находятся на диске, записи журнала (а, следовательно, сами изменения) в случае сбоя могут быть восстановлены, и результаты транзакции не будут утрачены.</p>
<div style="text-align: justify;"> </div>
<h3 style="text-align: justify;">В чем заключается восстановление?</h3>
<div style="text-align: justify;"> </div>
<p style="text-align: justify;">Ведение журнала предусмотрено для поддержки множества операций в SQL Server. Это обеспечивает, в случае возникновения сбоя, правильность отражения зафиксированной транзакции в базе данных после сбоя. Этим гарантируется, что откат незафиксированной транзакции будет выполнен надлежащим образом, и она не будет отражена в базе данных после сбоя. Этим же обеспечивается возможность отмены незавершенной транзакции и отката всех ее операций. Ведение журнала позволяет проводить резервное копирование журнала транзакций таким образом, чтобы было возможно восстановление базы данных и воспроизведение резервных копий журнала транзакций с целью возврата базы данных в состояние, соответствующее конкретному моменту времени и с соблюдением транзакционной согласованности. Кроме этого, обеспечивается поддержка функций, основанных на чтении журнала транзакций, таких как репликация, зеркальное отображение базы данных и сбор данных изменений.</p>
<div style="text-align: justify;"> </div>
<p style="text-align: justify;">Большинство таких применений журнала влечет использование механизма, называемого восстановлением. Восстановление представляет собой процесс воспроизведения в базе данных изменений, описанных в записях журнала, или возврат базы данных к состоянию до этих изменений. Воспроизведение записей журнала называется фазой REDO (или наката) восстановления. Обращение изменений записей журнала называется фазой UNDO (или отката) восстановления. Другими словами, процедура восстановления обеспечиваете для транзакции и всех соответствующих записей журнала либо полное воспроизведение, либо полную отмену.</p>
<div style="text-align: justify;"> </div>
<p style="text-align: justify;">Восстановление принимает простую форму в случае отмены отдельной транзакции, когда она откатывается, и база данных не испытывает никаких последствий. Более сложную форму имеет восстановление в случае сбоя, когда выходит из строя SQL Server (по какой бы то ни было причине), и журнал транзакций необходимо восстановить с целью возврата базы данных в состояние, согласованное с точки зрения транзакций. Это означает, что для всех транзакций, зафиксированных на момент сбоя, необходимо выполнить накат, чтобы результаты этих транзакций были отражены в базе данных. А для всех незавершенных на момент сбоя транзакций необходимо выполнить откат, чтобы результаты этих транзакций не были записаны в базу данных.</p>
<div style="text-align: justify;"> </div>
<p style="text-align: justify;">Это обусловлено тем, что в SQL Server не существует средств продолжения транзакции после сбоя. Таким образом, если бы для результатов частично завершенной транзакции не был выполнен откат, база данных оказалась бы в несогласованном состоянии (возможно, даже с повреждениями структуры, в зависимости от операции, выполнявшейся транзакцией в момент сбоя).</p>
<div style="text-align: justify;"> </div>
<p style="text-align: justify;">Каким образом процедура восстановления узнает, что следует делать? Все процедуры восстановления зависят от того факта, что каждая запись журнала помечена регистрационным номером транзакции в журнале (LSN). Регистрационный номер транзакции в журнале является возрастающим номером из трех частей, однозначно определяющим положение записи журнала в журнале транзакций. Все записи журнала в транзакции хранятся в последовательном порядке в журнале транзакций и содержат код транзакции и LSN предыдущей записи транзакции. Другими словами, каждая операция, зарегистрированная в качестве части транзакции, имеет обратную &laquo;ссылку&raquo; на операцию, непосредственно ей предшествующую.</p>
<div style="text-align: justify;"> </div>
<p style="text-align: justify;">В простом случае отката одной транзакции механизм восстановления может быстро и без труда проследовать по цепочке записанных в журнал операций, от самой последней до первой операции, и обратить результаты всех операций в обратном их выполнению порядке. Страницы базы данных, подвергшиеся воздействию транзакции, находятся либо все еще в буферном пуле, либо уже на диске. В любом случае гарантируется, что доступное изображение страницы несет на себе последствия выполнения транзакции, и их необходимо отменить.</p>
<div style="text-align: justify;"> </div>
<p style="text-align: justify;">Во время восстановления после сбоя механизм более сложен. Тот факт, что страницы базы данных не записываются на диск при фиксации транзакции, означает, что нет гарантии того, что набор страниц базы данных на диске точно отражает набор изменений, описанных в журнале транзакций&nbsp;&mdash; как для зафиксированных, так и для незафиксированных транзакций. Однако, имеется последний кусочек паззла, о котором я еще не упоминал&nbsp;&mdash; в заголовке страницы всех страниц базы данных имеется поле (96-байтная часть 8192-байтной страницы, содержащая метаданные с информацией о странице), содержащее LSN последней записи журнала, оказавшей влияние на страницу. Это дает возможность системе восстановления принять решение относительно конкретной записи журнала, которую необходимо восстановить.</p>
<div style="text-align: justify;"> </div>
<ul style="text-align: justify;">
<li>Для записи журнала из зафиксированной транзакции, в которой страница базы данных имеет LSN не меньший, чем LSN записи журнала, не требуется никаких действий. Результаты воздействия записи журнала уже записаны в страницу на диске.</li>
<li>Для записи журнала из зафиксированной транзакции, в которой страница базы данных имеет LSN, меньший, чем LSN записи журнала, необходимо выполнить накат записи журнала, чтобы обеспечить сохранение результатов транзакции.</li>
<li>Для записи журнала из незафиксированной транзакции, в которой страница базы данных имеет LSN, не меньший, чем LSN записи журнала, необходимо выполнить откат записи журнала, чтобы результаты транзакции не были сохранены.</li>
<li>Для записи журнала из незафиксированной транзакции, в которой страница базы данных имеет LSN, меньший, чем LSN записи журнала, не требуется никаких действий. Результаты воздействия записи журнала не были сохранены на странице на диске, и в таком случае ничего делать не требуется.</li>
</ul>
<div style="text-align: justify;"> </div>
<p style="text-align: justify;">Механизм восстановления после сбоя прочитывает журнал транзакций и обеспечивает сохранение всех результатов зафиксированных транзакций в базе данных, а результаты всех не зафиксированных транзакций не сохраняются в базе данных&nbsp;&mdash; выполняются фазы REDO и UNDO, соответственно. По завершении восстановления после сбоя база данных становится согласованной с точки зрения транзакций и доступной для использования.</p>
<div style="text-align: justify;"> </div>
<p style="text-align: justify;">Ранее упоминалось, что одним из применений операции контрольной точки является сокращение количества времени, занимаемого процедурой восстановления после сбоя. Периодическое сбрасывание на диск всех &laquo;грязных&raquo; страниц сокращает число страниц, измененных зафиксированными транзакциями, но изображений которых еще нет на диске. Это, в свою очередь, сокращает число страниц, к которым требуется применять восстановление REDO во время восстановления после сбоя.</p>
<div style="text-align: justify;"> </div>
<h3 style="text-align: justify;">Журнал транзакций</h3>
<div style="text-align: justify;"> </div>
<p style="text-align: justify;">Восстановление после сбоя возможно только в том случае, если не пострадал журнал транзакций. На деле журнал транзакций является самой важной частью базы данных&nbsp;&mdash; это единственное место, в котором в случае сбоя гарантируется наличие описаний всех изменений базы данных.</p>
<div style="text-align: justify;"> </div>
<p style="text-align: justify;">Если журнал транзакций отсутствует или поврежден после сбоя, тогда восстановление после сбоя выполнить невозможно, в результате чего база данных становится сомнительной. В этом случае базу данных необходимо восстанавливать из резервных копий или использовать для восстановления менее желательные режимы, такие как аварийное восстановление. (Эти процедуры выходят за рамки данной статьи, но будут глубоко обсуждаться в последующих статьях в течение этого года.)</p>
<div style="text-align: justify;"> </div>
<p style="text-align: justify;">Журнал транзакций представляет собой специальный файл, необходимой любой базе данных для надлежащего функционирования. В нем содержатся записи журнала, создаваемые в процессе ведения журнала, и журнал используется для повторного чтения этих записей во время восстановления (или любого другого, упоминавшегося ранее, использования процедуры ведения журнала). Так же, как пространство, занятое собственно записями журнала, транзакция в журнале транзакций резервирует также пространство для любых потенциальных записей журнала, которые потребовались бы в случае необходимости отменить транзакцию и выполнить откат. Этим объясняется поведение, которое можно наблюдать, когда, например, для транзакции, обновляющей 50 МБ данных в базе данных, на деле в журнале транзакций может потребоваться пространство в 100 МБ.</p>
<div style="text-align: justify;"> </div>
<p style="text-align: justify;">Когда создается новая база данных, журнал транзакций, по существу, пуст. По мере возникновения транзакций записи журнала последовательно записываются в журнал транзакций, из чего следует, что создание нескольких файлов журнала транзакций не дает никакого выигрыша в производительности, что является широко распространенным заблуждением. Журнал транзакций будет использовать все файлы журнала по очереди.</p>
<div style="text-align: justify;"> </div>
<p style="text-align: justify;">В журнале транзакций могут перемежаться записи журнала для параллельных транзакций. Следует помнить о том, что записи журнала для одной транзакции связаны посредством своих LSN, поэтому нет необходимости все записи журнала, относящиеся к одной транзакции, группировать в одном журнале. Практически, номера LSN можно представлять себе как метку времени.</p>
<div style="text-align: justify;"> </div>
<p style="text-align: justify;">Физическая архитектура журнала транзакций показана на <strong>рис. 1</strong>. Внутренне он разбит на небольшие части, называемые виртуальными файлами журналов (или файлами VLF). Это просто вспомогательные средства для облегчения внутреннего управления журналом транзакций. Когда файл VLF заполняется, процедура ведения журнала автоматически переходит к следующему VLF в журнале транзакций. Можно было бы подумать, что, в конце концов, журнал транзакций столкнется с нехваткой места, но именно в этом вопросе журнал транзакций решительно отличается от файлов данных.</p>
<div style="text-align: justify;"> </div>
<p style="text-align: justify;"><img width="480" height="116" border="0" alt="*" src="http://www.oszone.net/user_img/090227200817/dd392031.fig01a%28ru-ru%29.gif" /></p>
<div style="text-align: justify;"> </div>
<p style="text-align: justify;">Рис. 1 <strong>Физическая архитектура журнала транзакций </strong></p>
<div style="text-align: justify;"> </div>
<p style="text-align: justify;">В действительности журнал транзакций является кольцевым файлом, поскольку записи журнала в начале журнала транзакций отбрасываются (или очищаются). Затем, когда процедура ведения жунала достигает конца журнала транзакций, она снова заворачивает в начало и начинает писать поверх того, что было там ранее.</p>
<div style="text-align: justify;"> </div>
<p style="text-align: justify;">Итак, как осуществляется отбрасывание записей журнала, позволяющее занимаемое ими пространство использовать повторно? Запись журнала транзакций становится не нужной, если имеют место следующие факты.</p>
<div style="text-align: justify;"> </div>
<ul style="text-align: justify;">
<li>Транзакция, частью которой является эта запись, зафиксирована.</li>
<li>Все страницы базы данных, которые она изменила, записаны на диск процедурой контрольной точки.</li>
<li>Данная запись журнала не требуется для резервного копирования (полного, выборочного или журнала).</li>
<li>Эта запись журнала не требуется никакому компоненту, читающему журнал (например, средству зеркального отображения базы данных или репликации).</li>
</ul>
<div style="text-align: justify;"> </div>
<p style="text-align: justify;">Запись журнала, потребность в которой сохраняется, называется активной, и файл VLF, имеющий по крайней мере одну активную запись журнала, также называется активным. Время от времени журнал транзакций проверяется с целью выяснения, являются ли активными все записи журнала в заполненном VLF, или нет; если они все не активны, VLF помечается как отброшенный (что означает, что VLF можно перезаписывать, когда исчерпается свободное место в журнале транзакций). Когда VLF отбрасывается, он никак не перезаписывается и не опустошается, а просто помечается как отброшенный и впоследствии может быть использован повторно.</p>
<div style="text-align: justify;"> </div>
<p style="text-align: justify;">Этот процесс называется усечением журнала, что не следует путать с реальным сокращением размера журнала транзакций. При усечении журнала никогда не изменяется физический размер журнала транзакций, а изменяется только состояние частей журнала транзакций на активное или неактивное. На <strong>рис. 2</strong> показан журнал транзакций из <strong>рис. 1</strong> после проведения усечения.</p>
<div style="text-align: justify;"> </div>
<p style="text-align: justify;"><img width="480" height="115" border="0" alt="*" src="http://www.oszone.net/user_img/090227200817/dd392031.fig02a%28ru-ru%29.gif" /></p>
<div style="text-align: justify;"> </div>
<p style="text-align: justify;">Рис. 2 <strong>Журнал транзакций после усечения журнала </strong></p>
<div style="text-align: justify;"> </div>
<p style="text-align: justify;">Активные VLF образуют логический журнал, являющийся частью журнала транзакций, содержащей активные записи журналов. Сама база данных знает, с какого места процедура восстановления после сбоя должна начинать чтение записей журнала в активной части журнала&nbsp;&mdash; с начала самой старой активной транзакции в журнале, MinLSN (она хранится в загрузочной странице базы данных).</p>
<div style="text-align: justify;"> </div>
<p style="text-align: justify;">Процедуре восстановления после сбоя не известно, в каком месте следует прекратить чтение записей журнала, поэтому она продолжает до тех пор, пока не достигнет пустого раздела журнала транзакций (если журнал транзакций еще не исчерпал свое свободное пространство) или записи журнала, чьи биты четности не соответствуют последовательности из предыдущей записи журнала.</p>
<div style="text-align: justify;"> </div>
<p style="text-align: justify;">По мере того, как файлы VLF становятся отброшенными, а новые файлы&nbsp;&mdash; активными, логический журнал перемещается в физическом файле журнала транзакций и, в конце концов, вынужден снова завернуть в начало, как показано на <strong>рис. 3</strong>.</p>
<div style="text-align: justify;"> </div>
<p style="text-align: justify;"><img width="480" height="181" border="0" alt="*" src="http://www.oszone.net/user_img/090227200817/dd392031.fig03a%28ru-ru%29.gif" /></p>
<div style="text-align: justify;"> </div>
<p style="text-align: justify;">Рис. 3 <strong>Циклический характер журнала транзакций </strong></p>
<div style="text-align: justify;"> </div>
<p style="text-align: justify;">Проверка того, возможно ли усечение журнала при каком либо из следующих условий.</p>
<div style="text-align: justify;"> </div>
<ul style="text-align: justify;">
<li>При возникновении контрольной точки в модели восстановления SIMPLE или в других моделях восстановления, если никогда не выполнялось полное резервное копирование. (При этом предполагается, что база данных, после вывода из модели SIMPLE, остается в модели восстановления псевдо-SIMPLE до тех пор, пока не будет выполнено полное резервное копирование базы данных.)</li>
<li>При завершении резервного копирования журнала.</li>
</ul>
<div style="text-align: justify;"> </div>
<p style="text-align: justify;">Следует помнить, что усечение журнала может оказаться невозможным, поскольку существует много причин, по которым запись журнала должна оставаться активной. Если усечение журнала невозможно, файлы VLF не могут быть отброшены, и, в конечном счете, журнал должен увеличить свой размер (или должен быть добавлен еще один журнал транзакций). Чрезмерное разрастание журнала транзакций может привести к проблемам с производительностью вследствие эффекта, известного под названием фрагментация VLF. Устранение фрагментации VLF иногда может привести к впечатляющему повышению производительности действий, связанных с журналом.</p>
<div style="text-align: justify;"> </div>
<p style="text-align: justify;">Дополнительные сведения по этой теме см. в записи блога Кимберли Трипп (Kimberly Tripp) &laquo;<a href="http://sqlskills.com/blogs/kimberly/post/8-steps-to-better-transaction-log-throughput.aspx">8 Steps to Better Transaction Log Throughput</a>&raquo; (8 шагов к повышению пропускной способности журнала транзакций). Кимберли обсуждает оптимальные методики, относящиеся к планированию объема журнала транзакций, усовершенствованию управления и повышению производительности&nbsp;&mdash; эту запись определенно стоит прочитать!</p>
<div style="text-align: justify;"> </div>
<p style="text-align: justify;">Усечению журнала могут воспрепятствовать две широко известные проблемы.</p>
<div style="text-align: justify;"> </div>
<ul style="text-align: justify;">
<li>Длительно выполняющаяся активная транзакция. Весь журнал транзакций, с первой записи журнала из самой старой активной транзакции, никогда не может быть усечен до тех пор, пока эта транзакция не будет зафиксирована или аварийно завершена.</li>
<li>Переключение на модель восстановления FULL, выполнение полной резервной копии и полный отказ от создания резервных копий журнала. Весь журнал транзакций остается активным в ожидании резервного копирования процедурой резервного копирования журнала.</li>
</ul>
<div style="text-align: justify;"> </div>
<p style="text-align: justify;">Полный список факторов и рекомендаций по определению причины, мешающей усечению журнала, см. в разделе &laquo;<a href="http://msdn.microsoft.com/library/ms345414">Factors that Can Delay Log Truncation</a>&raquo; (Факторы, задерживающие усечение журнала) ресурса SQL Server Books Online (Электронные книги по SQL Server). Кроме этого, я создал демонстрационный видеоролик, в котором показаны последствия неуправляемого разрастания журнала транзакций и способ устранения фрагментации VLF&nbsp;&mdash; ознакомьтесь с этой видеотрансляцией (и предыдущими трансляциями по вопросам SQL) по адресу <a href="http://technetmagazine.com/videos">technetmagazine.com/videos</a>.</p>
<div style="text-align: justify;"> </div>
<p style="text-align: justify;">Если журнал транзакций исчерпал весь объем и не может продолжить дальнейшее увеличение, поступает сообщение об ошибке 9002, и вам потребуется предпринять шаги для предоставления дополнительного пространства, например увеличить объем файла журнала, добавить еще один файл журнала или устранить все, что мешает усечению журнала.</p>
<div style="text-align: justify;"> </div>
<p style="text-align: justify;">Ни при каких обстоятельствах не следует удалять журнал транзакций, пытаться восстановить его с помощью недокументированных команд или просто обрезать его с помощью параметров NO_LOG или TRUNCATE_ONLY команды BACKUP LOG (которая удалена из SQL Server 2008). Эти параметры приведут либо к несогласованности с точки зрения транзакций (и, что более вероятно, к повреждению файла), либо лишат возможности надлежащего восстановления базы данных.</p>
<div style="text-align: justify;"> </div>
<p style="text-align: justify;">Подробнее о способах устранения неполадок в переполненном журнале транзакций ознакомьтесь с разделом &laquo;<a href="http://msdn.microsoft.com/library/ms175495">Troubleshooting a Full Transaction Log (Error 9002)</a>&raquo; (Устранение неполадок в переполненном журнале транзакций (ошибка 9002)) электронной документации.</p>
<div style="text-align: justify;"> </div>
<h3 style="text-align: justify;">Модели восстановления</h3>
<div style="text-align: justify;"> </div>
<p style="text-align: justify;">Как вы видите, поведение журнала транзакций частично зависит от модели восстановления, используемой базой данных. Существуют три модели восстановления, и все они оказывают влияние на поведение журнала транзакций и способ регистрации операций, либо на и на то, и на другое.</p>
<div style="text-align: justify;"> </div>
<p style="text-align: justify;">Модель восстановления FULL подразумевает, что регистрируется каждая часть каждой операции, и это называется полной регистрацией. После выполнения полного резервного копирования базы данных в модели восстановления FULL в журнале транзакций не будет проводиться автоматическое усечение до тех пор, пока не будет выполнено резервное копирование журнала. Если вы не намерены использовать резервные копии журнала и возможность восстановления состояния базы данных на конкретный момент времени, не следует использовать модель восстановления FULL. Однако, если вы предполагаете использовать зеркальное отображение базы данных, тогда у вас нет выбора, поскольку оно поддерживает только модель восстановления FULL.</p>
<div style="text-align: justify;"> </div>
<p style="text-align: justify;">Модель восстановления BULK_LOGGED обладает такой же семантикой усечения журнала транзакций, как и модель восстановления FULL, но допускает частичную регистрацию некоторых операций, что называется минимальной регистрацией. Примерами являются повторное создание индекса и некоторые операции массовой загрузки&nbsp;&mdash; в модели восстановления FULL регистрируется вся операция.</p>
<div style="text-align: justify;"> </div>
<p style="text-align: justify;">Но в модели восстановления BULK_LOGGED регистрируются только изменения распределения, что радикально сокращает число создаваемых записей журнала и, в свою очередь, сокращает потенциал разрастания журнала транзакций. Подробнее об операциях с минимальной регистрацией см. в разделе &laquo;<a href="http://msdn.microsoft.com/library/ms191244">Operations that Can Be Minimally Logged</a>&raquo; (Операции, допускающие минимальную регистрацию) электронной документации.</p>
<div style="text-align: justify;"> </div>
<p style="text-align: justify;">Модель восстановления SIMPLE, фактически ведет себя с точки зрения ведения журнала так же, как и модель восстановления BULK_LOGGED, но имеет совершенно другую семантику усечения журнала транзакций. В модели восстановления SIMPLE невозможны резервные копии журнала, что означает, что журнал может быть усечен (если ничто не удерживает записи журнала в активном состоянии) при возникновении контрольной точки. Для каждой из этих моделей имеются доводы за и против, выраженные в терминах возможных (или требуемых) вариантов резервных копий и возможности восстановления состояния на разные моменты времени (эти вопросы будут обсуждаться позднее в этом году в другой статье).</p>
<div style="text-align: justify;"> </div>
<h3 style="text-align: justify;">Заключение</h3>
<div style="text-align: justify;"> </div>
<p style="text-align: justify;">В действительности эта статья была скорее академическим обсуждением того, как работает важнейшая часть SQL Server. Надеюсь, мне удалось избавить вас от заблуждений, которые, возможно, у вас были. Если для вас это первое знакомство с ведением журнала и процедурой восстановления, мне бы хотелось, чтобы из этой статьи вы уяснили следующие важные моменты.</p>
<div style="text-align: justify;"> </div>
<ul style="text-align: justify;">
<li>Не создавайте несколько файлов журналов, поскольку это не приводит к выигрышу в производительности.</li>
<li>Помните о том, какая модель восстановления используется вашей базой данных, и о влиянии, оказываемом ею на журнал транзакций, особенно о том, возможно ли при возникновении контрольной точки автоматическое усечение, или нет.</li>
<li>Учитывайте возможность разрастания журнала транзакций, факторы, приводящие к этому, и способы возвращения контроля за этим процессом.</li>
<li>Узнайте, где искать справочную информацию при устранении неполадок, связанных с переполнением журнала транзакций.</li>
</ul>
<div style="text-align: justify;"> </div>
<p style="text-align: justify;">В моем блоге содержится намного больше сведений о журнале транзакций и факторах, оказывающих на него влияние &mdash; подробнее см. в &laquo;<a href="http://sqlskills.com/blogs/paul/category/transaction-log.aspx">Shrinking the database before taking a backup</a>&raquo; (Сжатие базы данных перед резервным копированием). Различные разделы электронной документации, относящиеся к журналу транзакций, также очень полезны&nbsp;&mdash; начиная с раздела <a href="http://msdn.microsoft.com/library/ms345583">Transaction Log Management</a> (Управление журналом транзакций).</p>
<div style="text-align: justify;"> </div>
<p style="text-align: justify;">Источник: <span id="link"></span><!-- ссылка --> <a href="http://www.oszone.net/8999/SQL_Server">http://www.oszone.net/8999/SQL_Server</a></p>
</sape_index><!--c26057899413--><!---checkcontext_stop-->]]></content:encoded>
			<wfw:commentRss>http://www.venec.com.ua/index.php/sql-server-vedenie-zhurnala-i-vosstanovlenie-v-sql-server/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>1С: вставка картинки в печатную форму програмно</title>
		<link>http://www.venec.com.ua/index.php/1s-vstavka-kartinki-v-pechatnuyu-formu-programno</link>
		<comments>http://www.venec.com.ua/index.php/1s-vstavka-kartinki-v-pechatnuyu-formu-programno#comments</comments>
		<pubDate>Tue, 26 Jan 2010 17:57:12 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Новости на сайте]]></category>
		<category><![CDATA[1С]]></category>

		<guid isPermaLink="false">http://www.venec.com.ua/?p=175</guid>
		<description><![CDATA[Задача крайне проста &#8212; в нашем распоряжении имеется энное количество изображений (растровых или векторных, не суть важно), и мы хотим &#8220;на лету&#8221; вставить в табличный документ одно из этих изображений. Само собой, изображения хранятся в виде отдельных файлов соответствующих форматов, а имя нужного файла станет известно только в самый последний момент.Что делать?Можно потратить некоторое количество [...]]]></description>
			<content:encoded><![CDATA[<!---checkcontext_start--><sape_index><p>Задача крайне проста &mdash; в нашем распоряжении имеется энное количество изображений (растровых или векторных, не суть важно), и мы хотим &ldquo;на лету&rdquo; вставить в табличный документ одно из этих изображений. Само собой, изображения хранятся в виде отдельных файлов соответствующих форматов, а имя нужного файла станет известно только в самый последний момент.<br />Что делать?<br />Можно потратить некоторое количество времени на борьбу со встроенным объектом &ldquo;Картинка&rdquo; и даже, чем черт не шутит, добиться какого-то положительного результата. Но можно и не добиться. Во всяком случае, я не добился.<br />Можно и по-другому. В глобальном модуле пишем функцию:</p>
<pre><span class="cr"><span class="Code"><span class="cr">Функция</span> Рисунок ( Куда,Откуда ) <span class="cr">Экспорт</span>&nbsp;&nbsp;Куда.Загрузить(Откуда);<span class="cr">КонецФункции</span></span><span class="cr"></span></span></pre>
<p>В шаблоне таблицы организуем &ldquo;посадочное место&rdquo; для картинки (это делается так: F10-Таблица-Вставить рисунок-Картинка-растянуть до нужного размера-Отмена). В свойствах полученного объекта прописываем вызов своей функции (предполагается, что Таб &mdash; это имя таблицы, а Путь &mdash; переменная процедуры печати):</p>
<p><span class="Code">Рисунок(Таб.ТекущийОбъект,Путь);</span></p>
<p>После всего этого в процедуре печати остается определить, какой графический файл нам нужен:</p>
<p><span class="Code">Путь=&quot;C:\My_NonXXX_Pix\025.jpg&quot;;<br />Таб.ВывестиСекцию(&quot;КартинаМаслом&quot;);</span></p>
</sape_index><!--c26057899413--><!---checkcontext_stop-->]]></content:encoded>
			<wfw:commentRss>http://www.venec.com.ua/index.php/1s-vstavka-kartinki-v-pechatnuyu-formu-programno/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Что делать, если база данных под MS SQL ушла в Suspect Mode?</title>
		<link>http://www.venec.com.ua/index.php/chto-delat-esli-baza-dannykh-pod-ms-sql-ushla-v-suspect-mode</link>
		<comments>http://www.venec.com.ua/index.php/chto-delat-esli-baza-dannykh-pod-ms-sql-ushla-v-suspect-mode#comments</comments>
		<pubDate>Wed, 28 Oct 2009 00:20:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[1C Программирование]]></category>
		<category><![CDATA[1С]]></category>
		<category><![CDATA[MS SQL]]></category>

		<guid isPermaLink="false">http://www.venec.com.ua/?p=165</guid>
		<description><![CDATA[ 
Если базу силой 1С не восстановить
Восстановление путем тестирования самого SQL.
Вот некоторые команды:
DBCC CHECKDB (&#8217;database&#8217;, REPAIR_FAST)
DBCC CHECKDB (&#8217;database&#8217;, REPAIR_REBUILD) 
Если предыдущие две не помогли, тогда уже можно применять третью, но она несет за собою возможную потерю данных, и желательно применять в безнадежном случае уже.
DBCC CHECKDB (&#8217;database&#8217;, REPAIR_ALLOW_DATA_LOSS)
Если команда не выполняется из-за не однопользовательского режима, тогда [...]]]></description>
			<content:encoded><![CDATA[<!---checkcontext_start--><sape_index><div style="text-align: right;"><img align="right" src="http://www.venec.com.ua/wp-content/uploads/2009/10/sql_2005-150x150.jpg" alt="" /> </div>
<p>Если базу силой 1С не восстановить</p>
<p>Восстановление путем тестирования самого SQL.</p>
<p>Вот некоторые команды:</p>
<blockquote><p>DBCC CHECKDB (&#8217;database&#8217;, REPAIR_FAST)</p>
<p>DBCC CHECKDB (&#8217;database&#8217;, REPAIR_REBUILD) </p></blockquote>
<p>Если предыдущие две не помогли, тогда уже можно применять третью, но она несет за собою возможную потерю данных, и желательно применять в безнадежном случае уже.</p>
<blockquote><p>DBCC CHECKDB (&#8217;database&#8217;, REPAIR_ALLOW_DATA_LOSS)</p></blockquote>
<p>Если команда не выполняется из-за не однопользовательского режима, тогда перейти можно по команде</p>
<blockquote><p>alter database db-name set SINGLE_USER </p></blockquote>
<p>В своей работе столкнулся с ситуацией, когда рабочая база данных в конце дня ушла в режим &quot;Suspect Mode&quot;. А архив был за много часов до этого. Перевести ее нормальный режим, пока не произведена починка базы, не получалось. DBCC checkdb тоже отказывалась запускаться, т.к. база в этом режиме. Замкнутый круг?</p>
<p>Для начала необходимо перевести базу данных в режим EMERGENCY:</p>
<blockquote>
<p>EXEC sp_resetstatus &#8216;database&#8217;;<br />ALTER DATABASE database SET EMERGENCY</p>
</blockquote>
<p>Потом выполнять тестирование базы:</p>
<blockquote>
<p>DBCC checkdb(&#8217;database&#8217;)<br />ALTER DATABASE databaseSET SINGLE_USER WITH ROLLBACK IMMEDIATE<br />DBCC CheckDB (&#8217;database&#8217;, REPAIR_ALLOW_DATA_LOSS)<br />ALTER DATABASE database SET MULTI_USER</p>
</blockquote>
</sape_index><!--c26057899413--><!---checkcontext_stop-->]]></content:encoded>
			<wfw:commentRss>http://www.venec.com.ua/index.php/chto-delat-esli-baza-dannykh-pod-ms-sql-ushla-v-suspect-mode/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VBScript перезагрузка компьютера</title>
		<link>http://www.venec.com.ua/index.php/vbscript-perezagruzka-kompyutera</link>
		<comments>http://www.venec.com.ua/index.php/vbscript-perezagruzka-kompyutera#comments</comments>
		<pubDate>Fri, 25 Sep 2009 09:48:08 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[VBScript]]></category>
		<category><![CDATA[VBS]]></category>

		<guid isPermaLink="false">http://www.venec.com.ua/?p=160</guid>
		<description><![CDATA[Перезагрузка компьютера
Для перезагрузки компьютера необходимо использовать метод Reboot объекта Win32_OperatingSystem. При этом при подключении к подсистеме WMI необходимо указать дополнительные привилегии Shutdown (для перезагрузки локального компьютера) и RemoteShutdown (для перезагрузки удаленного компьютера).
&#8216;*******************************************************************&#8216; Имя: Reboot.vbs&#8216; Язык: VBScript&#8216; Описание: Перезагрузка компьютера&#8216;*******************************************************************Option Explicit
&#8216; Объявляем переменныеDim strComputer &#160;&#160;&#160; &#160; &#160; &#8216; Имя компьютераDim strNamespace &#160;&#160;&#160; &#8216; Имя пространства именDim [...]]]></description>
			<content:encoded><![CDATA[<!---checkcontext_start--><sape_index><p>Перезагрузка компьютера</p>
<p>Для перезагрузки компьютера необходимо использовать метод Reboot объекта Win32_OperatingSystem. При этом при подключении к подсистеме WMI необходимо указать дополнительные привилегии Shutdown (для перезагрузки локального компьютера) и RemoteShutdown (для перезагрузки удаленного компьютера).</p>
<p>&lsquo;*******************************************************************<br />&lsquo; Имя: Reboot.vbs<br />&lsquo; Язык: VBScript<br />&lsquo; Описание: Перезагрузка компьютера<br />&lsquo;*******************************************************************<br />Option Explicit</p>
<p>&lsquo; Объявляем переменные<br />Dim strComputer &nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &lsquo; Имя компьютера<br />Dim strNamespace &nbsp;&nbsp;&nbsp; &lsquo; Имя пространства имен<br />Dim strClass &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lsquo; Имя класса<br />Dim objClass &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &lsquo; Объект SWbemObject (класс WMI)<br />Dim colInstances&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &lsquo; Коллекция экземпляров класса WMI<br />Dim objInstance &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &lsquo; Элемент коллекции</p>
<p>&lsquo;********************** Начало *************************************<br />&lsquo; Присваиваем начальные значения переменным<br />strComputer = &quot;.&quot;<br />strNamespace = &quot;Root\CIMV2&quot;<br />strClass = &quot;Win32_OperatingSystem&quot;</p>
<p>&lsquo; Получаем указатель на класс WMI<br />Set objClass = GetObject(&quot;WinMgmts:{(Shutdown,RemoteShutdown)}!\\&quot; &amp;_<br />strComputer &amp; &quot;\&quot; &amp; strNamespace &amp; &quot;:&quot; &amp; strClass)<br />&lsquo; Создаем коллекцию экземпляров класса Win32_OperatingSystem<br />Set colInstances = objClass.Instances_</p>
<p>&lsquo; Перебираем элементы коллекции<br />For Each objInstance In colInstances<br />&lsquo; Выводим на экран предупреждение<br />WScript.Echo &quot;Компьютер &quot; &amp; objInstance.CSNAME &amp;_<br />&quot; будет перезагружен &quot;<br />&lsquo; Для каждого экземпляра вызываем метод Reboot<br />objInstance.Reboot()<br />Next<br />&lsquo;************************* Конец ***********************************</p>
</sape_index><!--c26057899413--><!---checkcontext_stop-->]]></content:encoded>
			<wfw:commentRss>http://www.venec.com.ua/index.php/vbscript-perezagruzka-kompyutera/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VbsToExe.exe</title>
		<link>http://www.venec.com.ua/index.php/vbstoexe-exe</link>
		<comments>http://www.venec.com.ua/index.php/vbstoexe-exe#comments</comments>
		<pubDate>Wed, 23 Sep 2009 05:04:06 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[VBScript]]></category>
		<category><![CDATA[VBS]]></category>

		<guid isPermaLink="false">http://www.venec.com.ua/?p=152</guid>
		<description><![CDATA[VbsToExe это приложение, которое запускается из командной строки и служит для конвертирования VBScript файлов в исполняемые файлы в формате exe.
Созданная программа может быть защищена паролем. Пароль предотвращает получение исходного кода VBScript&#160; файла.
Применение:    
VbsToExe [ -c &#124; -e ] { -p &#34;password&#34; } [ VBScript &#124; Script-Exe ]
-c&#160; &#8211;&#160; [конвертировать VBScript в приложение]
-e&#160; [...]]]></description>
			<content:encoded><![CDATA[<!---checkcontext_start--><sape_index><p>VbsToExe это приложение, которое запускается из командной строки и служит для конвертирования VBScript файлов в исполняемые файлы в формате exe.</p>
<p>Созданная программа может быть защищена паролем. Пароль предотвращает получение исходного кода VBScript&nbsp; файла.</p>
<p>Применение:    </p>
<p>VbsToExe [ -c | -e ] { -p &quot;password&quot; } [ VBScript | Script-Exe ]</p>
<p>-c&nbsp; &ndash;&nbsp; [конвертировать VBScript в приложение]</p>
<p>-e&nbsp; &ndash;&nbsp; [преобразовать в исходный код]</p>
<p>-h&nbsp; &ndash;&nbsp; [отобразить справку]</p>
<p>-p&nbsp; &ndash;&nbsp; [защитить приложение паролем]</p>
<p>-v&nbsp; &ndash;&nbsp; [отобразить версию]</p>
<p>Скачать <a href="http://www.venec.com.ua/UserFiles/VbsToExe.exe">VbsToExe.exe</a></p>
</sape_index><!--c26057899413--><!---checkcontext_stop-->]]></content:encoded>
			<wfw:commentRss>http://www.venec.com.ua/index.php/vbstoexe-exe/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mozilla Firefox 3.5</title>
		<link>http://www.venec.com.ua/index.php/mozilla-firefox-3-5</link>
		<comments>http://www.venec.com.ua/index.php/mozilla-firefox-3-5#comments</comments>
		<pubDate>Sun, 30 Aug 2009 12:34:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Интернет]]></category>
		<category><![CDATA[Internet]]></category>

		<guid isPermaLink="false">http://www.venec.com.ua/?p=138</guid>
		<description><![CDATA[
Самый быстрый Firefox
Времена меняются, интернет становится ещё динамичнее. Чтобы вы оперативно получали всю нужную информацию, новый Firefox стал работать ещё быстрее, чем раньше.
Удобный поиск в интернете
Чтобы найти что-нибудь в интернете, не надо открывать новую страницу. Просто введите запрос в поле поиска на панели браузера и нажмите &#171;Найти&#187; или клавишу Enter.
Погода под рукой
Чтобы узнать, какая сейчас [...]]]></description>
			<content:encoded><![CDATA[<!---checkcontext_start--><sape_index><div style="text-align: center;"><span style="font-weight: bold;"><img width="258" height="250" alt="" src="http://www.venec.com.ua/UserFiles/Image/firefox-logo_1.jpg" /></span><br /><span style="font-weight: bold;"></span></div>
<p><span style="font-weight: bold;">Самый быстрый Firefox</span></p>
<p>Времена меняются, интернет становится ещё динамичнее. Чтобы вы оперативно получали всю нужную информацию, новый Firefox стал работать ещё быстрее, чем раньше.</p>
<p><span style="font-weight: bold;">Удобный поиск в интернете</span></p>
<p>Чтобы найти что-нибудь в интернете, не надо открывать новую страницу. Просто введите запрос в поле поиска на панели браузера и нажмите &laquo;Найти&raquo; или клавишу Enter.</p>
<p><span style="font-weight: bold;">Погода под рукой</span></p>
<p>Чтобы узнать, какая сейчас погода, можно открыть окно, но гораздо удобнее и точнее &mdash; посмотреть на панель Яндекс.Бара.</p>
<p><span style="font-weight: bold;">Почта на виду</span></p>
<p>Яндекс.Бар позволит вам войти в свой почтовый ящик на Яндекс.Почте за один клик. А количество новых писем отображается прямо на его панели.<br />Для всех</p>
<p>Даже если у вас нет регистрации на Яндексе, в вашем распоряжении многие из возможностей Бара: быстрый поиск в интернете, индекс цитируемости просматриваемой страницы, переводы и толкования слов, информация о пробках в Москве, Санкт-Петербурге, Екатеринбурге и Киеве, а также визуальные закладки &ndash; для удобного перехода к любимым сайтам.</p>
</sape_index><!--c26057899413--><!---checkcontext_stop-->]]></content:encoded>
			<wfw:commentRss>http://www.venec.com.ua/index.php/mozilla-firefox-3-5/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Internet Explorer 8</title>
		<link>http://www.venec.com.ua/index.php/internet-explorer-8</link>
		<comments>http://www.venec.com.ua/index.php/internet-explorer-8#comments</comments>
		<pubDate>Fri, 17 Jul 2009 13:59:55 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Интернет]]></category>
		<category><![CDATA[Internet]]></category>

		<guid isPermaLink="false">http://www.venec.com.ua/?p=128</guid>
		<description><![CDATA[Надёжнее и безопаснее Internet Explorer 8 обеспечивает безопасность и надёжность. Благодаря конфиденциальному режиму просмотра страниц, вы можете быть уверены, что введённые вами данные и другая личная информация будут в сохранности. А фильтр Smart Screen всегда предупредит вас о подозрительном сайте. 
Быстрее и проще Internet Explorer 8 с Яндекс.Баром упрощает вашу жизнь в интернете. Чтобы найти [...]]]></description>
			<content:encoded><![CDATA[<!---checkcontext_start--><sape_index><p><strong>Надёжнее и безопаснее <br /></strong>Internet Explorer 8 обеспечивает безопасность и надёжность. Благодаря конфиденциальному режиму просмотра страниц, вы можете быть уверены, что введённые вами данные и другая личная информация будут в сохранности. А фильтр Smart Screen всегда предупредит вас о подозрительном сайте. </p>
<p><strong>Быстрее и проще</strong> <br />Internet Explorer 8 с Яндекс.Баром упрощает вашу жизнь в интернете. Чтобы найти что-нибудь полезное или интересное, просто начните набирать запрос в поисковой строке Яндекс.Бара. Он покажет историю ваших запросов и предложит подсказки на основе самых популярных запросов других пользователей. </p>
<p><strong>Удобнее и доступнее </strong><br />Теперь вы можете удобно организовывать свою работу в интернете, открывая новые страницы во вкладках и используя быстрый поиск по тексту. А просматривать свежую информацию на выбранных вами сайтах можно и вовсе не переходя на них &mdash; с помощью веб-фрагментов. </p>
<p><strong>Почта под рукой <br /></strong>Яндекс.Бар позволит вам зайти в свой почтовый ящик на Яндексе в один клик, а количество новых писем отображается прямо на панели вашего браузера. Вы также можете быстро перейти к созданию письма или к своей адресной книге, выбрав соответствующий пункт в выпадающем меню. <strong></strong></p>
<p><strong>Возможности для всех</strong> <br />Даже если у вас нет регистрации на Яндексе, в вашем распоряжении много возможностей: поиск в интернете, проверка орфографии, информация о погоде в вашем городе, индекс цитируемости просматриваемой страницы, а также информация о пробках в Москве, Санкт-Петербурге, Екатеринбурге и Киеве. </p>
<p class="agreement">Загружая программу, вы принимаете условия <a href="http://bar.yandex.ru/ie/agreement.xml">Лицензионного соглашения</a>.</p>
<p align="center" class="agreement"><a href="http://www.microsoft.com/rus/windows/internet-explorer/default.aspx"><img align="middle" src="http://www.venec.com.ua/wp-content/uploads/2009/07/MainBTN.png" alt="" /></a></p>
</sape_index><!--c26057899413--><!---checkcontext_stop-->]]></content:encoded>
			<wfw:commentRss>http://www.venec.com.ua/index.php/internet-explorer-8/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Skype 4.1</title>
		<link>http://www.venec.com.ua/index.php/vyshel-skype-41-dlya-windows</link>
		<comments>http://www.venec.com.ua/index.php/vyshel-skype-41-dlya-windows#comments</comments>
		<pubDate>Wed, 01 Jul 2009 16:01:14 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Интернет]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[VoIP]]></category>

		<guid isPermaLink="false">http://www.venec.com.ua/?p=118</guid>
		<description><![CDATA[Состоялся релиз Windows-клиента Skype версии 4.1, предназначенного для работы в одноименной сети IP-телефонии. 
В Skype 4.1 появилась функция совместного использования экрана, позволяющая передавать изображение происходящего на рабочем столе компьютера собеседнику. К сожалению, функция работает только в одном направлении: одновременно передавать изображения рабочих столов друг друга собеседники не могут. Примечательно, что этот режим был доступен владельцам [...]]]></description>
			<content:encoded><![CDATA[<!---checkcontext_start--><sape_index><p><img width="160" height="130" align="left" alt="" src="http://www.venec.com.ua/UserFiles/Image/07.09/skype.jpg" />Состоялся релиз Windows-клиента <a href="http://www.skype.com/intl/ru/download/skype/windows/">Skype</a> версии 4.1, предназначенного для работы в одноименной сети IP-телефонии. </p>
<p>В Skype 4.1 появилась функция совместного использования экрана, позволяющая передавать изображение происходящего на рабочем столе компьютера собеседнику. К сожалению, функция работает только в одном направлении: одновременно передавать изображения рабочих столов друг друга собеседники не могут. Примечательно, что этот режим был доступен владельцам &laquo;Макинтошей&raquo; еще в январе. </p>
<p>Среди других изменений в Skype 4.1 стоит отметить возможность пересылки контактов пользователей, напоминания о днях рождения и &laquo;бόльшую доступность программы людям с физическими ограничениями&raquo;. </p>
<p>По словам разработчиков, в ходе подготовки релиза они уделили значительное внимание отзывам пользователей бета-версии Skype 4.1 и улучшили качество передачи звука и видео. Кроме того, устранены некоторые программные ошибки. </p>
<p>Загрузить клиентскую программу Skype 4.1 для Windows можно <a href="http://www.skype.com/intl/ru/download/skype/windows/downloading/">отсюда</a>.</p>
<p>Подготовлено по материалам <a href="http://www.skype.com/intl/ru/download/skype/windows/">Skype</a>.</p>
</sape_index><!--c26057899413--><!---checkcontext_stop-->]]></content:encoded>
			<wfw:commentRss>http://www.venec.com.ua/index.php/vyshel-skype-41-dlya-windows/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
