11 октября 2012 г.

Восстановление таблицы в ms sql express из бэкапа со старыми ключевыми полями

Есть ms sql express 2005.
Есть некая программа, которая его использует, и для нее имеется база base1.
Программа довольно кривая, но пока от нее не отказаться. Ну да суть не в этом.
Программа многопользовательская.
Пользователи создаются внутри самой программы, но при увольнении сотрудника из программы его не удалить (так уж написал программист..).
Связь с разработчиком программы утрачена.
Был найден выход - удалить ненужных сотрудников в самой таблице базы данных.
Удалили.
Но есть проблема.

Есть несколько таблиц данных:
1. Таблица обращений
2. Таблица операторов
В таблице обращений есть поле, которое связано с ключевым полем-идентификатором таблицы операторов.
При удалении операторов (когда мы удаляем уволившихся сотрудников), в таблице обращений данные по этим операторам остаются, но только с кодом-идентификатором, который ни на что не ссылается.
Соответственно, возникает проблема при получении выборки по обращениям.

Выход - вернуть в таблицу операторов удаленные записи.
Бэкап с этими записями есть.
Данные восстановлены в новую базу данных base2.
Вопрос в том, как перенести данные из таблицы операторов временной базы в таблицу операторов исходной базы.
Записей не так много, можно было бы и руками вбить. Но необходимо, чтобы добавленные записи имели бы точно такое же значение ключевого поля, как было раньше. И с этим возникает проблема, т.к. оно защищено от изменений, как ключевое.

Решаем проблему следующим образом.
1. Копируем таблицу из временной базы в постоянную.
use [base1]
select * into [base1].[dbo].[operators1] from [base2].[dbo].[operators]
2. Копируем данные из таблицы operators1 в таблицу operators базы base1.
set identity_insert [base1].[dbo].[operators] on;
insert into [base1].[dbo].[operators](id,name,department,password,dogovors,disp,expert,admin)
select id,name,department,password,dogovors,disp,expert,admin
from [base1].[dbo].[operators1]
where [base1].[dbo].[operators1].id in (54)
set identity_insert [base1].[dbo].[operators] off;

Либо можно сделать это одним запросом:
set identity_insert [base1].[dbo].[operators] on;
insert into [base1].[dbo].[operators](id,name,department,password,dogovors,disp,expert,admin)
select id,name,department,password,dogovors,disp,expert,admin
from [base2].[dbo].[operators]
where [base2].[dbo].[operators].id in (54)
set identity_insert [base1].[dbo].[operators] off;

1 марта 2012 г.

Управление размером почтовых ящиков в postfix

Mailbox Size Limit

По умолчанию почтовый ящик ограничен лимитом 50 мегабайт. Это означает, что если размер почтовых сообщений в ящике превысит значение 50 мб, вы увидите сообщение “File too large”.

Данный лимит для любого локального ящика равен 50 MB, но вы можете легко изменить его в файле main.cf. После сделанных изменений перезапустите postfix.
mailbox_size_limit=102400000

Данная команда увеличит размер лимита до 100 MB. Для отмены лимита используйте “0″.
mailbox_size_limit=0

Вы можете посмотреть текущие настройки вашего почтового сервера командой :
postconf -d | grep size
mailbox_size_limit = 51200000 
message_size_limit = 10240000


Message Size Limit
message_size_limit = 20480000

Данная опция указывает допустимый размер отправляемого сообщения, и в этом примере мы увеличили его до 20 MB.

Virtual Mailbox Limit

Обратите внимание, опция virtual_mailbox_limit предназначена для виртуальных аккаунтов, а не для локальных, которые контролируются опцией mailbox_size_limit. Значение по умолчанию у неё выставлено также в 50 MB
virtual_mailbox_limit=0

Мы снимаем ограничения.

Оригинал статьи расположен здесь.

13 января 2012 г.

Excel

Редко пользуюсь Excel.
Запишу, чтобы не забыть, как в 2007 версии поменять диапазон в поле со списком:
Данные - Поверка
Выбрать "Список" в источнике выбрать источник списка.

Также запишу, как снять защиту от изменений с листа и с книги.
Качаем отсюда http://www.straxx.com/excel/password.html соответствующую вашему пакету надстройку. Подключаем ее. Вуаля.

23 ноября 2011 г.

Asterisk, LG ipLDK, OOH323

Итак, у нас есть астериск с базовыми настройками, и у нас есть несколько АТС LG - LDK100, LDK300, LDK60.
У каждой АТС свой план нумерации. Находятся.. Можно сказать, что находятся в одной локальной сети (есть несколько филиалов, объединенных провайдером прозрачно в одну сеть).
АТС объединены по VOIP посредством H323. Настраивал не я, но вижу, как минимум, одну причину, почему именно H323, а не SIP - плата VOIB на LDK100, которая, насколько я знаю, не умеет SIP. Кстати, насчет плат. Вот что говорит bs:
LDK100 - 11 VOIB 4.3A 43 INS
LDK300 - 7 VOIB 2.2A 22 INS (на самом деле, это VOIBE)
LDK60 - 10 VOIB 2.3B 23 INS

Посредством PGM 324 настроена маршрутизация между АТС, в зависимости от набираемого номера. Все работает без проблем.
Сразу скажу, я далеко не специалист в области телефонии в целом, и ip-телефонии в частности.  
Так вот, необходимо объединить абонентов Asterisk с абонентами остальных АТС. Asterisk умеет общаться по H.232. Для этого есть несколько различных H323-драйверов  для Asterisk:
  1. chan_oh323 - исторически первый H323-драйвер для Asterisk. При работе использует RTP-стек библиотеки OpenH323, со всеми вытекающими отсюда последствиями (поддерживаемые кодеки, стабильность, совместимость). Поддерживается компанией inAccess Networks [2].
  2. chan_h323 - отличительной особенностью данного драйвера является более тесная интеграция с Asterisk (используется Asterisk-реализация протокола RTP), что позволяет достичь большей производительности по сравнению с chan_oh323. Платой же за это является несколько меньшая функциональность. Так, например, chan_h323 не имеет собственного буфера дрожания (jitter buffer) [3], а также не поддерживает некоторые кодеки.
  3. chan_ooh323c - драйвер компании Objective Systems Inc [4], основанный на их открытом H323 стеке - Objective Open H.323 for C.
  4. chan_woomera - драйвер, позволяющий связать Asterisk с сервером Woomera. На данный момент через woomera можно совершать только H323-звонки, хотя в будущем разработчики обещают обеспечить поддержку универсального уровня абстракции OPAL.
Вообще, вот здесь хорошо написано про различия этих драйверов.

21 ноября 2011 г.

Настройка связи между АТС LG LDK и подключение ip-телефонов

Давно это валялось в черновиках, доводить до состояния "хауту" лениво, но некоторые моменты освещу, чтобы самому не забыть.
Имеется несколько АТС LG, в данном случае LDK100 и LDK300.
В LDK100 установлена плата VOIB (прошивка 4.3A), с модулем расширения. Итого 6 линий.
В LDK300 установлена плата VOIBE (прошивка 2.2A), 12 линий.
Необходимо обеспечить связь между АТС и подключить 6 ip-телефонов. 

14 ноября 2011 г.

Ubuntu 10.04 & Asterisk 1.8

И все таки, готовые сборки с прикрученными графическими инструментами для управления Asterisk - это не очень хорошо. В том плане, что если ты не понимаешь логику функционирования asterisk, то с помощью ГУИ ты, конечно, настроишь то, что тебе надо. Но как только понадобиться лезть куда-то глубже.. ГУИ будут только мешать.
И опять же, зачастую готовые сборки идут на базе CentOS. Не спорю, возможно весьма хороший дистрибутив линукса. Но к RedHad подобным системам я не привык. Debian (Ubuntu) - как то ближе. Есть, кстати, хороший (наверное) дистрибутив на базе Gentoo - AstPBX (http://asteriskpbx.ru). Без всяких графических инструментов, только конфиги.
Ну так вот, решил я поставить ubuntu-server с длительным сроком поддержки, а на него asterisk, также с длительным сроком поддержки.
Писать очередную хау-тушку об установке и настройке астериска особо не хочется, так, для себя, черкну немного.
Про установку ubuntu server 10.04 рассказывать ничего не буду, ибо нечего =)
Ставим asterisk. Конечно, рекомендуется собирать из исходных кодов, но лениво =)
В стандартных репозиториях убунты есть версия (на ноябрь 2011 года) asterisk 1.6.
Подключаем официальный репозиторий астериска и ставим необходимые пакеты из него.

sudo apt-get install python-software-properties
sudo apt-key adv --keyserver pgp.mit.edu --recv-keys 175E41DF
sudo add-apt-repository "deb http://packages.asterisk.org/deb `lsb_release -cs` main"
sudo add-apt-repository "deb-src http://packages.asterisk.org/deb `lsb_release -cs` main"
sudo apt-get update
sudo apt-get install asterisk-1.8

После этого можно приступить к настройкам астериска. Как минимум, создать несколько sip-аккаунтов, которые могли бы звонить друг другу.
Сделаем бэкап файла sip.conf
mv /etc/asterisk/sip.conf /etc/asterisk/sip.conf_sample
Начнем с редактирования файла /etc/asterisk/sip.conf.

[general]
context=default
allowguest=no
bindport=5060
bindaddr=0.0.0.0

[320]
type=friend
context=phones
host=dynamic
secret=user1_password

[321]
type=friend
context=phones
host=dynamic
secret=user2_password 

Поскольку мы хотим как направлять вызовы в программный телефон, так и обеспечить клиенту возможность размещать вызовы, параметр type (тип) был определен как friend (друг). Существует еще два параметра: user (пользователь) и peer (равноправный участник сети). С точки зрения Asterisk user задается для входящих вызовов, а peer – для исходящих звонков (через приложение Dial()). friend – это просто краткая запись, определяющая и пользователя, и равноправного участника. Если есть сомнения, задавайте тип friend. Опция host (хост) используется для определения местонахождения клиента в сети, когда Asterisk необходимо направить ему вызов. Это значение может быть задано статически, например host=192.168.1.100, или, если клиент имеет динамический IP-адрес, задается host=dynamic. Если для опции host задано значение dynamic и клиент сконфигурирован для автоматической регистрации, Asterisk получит от конечной точки (то есть от телефонного аппарата или программного телефона) пакет REGISTER, из которого Asterisk сможет узнать, какой IP-адрес использует равноправный SIP-участник. Если вы не доверяете своей сети, вероятно, следует задать пароль. Для этого в описание устройства добавляется следующая строка. Это один из тех параметров, которые не являются обязательными, но желательны:
secret=user1_password
Сделаем бэкап файла extensions.conf
mv /etc/asterisk/extensions.conf /etc/asterisk/extensions.conf_sample
После этого можно создать заново данный файл с примерно следующим содержанием:
[globals]

[general]
autofallthrough=yes

[phones]
exten => _3XX,1,Dial(SIP/${EXTEN})
exten => _3XX,n,Hangup()

После внесения изменений в этот файл, необходимо делать dialplan reload.
И почему то все это заработало только после core restart now.
После этого звонить друг другу должно получаться без проблем.
Помогли следующие источники:



1 ноября 2011 г.

Отмена перехода на зимнее время средствами системного реестра и GPO




Уже давно не секрет, что в октябре 2011 года уже никто в России не будет переводить свои часы на зимнее время. Для России уже вышло обновление, благодаря которому из диалогового окна«Выбор часового пояса» убирается флажок«Автоматический переход на летнее время и обратно», а также меняется часовой пояс, на примере с Москвой, с «GMT +3:00» на «GMT +4:00».
Многие пользователи, мягко говоря, не совсем любят обновлять свои операционные системы, и данное обновление может просто не быть установлено на компьютере и в ночь с последней субботы на воскресенье октября часы автоматически переведутся на час вперед. Также, поскольку уже прекращена поддержка операционной системыWindows 2000, а в просторах Рунета можно найти большое количество компаний – владельцев данной операционной системы, для таких пользователей следует ожидать такой же участи.
Перед тем как рассказать о реализации возможности, повторяющей действия указанного выше обновления, мне хотелось бы рассказать, что же делает с операционной системой этот патч. Данное обновление изменяет несколько параметров в системном реестре, которые отвечают за настройки часового пояса. Новые значения для параметров вносятся в следующих разделах реестра:

  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones – база данных часовых поясов;
  •  HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation– сведения о выбранном часовом поясе.

31 октября 2011 г.

Автоматически прописать путь к базам в 1С 8.2

Начинается переход с 1с 7.7 на 8.2.
Необходимо в автоматическом режиме добавить информационные базы всем пользователям.
В 7.7 это делалось путем добавления необходимого ключа в реестр с помощью логон-скрипта.
В 8.2. нашел следующий способ.
Создаем файл с расширением .v8i и с содержанием, подобным этому:
[Демо]
Connect=File="\\SERVER\Share1c\Base\Demo";
OrderInList=1
Folder=/
OrderInTree=1
App=Auto
DefaultApp=ThickClient
WA=1
Version=8.2.13.219
Еще есть такой вариант:
[Название базы в списке]
Connect=Srvr=SERVER1;Ref=demo
OrderInList=1
Folder=/
OrderInTree=1
App=Auto
DefaultApp=ThickClient
WA=1
Version=8.2.13.219
Где SERVER1 - имя сервера приложений 1С, demo - имя базы данных на сервере.
Далее в файле %ProgramFilesDir%\1cv82\common\1CESCmn.cfg прописываете строку (без кавычек) : "CommonInfoBases=\\SERVER\SHARE\ibcommon.v8i"
Где SERVER - имя сервера с сетевой папкой, SHARE - имя самой шары.
Файл 1CESCmn.cfg можно подкладывать любым доступным способом (скриптом, при установке клиента и пр.).
Добавление новой базы происходит правкой текстового файла на шаре, пользователи увидят новую базу при следующем запуске 1С.
В случае терминального сервера, достаточно просто сразу положить этот файл конфигурации в необходимое расположение.
В случае, если используется название базы на русском языке, файл необходимо сохранить в UTF8.

26 октября 2011 г.

Elastix

Вообще, повозится с Asterisk мне хотелось достаточно давно. Но как то все не до этого было.
А тут у меня появился новый начальник, который решил, что надо бы нам его попробовать.
Но сам он до этого пользовался какой-то уже готовой сборкой, название которой, он, правда, уже не вспомнит.
Мне же лично хотелось неторопливо и вдумчиво почитать документацию, с нуля настраиваю попутно систему в тестовом режиме. Чтобы при этом никто не стоял над душой.
Но придется, по крайней мере пока, использовать готовое решение. 
В принципе, большинство этих готовых  решений отличается не сильно. Ну подумаешь, правится все не через конфиги, а через ГУИ. Внутри то почти одно и тоже. Другое дело, что с использованием настройки через ГУИ ты зачастую не видишь внутренних закономерностей в работе продукта. А это грустно. Ладно, попробую этим заняться на досуге.
 
С другой стороны.. (дальше будут использоваться фрагменты различных статей).

Использование стандартного дистрибутива Linux, пусть даже хорошо известного администратору, имеет свои слабые стороны. В пакетных репозитариях сегодня редко встретишь полный набор необходимых программ (да еще и последних версий), а значит, все придется собирать, устанавливать и обновлять вручную. Это займет много времени и сил, ведь кроме системы, зависимостей, Asterisk и драйверов к оборудованию VoIP, придется разбираться с установкой веб-интерфейса, системы учета звонков и т.д. Специализированное решение не требует глубоких знаний (хотя они и приветствуются), – настройки просты и понятны любому, кто хорошо представляет конечный результат. Разработчики обычно сами следят за новинками ПО и предлагают обновления при помощи собственных репозитариев.
После анализа вариантов готовых решений был выбран Elastix (elastix.org). 

24 октября 2011 г.

Asterisk. Требования к ресурсам.

С точки зрения требований к ресурсам Asterisk подобна встроенным системам реального времени преимущественно тем, что она должна иметь приоритетный доступ к процессору и системным шинам. Поэтому крайне важно, чтобы все остальные функции системы, не связанные напрямую с задачами Asterisk по обработке вызовов, если таковые вообще выполняются, должны выполняться с более низким приоритетом. Для небольших и любительских систем это может и не представлять особой проблемы. Однако для высокопроизводительных систем недостаточная производительность будет вызывать проблемы с качеством аудиосигнала, получаемого пользователем, часто в виде эха, помехи т. п. Примерно так ведут себя устройства мобильной связи при выходе из зоны обслуживания, но здесь причина этих проблем другая. По мере увеличения нагрузки на систему будут возрастать сложности с обслуживанием соединений. Для офисной АТС подобная ситуация – настоящая катастрофа, поэтому в процессе выбора платформы требования к производительности должны быть решающим критерием.

Размер системы Asterisk на самом деле определяется не количеством пользователей или телефонных аппаратов, а, скорее, количеством одновременных вызовов, которые система должна будет поддерживать. Эти цифры очень приблизительны, поэтому экспериментируйте и выбирайте наиболее подходящий для себя вариант.