У великому бізнесі нерідко трапляються ситуації, коли впроваджуються і використовуються завідомо збиткові інформаційні системи. Ці проекти починаються як крута власна розробка компанії, під її процеси, з урахуванням всіх особливостей. Але вже після здачі з'ясовується, що то тут, то там недоробки, недоліки. Що необхідні звіти і графіки отримати неможливо, оскільки їх не змогли чи забули врахувати в ТЗ. Керівництво вимагає, потім просить що-небудь зробити, але система закрита для змін, а підрядник перебуває з нами у процесі арбітражної тяжби. Проте, безвихідних ситуацій звичайно ж не буває.
Читати далі →

Працюємо з JSON в SQL Server 2016

JSON зараз один з найбільш використовуваних форматів даних в розробці. Більшість сучасних сервісів повертають інформацію у вигляді JSON. JSON також бажаний формат для зберігання структурований інформації у файлах, наприклад. Так як дуже багато даних JSON-форматі, то підтримка JSON в SQL Server стає особливо актуальною, щоб мати можливість обмінюватися даними з іншими сервісами.

JSON став однією з найбільш затребуваних функцій, доданих в SQL Server 2016. Далі в статті ми розглянемо основні механізми роботи з JSON.

Читати далі →

Автоматизоване відновлення баз даних MS SQL з бекапів

image
У цій статті я хотів би розповісти про те, як за допомогою утиліти Quick Maintenance & Backup for MS SQL налаштувати автоматичне відновлення баз даних з бекапів на тестовому екземплярі SQL Server в мережі. При цьому створювати бекапи буде штатний План обслуговування. Потреба в автоматизованому відновлення може виникнути в наступних випадках:

  1. Якщо потрібно регулярно актуалізувати бази даних тестових серверах.
  2. Якщо потрібно періодично перевіряти через відновлення створені бекапи: повний, різницевий і журнали транзакцій.
У мережі можна знайти приклади скриптів дозволяють в тій чи іншій мірі автоматизувати ці завдання. Але більшість рішень вимагає хорошого розуміння T-SQL предметної області і швидше за все зажадають зміни ваших Планів обслуговування. Я покажу як це зробити через 15-20 хвилин з допомогою утиліти Quick Maintenance & Backup for MS SQL (QMB). Ми задіємо механізм XML планів відновлення — це XML-файл з послідовністю бекапів, який вміє створювати утиліта. За інформацією в XML файлі програма отримає послідовність бекапів, сформує T-SQL скрипт для відновлення і запускає його на виконання. Докладніше про цю можливість можна почитати тут.

Читати далі →

Прискорюємо вставку даних MSSQL на віддалений PostgreSQL в 800 разів

У процесі розвитку проекту періодично з'являється необхідність обміну даними між серверами баз даних. Припустимо, у нас є джерело даних у вигляді SQL Server і віддалений PostgreSQL сервер, на якому ці дані повинні виявитися. Після додавання віддаленого сервера в якості linked server, можна робити запити виду:
INSERT INTO RemotePG...RemoteTable (RecordID, RecordName) VALUES (1,'Test string');

Проблема в тому, що такі запити виконуються дуже довго. Якщо перед нами стоїть завдання вивантажити десятки і сотні тисяч записів, то час на виконання прагне до нескінченності. Розглянемо два з половиною способу вставити дані в таблицю на linked server і порівняємо час виконання.

Читати далі →

Система нотифікації зміни паролю [Windows]

Одного разу для нашого корпоративної інформаційної системи знадобилося оперативно змінювати сохраненые паролі користувачів, чиї імена були імпортовані з LDAP.



Традиційно корпоративні клієнти для зміни пароля пользутся готовими системами типу: Microsoft Forefront Identity Manager (FIM), Oracle Identity Manager, IBM Security Identity Manager та інші інші.

Щоб не померти на роботі, займаючись вивченням різноманітного народного корпоративного творчості, намагаючись отримати зміни пароля від хххІМенеджеров, краще відразу звернутися до контролеру домену, куди новий пароль так чи інакше прийде.

Тим більше що Microsoft AD сервіс дозволяє мати розширення. І все б добре, поки деякі кастомеры не сказали — все добре, що ви велика і відома міжнародна корпорація і ми десятки років користуємося вашим обладнанням і програмним забезпеченням, але ставити на наш сервер AD контролером ваш криворукий спеціальний софт не будемо, — тільки хардкор рішення від Microsoft.


Читати далі →

Коротка шпаргалка по блокуваннях при читанні і зміни даних в залежності від рівня ізоляції транзакції в MSSQL

Read Uncommitted

  • якщо в одній транзакції поміняти дані — селект цих даних (в іншої транзакції або без транзакції) не будуть чекати закінчення першої транзакції і повернуть записані дані незакомиченных транзакцій
  • якщо в одній транзакції вважати дані — апдейти цих даних до іншої транзакції не будуть чекати закінчення першої транзакції
  • шаред локі не використовуються. Що аналогічно установці NOLOCK хінта у всі селекты Read Commited
  • ексклюзивні локировки встановлюються в процесі виконання стейтменту і знімаються по закінченню транзакції


Read Committed + read_committed_snapshot off

(alter database xxx set read_committed_snapshot off)

  • якщо в одній транзакції поміняти дані — селект цих даних (в іншої транзакції або без транзакції) будуть чекати закінчення першої транзакції. Селект з NOLOCK хинтом поверне змінені, але не закомиченные дані.
  • якщо в одній транзакції вважати дані — апдейти цих даних до іншої транзакції не будуть чекати закінчення першої транзакції
  • шаред локировки встановлюються в процесі роботи стейтменту і знімаються по закінченню стейтменту
  • ексклюзивні локировки встановлюються в процесі виконання стейтменту і знімаються по закінченню транзакції



Читати далі →

Adminer — веб-інтерфейс для баз даних розміром в один .php файл



У світлі недавнього поста про порівняння PostgreSQL і MySQL, в коментарях виникла проблема вибору зручного інтерфейсу для роботи з постгресом. Я сам зіткнувся з такою проблемою, вирішивши пошукати альтернативи всім відомому phpMyAdmin / php*Admin, який вважається стандартом у веб-майстрів.

Читати далі →

Як збільшити швидкість роботи 1С в 100 разів прямим зверненням до MSSQL

Виникла завдання-помітити на видалення документи за 1 рік. Ця операція виконується перед безслідним видаленням і включає виставлення відмітки і видалення рухи по регістрах. Пробне видалення штатними засобами одного місяця тривало 4 години. Це означало, що 12 місяців віддалялися б 48 годин (2 доби). Забігаючи вперед, скажу, що прямим доступом до 1С документи видаляються за 30-40 хвилин. Звернення до MSSQL виконувалося через .Net framework і компонент .Net Bridge.

Визначення імен таблиць MSSQL
Структура бази даних 1С вельми заплутана і складається з малозначущих для людини назв. 1С містить функцію визначення структури зберігання по імені об'єкта. В основу розробки покладена ця функція ПолучитьСтруктуруХраненияБазыДанных, яка згідно російській назві повертає опис структури. У цій структурі важливі 2 поля Призначення, яке має бути одно «Основна», і назву таблиці ИмяТаблицыХранения.


Читати далі →

На шляху до правильним SQL транзакціям (Частина 1)



Мені часто доводилося стикатися з тим, що люди прекрасно розуміють, що таке транзакції в базі даних і для чого вони потрібні, але при цьому не завжди вміють ними правильно користуватися. Безумовно, для досягнення 80-го рівня сакрального знання потрібно мати не один рік досвіду і прочитати безліч товстенних книг SQL. Тому в цій статті я навіть не буду намагатися описати все, що може бути пов'язано з транзакціями в MS SQL. Я хочу торкнутися один простий, але дуже важливе питання, який розробники часто упускають з виду – рівні ізоляції транзакцій.
Незважаючи на те, що тема дуже проста, у багатьох джерелах вона освячується погано – інформації або дуже мало, або дуже багато. Тобто прочитавши 5-6 коротких теоретичних визначень їх неможливо застосувати на практиці. Для впевненого розуміння предмету статті потрібно звертатися до спеціалізованої літератури, але там інформації на стільки багато, що далеко не кожен може приділити час для її засвоєння.
Сьогодні я хочу поділитися власним простим " рецептом, який допоміг мені раз і на завжди запам'ятати особливості рівнів ізоляції транзакцій і донині допомагає без проблем приймати зважені рішення про виборі необхідного рівня.

Читати далі →

На шляху до правильним SQL транзакціям (Частина 2)



попередній частині були розглянуті основи рівнів ізоляції транзакцій. Тут я постараюся копнути трохи глибше і розповісти за допомогою яких інструментів MS SQL Server реалізує рівні ізоляції.

Як ви могли побачити в попередньому розділі, існує два способи підтримки ізоляції:
  • Заснований на блокуванні ресурсів
  • Заснований на створенні версионной копії ресурсів.
Режими, засновані на створенні копії даних, досить прості для розуміння і думаю не вимагають особливої уваги. При бажанні заглибитися в деталі їх реалізації, я можу запропонувати звернутися до не поганому опису на MSDN. Я ж хочу розглянути, як реалізовано механізм, заснований на блокування.

Читати далі →