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 соответствующую вашему пакету надстройку. Подключаем ее. Вуаля.