18.08.07 – 21:41
Добрый вечер.
Для полной автоматизации УРБД нужен скрипт который периодически запускаясь перебирает процессы, если находит 1cv7, проверяет какой базой управляет этот процесс (и если можно пользователя 1С), если нужная база отсуствует, то запускает эту (дежурную) базу. Со скриптами столкнулся первый раз, смог разобраться как запустить 1С и как перебирать процессы.
Set Control = 0
For Each objProc In objService.ExecQuery(“SELECT * FROM Win32_Process”)
Set LinePr = objProc.Caption
If InStr( 1, LinePr, “1cv7”, 1) <> 0 Then
WScript.Echo objProc.CommandLine
Control = 0
Break
End If
Next
If Control = 1 Then
WScript.Echo “Start”
set wshshell = CreateObject(“WScript.Shell”)
wshshell.Run “””C:Program Files1Cv77BIN1CV7s.exe”” enterprise /dD:77Base_Center /NAuto /PAutoObmen”
End If
Эта конструкция не работает потому что не могу «objProc.Caption» преобразовать в строку и «LinePr» всегда пустая строка.
Совсем не нашел материала как определить базу данных, которой управляет найденный процесс. Может есть возможность выбрать процесс и затем обратиться к нему методами встроенного языка, например: objProc.IBDir(). У кого-нибудь есть идеи? Помогите плиз.
1 – 18.08.07 – 22:37
Нашел как сделать:
On Error Resume Next
Set objService = GetObject(“winmgmts:{impersonationLevel=impersonate}!\.rootCIMV2”)
If Err.Number <> 0 Then
WScript.Echo Err.Number & “: ” & Err.Description
WScript.Quit
End If
Control = 1
For Each objProc In objService.ExecQuery(“SELECT * FROM Win32_Process”)
LinePr = objProc.CommandLine
If InStr( 1, LinePr, “1cv7”,1) <> 0 Then
WScript.Echo objProc.CommandLine
Control = 0
‘ Break
End If
Next
If Control = 1 Then
WScript.Echo “Start”
set wshshell = CreateObject(“WScript.Shell”)
wshshell.Run “””C:Program Files1Cv77BIN1CV7s.exe”” enterprise /dH:1С_DBPanPharmaPanPharma /NAuto /P”
End If
Но в строке LinePr можно найти путь к базе и пользователя только если 1С запускали командной строкой, а если пользователь зашел интерактивно и ручками выбрал логин и пароль, то строка обрывается на enterprise. Что еще попробовать?
2 – 19.08.07 – 00:20
Помойму задача без решения только с помощью скрипта.
Записывай путь к базе и пользователя в капшн окна 1с предприятия, это можно сделать при помощи метода ЗаголовокСистемы(“1С:Предприятие бла-бла-бла ” + КаталогИБ() + “:” + ИмяПользователя()) в предопределённой процедуре ПриНачалеРаботыСистемы(). После этого в скрипте перебирай все процессы считывай их Caption и вычленяй оттудова каталог базы данных и пользователя.
3 – 19.08.07 – 00:26
Это все прекрасно, осталось распознать является ли процесс процессом базы УРБД
Не проще ли запускать конфигуратор с уже известными параметрами?
http://infostart.ru/projects/1093/
4 – 19.08.07 – 08:37
Идея с Caption мне понравилась, спасибо, но у меня в хелпе нету этого метода. В инете пока копаться некогда, попозже поищю. Попробовал вставить в:
For Each objProc In objService.ExecQuery(“SELECT * FROM Win32_Process”)
LinePr = objProc.CommandLine
If InStr( 1, LinePr, “1cv7”,1) <> 0 Then
WScript.Echo objProc.CommandLine
Set colFeatures = objService.ExecQuery _
(“Select * from Win32_SoftwareFeature”)
For Each objFeature in colfeatures
Wscript.Echo “Caption: ” & objFeature.Caption
Next
Перебирает все программы независимо от того запущены они или нет!!???? И кажется ЗаголовокСистемы не виден – отображает 1cv1.exe
В своем варианте УРБД я взял за основу http://x-romix.narod.ru/urbd.rar
Доработал, теперь при установке на филиале базы она проверяет и если нет то разворачивает новую базу (контрольную), регистрирует ее в реестре, синхронизирует справочники. Все настройки по астообмену (периодичность и т.д.) в 1С, из цетральной базы можно управлять настройками автообмена в любом филиале. Полный автомат, вообще без участия юзеров. Исключение состаляет первый запуск, надо прописать в планировщике скрипт следящий за тем чтобы контрольная база всегда работала, хотел и это сделать автоматом, но т.к. у админов все забанено, придется им ручками пару кнопок нажать. Отработал пока примерно половину механизма в тестовой, застрял на скрипте.
5 – 19.08.07 – 09:01
А если подойти с другого конца — перебирать не процессы, а каталоги баз, на предмет не заблокирован ли файл 1Cv7.lck?
6 – 19.08.07 – 09:26
Я бы сделал так:
1) УРДБ запускается только в ПАКЕТНОМ режиме.
2) “SELECT * FROM Win32_Process Where Name = ‘1cv7s.exe'” (ну или через LIKE).
3) Читать параметры запуска процесса (порыть документацию), где собственно и указывается путь до базы в пакетном режиме.
7 – 19.08.07 – 09:41
Хотя пункт 1 не подойдет для определения возможности запуска 1С в монопольном режиме.
8 – 19.08.07 – 15:28
Если ПриЗапускеСистемы проверять и разрешать запуск только из командной строки, то все должно работать на ура. Но я считаю что если из-за автоматизации ограничиваются возможности ПО, то это не правильный подход. Есть еще одна задумка: служебная база через каждые 10 минут записыват текущее время в файл , а скрипт при запуске считывает это время и сравнивает с текущим. Все таки Caption мне больше нравится. Попробую найти примеры использования
9 – 19.08.07 – 20:09
С Caption-ом все провалилось. Скрипт смотрит описание процесса, а не базы данных! И все атрибуты относятся к 1cv7.exe. Я не силен в системном реестре, но мне кажется должна храниться ссылка процесса на БД. Как бы получить эту ссылку? Или хотя-бы подскажите где в реестре хранится эта информация. А как 1С определяет что база занята, например при входе монопольно?
10 – 19.08.07 – 20:27
Тогда перебирай не процессы, а окна в системе, а по окну и до процесса доберёшься. В своё время делал на VB программу шутку, так вот использовал там перебор окошек:
retval = EnumWindows(AddressOf EnumWindowsProc, 0)
Public Function EnumWindowsProc(ByVal hwnd As Long, ByVal lParam As Long) As Long
Dim slength As Long, wintext As String ‘ title bar text length and buffer
Dim retval As Long ‘ return value
Dim Buffer As String
Static winnum As Integer ‘ counter keeps track of how many windows have been enumerated
winnum = winnum + 1 ‘ one more window enumerated….
slength = GetWindowTextLength(hwnd) + 1 ‘ get length of title bar text
If slength > 1 Then ‘ if return value refers to non-empty string
Buffer = Space(slength) ‘ make room in the buffer
retval = GetWindowText(hwnd, Buffer, slength) ‘ get title bar text
Buffer = Trim(Left(Buffer, slength – 1))
If Buffer <> “” And InStr(1, Buffer, “1С:Предприятие бла-бла-бла”, vbTextCompare) > 0 Then
‘нашли нужное окошко с 1Сом теперь его дескриптор в hwnd
‘а уж по нему с помощью API GetWindowThreadProcessId как два пальца об асфальт
End If
End If
EnumWindowsProc = 1 ‘ return value of 1 means continue enumeration
End Function
Это, конечно, тебе поможет если ты дружишь с API 😀
11 – 19.08.07 – 21:07
Вообще профессионально я только с 1С дружу, все остальное методом научного тыка (пока). Нашел кое-что http://forum.script-coding.info/viewtopic.php?id=174, не подскажешь на каком языке скрипт? Какое должно быть расширение?
12 – 19.08.07 – 21:33
Konstruktor
13 – 19.08.07 – 21:41
Сорри, но я в скриптах копаюсь всего 4 дня. Напиши плиз рабочюю функцию перебора окошек и как найти процес этого окна. Или как найти окно процесса и прочитать описание.
Содержание
- 0.1 Что будет, если перепутать коллектор и эмиттер в схеме
- 0.2 Как определить выводы транзистора
- 0.2.1 Способ №1
- 0.2.2 Способ №2
- 0.2.3 Способ №3
- 0.2.4 Способ №4
- 1 Необходимость наличия пробника
- 2 Устройство транзистора
- 3 Ищем базу, эмиттер и коллектор на транзисторе
- 4 Как проверить транзистор на исправность
- 5 Признаки неисправности транзистора
Читайте также:
- Биполярный транзистор
Крайние области транзистора называют эмиттером и коллектором среднюю – базой, р–п переходы соответственно называют эмиттерным и коллекторным. Если эмиттер и коллектор обладают дырочной проводимостью (области р), а база – электронной проводимостью (область п), структура транзистора р–п–р. Если проводимости областей транзистора противоположна названным, его структура п–р–п. Принцип действия транзисторов обеих структур одинаков и основан на использовании свойств р–n переходов.
Условное обозначение транзисторов в схемах полярности напряжений в активном (усилительном) режиме работы и направления токов показаны на рис.3.
Рис. 3. Условное обозначение транзисторов структур р–п–р (а) и п–р–п (б), полярности напряжений в активном режиме работы и направления токов.
Различают 3 схемы включения транзисторов в зависимости от того, какой вывод транзистора принимается общим для его входной и выходной цепей (см. рис.4):
1) с общей базой (ОБ);
2) с общим эмиттером (ОЭ);
3) с общим коллектором (ОК).
Рис.4. Схемы включения транзисторов:
а) с общей базой;б) с общим эмиттером;в) с общим коллектором.
Транзисторы в схемах могут работать в различных режимах: активном (усилительном), насыщения и отсечки. Последние два режима называют ключевыми.Транзисторы считаются универсальными ППП(полупрводниковые приборы), пригодные для создания не только ключевых, но и усилительных, а также генераторных схем. Они бывают биполярными и полевыми. Биполярные транзисторы (БТ) содержат 2 (эмиттерный и коллекторный) и более p-n-переходов и основаны на взаимодействии носителей заряда двух типов. В зависимости от полярности подаваемых на его переходы напряжений возможны следующие режимы работы БТ:
а) режим отсечки — если оба перехода находятся под обратными напряжениями. В этом режиме транзистор заперт, т.е. имеет очень большое сопротивление;
б) нормальный активный (усилительный) режим — если на эмиттерный переход (ЭП) подано прямое напряжение, а на коллекторный переход (КП) -обратное. Транзистор в этом случае открыт, но его сопротивление зависит от входного тока. Он мгновенно реагирует на любые изменения этого тока, вызывая соответствующие изменения выходного тока;
в) режим насыщения — если оба перехода находятся под прямыми напряжениями. Транзистор в этом режиме предельно открыт, имеет минимальное сопротивление и не реагирует на малые изменения входного сигнала;
г) инверсный активный режим — на КП подано прямое напряжение, а на ЭП — обратное. Транзистор также открыт и в некоторых пределах реагирует на изменения входного тока.
Рассмотрим принцип работы транзистора структуры р–п–р на примере схемы с общей базой. Обычно для исследования работы транзистора используют условную плоскостную схему (рис.5).
Рис.5. Направления токов в транзисторе.
Для работы транзистора в активном режиме на его эмиттерный переход подается небольшое по величине напряжение в прямом направлении, а на коллекторный переход – значительно большее по величине (примерно, на порядок) напряжение в обратном направлении. При подаче напряжения на эмиттерный переход в прямом направлении понижается высота его потенциального барьера, поэтому дырки вследствие разности концентрации их в эмиттере и базе (т.е. вследствие диффузии) инжектируются (впрыскиваются) в область базы, образуя дырочный ток эмиттера ,Iэр.Одновременно из области базы в результате диффузии в области эмиттера переходят электроны базы, образуя в эмиттере электронный ток Iэп. Следовательно, ток эмиттера равен:
Ток Iэn не участвует в создании коллекторного (выходного) тока транзистора и только нагревает эмиттерный переход, поэтому его величину уменьшают. Для этого базу насыщают донорной примесью незначительно. Из–за малой величины тока Iэn им часто пренебрегают.Инжектированные в область базы дырки у эмиттерного перехода имеют значительную концентрацию и за счет диффузии перемещаются в сторону коллекторного р–п перехода. Так как поле коллекторного перехода для дырок является ускоряющим, происходит экстракция (всасывание) дырок в область коллектора. Поскольку их концентрация около коллекторного перехода выше, чем в остальной части коллектора, за счет диффузии дырки перемещаются в сторону омического контакта, где рекомбинируют с электронами, поступающими от источника Екб. Таким образом, дырки от эмиттера через базу попадают в коллектор, образуя дырочную составляющую тока Iкр в области коллектора. Токи Iэр и Iкр по величине не равны, так как часть дырок эмиттера, попавших в область базы, не доходит до коллекторного перехода, рекомбинируя с электронами базы, в результате чего исчезают и дырка и электрон. В базе вследствие этого процесса протекает составляющая тока базы называемая током рекомбинации Iбрэк. Вместе с основными носителями заряда через эмиттерный и коллекторный переходы движутся не основные носители, образующие дрейфовую составляющую тока в каждой из областей транзистора.Влияние на свойства транзистора оказывает дрейфовый ток, образованный перемещением не основных носителей через коллекторный переход: дырок, из области базы и электронов из области коллектора. Этот ток называют обратным током коллекторного перехода Iко.Так как он образуется в результате генерации пар носителей дырка–электрон при повышении температуры сверх К, его называют тепловым током. С повышением температуры он растет по экспоненциальному закону. В германиевых транзисторах при повышении температуры на каждые К Iко возрастает в 2 раза, в кремниевых – в 2,5 раза.Величина Iко не зависит от величины потенциального барьера р–п перехода, так как поле р–п перехода для не основных носителей является ускоряющим, она зависит от температуры транзистора, т.е. Iко является неуправляемым током.
Таким образом, можно записать значения токов, протекающих в отдельных областях транзистора в схеме ОБ.
Ток эмиттера был определен выше(повторяем):
Из уравнений (2),(3),(4) можно установить
Iэ=Iб+Iк,(5)
что соответствует 1–му закону Кирхгофа.
Токи Iк и Iб содержат составляющую Iко, следовательно, их величина, как и Iко, изменяется с изменением температуры. Для того, чтобы поддерживать величины этих токов на определенном уровне вне зависимости от температуры, схемы, в которых работает транзистор, стабилизируют.Следовательно, через транзистор течет сквозной дырочный ток от эмиттера через базу в коллектор, а в выводах транзистора – электронный ток.Напомним, что за положительное направление тока принимают направление движения положительных зарядов (дырок), т.е. направление, противоположное направлению движения электронов .Током коллектора можно управлять. Для изменения его величины следует изменять величину напряжения источника питания Еэ. С увеличением Еэ уменьшается высота потенциального барьера эмиттерного перехода и увеличивается ток Iэ, а, следовательно, и ток Iк. Таким образом, ток эмиттера является управляющим током, а ток коллектора – управляемым. Поэтому транзистор часто называют прибором, управляемым током..
Дата добавления: 2015-05-06 ; Просмотров: 6168 ; Нарушение авторских прав? ;
Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет
Что будет, если перепутать коллектор и эмиттер в схеме
Для опыта мы возьмем простой и всеми нами любимый транзистор КТ815Б:
Соберем знакомую вам схемку:
Для чего я поставил перед базой резистор, читаем здесь.
На Bat1 выставляю напряжение в 2,5 вольта. Если подавать более 2,5 Вольт, то лампочка уже ярче гореть не будет. Скажем так, это граница, после которой дальнейшее повышение напряжение на базе не играет никакой роли на силу тока в нагрузке
На Bat2 я выставил 6 Вольт, хотя лампочка у меня на 12 Вольт. При 12 Вольтах транзистор у меня ощутимо грелся, и я не хотел его спалить. Здесь мы видим, какую силу тока потребляет наша лампочка и даже можем рассчитать мощность, которую она потребляет, перемножив эти два значения.
Ну и как вы видели, лампочка горит и схема нормально работает:
Но что случится, если мы перепутаем коллектор и эмиттер? По логике, у нас ток должен течь от эмиттера к коллектору, потому как базу мы не трогали, а коллектор и эмиттер состоят из N полупроводника.
Но на практике лампочка гореть не хочет.
Потребление на блоке питания Bat2 каких-то 10 миллиампер. Значит, ток через лампочку все-таки течет, но очень слабый.
Почему при правильном подключении транзистора ток течет нормально, а при неправильном нет? Дело все в том, транзистор делают не симметричным.
В транзисторах площадь соприкосновения коллектора с базой намного больше, чем эмиттера и базы. Поэтому, когда электроны устремляются из эмиттера к коллектору, то почти все они “ловятся” коллектором, а когда мы путаем выводы, то не все электроны из коллектора “ловятся” эмиттером.
Кстати, чудом не пробило P-N переход эмиттер-база, так как напряжение подавали в обратной полярности. Параметр в даташите UЭБ макс . Для этого транзистора критическое напряжение считается 5 Вольт, у нас же оно было даже чуть выше:
Итак, мы с вами узнали, что коллектор и эмиттер неравнозначны. Если в схеме мы перепутаем эти выводы, то может произойти пробой эмиттерного перехода и транзистор выйдет из строя. Так что, не путайте выводы биполярного транзистора ни в коем случае!
Как определить выводы транзистора
Способ №1
Думаю, самый простой. Скачать на этот транзистор даташит. В каждом нормальном даташите есть рисуночек с подробными надписями, где какой вывод. Для этого вводим в гугл или яндекс крупненькие циферки и буковки, которые написаны на транзисторе, и рядышком добавляем слово “даташит”. Пока еще не было такого, чтобы я не отыскивал даташит на какой-то радиоэлемент.
Способ №2
Думаю, с поиском вывода базы проблем возникнуть не должно, если учесть, что транзистор состоит из двух диодов, включенных последовательно или катодами, или анодами:
Здесь все просто, ставим мультиметр на значок прозвонки “•)))” и начинаем пробовать все вариации, пока не найдем эти два диода. Вывод, где эти диоды соединяются либо анодами, либо катодами – это и есть база. Чтобы найти коллектор и эмиттер, сравниваем падение напряжение на этих двух диодах. Между коллектором и базой ом оно должно быть меньше, чем между эмиттером и базой. Давайте проверим, так ли это?
Для начала рассмотрим транзистор КТ315Б:
Ставим мультиметр на прозвонку и базу находим без проблем. Теперь замеряем падение напряжения на обоих переходах. Падение напряжения на базе-эмиттере 794 милливольт
Падение напряжения на коллекторе-базе 785 милливольт. Мы убедились, что падение напряжения между коллектором и базой меньше, чем между эмиттером и базой. Следовательно, средний синий вывод – это коллектор, а красный слева – эмиттер.
Проверим еще транзистор КТ805АМ. Вот его цоколевка (расположение выводов):
Это у нас транзистор структуры NPN. Предположим, базу нашли (красный вывод). Узнаем, где у него коллектор, а где эмиттер.
Делаем первый замер.
Делаем второй замер:
Следовательно, средний синий вывод – это коллектор, а желтый слева – эмиттер.
Проверим еще один транзистор – КТ814Б. Он у нас PNP структуры. База у него – синий вывод. Замеряем напряжение между синим и красным выводом:
а потом между синим и желтым:
Во фак! И там и там 720 милливольт.
Этот способ этому транзистору не помог. Ну не переживайте, для этого есть третий способ…
Способ №3
Почти в каждом современном муль тиметре есть 6 маленьких отверстий, и рядом какие-то буковки, что-то типа NPN, PNP, E, C, B. Вот эти шесть крохотных отверстий как раз и предназначены для того, чтобы замерять коэффициент бета. Я же эти отверстия буду называть дырками. На отверстия они не очень похожи))).
Ставим крутилку мультиметра на значок “hFE“.
Определяем какой он проводимости, то есть NPN или PNP, в такую секцию его и толкаем. Проводимость определяем расположением диодов в транзисторе, если не подзабыли. Берем наш транзистор, которые в обе стороны показал одинаковое падение напряжения на обоих P-N переходах, и суем базу в ту дырочку, где буковка “В”.
Далее суем оставшихся два вывода в дырочки С и Е в этом ряду и смотрим на показания мультика:
Базу не трогаем, а тупо меняем местами два вывода. Опа-на, мультик показал намного больше, чем в первый раз. Следовательно, в дырочке Е находится в настоящее время эмиттер, а в дырочке С – коллектор. Все элементарно и просто ;-).
Способ №4
Думаю, является самым легким и точным способом проверки распиновки транзистора. Для этого достаточно приобрести Универсальный R/L/C/Transis tor-metr и сунуть выводы транзистора в клеммы прибора:
Он сразу вам покажет, жив ли ваш транзистор. И если он жив, то выдаст его распиновку.
Опытные электрики и электронщики знают, что для полной проверки транзисторов существуют специальные пробники.
С помощью них можно не только проверить исправность последнего, но и его коэффициент усиления — h21э.
СОДЕРЖАНИЕ (нажмите на кнопку справа):
Необходимость наличия пробника
Пробник действительно нужный прибор, но, если вам необходимо просто проверить транзистор на исправность вполне подойдет и мультиметр.
Устройство транзистора
Прежде, чем приступить к проверке, необходимо разобраться что из себя представляет транзистор.
Он имеет три вывода, которые формируют между собой диоды (полупроводники).
Каждый вывод имеет свое название: коллектор, эмиттер и база. Первые два вывода p-n переходами соединяются в базе.
Один p-n переход между базой и коллектором образует один диод, второй p-n переход между базой и эмиттером образует второй диод.
Оба диода подсоединены в схему встречно через базу, и вся эта схема представляет собой транзистор.
Ищем базу, эмиттер и коллектор на транзисторе
Как сразу найти коллектор.
Чтобы сразу найти коллектор нужно выяснить, какой мощности перед вами транзистор, а они бывают средней мощности, маломощные и мощные.
Транзисторы средней мощности и мощные сильно греются, поэтому от них нужно отводить тепло.
Делается это с помощью специального радиатора охлаждения, а отвод тепла происходит через вывод коллектора, который в этих типах транзисторов расположен посередине и подсоединен напрямую к корпусу.
Получается такая схема передачи тепла: вывод коллектора – корпус – радиатор охлаждения.
Если коллектор определен, то определить другие выводы уже будет не сложно.
Бывают случаи, которые значительно упрощают поиск, это когда на устройстве уже есть нужные обозначения, как показано ниже.
Производим нужные замеры прямого и обратного сопротивления.
Однако все равно торчащие три ножки в транзисторе могу многих начинающих электронщиков ввести в ступор.
Как же тут найти базу, эмиттер и коллектор?
Без мультиметра или просто омметра тут не обойтись.
Итак, приступаем к поиску. Сначала нам нужно найти базу.
Берем прибор и производим необходимые замеры сопротивления на ножках транзистора.
Берем плюсовой щуп и подсоединяем его к правому выводу. Поочередно минусовой щуп подводим к среднему, а затем к левому выводам.
Между правым и среднем у нас, к примеру, показало 1 (бесконечность), а между правым и левым 816 Ом.
Эти показания пока ничего нам не дают. Делаем замеры дальше.
Теперь сдвигаемся влево, плюсовой щуп подводим к среднему выводу, а минусовым последовательно касаемся к левому и правому выводам.
Опять средний – правый показывает бесконечность (1), а средний левый 807 Ом.
Это тоже нам ничего не говорить. Замеряем дальше.
Теперь сдвигаемся еще левее, плюсовой щуп подводим к крайнему левому выводу, а минусовой последовательно к правому и среднему.
Если в обоих случаях сопротивление будет показывать бесконечность (1), то это значит, что базой является левый вывод.
А вот где эмиттер и коллектор (средний и правый выводы) нужно будет еще найти.
Теперь нужно сделать замер прямого сопротивления. Для этого теперь делаем все наоборот, минусовой щуп к базе (левый вывод), а плюсовой поочередно подсоединяем к правому и среднему выводам.
Запомните один важный момент, сопротивление p-n перехода база – эмиттер всегда больше, чем p-n перехода база – коллектор.
В результате замеров было выяснено, что сопротивление база (левый вывод) – правый вывод равно 816 Ом, а сопротивление база – средний вывод 807 Ом.
Значит правый вывод — это эмиттер, а средний вывод – это коллектор.
Итак, поиск базы, эмиттера и коллектора завершен.
Как проверить транзистор на исправность
Чтобы проверить транзистор мультиметром на исправность достаточным будет измерить обратное и прямое сопротивление двух полупроводников (диодов), чем мы сейчас и займемся.
В транзисторе обычно существуют две структуру перехода p-n-p и n-p-n.
P-n-p – это эмиттерный переход, определить это можно по стрелке, которая указывает на базу.
Стрелка, которая идет от базы указывает на то, что это n-p-n переход.
P-n-p переход можно открыть с помощью минусовое напряжения, которое подается на базу.
Выставляем переключатель режимов работы мультиметра в положение измерение сопротивления на отметку «200».
Черный минусовой провод подсоединяем к выводу базы, а красный плюсовой по очереди подсоединяем к выводам эмиттера и коллектора.
Т.е. мы проверяем на работоспособность эмиттерный и коллекторный переходы.
Показатели мультиметра в пределах от 0,5 до 1,2 кОм скажут вам, что диоды целые.
Теперь меняем местами контакты, плюсовой провод подводим к базе, а минусовой поочередно подключаем к выводам эмиттера и коллектора.
Настройки мультиметра менять не нужно.
Последние показания должны быть на много больше, чем предыдущие. Если все нормально, то вы увидите цифру «1» на дисплее прибора.
Это говорит о том, что сопротивление очень большое, прибор не может отобразить данные выше 2000 Ом, а диодные переходы целые.
Преимущество данного способа в том, что транзистор можно проверить прямо на устройстве, не выпаивая его оттуда.
Хотя еще встречаются транзисторы где в p-n переходы впаяны низкоомные резисторы, наличие которых может не позволить правильно провести измерения сопротивления, оно может быть маленьким, как на эмиттерном, так и на коллекторном переходах.
В данном случае выводы нужно будет выпаять и проводить замеры снова.
Признаки неисправности транзистора
Как уже отмечалось выше если замеры прямого сопротивления (черный минус на базе, а плюс поочередно на коллекторе и эмиттере) и обратного (красный плюс на базе, а черный минус поочередно на коллекторе и эмиттере) не соответствуют указанным выше показателям, то транзистор вышел из строя.
Другой признак неисправности, это когда сопротивление p-n переходов хотя бы в одном замере равно или приближено к нулю.
Это указывает на то, что диод пробит, а сам транзистор вышел из строя. Используя данные выше рекомендации, вы легко сможете проверить транзистор мультиметром на исправность.
Содержание страницы
- 1. Исходный размер и понятие о базах
- 2. Понятие о базах, их классификация и назначение
- 2.1. Стандартные базы
- 2.2. Призматическое тело
- 2.3. Длинное цилиндрическое тело
- 2.4. Короткое цилиндрическое тело
- 3. Основные принципы базирования при механической обработке
- 3.1. Принцип постоянства баз
- 3.2. Принцип последовательности перемены баз
- 3.3. Выбор черновых баз
- 3.4. Принцип совмещения или единства баз
- 4. Схемы базирования и установа заготовок на станках и в приспособлениях
1. Исходный размер и понятие о базах
Термины и определения основных понятий базирования и баз регламентируются ГОСТ 21495-76.
Базированием называют придание заготовке или изделию требуемого положения относительно выбранной системы координат (ГОСТ 21495-76).
База – это элементы изделия: поверхности, оси, линии или точки, положение которых ориентирует изделие определенным образом на станке или в сборочной единице.
База – поверхность или выполняющие ту же функцию сочетание поверхностей, ось, точка, принадлежащие заготовке или изделию и используемые для базирования.
Комплект баз – совокупность трех баз, образующих систему координат заготовки или изделия.
Твердое тело может быть неподвижным, т. е. занимать постоянное, неизменное положение в данной системе координат, или может передвигаться, изменять свое положение относительно определенной системы координат.
Постоянное положение или движение тела достигается наложением геометрических или кинематических связей.
Условие, ограничивающее скорость перемещения, называется кинематической связью.
Условие, ограничивающее перемещение, называется геометрической связью.
Геометрические связи бывают односторонние и двусторонние.
Пример двусторонней связи – шар, находящийся между двумя параллельными плоскостями, расстояние между которыми равно диаметру шара (рис. 1).
Плоскости ограничивают перемещение шара вдоль оси, проходящей перпендикулярно к этим плоскостям.
Двустороннюю связь можно выразить уравнением:
(1)
где ZC – координата центра шара; r – радиус шара.
Рис. 1. Пример двусторонней связи
При односторонней геометрической связи движение шара в направлении координатной оси не ограничивается плоскостью, и его положение не определяется однозначно.
Одностороннюю связь можно выразить неравенством:
(2)
Область положения шара по оси может определяться двумя параллельными плоскостями, удаленными друг от друга на расстояние 2r + а.
Тогда геометрические связи наложенные на шар, выражаются двумя неравенствами:
(3)
т. е. двумя односторонними геометрическими связями.
Если в этом выражении соблюдается знак равенства, то односторонняя связь исключает движение шара по нормали к плоскости.
Положение механической системы с наложенными геометрическими и кинематическими связями в пространстве определяется обобщенными координатами системы (рис. 2).
Рис. 2. Обобщенные координаты системы
Обобщенными координатами называются независимые параметры, определяющие положение или движение механической системы в пространстве (рис. 3).
Координата ZC по оси Z является обобщенной координатой шара. Числом обобщенных координат выражается число степеней свободы механической системы. Свободное твердое тело (не имеющее геометрических и кинематических связей) обладает шестью степенями свободы. Оно может перемещаться вдоль координатных осей и вращаться вокруг этих осей.
При механической обработке заготовку необходимо надежно установить и закрепить. Из теоретической механики известно, что твердое тело в пространстве имеет шесть степеней свободы, т. е. возможность перемещаться и вращаться относительно трех координатных осей в декартовой системе координат. Накладывая на тело связи, его лишают степеней свободы. Число связей для абсолютно неподвижного тела равно числу степеней свободы, т. е. шести.
С точки зрения теоретической механики базирование заключается в придании телу определенного положения путем конечного перемещения его из произвольного положения в положение, заданное двусторонними геометрическими связями, выраженными размерами или координатами.
Рис. 3. Обобщенные координаты системы
Таким образом, чтобы обеспечить полную неподвижность изделия, т. е. надежно его установить и закрепить, необходимо лишить его шести степеней свободы, т. е. наложить на него шесть связей. Лишение твердого тела шести степеней свободы в технологии машиностроения называется правилом шести точек.
Опорная точка – идеальная точка контакта поверхности заготовки и приспособления, лишающая заготовку 1 степени свободы, препятствующая ее перемещению в направлении, перпендикулярном опорной поверхности
При базировании заготовки или изделия в выбранной системе координат, чтобы лишить тело степеней свободы, на него необходимо наложить двусторонние геометрические связи.
Необходимое и достаточное условие для базирования твердого тела – наложение на него не более шести двусторонних связей.
Правило шести точек – создание шести опорных точек при базировании.
Если по служебному назначению изделие имеет определенное число степеней свободы, то соответствующее количество связей не накладывается. Если требуется обеспечить движение, то накладываются соответствующие кинематические связи.
2. Понятие о базах, их классификация и назначение
Согласно ГОСТ 21495-76, классификация машиностроительных баз производится по трем признакам: по назначению, лишаемым степеням свободы и характеру проявления. По назначению машиностроительные базы подразделяются на конструкторские, измерительные и технологические.
Базой называют совокупность поверхностей, линий или точек детали, по отношению к которым ориентируются другие детали изделия или по отношению к которым ориентируются поверхности детали, обрабатываемые на данной операции.
В зависимости от служебного назначения все поверхности детали подразделяются на основные, присоединительные (вспомогательные), исполнительные и свободные.
Под основными понимают поверхности, с помощью которых определяют положение данной детали относительно другой, к которой она присоединяется.
Присоединительными называют поверхности детали, определяющие положение всех присоединяемых к ней других деталей.
Исполнительные поверхности – поверхности, выполняющие служебное назначение.
Свободной поверхностью называют поверхность, предназначенную для соединения основных, присоединительных и исполнительных поверхностей между собой с образованием совместно необходимой для конструкции формы детали.
Элементы детали, образующие комплекты основных и присоединительных поверхностей, характеризуют:
- технологическую базу, т. е. элементы, используемые в процессе обработки для установления взаимосвязи между расположением режущей кромки инструмента и обрабатываемой поверхностью. Используется при обработке заготовок на станках;
- конструкторскую базу, т. е. поверхность (линию, точку) детали, по отношению к которой определяют расчетное положение двух поверхностей и геометрических элементов данной детали.
В качестве конструкторских баз используют также линии симметрии: оси валов и отверстий, биссектрисы углов и т. п. Для всех деталей вращения одной из конструкторских баз всегда является ось вращения;
- измерительную базу, т. е. поверхность (линии, точки) детали, от которой производится отсчет выполняемых размеров при обработке или измерении заготовки, а также при проверке взаимного расположения поверхности или элементов.
Сборочными базами называют поверхности, с помощью которых определяют положение детали при сборке.
Установочной базой детали называют совокупность поверхностей, линий или точек, относительно которых ориентируется при изготовлении детали поверхность, обрабатываемая на данной операции.
2.1. Стандартные базы
Конструкторской называется база, которая используется для определения положения детали или сборочной единицы в изделии.
Конструкторские базы подразделяются на основные и вспомогательные базы. Основной называется конструкторская база данной детали, которая определяет ее положение при присоединении к другой детали. Вспомогательной называется конструкторская база данной детали, которая определяет положение другой, присоединяемой к ней детали.
Примеры основных и вспомогательных баз показаны на рис. 4. В данном случае колесо при сборке присоединяется к валу, и поверхности 1, 2, 3 зубчатого колеса являются основными конструкторскими базами, а поверхности 4, 5, 6 шпонки и вала являются вспомогательными конструкторскими базами.
Рис. 4. Конструкторские базы: 1, 2, 3 – основные; 4, 5, 6 – вспомогательные
Измерительной называется база, используемая для определения относительного положения изделия и средств измерения. Иными словами, измерительной базой называется элемент изделия, от которого производится отсчет размеров или отклонений размеров при измерительном контроле.
Пример измерительной базы показан на рис. 5. Здесь измерительная база определена нормированием отклонения от параллельности верхней плоскости относительно базовой. Для контроля этого отклонения стойку 2 с индикатором 3 перемещают по базовой плоскости А детали 1.
Рис. 5. Пример измерительной базы
Технологической называется база, которая используется для определения положения заготовки или изделия при изготовлении или ремонте. Иными словами, это поверхности, линии или точки, которые определяют положение заготовки на станке при механической обработке.
По лишаемым степеням свободы, независимо от назначения, базы делятся на установочные, направляющие, опорные, двойные направляющие, двойные опорные.
Установочной называется база, которая используется для наложения на изделие связей, лишающих его трех степеней свободы – перемещения вдоль одной координатной оси и поворотов вокруг двух других осей.
Направляющей называется база, которая используется для наложения на изделие связей, лишающих его двух степеней свободы – перемещения вдоль одной координатной оси и поворота вокруг другой оси.
Опорной называется база, которая используется для наложения на изделие связей, лишающих его одной степени свободы – перемещения вдоль одной координатной оси или поворота вокруг оси.
Двойной направляющей называется база, которая используется для наложения на изделие связей, лишающих его четырех степеней свободы – перемещения вдоль двух координатных осей и поворотов вокруг этих осей.
Двойной опорной называется база, которая используется для наложения на изделие связей, лишающих его двух степеней свободы – перемещения вдоль двух координатных осей.
Применим классификацию баз по лишаемым степеням свободы для вышерассмотренных примеров базирования тел. Для призматического тела, представленного на рис. 7, плоскости с одной, двумя и тремя опорными точками, являются соответственно опорной, направляющей и установочной базами. Для длинного цилиндрического тела на рис. 8 боковая поверхность является двойной направляющей базой, а торцевая поверхность и поверхность шипа являются опорными базами. Для диска на рис. 9 торцевая поверхность является установочной базой, боковая поверхность – двойной опорной базой, а поверхность шипа – опорной базой. По характеру проявления базы делятся на явные и скрытые.
Явной называется база в виде реальной поверхности, разметочной риски или точки пересечения рисок. Все базы, рассмотренные выше, были представлены реальными поверхностями. Поэтому они относятся к явным базам.
Скрытой называется база в виде воображаемой плоскости, оси или точки. Такие базы проявляют себя только при закреплении заготовок в самоцентрирующих зажимах. Самоцентрирующими зажимами называются приспособления, в которых при закреплении заготовок оси симметрии зажимов и заготовок совмещаются. Это достигается за счет синхронного перемещения зажимных элементов в направлении осей симметрии приспособления или за счет центрирования заготовок в самих зажимных элементах (губках) приспособлений. Примеры скрытых технологических баз при установке деталей в самоцентрирующих зажимах представлены на (рис. 6).
Рис. 6. Технологические скрытые базы (1, 2, 3)
В самоцентрирующем устройстве, представленном на рис. 6, а, совмещение осей симметрии заготовки и зажимного устройства достигается за счет синхронного перемещения зажимов в виде призм. Эти зажимы перемещаются одновременно с одинаковой скоростью навстречу друг другу.
Оси заготовки 1 и 2 после закрепления будут совмещены с осями симметрии приспособления и зажимов. Новая заготовка той же конфигурации, если не учитывать погрешности ее размеров, формы и расположения поверхностей, займет положение предыдущей.
При установке цилиндрической заготовки в самоцентрирующем трехкулачковом патроне будут совмещаться оси заготовки и патрона (рис. 6, б). Согласно ГОСТ 21495-76, такие оси при установке заготовок в самоцентрирующих устройствах следует принимать в качестве баз. Однако фактическое базирование осуществляется за счет контакта реальных поверхностей заготовок, которые имеют различного рода погрешности. Поэтому в реальных условиях оси заготовок с осями самоцентрирующих устройств не совпадают и скрытые базы таковыми не являются. Практическое значение скрытых баз заключается в том, что их обозначение в технологической документации указывает на необходимость закрепления заготовки в самоцентрирующем устройстве для повышения точности при механической обработке.
При образовании терминов баз (названий) признаки классификации должны располагаться в следующей последовательности: по назначению, лишаемым степеням свободы и характеру появления. Например: «Конструкторская основная установочная явная база», «Технологическая направляющая скрытая база», «Измерительная опорная явная база». Кроме того, в стандарте имеются следующие определения баз.
Проектная база – поверхность, выбранная при проектировании изделия, технологического процесса изготовления или ремонта этого изделия.
Действительная база – поверхность, фактически используемая в конструкции при изготовлении, эксплуатации и ремонте изделия.
В стандарте нет пояснений относительно этих определений. Поэтому можно предполагать, что проектная база используется при проектировании в конструкторской и технологической документации, от которой проставлены конструкторские или технологические размеры, а действительная является элементом реального изделия.
Схемы базирования зависят от формы поверхностей обрабатываемых заготовок, большинство которых, как правило, ограничено плоскими, цилиндрическими или коническими поверхностями, используемыми в качестве опорных баз.
2.2. Призматическое тело
Прижмем призматическое тело к плоскости XOY декартовой системы координат, лишив его тем самым трех степеней свободы – перемещения вдоль оси Z и вращения вокруг осей X и Y (рис. 7).
Таким образом, получим три двусторонние связи в виде опорных точек 1–3. Теперь прижмем тело к плоскости YOZ. В этом случае образуются две двусторонние связи 4 и 5. Общее число опорных точек становится равным пяти. Чтобы лишить тело шестой степени свободы, его необходимо прижать к плоскости XOZ. Таким образом, возникает шестая двусторонняя связь, и тело лишается всех степеней свободы.
Необходимо, чтобы силы закрепления и резания действовали в одном направлении. Это исключает смещение заготовки под действием сил резания, что может привести к поломке инструмента, порче изделия и травмам.
Рис. 7. Базирование и закрепление призматического тела: 1–6 – двусторонние связи или опорные точки
2.3. Длинное цилиндрическое тело
Рассмотрим применение правила шести точек при базировании и закреплении длинного цилиндрического тела (рис. 8).
Рис. 8. Базирование и закрепление длинного цилиндрического тела
Установим и закрепим его на призме или в цанге (втулке с разрезами), лишив его тем самым четырех степеней свободы – перемещения и вращения относительно осей X и Z (рис. 8, а, б). Таким образом, получим четыре двусторонних связи в виде опорных точек 1–4 (рис. 8, в). Пятую связь получим, прижимая торцевую поверхность цилиндра к координатной плоскости XOZ. Это будет пятая опорная точка, которая устраняет возможность перемещения цилиндра вдоль собственной оси. Шестую связь, которая препятствует вращению цилиндра вокруг этой оси, можно получить геометрическим или силовым замыканием.
Геометрическое замыкание осуществляется соединением цилиндра с опорой с помощью шпонки или шипа, который может быть размещен на торце цилиндра. Эта связь является двусторонней и представлена в виде опорной точки 6 (рис. 8, в)
В этом случае положение цилиндра будет полностью определено.
Силовое замыкание получим, если цилиндр только прижать к призме или зажать в цанге без соединения шпонки или шипа с опорами. Тогда на базовой поверхности возникнут силы трения, которые будут препятствовать вращению цилиндра вокруг собственной оси. Такие связи будем называть фрикционными. На схеме (рис. 8, а) эти связи представлены силами трения Fтр. За счет сил трения осуществляется закрепление заготовки. Однако базирование заготовки в окружном направлении отсутствует, т. к. положение заготовки в этом направлении до закрепления может быть любым, а при базировании заготовка должна занимать вполне определенное положение. Поэтому фрикционная связь не уменьшает число степеней свободы заготовки. Очевидно, что для существования фрикционных связей необходимо, чтобы силы резания не превышали сил трения, которые возникают на опорных поверхностях при закреплении.
2.4. Короткое цилиндрическое тело
Цилиндрическое тело типа диска будем считать коротким, если его длина существенно меньше диаметра (1 ≤ 0,6d).
Прижмем диск к плоскости XOZ, лишив его трех степеней свободы, т. е. перемещения вдоль оси Y и вращения вокруг осей X и Z. Таким образом, получим три двусторонних связи в виде опорных точек 1–3 (рис. 9, в).
Контакт боковой поверхности диска с призмой (рис. 9, а) или втулкой с разрезом (рис. 9, б) лишает его двух степеней свободы, т. е. перемещений вдоль осей X и Z с образованием двухсторонних связей в виде опорных точек 4 и 5. Шестую связь в виде опорной точки 6 можно получить, как и в предыдущем случае, с помощью шипа.
Рис. 9. Базирование и закрепление короткого цилиндрического тела
3. Основные принципы базирования при механической обработке
3.1. Принцип постоянства баз
При механической обработке заготовок, особенно сложной конфигурации, возникает необходимость менять их положение. Если при установке в новом положении меняются базы, то возникают отклонения от перпендикулярности, параллельности, соосности и другие погрешности между ранее и вновь обработанными поверхностями. Каждая новая смена баз увеличивает эти погрешности. В пределах одной операции, когда обработка ведется с одного установа, они минимальны. Таким образом, суть принципа постоянства баз можно сформулировать следующим образом. При механической обработке изделий для повышения точности расположения поверхностей число баз на всех операциях должно быть минимальным, и, если это возможно, следует использовать одну и ту же базу. В пределах одной операции необходимо стремиться вести обработку с одного установа.
Рассмотрим влияние смены баз на примере токарной обработки валика (рис. 10).
Рис. 10. Иллюстрация принципа постоянства баз при токарной обработке вала: а – в центрах без смены баз; б – в трехкулачковом патроне со сменой баз
Для данного случая возможны два варианта обработки: в центрах с поводковым патроном и в трехкулачковом патроне с поджатием вала с правого торца, вращающимся центром. Структура операции в обоих случаях одинакова. Операция выполняется за два установа. На первом установе обрабатываются поверхности 1 и 2, на втором – поверхность 3.
При обработке вала в центрах (рис. 10, а) базами являются центровые отверстия на торцах вала. При смене установа базы не меняются. Поэтому отклонения от соосности поверхностей, которые обрабатываются на разных установах, не возникает. При точении вала в трехкулачковом патроне базой является наружная поверхность заготовки. Ось этой поверхности совпадает с осью патрона.
Ось обрабатываемой поверхности совпадает с осью шпинделя. Однако между осями патрона и шпинделя из-за погрешности приспособления имеется отклонение. Поэтому возникает отклонение от соосности базовой и обработанной поверхностей. При обработке вала в патроне (согласно рис. 13, б) поверхности 1 и 2 будут соосными, т. к. они обрабатывались на одном установе. При смене установа базой становится поверхность 1, с которой будет обрабатываться поверхность 3. В силу вышеуказанных причин возникает отклонение от соосности этих поверхностей.
3.2. Принцип последовательности перемены баз
Согласно этому принципу, если обработка заготовки производится за несколько установов с переменой баз, то смену баз надо производить так, чтобы сначала обрабатывались поверхности с менее точными размерами и отклонениями, а затем с более точными. Если по технологии поверхность с точной геометрией обрабатывается в первую очередь, то в конце обработки изделия обработку этой поверхности следует повторить для получения окончательных размеров.
Необходимость следовать этому принципу заключается в том, что при производстве заготовок литьем или обработкой давлением в металле из-за неравномерности нагрева, охлаждения, упрочнения и т. д. возникают внутренние (остаточные) напряжения. Эти напряжения снимают отжигом или старением заготовок. Полностью снять эти напряжения не удается. Металл заготовки под действием внутренних напряжений находится в статическом равновесии.
Удаление слоя металла с поверхности при механической обработке приводит к нарушению этого равновесия и перераспределению внутренних напряжений. При нарушении равновесия под действием напряжений возникают деформации, которые искажают геометрию изделия. Поэтому каждый акт снятия припуска с поверхности сопровождается деформациями заготовки. В этой связи поверхности, которые были обработаны в первую очередь и имели правильную геометрическую форму, могут ее потерять, что вызывает необходимость повторной обработки этих поверхностей.
3.3. Выбор черновых баз
Механическая обработка заготовок производится за несколько установов с использованием различных технологических баз. На первой операции используются черновые базы, т. е. необработанные поверхности. Обработанные на первой операции поверхности используются затем в качестве чистовых баз при последующей обработке.
При выборе черновых баз необходимо придерживаться следующих рекомендаций:
1. Для надежного базирования и закрепления черновая база должна иметь простую форму, ровную поверхность, достаточные размеры и наименьшую шероховатость поверхности. Недопустимо использовать поверхности с остатками прибылей, литниковых систем, со следами разъема опок, штампов, пресс-форм и т. д. Черновые базы следует использовать только один раз.
Дальнейшую обработку необходимо вести при установке заготовок на обработанные поверхности, т. е. чистовые базы. Положение заготовки при повторной установке на черновые базы из-за погрешностей их формы и расположения отличается от предыдущего. Обработка различных поверхностей с разных положений заготовки влияет на точность их взаимного расположения.
2. В качестве черновых баз следует выбирать поверхности, которые у готовой детали остаются необработанными.
В этом случае у готовой детали будет обеспечена точность взаимного расположения обработанных и необработанных поверхностей, например их параллельность. Для иллюстрации этого положения рассмотрим следующий пример. На рис. 11, а представлена деталь, у которой поверхности (А) и (Б) должны быть обработаны согласно чертежу.
Рис. 11. Иллюстрации к выбору черновых баз: 1 – резец; 2 – заготовка; 3 – кулачок патрона
Пусть поверхность (А) из-за ее больших размеров выбрана в качестве установочной базы и обрабатывается первой. Затем будет обработана поверхность (Б). На первой операции при обработке поверхности (А) возможна установка на поверхность (Б) (рис. 11, б) или на поверхность (В) (рис. 11, в). Второй вариант установки является более рациональным, т. к. в этом случае на первой операции обеспечивается параллельность поверхностей (А) и (В), а затем на второй операции – параллельность им поверхности (Б) (рис. 11, г).
3. Если на детали обрабатывается несколько поверхностей, то на первом установе в качестве черновой базы следует выбирать поверхность, которая имеет наименьший припуск. Иначе некоторые участки этой поверхности могут остаться необработанными. При обработке резанием такие участки поверхности называют «черными». Рассмотрим пример. На рис. 11, д представлен вал, который обрабатывается на токарном станке. Пусть обработка производится с закреплением заготовки в трехкулачковом патроне за два установа.
Закрепление детали по необработанной поверхности в патроне вызывает биение детали при вращении из-за погрешностей ее формы – овальности или огранки. Влияет также на величину биения отклонение от соосности патрона и шпинделя. При вращении происходит биение детали из-за погрешностей ее формы – овальности или огранки неравномерно. Поэтому чем больше биение, тем больший припуск приходится назначать на поверхность, которая обрабатывается. Так как заготовка имеет постоянный по длине диаметр, то поверхность (А) имеет больший припуск, чем поверхность (Б). В этой связи на первом установе следует сначала обработать поверхность (А), снизив тем самым погрешности ее формы, а следовательно, и биение заготовки при базировании по ней. Затем на втором установе обрабатывается поверхность (Б).
4. При токарной обработке тел вращения необходимо в качестве черновой базы выбирать поверхность, которая обрабатывается на данном установе. Это уменьшает биение обрабатываемой поверхности, что позволяет снизить припуск на обработку. Рассмотрим пример. На рис. 11, е представлена схема растачивания отверстия в литой заготовке. Такие отливки могут иметь значительное отклонение от соосности наружной и внутренней поверхностей.
Если базирование осуществляется по внутренней поверхности, то минимальная величина припуска, удаляемого при обработке, будет определяться погрешностями ее формы и закрепления в трехкулачковом патроне. При базировании по наружной поверхности к этим погрешностям добавится погрешность из-за отклонения от соосности наружной и внутренней поверхностей исходной заготовки. В этой связи припуск на механическую обработку внутренней поверхности следует увеличить на величину этой погрешности, чтобы исключить образование на ней черных, т. е. необработанных участков.
3.4. Принцип совмещения или единства баз
Данный принцип следует использовать при обработке деталей партиями на предварительно настроенных станках по методу автоматического получения размеров. Суть принципа совмещения баз заключается в том, что для повышения точности обработки в качестве технологических баз следует выбирать поверхности, которые являются одновременно измерительными базами. Если технологическая база не совпадает с измерительной базой, то возникает погрешность базирования.
Погрешность базирования возникает из-за влияния рассеяния размера, полученного на предыдущей операции, на точность размера, который получается на текущей операции. Рассмотрим, как возникает эта погрешность. На рис. 12, а представлена деталь, при обработке которой необходимо выдержать размеры (а) и (в) с допусками Та = 0,36 мм и Тв = 0,61 мм
Рис. 12. Иллюстрации к образованию погрешности базирования
Эскизы операций механической обработки, т. е. рисунки с изображением положения заготовки, режущего инструмента, указанием баз, обрабатываемых поверхностей и их размеров, представлены на рис. 12, б, в. Пусть на первой операции на горизонтальнофрезерном станке обрабатывается поверхность (Б) в размер (в) с установкой на поверхность (А), которая является технологической установочной базой (рис. 12, а).
На второй операции с той же базы при удалении напуска образуется поверхность (Г), а также поверхность (В), привязанная к поверхности (Б) размером (а) (рис. 12, в). Поверхность (Б) является измерительной базой, т. к. от этой поверхности методом пробных ходов и замеров производилась настройка станка для получения размера (а). Тогда любой вариант настройки станка на второй операции не позволяет получить размер (а) в пределах его допуска для всей партии заготовок. Часть заготовок при этом может оказаться бракованной. Причиной брака является образование погрешности базирования из-за нарушения принципа совмещения технологической и измерительной баз, точнее из-за влияния рассеяния размера, полученного на предыдущей операции, на размер, который получается на текущей операции.
Рассмотрим возможность использования принципа совмещения баз для данного примера. Установим на второй операции заготовку на поверхность (Д) с упором в поверхность (Б) (рис. 13, а). Поверхность (Д) станет технологической установочной базой, а поверхность (Б) – технологической направляющей базой. В то же время поверхность (Б) была определена ранее как измерительная база, т. к. от этой поверхности был задан размер (а). Таким образом, имеет место совмещение технологической и измерительной баз. При такой установке поверхность (Б) для каждой заготовки будет занимать одно и то же положение, а положение поверхности (А) будет зависеть от рассеяния размера (в). Погрешность базирования из-за влияния рассеяния размера (в) на размер (а) не возникает, а допуск на размер (в) теперь может быть любым.
Другим вариантом решения является совмещение измерительной базы с технологической настроечной. В этом случае обработка ведется за один рабочий ход комплектом фрез, диаметр которых подобран так, чтобы выдерживался размер (а) в пределах заданного допуска (рис. 13, б).
Рис. 13. Совмещение измерительной базы с технологическими: а – направляющей; б – настроечной
4. Схемы базирования и установа заготовок на станках и в приспособлениях
При проектировании технологических процессов механической обработки необходимо решать задачу базирования и закрепления заготовки на станке или в приспособлении. Решение этой задачи заключается в выборе баз и устройств, необходимых для закрепления заготовки. Результаты этого решения оформляются в виде схем базирования и установа.
Схемой базирования, по ГОСТ 21495-76, называется схема расположения опорных точек на базах. На схеме базирования изображается контур изделия в проекциях и опорные точки на базах, которые символизируют двухсторонние связи. Схема базирования призматической детали по трем взаимно-перпендикулярным плоскостям с условным изображением опорных точек приведена на рис. 14.
Стандартом установлены следующие правила изображения схемы базирования:
- все опорные точки на схеме изображают условными знаками и нумеруют порядковыми номерами, начиная с базы, на которой располагается наибольшее количество опорных точек;
- при наложении в какой-либо проекции одной опорной точки на другую изображается одна точка, а около нее проставляют номера совмещенных точек;
- если опорные точки расположены на втором плане за контуром детали, то они изображаются штриховыми линиями;
- число проекций заготовки на схеме базирования должно быть достаточным для четкого представления о размещении опорных точек.
Рис. 14. – Схема базирования призматической детали с условным обозначением опорных точек 1–6: а – на линии (контуре); б – на поверхности (плоскости), А, В, С – базы детали
На схеме базирования указаны базы с опорными точками. Однако схема базирования не определяет, каким образом и с помощью каких устройств реализована та или иная двухсторонняя связь. Для этой цели в технологической документации оформляется схема установа, на которую наносят контур изделия, а также условные обозначения опор, зажимов и установочных устройств, с помощью которых производится базирование и закрепление заготовки.
Графические обозначения установлены ГОСТ 3.1107-81 и представлены в табл. 1, 3.2, 3.4. В технологической документации для условных обозначений зажимов, опор и установочных устройств следует применять сплошную тонкую линию, согласно ГОСТ 2.303-79. В табл. 1 приведен один из вариантов конструкций опор.
Примечание: допускается обозначение подвижной, плавающей и регулируемой опор изображать как обозначение неподвижной опоры на аналогичных видах.
Для двойных зажимов длина плеч устанавливается разработчиком в зависимости от расстояния между точками приложения сил; Обозначение двойного зажима на виде спереди или сзади при совпадении точек приложения силы допускается изображать как обозначение одиночного зажима на аналогичных видах. Допускается упрощенное обозначение двойного зажима в виде рис. 15.
Рис. 15. Двойной зажим
Таблица 1. Условное обозначение опор в технологической документации
Наименование опоры | Обозначение опоры на видах | Варианты конструкции | ||
Спереди, сзади | Сверху | Снизу | ||
1. Неподвижная | ||||
2. Подвижная | ||||
3. Плавающая | ||||
4. Регулируемая |
Таблица 2. Условное обозначение зажимов в технологической документации
Наименование зажима | Обозначение зажимов на видах | ||
Спереди, сзади | Сверху | Снизу | |
1. Одиночный | |||
2. Двойной |
На рис. 16 показаны принципиальные схемы действия одиночного и двойного зажимов.
Рис. 16. Схема действия одиночного и двойного зажима: 1 – заготовка; 2 – пневмоили гидроцилиндр; 3 – шарнир; 4 – неподвижные опоры
Применение двойного зажима уменьшает прогиб заготовки, что повышает точность обработки. Шарнирное соединение коромысла зажимов со штоком цилиндра обеспечивает одновременный контакт обоих зажимов с заготовкой.
Условные обозначения зажимов различного типа и действия представлены на рис. 17. Количество точек приложения сил зажима к изделию показывают справа от обозначения зажима, а принцип действия – слева, за исключением цанговых устройств.
Рис. 17. Условные обозначения зажимов различного типа и действия: 2, 3, 4 – патроны двух-, трех- и четырехкулачковые; Ц – патроны и оправки цанговые; Г – патроны и оправки с гидропластовым зажимом; патроны и зажимы: Р – пневматические; Н – гидравлические; Е – электрические; М – магнитные; ЕМ – электромагнитные; без обозначения – прочие
К установочным устройствам стандартом отнесены: центр неподвижный, центр вращающийся, центр плавающий, оправка цилиндрическая, оправка шариковая (роликовая), патрон поводковый (табл. 3). Для указания формы рабочей поверхности опор, зажимов и установочных устройств применяются обозначения, представленные в табл. 3. Обозначение форм рабочих поверхностей наносят слева от обозначения опоры, зажима или установочного устройства.
Примечание: допускается обозначение опор и установочных устройств, кроме центров, наносить на выносных линиях соответствующих поверхностей.
Таблица 3. Условное обозначение установочных устройств в технологической документации
Наименование установочного
устройства |
Обозначение установочного устройства на видах | |
Спереди, сзади, сверху, снизу | Слева, справа | |
1. Центр неподвижный | Без обозначения | |
2. Центр вращающийся | Без обозначения | |
3. Центр плавающий | Без обозначения | |
4. Оправка цилиндрическая | ||
5. Оправка шариковая | ||
6. Патрон поводковый |
Таблица 4. Условные обозначения формы рабочей поверхности опор, зажимов и установочных устройств
Наименование
формы рабочей поверхности |
Обозначение формы
рабочей поверхности на всех видах |
Форма реальной поверхности |
1. Плоская | ||
2. Сферическая | ||
3. Цилиндрическая (шариковая) | ||
4. Призматическая | ||
5. Коническая | ||
6. Ромбическая | ||
7. Трехгранная |
Для указания рельефа рабочих поверхностей (рифленая, резьбовая, шлицевая) следует применять обозначения, приведенные на рис. 18.
Рис. 18. Условное обозначение опоры, зажима и неподвижного центра с рифленой поверхностью
Из всего вышесказанного следует, что механическая обработка заготовок производится за несколько установов с использованием различных технологических баз. На первой операции используются черновые базы, т. е. необработанные поверхности. Обработанные на первой операции поверхности используются затем в качестве чистовых баз при последующей обработке.
Это выдержка из восьмой главы книги Rodney Landrum: «SQL Server Tacklebox», в которой описывается, как DBA может устранить последствия повреждения данных. Будут продемонстрированы инструменты и сценарии, необходимые для своевременного поиска и устранения повреждений данных и предотвращения их попадания в резервные копии.
Чудовище Data Corruption может быть тихим и незаметным убийцей пользовательских данных. Оно может нанести удар сразу или ждать неделями, прежде чем проявится сущим кошмаром. Нет, я не говорю о разработчиках, речь пойдёт о повреждении базы данных.
Если Вы достаточно долго работаете администратором баз данных, то уже наверняка сталкивались с этим монстром по крайней мере в одной из его многочисленных форм. Часто такие повреждения происходят после сбоя электропитания, когда сервер вместо того, чтобы корректно завершить работу, просто умирает в процессе изменения данных. В результате этой, или какой‑либо другой неисправности оборудования, данные или индексы получают повреждения прямо на диске и SQL Server больше не может их использовать, пока целостность не будет восстановлена.
К счастью, есть несколько шагов, которые вы можете предпринять для защиты данных и, что не менее важно, своего места работы, в случае, если такое повреждение произойдёт. Само собой разумеется что прежде всего нужно позаботиться о хорошей стратегии резервного копирования, отсутствие которой равносильно игре в русскую рулетку в одиночку. Однако, тут будет продемонстрировано несколько других методов, основанных на разных командах DBCC. Кроме того, мы рассмотрим сценарий, который обеспечит обнаружение повреждений и сообщит о них по мере выявления, прежде чем они распространятся по вашей инфраструктуре. На основе этого можно рассчитывать что администратор базы данных сможет также ограничить ущерб, который причиняет ещё более свирепый «The Monster at the End of This Book».
PS: Если вам не повезло, и вы никогда не видели «The Monster at the End of This Book» (Jon Stone, иллюстратор Michael Smollin. «Golden Books») с очаровательным монстром Гровером с улицы Сезам в главной роли, то, во‑первых, я вам сочувствую, а во‑вторых, приношу свои извинения, потому что предыдущие ссылки мало что для вас значат. Я могу только порекомендовать вам немедленно ознакомиться с ним вместе с «The Zombie Survival Guide» (автор Max Brooks, Three Rivers Press) и добавить оба в обязательный список изучения для всех новых администраторов баз данных.
Причины Data Corruption
Есть много причин, из‑за которых база данных может повредиться. Чаще всего это происходит после сбоя оборудования. Обычно сбой происходит в дисковой подсистеме, которая отвечает за запись данных на диск. SQL Server ожидает что записываемые на диск данные останутся неизменными после передачи их интерфейсам операционной системы, а затем драйверу контроллера диска и непосредственно самому диску. Например, такого рода повреждение данных может быть вызвано отключением питания в середине транзакции.
Однако не только сбои дисковой подсистемы приводят к повреждению данных. Если вы обновите базу данных с SQL Server 2000 до SQL Server 2005 или выше, а затем проверите её с помощью скрипта, находящего повреждения, представленного в конце этой статьи, вы с удивлением обнаружите сообщения, которые можно истолковать как ошибки в файле базы данных. Однако, к счастью, это просто предупреждения об использовании пространства в фале, которое образовалось из‑за разницы версий базы, и решение проблемы будет в выполнении команды DBCC
UPDATEUSAGE
.
Какой бы ни была причина Data Corruption, администратор базы данных не должен долгое время находиться в неведении о целостности данных в базе. К сожалению, Чудовище Data Corruption часто умеет спрятаться и не высовывает свою страшную голову, пока сервер не обратится к поврежденными данными. К этому времени повреждение может попасть в файлы резервных копий, и, когда вы прибегнете к последнему из средств — восстановлению базы данных, восстановиться может уже имеющая повреждения база. Важность использования надежной стратегии регулярного резервного копирования невозможно переоценить. Кроме того, нужен скрипт или инструмент, который будет регулярно проверять базу данных и сообщать о любых проблемах и повреждениях, пока не стало слишком поздно. Именно такой сценарий будет представлен в этой статье.
Последствия Data Corruption
Как уже говорилось в этой статье, в большинстве случаев повреждения данных связаны с отказом оборудования. Это может быть контроллер жесткого диска или блок питания. Для выявления проблем, которые могут возникнуть из‑за подобных отказов, SQL Server использует функцию вычисления контрольной суммы страницы. Значение контрольной суммы вычисляется во время записи страниц на диск и проверяется при последующем чтении с диска. По существу, если значение контрольной суммы прочитанной страницы не соответствует тому, которое было рассчитано при записи, то SQL Server считает, что данные были изменены вне процесса ядра сервера баз данных. До SQL Server 2005, в качестве опции, можно было включить для базы данных обнаружение разорванных страниц (Torn Page Detection), которое выполняло аналогичные проверки.
Если SQL Server обнаружит повреждение, его реакция на проблему будет зависеть от масштаба ущерба. Если повреждение таково, что база данных недоступна для чтения, SQL Server не сможет инициализировать и загрузить эту базу. Почти во всех таких случаях потребуется полное восстановление базы данных из копии.
Если ущерб ограничен (затронуты только одна или две страницы данных), тогда SQL Server сможет открывать и читать базу данных. Это позволит использовать в качестве инструмента команду DBCC, для оценки и/или устранения ущерба. Имейте также в виду, что в рамках общей процедуры резервного копирования и восстановления у вас есть возможность выполнить восстановление на уровне страниц, если потребуется восстановить только одну или несколько страниц данных. Дополнительные сведения о восстановлении страниц из резервных копий базы данных можно найти по ссылке: Restore Pages (SQL Server)
Прежде чем двигаться дальше, стоит отметить, что несмотря на рекомендации оставлять режим проверки для всех экземпляров баз данных включенным (обнаружение разорванных страниц или контрольную сумму), это привносит накладные расходы, и возможно такую проверку отключить. Идея состоит в том, что, если вы доверяете своей дисковой подсистеме и системе электропитания, можно не включать проверку, если производительность является самой серьезной проблемой. Большинство дисковых подсистем сегодня имеют специальную батарейку, чтобы обеспечить успешное завершение операции записи.
Для SQL 2000 можно было использовать sp_dboption
, которая позволяет включить или отключить обнаружение разорванных страниц. Для более поздних версий вы можете использовать команду ALTER DATABASE
, чтобы включить torn page detection
или checksum
(невозможно включать оба режима одновременно), или можно указать none
для отключения проверок.
Защита от Data Corruption
Помимо частого резервного копирования и проверки баз данных (что позволяет откатиться до того момента, когда баз ещё не была повреждена) хорошо подготовленный администратор базы данных будет иметь в своем распоряжении некоторые инструменты, которые позволяют определить место повреждения и восстановить любые поврежденные данные.
Однако, прежде чем ринуться с подобием мачете в заводь с чудовищами, я должен сообщить вам, что я ни в коем случае не являюсь экспертом в области повреждений баз данных. Я всего лишь обычный администратор базы данных, который с надеется что никогда не столкнется с повреждениями, но хочу быть настолько подготовленным, насколько это возможно, если это произойдет.
Таким образом, я собираюсь сосредоточиться на практических аспектах использования инструментов и скриптов, которые администратор базы данных может использовать для борьбы с Data Corruption, в основном оперируя семейством команд DBCC.
Я не буду слишком глубоко погружаться в недра механизма хранения SQL Server, где можно встретить всевозможные эзотерические термины, относящиеся к тому, как SQL Server физически распределяет или отображает данные в файле (GAM/ SGAM страницы, страницы PFS, цепочки IAM и многое другое). В качестве ссылки на подобный уровень детализации я не могу сделать ничего лучше, чем указать вам на работы Пола Рэндала, в его блоке в категории Corruption: https://www.sqlskills.com/blogs/paul/category/Corruption/
Он многое сделал для разработки команд DBCC, и является признанным экспертом в области повреждений данных и, безусловно, у него больше всего «кислорода в баллоне» для необходимого погружения.
DBCC CHECKDB
DBCC
CHECKDB
— это основная команда, которую администратор базы данных должен использовать для проверки и исправления ошибок согласованности в базах данных SQL Server. DBCC существует уже много лет и представлено в большинстве версий SQL Server. Можно встретить два варианта расшифровки этой аббревиатуры: Database Consistency Checks либо Database Console Commands, последняя из них более точна, поскольку DBCC включает команды, которые выходят за рамки простой проверки согласованности базы данных.
Однако для нас сейчас интересны только согласованность и целостность баз данных. DBCC CHECKDB
на самом деле объединяет другие команды DBCC: DBCC CHECKCATALOG, DBCC CHECKALLOC
и DBCC CHECKTABLE
. Запуск DBCC CHECKDB
включает в себя выполнение и этих команды, поэтому отпадает необходимость запускать их потом отдельно.
Чтобы продемонстрировать, как использовать эти инструменты для поиска и устранения повреждений данных, мне сначала нужно будет создать базу, а затем совершить «злодеяние» по повреждению в ней данных. Если мы начнем с нуля, это облегчит поиск и последующее повреждение страниц данных и/или индексов, поэтому давайте создадим совершенно новую, «незапятнанную» базу с метким названием «NEO». Как видно на рис. 1, в этой новой базе данных не создано ни одного объекта.
Чтобы убедиться, что файлы NEO
ещё не повреждены, мы можем запустить команду DBCC CHECKDB
, результат которой показан на рисунке 2.
Как и ожидалось, сообщений об ошибках согласованности или распределения не было, но все это очень скоро изменится… Я упомянул, что в конце этой книги появится монстр, и это не милый старый Гровер из «Улицы Сезам».
Пожалуйста, не идите на следующую страницу!
DBCC PAGE
Ага, вы все еще читаете, я вижу! Что ж, прежде чем мы выпустим монстра, я хочу показать вам еще одну очень важную команду DBCC, о которой вы, возможно, не знаете, а именно DBCC PAGE
(sys.dm_db_page_info). Она «официально» не документирована, поскольку Microsoft её не поддерживает, но на самом деле я нашел кучу информации об этой команде из хорошо известных и уважаемых источников, таких как Пол Рэндал (Paul Randal), так что я больше не считаю ее недокументированной.
Синтаксис прост:
dbcc page ( {'dbname' | dbid}, filenum, pagenum [, printopt={0|1|2|3} ])
Однако выводимый командой результат может быть весьма пугающим для непосвященного администратора баз данных. Итак, прежде чем мы представим монстра, который портит базы данных, я хочу просмотреть с помощью DBCC PAGE
на базу данных NEO
. Команда выглядит следующим образом:
DBCC PAGE (NEO,1,1,3)
Первая цифра после имени базы «1» — это номер файла, вторая цифра «1» — это номер страницы, а последняя цифра «3» — это параметр подробности выводимой информации, принимает значения от 0 до 3. Значение «3» указывает, что мы хотим видеть не только заголовок страницы, но и детали. Не очень впечатляющий результат показаны на рисунке 3.
Причина того, что результаты оказались не очень информативными, заключается в том, что мы забыли включить важный флаг трассировки (3604
). Если вы работаете с SQL Server и не знакомы с флагами трассировки, свяжитесь со мной, и мы поговорим об этом за кружкой пива. На самом деле, я не против, и буду рад новому товарищу и возможности проявить педантичность.
Однако сейчас я просто отмечу, что для просмотра вывода команды DBCC PAGE
нам нужно запустить команду DBCC TRACEON
. Конкретно:
DBCC TRACEON (3604)
На рис. 4 показаны результаты повторного выполнения DBCC PAGE
с включенным флагом трассировки.
В нижней части листинга видно, что страницы 1:172 – 1:383 не распределены и все страницы имеют коэффициент заполнения 0%. Напомним, что эта база данных без таблиц или каких-либо других объектов, а потому и без вставленных куда-нибудь данных.
Итак, давайте теперь создадим простую таблицу и вставим в нее некоторый объём данных. Скрипт для этого показан в листинге 1. Он создает в базе данных NEO
таблицу с именем ONE
и вставляет в нее 1000 записей (на самом деле 999). Простые вещи, но важным моментом в контексте этого примера является то, что эта загрузка данных приведет к выделению дополнительных страниц в базе данных и заполнению их данными, и мы сможем полюбоваться на эти новые страницы.
USE [NEO]
GO
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[ONE]')
AND type in (N'U'))
DROP TABLE [dbo].[ONE]
GO
CREATE TABLE [dbo].[ONE](
[NEOID] [int] NULL,
[NEOTEXT] [nchar](50) NULL
) ON [PRIMARY]
GO
BEGIN Tran T_Time
DECLARE @SQL_Alphabet varchar(26)
SET @SQL_Alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
DECLARE @rnd_seed int
@rnd_seed = 26
DECLARE @counter int = 1
WHILE @counter < 1000
BEGIN
Insert Into ONE
Values (
@counter,
(select SUBSTRING (@SQl_alphabet,
Cast(RAND() * @rnd_seed as int) + 1,
CAST(RAND() * @rnd_seed as int) + 1)
)
)
SET @counter = @counter + 1
END
Commit Tran T_Time
Листинг 1. Создание и заполнение таблицы ONE.
На рис. 5 показан образец данных, которые были вставлены.
На рисунке 4 видно, что для пустой базы данных страницы 1:172 — 1:383 ещё не были распределены. Повторный запуск DBCC PAGE
должен был показать, что для размещения данных были выделены дополнительные страницы, и они имеют разный процент заполнения. На рис. 6 показан новый результат.
Теперь мы видим, что страницы 1:184 – 1:189 распределены и заполнены на 100 процентов. Выбрав одну из новых страниц (1:184), содержащую только что загруженные данные, можно снова запустить DBCC PAGE
для этой конкретной страницы и получить полную «корзину» информации, как показано на рис. 7.
На рисунке видно, например, что в результате возвращаются фактические значения для NEOID
и NEOTEXT
, 553 и UVWXYZ соответственно. Также там представлен шестнадцатеричный дамп, указывающий на конкретное место в файле данных, где хранится запись с NEOID
= 533: 10006c00 29020000...
Если вы не эксперт в понимании шестнадцатеричных чисел, не бойтесь; я тоже такой. Однако, используя данную информацию, можно найти эту запись и изменить ее вне процесса SQL Server, что нанесет базе серьезный ущерб. Однако для этого «вредительства» мне понадобится мой верный шестнадцатеричный редактор, о котором я вскоре расскажу.
Повреждение страниц с данными
Мы знаем, что таблица ONE
в базе данных NEO
представляет собой кучу, поэтому любое внешнее повреждение будет непосредственно для страниц данных, а не в каком-либо из возможных некластерных индексов.
Случай с повреждением страниц индекса на самом деле не так драматичен, поскольку данные в индексе являются «дубликатами» данных с листового уровня, и поэтому восстановить ущерб относительно легко. Мы рассмотрим этот не смертельный вариант повреждений после того, как рассмотрим «вероломное вмешательство» и, надеюсь, успешное восстановление после повреждения данных в нашей являющейся кучей таблице.
Подлог шестнадцатеричного числа в данных
В мире существует множество редакторов в шестнадцатеричном формате, многие из них бесплатны или имеют бесплатный пробный период. Для этой статьи я загрузил пробную версию «Hex Editor Neo» разработанный HHD Software.
Шестнадцатеричный редактор позволяет администратору просто открывать и просматривать содержимое любого файла, в нашем случае файла данных базы. Хотя это интересное занятие, я бы рекомендовал его только для целей тестирования или обучения, так как это очень опасный инструмент в неопытных руках.
Здесь мы будем использовать шестнадцатеричный редактор для «обнуления» записи в файле данных базы, причём только на одной странице. Это приведет к повреждению, похожему на те, что возникают при аппаратных проблемах, из-за которой на диск записывается несогласованная информация, и при этом база данных не становится нечитаемой для SQL Server.
И хотя я не говорил об этом до сих пор…
Не делайте дальше ничего без предварительного резервного копирования базы данных!
Данные, которые я ухайдакаю (так говорят южане) путём обнуления, находятся на странице данных, показанной на рисунке 7, а именно на 1:184. Чтобы повредить данные на этой странице, сначала нужно остановить службу SQL Server, чтобы корневой файл данных не использовался. У меня это:
C:Program FilesMicrosoft SQL ServerMSSQL.1MSSQLDataNEO.mdf
Затем я просто открываю «Hex Editor Neo» и нахожу местоположение нужной записи с помощью NEOID=553
и NEOTEXT ="UVWXYZ"
, которую мы ранее увидели с помощью DBCC PAGE
.
Большинство шестнадцатеричных редакторов, включая «Hex Editor Neo», имеют возможность поиска значений в файле. Вспомним результаты вывода команды DBCC PAGE
с информацией, которая размещена на странице 1:184, мы просто возьмём значение 10006c00 29020000
и задав его для поиска найдём запись где NEOID равно 553. Как вы можете увидеть на рисунке 8, запись в шестнадцатеричном редакторе выглядит почти идентично выводу команды DBCC PAGE
.
Далее я собираюсь внести в данные одно небольшое изменение, обнулив букву «U», подменив 55 на 00. Вот и все. На рис. 9 показан результат подмены.
Затем я сохраню файл и закрою шестнадцатеричный редактор. Вы тоже должны так сделать, иначе файл данных останется используемым, и будет невозможно инициализировать базу данных после запуска SQL Server. Теперь, наконец, настало время выпустить монстра…
Противостояние с монстром Data Corruption
На первый взгляд все выглядит нормально. База NEO
данных запущена и доступна, и в журнале событий не было сообщений об ошибках. В Management Studio я могу без проблем детализировать объекты базы данных, включая таблицу ONE
. Однако если я попытаюсь запросить таблицу с помощью SELECT * FROM ONE, произойдет нечто пугающее, как показано в листинге 2.
Msg 824, Level 24, State 2, Line 1
SQL Server detected a logical consistency-based I/O error: incorrect checksum (expected: 0x9a3e399c; actual: 0x9a14b99c).
It occurred during a read of page (1:184) in database ID 23 at offset 0x00000000170000 in file
'C:Program FilesMicrosoft SQL ServerMSSQL.1MSSQLDATANEO.mdf'. Additional messages in the SQL Server error log or system event log may provide more detail. This is a severe error condition that threatens database integrity and must be corrected immediately.
Complete a full database consistency check (DBCC CHECKDB). This error can be caused by many factors; for more information, see SQL Server Books Online.
Листинг 2: Последствия Data Corruption в таблице ONE.
Это какое-то шоу ужасов, которое администраторы баз данных не хотели бы увидеть. Очевидно, это очень серьезная ошибка и опасное повреждение. Такая ошибка будет выдаваться каждый раз, когда запись 553 будет попадать в результаты запроса, поэтому любой просмотр таблицы будет приводить к проявлению проблемы.
Такие повреждения нужно уметь быстро исправлять. К счастью, перед повреждением файла данных мы сделали резервную копию. Поэтому, если ничего не поможет, я могу воспользоваться этим файлом резервной копии для восстановления данных. При решении проблем с подобными повреждениями критически важно, чтобы у вас были исправные резервные копии. К сожалению, в реальности это повреждение может оставаться незамеченным в течение нескольких дней, а это будет означать, что ваши резервные копии также будут содержать повреждённые данные.
Если это так, то в какой-то момент вы можете столкнуться с самым худшим из возможных сценариев, а именно с потерей данных. Однако, прежде чем смириться с этим фатальным исходом, я собираюсь победить монстра и посмотреть, смогу ли я решить проблему с помощью DBCC CHECKDB
.
У DBCC CHECKDB
много разных параметров, здесь я коснусь лишь некоторых из них. DBCC CHECKDB
за время своего существования много раз улучшалась и подвергалась значительным переработкам в релизе SQL Server 2005 и более поздних версиях. Одним из самых полезных усовершенствований для администратора баз данных, работающего над устранением проблем с повреждением в базе, является большое количество подробных и полезных сообщений об ошибках.
Итак, погнали, давайте посмотрим, насколько всё плохо и что с этим можно поделать. Для начала я выполню ограниченную проверку согласованности данных на физическом уровне базы данных. Сделать это можно с помощью следующей команды:
DBCC CHECKDB ('neo') WITH PHYSICAL_ONLY;
GO
На рис. 10 показаны её результаты, которые, как и ожидалось, не вдохновляют.
Наихудшим из узнанного является предпоследняя строка, которая говорит, что REPAIR_ALLOW_DATA_LOSS
это минимальный уровень исправления обнаруженных ошибок. Это означает, что мы можем исправить ущерб, запустив DBCC CHECKDB
с опцией REPAIR_ALLOW_DATA_LOSS
, но, как понятно из имени параметра, это приведет к потере данных.
Есть два других уровня восстановления, которые для нас были бы предпочтительнее: REPAIR_FAST
или REPAIR_REBUILD.
Первый имеется только для обратной совместимости и не выполняет восстановление базы данных с 2005 года. Если бы минимальный вариант восстановления был REPAIR_REBUILD
, это указывало бы на то, что повреждение можно было бы легко восстановить, поскольку оно затронуло восстановимую структуру, например, некластерный индекс. Такое повреждение можно исправить перестроением индекса и без опасности потери данных.
Только в крайнем случае рекомендуется использовать варианты восстановления DBCC CHECKDB
которые могут привести к потере данных. Причем восстановление из резервной копии очевидно является предпочтительным выбором, если это приведёт данные в неповрежденное состояние. Это, конечно, будет возможным только если сама резервная копия не содержит поврежденных данных.
Однако сейчас я собираюсь действовать в соответствии с тем, что рекомендовано в выводе команды DBCC CHECKDB
и запускать её с параметром, который определяет вариант быстрого восстановления: REPAIR_ALLOW_DATA_LOSS
. Для работы этой опции база данных должна быть в однопользовательском режиме, поэтому синтаксис будет следующим:
ALTER DATABASE NEO SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
DBCC CHECKDB ('neo', REPAIR_ALLOW_DATA_LOSS)
GO
Результаты выполнения DBCC CHECKDB
команды показаны в листинге 3.
DBCC results for 'ONE'.
Repair: The page (1:184) has been deallocated from object ID 2121058592, index ID 0, partition ID 72057594039042048, alloc unit ID 72057594043301888 (type In-row data).
Msg 8928, Level 16, State 1, Line 1
Object ID 2121058592, index ID 0, partition ID 72057594039042048, alloc unit ID 72057594043301888 (type In-row data): Page (1:184) could not be processed. See other errors for details.
The error has been repaired.
Msg 8939, Level 16, State 98, Line 1
Table error: Object ID 2121058592, index ID 0, partition ID 72057594039042048, alloc unit ID 72057594043301888 (type In-row data), page (1:184). Test (IS_OFF (BUF_IOERR, pBUF->bstat)) failed. Values are 29362185 and -4.
The error has been repaired.
There are 930 rows in 14 pages for object "ONE".
Листинг 3: Ошибка устранена, но данные потеряны.
«Хорошей» новостью является то, что ошибки теперь исправлены. Плохая новость заключается в том, что монстр забрал с собой данные, повреждённая страница в файле данных теперь очищена. Попутно обратите внимание, что в выходных данных присутствует идентификатор объекта таблицы, в которой произошло повреждение, а также идентификатор индекса, который в данном случае равен 0, поскольку у таблицы нет индексов.
Итак, на данный ммент я знаю, что потерял данные, и это была только одна страница данных. Но неизвестно сколько именно данных было на этой странице. Простой SELECT
показывает, что я потерял не только строку, которую я «подправил» (NEOID
553), но и еще 68 строк, вплоть до строки 621. Рисунок 11 демонстрирует факт потери этих строк.
Эти строки можно легко восстановлены, если есть актуальная резервная копия. У Вас же есть хорошая резервная копия, верно? Верно? Предполагая, что Вы её сделали, понадобится восстановить резервную копии в другую базу данных, например, пусть она называется NEO2
. После этого можно синхронизировать две таблицы путем копирования отсутствующих строк. Синхронизация двух таблиц может быть выполнена с помощью простого оператора INSERT INTO
, подобного показанному в листинге 4.
INSERT INTO NEO..ONE ( NEOID, NEOTEXT )
SELECT NEOID,
NEOTEXT
FROM NEO2..ONE
WHERE NEOID NOT IN ( SELECT NEOID
FROM NEO..ONE )
Листинг 4: Синхронизация двух таблиц для восстановления потерянных строк данных.
В этом «контролируемом примере» исправление довольно простое. В других сценариях с гораздо более высоким уровнем повреждения может потребоваться прибегнуть к другим мерам для восполнения утраченных данных после восстановления с потерей данных. Эти средства почти всегда будут включать восстановление базы данных из резервной копии, поэтому я еще раз подчеркиваю важность надежной, проверенной и хорошо документированной политики резервного копирования базы данных.
Повреждение некластерных индексов
Ранее я уже говорил, что с повреждением некластерного индекса справиться намного проще, чем с повреждением страницы данных на листовом уровне, поскольку эти индексы являются дополнительными, избыточными копиями реальных данных и могут быть легко перестроены. Однако было бы интересно доказать эти утверждения. Я воспользуюсь той же техникой подмены данных в шестнадцатеричном редакторе, чтобы повредить некластерный индекс, а не данные таблицы, и посмотрю, как с этим удастся потом справиться.
Мы уже знаем, что в результатах, выводимых командой DBCC индикатором того, относится ли повреждение к индексу или таблице, является значение IndexID.
Для нашей таблицы ONE,
которая является
кучей, в листинге 3 значение IndexID
= 0, поскольку для таблицы не были ещё созданы индексы. Значение IndexID =
1 означает кластерный индекс, а значение от 2 до 250 указывает на возможные некластерные индексы.
Предположим, что я выполнил необходимое восстановление базы из резервной копии и по столбцу NEOID
таблицы ONE
создал некластерный индекс с именем: NEOID
.
Во-первых, нам нужно узнать на каких страницах разместился новый индекс, который создан для таблицы ONE
. Затем мы посмотрим на страницу некластерного индекса средствами DBCC PAGE
, чтобы определить какие данные нужно подменить, имитируя повреждение индекса, и при этом не повредить страницы данных в куче.
Чтобы узнать размещение страниц индекса, можно воспользоваться другой недокументированной командой DBCC, которая называется DBCC IND. Вот синтаксис этой команды:
DBCC IND (DBID, TABLEID,-1)
Итак, чтобы применить эту команду для недавно проиндексированной таблицы ONE
, выполним следующее:
DBCC ind(23, 2121058592, -1)
Результаты показывают несколько строк, у которых значения IndexID
в основном 0, а также несколько строк с IndexID =
2, что указывает на страницы некластерного индекса. Нам нужно запомнить продемонстрированное на рис. 11 значение указателя страницы для случая, когда IndexID =
2. Выберем там страницу 180.
Теперь можно снова запустить DBCC PAGE
, и мы получим нужную нам информацию о странице:
DBCC TRACEON (3604);
GO
DBCC PAGE (NEO,1,180,3)
GO
Результаты выглядят совсем иначе, чем при просмотре страницы данных. Я вижу возвращенное шестнадцатеричное значение (HEAP RID
), представляющее каждую строку индекса для запрошенной страницы, как это показано на рисунке 12.
Я снова использовал шестнадцатеричный редактор, чтобы обнулить HEAP RID,
и снова это повредило базу данных. Однако есть одно существенное отличие: на этот раз, когда я запускаю DBCC CHECKDB('neo') WITH PHYSICAL_ONLY
, значение IndexID
поврежденного объект указывается как «2», то есть это код код некластерного индекса.
Приняв к сведению эту информацию, мы можем предложить иные способы устранения повреждений, кроме восстановления из резервной копии или запуска DBCC CHECKDB
с REPAIR_ALLOW_DATA_LOSS
, что потенциально приводит к потере данных.
Мы можем просто удалить и повторно создать некластерный индекс, используя код из листинга 5.
USE [NEO]
GO
IF EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[ONE]')
AND name = N'NEO_ID_NC')
DROP INDEX [NEO_ID_NC] ON [dbo].[ONE] WITH ( ONLINE = OFF )
GO
USE [NEO]
GO
CREATE NONCLUSTERED INDEX [NEO_ID_NC] ON [dbo].[ONE]
([NEOID] ASC)
WITH (SORT_IN_TEMPDB = ON, ONLINE = ON, ALLOW_PAGE_LOCKS = OFF)
GO
Листинг 5: Удаление и повторное создание поврежденного некластерного индекса.
Теперь, после того, как мы немного углубились в способы поиска и исправления некоторых проблем из-за повреждения данных, давайте обратимся к процессу обнаружения повреждений.
В поисках монстра Data Corruption
Нам нужен наилучший способ узнавать о повреждения в базах данных прежде чем они попадут в резервные копии и превратятся в более серьезную проблему. Как же этого добиться?
Один из вариантов — настроить регулярные проверки целостности с помощью планов обслуживания. Такое решение будет простым, поддерживаемым Майкрософт, прозрачным, полезным и, безусловно, лучше, чем отсутствие проверок целостности вообще. Тем не менее, мне нравится уровень контроля и гибкости, которые можно получить, создавая свои скрипты для выполнения тех же функций, что и планы обслуживания. Поэтому я поделюсь с вами сценарием, который я использую для перебора всех баз данных, включая системные базы данных, и получения отчета об ошибках, возвращаемых командой DBCC CHECKDB
.
С помощью этого скрипта и тривиального способа извлечения во временную таблицу вывода результатов DBCC CHECKDB,
вы не позволите монстру незаметно проникнуть в вашу инфраструктуру данных. И вы сможете действовать обдуманно, когда будете решать проблему сразу после обнаружения.
Скрипт в листинге 6 пробегает по всем базам данных экземпляра SQL Server, фиксирует ошибки и отправляет вам сообщение о числе обнаруженных ошибок, чтобы вы могли более подробно исследовать проблему при её обнаружении.
CREATE TABLE #CheckDBTemp (
Error INT
, [Level] INT
, [State] INT
, MessageText NVARCHAR(1000)
, RepairLevel NVARCHAR(1000)
, [Status] INT
, [DBID] INT
, ObjectID INT
, IndexID INT
, PartitionID BIGINT
, AllocUnitID BIGINT
, [File] INT
, Page INT
, Slot INT
, RefFile INT
, RefPage INT
, RefSlot INT
, Allocation INT
)
-- Needed variables
DECLARE @TSQL NVARCHAR(1000)
DECLARE @dbName NVARCHAR(100)
DECLARE @dbErrorList NVARCHAR(1000)
DECLARE @dbID INT
DECLARE @ErrorCount INT
DECLARE @EmailSubject NVARCHAR(255)
DECLARE @ProfileName VARCHAR(100)
DECLARE @EmailRecipient VARCHAR(255)
-- Init variables
SET @dbID = 0
SET @dbErrorList = ''
SET @EmailSubject = 'Integrity Check Failure on ' + CAST(COALESCE(@@SERVERNAME, 'Server Name Not Available') AS NVARCHAR)
SET @ProfileName = 'Notifications'
SET @EmailRecipient = 'rlandrum13@cox.net'
-- CYCLE THROUGH DATABASES
WHILE(@@ROWCOUNT > 0)
BEGIN
IF( @dbID > 0 )
BEGIN
SET @TSQL = 'DBCC CHECKDB(''' + @dbName + ''') WITH TABLERESULTS, PHYSICAL_ONLY, NO_INFOMSGS'
INSERT INTO #CheckDBTemp
EXEC(@TSQL)
SELECT @ErrorCount = COUNT(*) FROM #CheckDBTemp
IF( @ErrorCount > 0 )
BEGIN
SET @dbErrorList = @dbErrorList + CHAR(10) + CHAR(13) + 'Issue found on database : ' + @dbName
SET @dbErrorList = @dbErrorList + CHAR(10) + CHAR(13) + (Select Top 1 MessageText from #CheckDBTemp)
END
TRUNCATE TABLE #CheckDBTemp
END
IF SUBSTRING(CONVERT(varchar(50), SERVERPROPERTY('ProductVersion')),1,1) = '8'
BEGIN
SELECT TOP 1 @dbName = name, @dbID = dbid
FROM sysdatabases WHERE dbid > @dbID
AND name NOT IN ('tempdb')
AND DATABASEPROPERTYEX(name, 'Status') = 'Online'
ORDER by dbid
END
ELSE
BEGIN
SELECT TOP 1 @dbName = name, @dbID = database_ID
FROM sys.databases WHERE database_ID > @dbID
AND name NOT IN ('tempdb')
AND DATABASEPROPERTYEX(name, 'Status') = 'Online'
ORDER by database_ID
END
END
-- If errors were found
IF( @dbErrorList <> '' )
BEGIN
IF SUBSTRING(CONVERT(varchar(50), SERVERPROPERTY('ProductVersion')),1,1) = '8'
BEGIN
EXEC master..xp_sendmail @recipients = @EmailRecipient, @subject = @EmailSubject, @message = @dbErrorList
END
ELSE
BEGIN
EXEC msdb..sp_send_dbmail @profile_name = @ProfileName, @recipients = @EmailRecipient, @subject = @EmailSubject, @body = @dbErrorList, @importance = 'High'
END
END
DROP TABLE #CheckDBTemp
Листинг 6: Сценарий для поиска и сообщения о повреждении базы данных.
Вы могли заметить, что в коде используется параметр DBCC CHECKDB
, который я ранее не упоминал, а именно WITH TABLERESULTS
. Как следует из названия, результаты выполнения команды возвращаются в виде таблицы. Этот параметр не упоминается в электронной документации, но очень полезен для автоматизации проверки ошибок с помощью SQL Agent Jobs или ваших собственных скриптов.
Этот скрипт можно легко изменить, чтобы он отсылал сообщение электронной почты о том, что все базы данных, кроме базы данных NEO
, не имеют ошибок. Это может несколько смягчить шок, если будет видно, например, что из 20 баз данных повреждена будет только одна. Я знаю, что это могло бы мне немного помочь… В любом случае, когда будет обнаружено повреждение, вы получите сообщение, похожее на то, что изображено на рисунке 14. И это сообщение действительно будет тем монстром, который разбудит вас посреди ночи в холодном поту.
В этом письме я показываю ObjectID
, IndexID
и другую информацию о поврежденной странице, а также вывожу имя базы данных. Этого должно быть достаточно, чтобы продолжить расследование с помощью «новых» инструментов: DBCC PAGE,
DBCC INDID
и DBCC CHECKDB
в разных вариантах восстановления. Или это должно стать тревожным сигналом ктому факту, что вам, возможно, придется восстанавливать данные из резервной копии, не содержащей повреждения.
Резюме
В этой статье мы повредили данные в базе данных и бегло рассмотрели несколько недокументированных параметров DBCC, которые помогали восстановить поврежденные данные. Здесь мы затронули тему только поверхностно, упрощённо показав, как редактировать на странице шестнадцатеричные значения, а также немного научились понимать как сопоставлять результаты различных команд DBCC при устранении неполадок, связанных с повреждением данных.
Я не устану напоминать, что наличие продуманного плана резервного копирования является самой важной задачей для администратора баз данных. Хотя в этой статье я не описывал подробно резервное копирование и восстановление (только по этой теме можно написать целую книгу), но сама тема статьи представляет вескую причину иметь хорошие резервные копии как часть мер по обеспечению высокой доступности и защиты данных в рамках аварийного плана восстановления. Поврежденная база данных действительно угрожает катастрофой и может привести к длительному простою. Наверняка Вам не хочется когда‑нибудь прийти к своему начальнику, или начальнику вашего начальника, и сказать что вы потеряли данные безвозвратно. Если вам предстоит такое, лучше сразу актуализировать свое резюме, при условии, что диск, где оно хранилось, также не поврежден.
Часто у DBA возникает паника после обнаружения в базе данных Data Corruption любого уровня. Если нет проверенных резервных копий и проигнорированы основные рекомендации, которые помогают устранению неполадок, у администратора нет безопасного места, где он мог бы спрятаться, когда монстр впадает в ярость. Все, что вы сможете сделать, это починить базу с возможностью потери данных на сотнях страниц, а затем забиться в уголок своего рабочего места, которое скоро опустеет.
Если у вас есть проверенные резервные копии и вы умеете устранять повреждения без потери данных, то ваше рабочее место однажды может переместиться в офис руководителя с тонированными стёклами во всю стену, из которых открывается отличный вид на мир, где нет монстров.
Базы в файловом варианте хранятся в виде единственного файла 1Cv8.1CD в каталоге, который указал админ, который ее разворачивал. В каталоге базы автоматически создаются и пополняются дополнительные служебные файлы и папки.
Однако в клиент-серверном варианте файлов 1cd нет, потому что базы ворочает уже не столько платформа 1С, сколько СУБД, которая устанавливается отдельно. К наиболее популярным относятся MySQL и PostgreSQL.
Как именно хранятся базы, мне не удалось найти, но можно поискать в наиболее вероятных папках по смыслу и по размеру.
В случае с постгрей база находится в каталоге установки этой СУБД в подпапке data. В моем случае путь такой: C:Program Files (x86)PostgreSQL9.6.3-3.1Cdata. Весит эта папка несколько гигабайт, что соответствует размеру базы 1С. Остальные подпапки в каталоге постгрея имеют незначительные размеры и поэтому их вряд ли можно отнести к базам. Скорее всего, это части СУБД.