среда, 21 августа 2013 г.

Новое в MS sql Express 2012

  • Новое в SQL Server Express 2012: SQL Server Express LocalDB

    SQL Server Express LocalDB
    • LocalDB это новое компактное средство для разработки на SQL Server Express Edition , которое очень легко устанавливается. Это делает использование идеальным для тех кто нуждается во встраиваемой базе данных типа SQL Server в дэсктопных приложениях или инструментах. LocalDB имеет все программные возможности как и SQL Server Express, но работает в том же процессе, что и приложение а не как сервис.
    Интегрировано
    • LocalDB разработано как локальная база данных, встроенная в десктопное приложение. This includes tools like SQL Server Data Tools, or custom developed desktop applications, or tools that need a lightweight single-user database runtime that supports full Transact-SQL functionality.
    Простота
    • Приложение, которое использует LocalDB просто открывает файл. После этого вы получаете функциональность SQL Server при работе с этим файлом, включая такие вещи как ACID поддержку транзакций. Приложение, открывшее файл, имеет эксклюзивные права на его использование. Никакого мульти-пользовательского доступа или использования его как сервер. (Если вам это надо используйте SQL Server Express.)
    Легкое Приобретение
    • LocalDB прост для скачки, установки и управления им. Он устанавливается как маленький разделяемый компонент, а не сервис.

четверг, 25 июля 2013 г.

Фарингейт и Цельсий

Формула вычисления Фаренгейта через Цельсий:
Фаренгейт = (Цельсий * 9 / 5) + 32;

Фар =     Цельсий =
    4            -20
  14            -10
  32               0
  50             10
  68             20
  86             30
104             40

пятница, 5 июля 2013 г.

Разводка холодной и горячей воды

Итак, прошло 15 лет и мне пришлось переделать разводку холодной и горячей воды в квартире. Так как все эти 15 лет стояли гибкие шланги, то и теперь я решил использовать гибкие шланги.
1. Всего использовал 10 шлангов - четыре для горячей воды(на кухню, душ, рукомойник в ванной и гигант от гребенки к входному крану); шесть для холодной воды - добавился шланг к унитазу и маленький шланг от стиральной машины(она у нас на кухне). Гибкий шланг гигант имеет увеличенный внутренний диаметр и резьбу на 3/4".
Внимание: при покупке шлангов обращайте внимание на целостность шланга. Если на шланг встать или поставить что-то очень тяжелое, то шланг перестанет быть круглым и упругим. Он станет сминаться. Такой шланг брать нельзя. Служить он долго не будет. Если вы в магазине самообслуживания, то не спеша по обжимайте выбранный шланг по всей длине.
Итак я взял шланги: 2 по 2м, 3 по 1.5м, 2 по 2м, 1 - 0.5 м и 2 гиганта по 1м.
2. Что бы выполнить разводку шлангов, я взял две гребенки 3/4 дюйма на 3 и 4 отвода. Отводы под 1/2 дюймовые соединения, с вентилями. У гребенок на соединение "папа" я купил заглушки на 3/4", а с другой стороны я вставил ниппель 3/4"на 3/4".
На резьбу проще всего наматывать лен плюс Унипак.
3. Гребенки при помощи специальных скоб прикрепил к задней стенке и прикрепил гибкую подводку. Результат на снимке:
J
    На каждой трубе(холодной и горячей воды) стоят по 2 шаровых крана. Первый от стояка кран(запорный) принадлежит к обще домовой структуре водоснабжения и находится в компетенции управляющей компании. Работает он на не фильтрованной воде и поэтому лучше его не дергать. После фильтра стоит другой кран, он уже работает на фильтрованной воде. Его мы и закрываем, надолго покидая квартиру.
   Фильтры стоят итальянские с манометром. Показали себя очень не плохо, но они имеют внизу сливной штуцер и кран для чистки фильтра через шланг. Поэтому при установке счетчика такой фильтр до счетчика не рассматривается. Используется закрытый фильтр с металлической пробкой и отверстием в ней для опечатывания. Следовательно чистить его может только тот, кто может потом опечатать.
  Вместо итальянского фильтра мастер поставил счетчики и фильтр. Результат на снимке:
Вот фото, на котором видна старая разводка горячей воды. Холодная уже переделана:
 

вторник, 28 мая 2013 г.

Что же блокируется

Что блокирует мое резервирование(lock)?

Submitted by Natalka Roshak on Sat, 2006-04-01 18:00

Если вы уже получали звонок от раздраженного пользователя, чья транзакция не выполняется или вам позвонил разработчик, которая не может понять почему ее пользовательская сессия блокирует друг друга, то вы знаете как полезно знать не только кто кого блокирует, но и какие при этом объекты блокируются. Еще лучше, если вы можете определить конкретно заблокированную строку, которую ждет сессия.

Создадим блокировку

Для начала, создадим ситуацию, когда один пользователь активно блокирует другого. Откроем две сессии. Введем следующие команды в Сессии 1 для создания тестовой таблице:

SQL> create table tstlock (foo varchar2(1), bar varchar2(1));

Table created.

SQL> insert into tstlock values (1,'a');

1 row created.

SQL> insert into tstlock values (2, 'b');

1 row created.

SQL> select * from tstlock ;
FOO BAR
-   -
1   a
2   b

2 rows selected.

SQL> commit ;

Commit complete.

Теперь установим блокировку на всю таблицу в Сессии 1:

SQL> select * from tstlock for update ;

А в Сессии 2, попытаемся обновить запись:

SQL> update tstlock set bar= 'a' where bar='a' ;

Это предложение будет висеть, из за блокировки, наложенной сессией 1 на нужную нам таблицу.

Определение блокирующей сессии

В Oracle есть представление DBA_BLOCKERS, которое выводит списки SID всех сессий с блокировками. Правда из своего опыта скажу вам, что быстрее использовать представление V$LOCK. Использование представления V$LOCK в запросе гораздо быстрее и упрощает определение блокирующей сессии. Это представление содержит много полезной информации.

SQL> select * from v$lock ;
ADDR     KADDR     SID TY    ID1     ID2  LMODE REQUEST      CTIME      BLOCK
-        -         -   -       -       -      -       -          -          -
AF9E2C4C AF9E2C60  479 TX 131078   16739      0       6        685          0
ADDF7EC8 ADDF7EE0  422 TM  88519       0      3       0        697          0
ADDF7F74 ADDF7F8C  479 TM  88519       0      3       0        685          0
ADEBEA20 ADEBEB3C  422 TX 131078   16739      6       0        697          1
....     ....      ... ...  ....    ....   ....    ....        ....      ....

Обратите внимание на колонку BLOCK. Если сессия выдала запрет на использование объекта, нужного другой сессии, то BLOCK=1. Кроме того, вы можете определить какая сессия блокируется, сравнивая значения в колонках ID1 и ID2. Заблокированная сессия будет иметь те же значения в ID1 and ID2 что и блокирующая сессия, но так как запрашиваемый объект заблокирован, то количество запросов будет больше 0 (REQUEST >0).

В приведенном запросе SID 422 блокирует SID 479. В нашем примере SID 422 связан с Сессией 1, а SID 479 это наша заблокированная Сессия 2.

Что бы избежать изучения таблицы и сравнения колонок ID1 и ID2, напишем запрос:

SQL> select l1.sid, ' IS BLOCKING ', l2.sid
2 from v$lock l1, v$lock l2
3 where l1.block =1 and l2.request > 0
4 and l1.id1=l2.id1
5 and l1.id2=l2.id2
SQL> /

SID 'ISBLOCKING' SID
 -    -           -
422  IS BLOCKING 479

1 row selected.

Еще лучше, если мы добавим представление v$session и результат будет легко понимаем:

SQL> select s1.username || '@' || s1.machine
2 || ' ( SID=' || s1.sid || ' ) is blocking '
3 || s2.username || '@' || s2.machine || ' ( SID=' || s2.sid || ' ) ' AS blocking_status
4 from v$lock l1, v$session s1, v$lock l2, v$session s2
5 where s1.sid=l1.sid and s2.sid=l2.sid
6 and l1.BLOCK=1 and l2.request > 0
7 and l1.id1 = l2.id1
8 and l2.id2 = l2.id2 ;

BLOCKING_STATUS
-
BULKLOAD@yttrium ( SID=422 )  is blocking BULKLOAD@yttrium ( SID=479 )

1 row selected.

В представлении v$lock информации гораздо больше, но для того чтобы читать эту информацию мы должны иметь представление о типах блокировки и о назначении колонок ID1 и ID2.

Тип блокировки и колонки ID1 / ID2

В нашем случае мы знаем точно, что блокировка вызвана предложением DML, так как сами её и вызвали. Но в большинстве случаев нам не будет так вести. К счастью вы можете легко прочитать эту информацию из таблицы v$lock.

Сначала вы должны изучить колонку TYPE. Существуют десятки типов блокировок, но подавляющее большинство из них системные. Обычно системные блокировки держатся очень короткое время и не самая лучшая идея настраивать ваши системные настройки на основании v$lock! (Смотрите часть V$LOCK в Oracle Database Reference.)

Существует только 3 типа пользовательских блокировок, TX, TM и UL.

UL (user-defined lock) - блокировка, определяемая с помощью пакета DBMS_LOCK.

TX блокировка это блокировка строки транзакцией; она выполняется один раз для каждой транзакции, изменяющей данные, не имеет значения как много объектов вы изменяете в этой транзакции. Колонки ID1 и ID2 указывают на сегмент отката и на элементы таблицы транзакций.

TM блокировка это блокировка предложением DML. Она выполняется один раз для каждого изменяемого объекта. Колонка ID1 показывает изменяемый объект.

Режимы блокировок

Вы можете о блокировках типа TM и TX изучив режимы блокировок. Колонки LMODE и REQUEST обе используют один и тот же метод числовой оценки режима блокировки: чем больше число, тем больше блокировка: от 0 для отсутствия блокировки до 6 для исключительной блокировки. Если сессия должна получить исключительную блокировку TX в случае изменения данных; LMODE будет равно 6. Если эта сессия не может получить исключительную блокировку так как некоторые строки хочет изменить другая сессия и она уже выставила свою блокировку, тогда наша сессия будет периодически запрашивать блокировку TX в исключительном режиме; LMODE будет равно 0 пока не получит блокировку, а REQUEST  будет равно 6. Вы можете это видеть в этом выводе из v$lock:
ADDR     KADDR     SID TY    ID1     ID2    LMODE    REQUEST  CTIME      BLOCK
-        -         -   -      -      -      -        -        -          -
AF9E2C4C AF9E2C60  479 TX    131078  16739  0        6        685        0
ADEBEA20 ADEBEB3C  422 TX    131078  16739  6        0        697        1

Обратите внимание на то, что колонки ID1 and ID2 в Сессии 2, которая запрашивает TX блокировку (LMODE=0, REQUEST=6), указывают на точки отката и транзакции из Сессии 1. Эта информация помогает нам определить блокирующую сессию для Сессии 2.

Иногда вы можете увидеть блокировку TX в режиме 4, режим разделения. Если в блоке, содержащем изменяемые строки нет свободного места в списке объектов транзакции (interested transaction list - ITL), тогда сессия выдает блокировку типа TX режим 4 до тех пор, пока не освободится место в ITL. Если вы видите блокировку TX-4 для какого-нибудь объекта, то возможно нужно увеличить параметр INITRANS для этого объекта.

Блокировки TM, как правило запрашиваются и получаются в режиме 3, что-то похожее эксклюзивную блокировку для разделяемых строк. DDL требует эксклюзивной блокировки для блокировки типа TM. (Заметьте, что предложение CREATE TABLE не требует TM блокировки - не надо блокировать ни каких объектов, ведь их еще нет!) DML требует эксклюзивную блокировку разделяемых записей. Итак, в селекте мы видели, что для резервирования DML были выданы блокировки типа TM с LMODE=3:

ADDR     KADDR    SID TY   ID1     ID2   LMODE    REQUEST    CTIME      BLOCK
-        -        -  -     -       -     -          -        -          -
ADDF7EC8 ADDF7EE0 422 TM   88519   0     3          0        697        0
ADDF7F74 ADDF7F8C 479 TM   88519   0     3          0        685        0

Определение заблокированного объекта

Теперь, когда мы знаем, что каждая строка типа TM указывает на заблокированный объект, мы можем использовать значение в колонке  ID1 для определения самого объекта.

SQL> select object_name from dba_objects where object_id=88519 ;
OBJECT_NAME
-
TSTLOCK

Иногда знание объекта достаточно, но мы пойдем дальше. Мы можем определить не только блок, но строку в нем, которую ждет Сессия 2.

Определение заблокированной записи

Мы можем получить эту информацию из представления v$session для заблокированной сессии:

SQL> select row_wait_obj#, row_wait_file#, row_wait_block#, row_wait_row# from v$session where sid=479 ;
ROW_WAIT_OBJ# ROW_WAIT_FILE# ROW_WAIT_BLOCK# ROW_WAIT_ROW#
        -                  -               -             -
        88519             16          171309             0

Это дает нам ID объекта, относительный номер файла, номер блока в этом файле и строку, которую ждет наша сессии. Если перечень этих параметров звучит для вас знакомо, это потому, что эти четыре компонента и составляют расширенный ROWID. Мы можем построить реальный расширенный ROWID из этих компонент при помощи пакета DBMS_ROWID. Функция ROWID_CREATE принимает эти аргументы и возвращает ROWID:

SQL> select do.object_name,
2 row_wait_obj#, row_wait_file#, row_wait_block#, row_wait_row#,
3 dbms_rowid.rowid_create ( 1, ROW_WAIT_OBJ#, ROW_WAIT_FILE#, ROW_WAIT_BLOCK#, ROW_WAIT_ROW# )
4 from v$session s, dba_objects do
5 where sid=543
6 and s.ROW_WAIT_OBJ# = do.OBJECT_ID ;


OBJECT_NAME ROW_WAIT_OBJ# ROW_WAIT_FILE# ROW_WAIT_BLOCK# ROW_WAIT_ROW# DBMS_ROWID.ROWID_C
-                      -              -               -             -                  -
TSTLOCK             88519             16          171309             0 AAAVnHAAQAAAp0tAAA

И конечно, это позволяет посмотреть эту запись напрямую.

SQL> select * from tstlock where rowid='AAAVnHAAQAAAp0tAAA' ;
FOO BAR
-   -
1   a

Заключение


Мы увидели, как определить блокирующую сессию, и как посмотреть на записи, которые ждет сессияWe've seen how to identify a blocking session, and how to inspect the very row that the waiting session is waiting for. And, I hope, learned a bit about v$lock in the process.

понедельник, 20 мая 2013 г.

Как узнать IP Вашего друга

Метод 1

  1. Закройте все вкладки в браузере и все активные подключения, за исключением служб вашего чата; удалите все куки из браузера.
  2. Пока Вы в чате откройте командную строку и введите команду netstat -an
  3. Вы увидите все IP адреса всех связей.
  4. Найдите адрес и протестируйте его. 

Метод 2


  1. Так же как и в методе 1 закройте все вкладки и сделайте чат активным.
  2. Пока чат активен, пошлите какой-нибудь файл и убедитесь, что он принимает его.
  3. Во время приема файла в отдельном окне, в командной строке введите команду netstat -n  
  4. Внешний адрес это то, что нам нужно.
  5. Теперь тестируйте его.
Примечание:
  • Локальный адрес это наш Ip.
  • номер порта и основное назначение
             80,81-------->Используется для передачи данных
             5050 -------->Личные сообщения
             5100 -------->Вэб камера
      5000,5001--------> Голосовые чаты
Другие полезные параметры команды netstat   
  -a Изображает все подключения и слушаемые порты.
  -e Изображает статистику Ethernet. Этот параметр можно употреблять с параметром -s. 
  -n Выводит адреса и порты в цифровой форме.
  -p proto Выводит подключения для указанного протокола proto; proto может быть TCP или UDP.
  -s выводит статистику по протоколу, proto может быть TCP, UDP или IP.
  -r Выводит таблицу соответствия адресов.
netstat -an -p tcp : эта команда расширяет netstat -an при помощи фильтра  -p tcp, она выводит подключения для tcp




четверг, 11 апреля 2013 г.

В ДНД за полотгула

Я закончил институт в феврале 1973 года. В НИИ я работал с июля 1972 года старшим лаборантом. Теперь меня перевели на инженерную должность. Сразу пошел трехлетний срок моего обязательного пребывания в НИИ. Я не мог уволится, но и уволить меня тоже не могли. Началось время "дедовщины". Я как самый молодой ходил в наряды. Вот примерный перечень(из записной книжки):
Дата               Отгулы
19.09.73  ДНД    0.5
23.09.73  база     2
28.03.74  ДНД    0.5
30.03.74  ДНД   1
25.05.74  ДНД   1
с 17 июля колхоз 8
25.09-07.10.74 колхоз 8
03.12.74 ДНД 1
Выборы           10
работа в избирательной комиссии


вторник, 26 февраля 2013 г.

Oracle 11g XE - подключение в Windows

Фирма Oracle выпускает вариант своей СУБД 11g в ограниченной версии: Express Edition(XE).
Для ее использования не нужна Лицензия. Конечно начинать изучение Oracle лучше с этой версии.

Для работы с Oracle фирма делает и выкладывает для использования два продукта: SQLDeveloper и DataModeler. Эти программы имеют большие возможности и очень полезны.
Но: они реализованы на языке Java и используют для доступа к базам как клиента так и jdbc с прямым доступом. При загрузке этих программ стартует java машина, которая читает с вашего компьютера локаль и передает программе. Та в свою очередь определяет сеансовые настройки NLS и пытаются установить их на сервере XE. А там их нет! Во всяком случае для России.
Коннект не проходит хоть плачь.

Выход прост: в файле sqldeveloper\sqldeveloper\bin\sqldeveloper.conf вставляем принудительную локаль для java машины:

AddVMOption -Duser.language=en
AddVMOption -Duser.region=us

Для datamodeler берем соответственно файл  C:\datamodeler\datamodeler\bin\datamodeler.conf.
Вставляем те же строчки.

 Если вы используете Python  с Oracle, то возможно и используете модуль cx_Oracle. Будьте готовы, что при попытки подключения выскочит ошибка по поводу того, что клиент просит установить такой  NLS_LANG, которого в XE нет! os.environ["NLS_LANG"]="AMERICAN_AMERICA.AL32UTF8"Ошибка ORA-12705.

Проблема решается аналогично.
в модуль Python вставляете строки:

import os
os.environ["NLS_LANG"]="AMERICAN_AMERICA.AL32UTF8"

и далее база XE ваша!






X-Plane 11, 12 - любитель, Фото любитель со стажем

Постоянные читатели

Архив блога