Size: a a a

SqlCom.ru - Стиль жизни SQL

2020 June 25

O

Oleg in SqlCom.ru - Стиль жизни SQL
Можно посмотреть утилитой Process Monitor кто пытается создать файл по пути...
источник

С

Сергеич in SqlCom.ru - Стиль жизни SQL
Marat
нужны права не агенту а engine
Мать моя женщина... а я сам только начал думать почему ошибка в журнале энжин а не агента
источник

С

Сергеич in SqlCom.ru - Стиль жизни SQL
Благодарю, пойду исправлю
источник

МД

Марьяна Демина... in SqlCom.ru - Стиль жизни SQL
Всем привет:)
Меня зовут Марьяна и я рекрутер)

Первое сообщение не должно содержать ссылок и рекламы, потому для начала решила познакомиться.

Флудить не буду, не ругайтесь:)
источник

T

Timus in SqlCom.ru - Стиль жизни SQL
🤦‍♂️
источник

AS

Anastasiya Shmatkova in SqlCom.ru - Стиль жизни SQL
Вы уже флудите, почитайте правила. https://t.me/sqlcom/88269
Telegram
Дмитрий Зайцев in SqlCom.ru - Стиль жизни SQL
#sqlcom_rules
Добро пожаловать в чат SqlCom.ru (MS SQL Server).
Мы любим общаться и делиться опытом, присоединяйся.

📌  ПРАВИЛА ГРУППЫ 📌
🚫 Первые сутки действует "защита от рекламы". Бот удаляет сообщения со ссылками, почтой и никами. Плюс данное ограничение, для первого сообщения, действует постоянно.
🚫 Вежливость и уважение к участникам. Стикеры нежелательны. Разговоры за жизнь, общение 1 на 1, вопросы начального уровня, споры и прочий оффтоп в @sql_ninja или личку
🚫 Мы всегда готовы помочь, но если вы хотите чтобы задачу полность решили за вас, то это уже работа, а она, как водится, стоит денег
🚫 Для HR: сразу указывайте хештег #работа, возможность удалённой работы и зарплатную вилку (без этого всё равно помидорами закидают). Не чаще 1 раза в 3 дня. Само обсуждение вакансии в личку или в @sql_ninja

📌  Викторина по MS SQL Server📌
Чтобы начать викторину, необходимо перейти в приват к  @Gopnegbot и напичать /quiz. Замечания и предложения можно озвучивать в наш второй чат @sql_ninja

📌  КАК ЗАДАТЬ ВОПРОС 📌…
источник

МД

Марьяна Демина... in SqlCom.ru - Стиль жизни SQL
#работа #вакансия #москва #офис #fulltime

Я ищу повелителя баз данных SQL со знанием C# в компанию JTSOFT.
 JTSOFT - это аутсорсинговая IT компания, которая уже 7 лет специализируемся на разработке программных решений в сферах b2b, b2g.

Компания имеет статус IBM Premier Business Partner и работает практически со всей линейкой IBM.
Команды JTSOFT внедряли Универсальную Электронную Карту, разрабатывали приложения и формы для банка «Возрождение», а также реализовали проект по визуализации и контролю системы БД IBM Tivoli.

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


Чем будешь заниматься?

▪️Участвовать в полном цикле проектирования, разработки и тестирования бэк- и  мидл-офисной системы: проводить системный анализ бизнес-требований ➡️ проектировать решения и разработку приложений в соответствии с требованияини ➡️ проведить тестирования реализованного решения ➡️ и вводить в эксплуатацию конечный продукт.
▪️Интегрировать разрабативаемые решения в систему мониторинга работоспособности систем.
▪️Проводить модульное тестирование, разрабатывать unit-тесты
▪️Оптимизировать SQL-запросы
▪️Анализировать существующий код, архитектуру баз данных
▪️Разрабатывать методы повышения производительности SQL-запросов MS SQL


Что хочется видеть в идеальном кандидате:

▪️Ты работаешь на C# и знаешь MS SQL уже минимум 3 года.
▪️Имеешь опыт реализации бизнес-логики на уровне СУБД: практический опыт автоматизации задач по средствам PowerShell/C#
▪️Умеешь оптимизировать процессы и администрировал приложения/сервера баз данных.
▪️Понимаешь архитектуру и работал с Service Broker, AlwaysOn, Extended Events
▪️Легко работаешь в команде по средству Waterfall, Agile, DevOps, Continuous Integration
▪️Умеешь анализировать существующий код, и архитектуру баз данных.


🍪 Компания предоставляет все необходимое:
👌🏻ТК РФ
👌🏻 ЗП до 200к
👌🏻Компания предоставляет современное и удобное оборудование
👌🏻Комфортный офис в бизнес-центре "Технопарк", в двух минутах ходьбы от метро Технопарк

Если заинтересовало, напиши мне в личные сообщения.
источник

AB

Anton Burmistrov in SqlCom.ru - Стиль жизни SQL
Проект для Альфа-Банка?
источник

АС

Алексей Савин... in SqlCom.ru - Стиль жизни SQL
Всем привет.

Прошу помочь, есть сомнения что я правильно понимаю работу транзакций.
Кратко: Есть БД  с сырыми данными, есть БД которая агрегирует информацию для дальнейшего использования.
Работа с массовыми данными, 1 таблица миллионник, вторая обычно тысяч 100 и более, процедур может быть много, вроде пока всё работает, но хотелось бы ли точно понять что правильно работаем, либо улучшить :)

Я указываю в процедуре явные транзакции и как я понимаю, что каждый блок транзакции освобождает таблицы от блокировок после commit или rollback, и дальнейшее выполнение не влияет на их работы.
Я правильно понимаю?

Пример (абстрактный):
--Указываем уровень изоляции
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

--1 блок считывания данных, уникальный индекс
BEGIN TRAN Tran_Select
   --Указываем что блокировка только построчная ROWLOCK
   --записываем в темповую таблицу, что бы записывать в
   --таблицу только если есть что записывать
   Select *
   into #TMP_Table3
   FROM [db1].[dbo].[table1] AS t1 WITH (ROWLOCK)
   JOIN [db1].[dbo].[table2] AS t2 WITH (ROWLOCK) ON t1.[id] = t2.[id]
COMMIT TRAN Tran_Select;

--Предыдущая транзакция уже отпустила все блокировки
--2 блок по очистке и записи в таблицу новых данных
BEGIN TRAN Tran_Insert
   BEGIN TRY
       IF (SELECT (COUNT(*) FROM #TMP_Table3) > 0
       BEGIN
           TRUNCATE TABLE [db3].[dbo].[table3];

           INSERT INTO [db3].[dbo].[table3]
           SELECT *
           FROM #TMP_Table3;
       END;

       COMMIT TRAN Tran_Select;
   END TRY
   BEGIN CATCH
       ROLLBACK TRAN Tran_Select;
       THROW;
   END CATCH;
источник

АС

Алексей Савин... in SqlCom.ru - Стиль жизни SQL
Вообще вопрос возник когда начал больше погружаться в литературу по высоконагруженным системам
источник

M

Marat in SqlCom.ru - Стиль жизни SQL
Алексей Савин
Всем привет.

Прошу помочь, есть сомнения что я правильно понимаю работу транзакций.
Кратко: Есть БД  с сырыми данными, есть БД которая агрегирует информацию для дальнейшего использования.
Работа с массовыми данными, 1 таблица миллионник, вторая обычно тысяч 100 и более, процедур может быть много, вроде пока всё работает, но хотелось бы ли точно понять что правильно работаем, либо улучшить :)

Я указываю в процедуре явные транзакции и как я понимаю, что каждый блок транзакции освобождает таблицы от блокировок после commit или rollback, и дальнейшее выполнение не влияет на их работы.
Я правильно понимаю?

Пример (абстрактный):
--Указываем уровень изоляции
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

--1 блок считывания данных, уникальный индекс
BEGIN TRAN Tran_Select
   --Указываем что блокировка только построчная ROWLOCK
   --записываем в темповую таблицу, что бы записывать в
   --таблицу только если есть что записывать
   Select *
   into #TMP_Table3
   FROM [db1].[dbo].[table1] AS t1 WITH (ROWLOCK)
   JOIN [db1].[dbo].[table2] AS t2 WITH (ROWLOCK) ON t1.[id] = t2.[id]
COMMIT TRAN Tran_Select;

--Предыдущая транзакция уже отпустила все блокировки
--2 блок по очистке и записи в таблицу новых данных
BEGIN TRAN Tran_Insert
   BEGIN TRY
       IF (SELECT (COUNT(*) FROM #TMP_Table3) > 0
       BEGIN
           TRUNCATE TABLE [db3].[dbo].[table3];

           INSERT INTO [db3].[dbo].[table3]
           SELECT *
           FROM #TMP_Table3;
       END;

       COMMIT TRAN Tran_Select;
   END TRY
   BEGIN CATCH
       ROLLBACK TRAN Tran_Select;
       THROW;
   END CATCH;
непонятно зачем вам rowlock, и count лучше заменить на exist
источник

DI

Dmitriy Ivanov in SqlCom.ru - Стиль жизни SQL
Алексей Савин
Всем привет.

Прошу помочь, есть сомнения что я правильно понимаю работу транзакций.
Кратко: Есть БД  с сырыми данными, есть БД которая агрегирует информацию для дальнейшего использования.
Работа с массовыми данными, 1 таблица миллионник, вторая обычно тысяч 100 и более, процедур может быть много, вроде пока всё работает, но хотелось бы ли точно понять что правильно работаем, либо улучшить :)

Я указываю в процедуре явные транзакции и как я понимаю, что каждый блок транзакции освобождает таблицы от блокировок после commit или rollback, и дальнейшее выполнение не влияет на их работы.
Я правильно понимаю?

Пример (абстрактный):
--Указываем уровень изоляции
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

--1 блок считывания данных, уникальный индекс
BEGIN TRAN Tran_Select
   --Указываем что блокировка только построчная ROWLOCK
   --записываем в темповую таблицу, что бы записывать в
   --таблицу только если есть что записывать
   Select *
   into #TMP_Table3
   FROM [db1].[dbo].[table1] AS t1 WITH (ROWLOCK)
   JOIN [db1].[dbo].[table2] AS t2 WITH (ROWLOCK) ON t1.[id] = t2.[id]
COMMIT TRAN Tran_Select;

--Предыдущая транзакция уже отпустила все блокировки
--2 блок по очистке и записи в таблицу новых данных
BEGIN TRAN Tran_Insert
   BEGIN TRY
       IF (SELECT (COUNT(*) FROM #TMP_Table3) > 0
       BEGIN
           TRUNCATE TABLE [db3].[dbo].[table3];

           INSERT INTO [db3].[dbo].[table3]
           SELECT *
           FROM #TMP_Table3;
       END;

       COMMIT TRAN Tran_Select;
   END TRY
   BEGIN CATCH
       ROLLBACK TRAN Tran_Select;
       THROW;
   END CATCH;
Да верно, но вы также можете делать все в одной транзакции, это может бытт быстрее,если на второй таблице у вас нет индексов. Также можно использовать минимальное протоколирование для транзакции 2
источник

ВБ

Владимир Боярских... in SqlCom.ru - Стиль жизни SQL
Никогда не использовал этот хинт, но вот тут пишут, что нужен holdlock
https://www.sql.ru/forum/464106/rowlock-kak-pravilno-nalozhit-blokirovku
источник

АС

Алексей Савин... in SqlCom.ru - Стиль жизни SQL
Dmitriy Ivanov
Да верно, но вы также можете делать все в одной транзакции, это может бытт быстрее,если на второй таблице у вас нет индексов. Также можно использовать минимальное протоколирование для транзакции 2
Индексы есть на всех таблицах.
Я не знаю как сделать в одной транзакции и не затереть данные или Вы имеете ввиду, что если @@ROWCOUNT > 0 то делать ROLLBACK?
Можете пример показать?
источник

АС

Алексей Савин... in SqlCom.ru - Стиль жизни SQL
Marat
непонятно зачем вам rowlock, и count лучше заменить на exist
EXIST же вроде покажет вообще есть таблица или нет, т.е. если там будет 0 записей, то скажет TRUE и тогда я потеряю данные не получив новые, т.е. важно, что бы в таблице были данные хотя бы за вчера и обновлять только когда есть новые данные
источник

ВБ

Владимир Боярских... in SqlCom.ru - Стиль жизни SQL
И вроде бы это нужно в одной транзакции делать, иначе после COMMIT-а снимется блокировка (это надо проверять).. Я правильно понял, что нужно заблокировать строки до момента, когда данные зальются в целевую таблицу?
источник

M

Marat in SqlCom.ru - Стиль жизни SQL
Алексей Савин
EXIST же вроде покажет вообще есть таблица или нет, т.е. если там будет 0 записей, то скажет TRUE и тогда я потеряю данные не получив новые, т.е. важно, что бы в таблице были данные хотя бы за вчера и обновлять только когда есть новые данные
if exists (select * from temp)
источник

АС

Алексей Савин... in SqlCom.ru - Стиль жизни SQL
Владимир Боярских
И вроде бы это нужно в одной транзакции делать, иначе после COMMIT-а снимется блокировка (это надо проверять).. Я правильно понял, что нужно заблокировать строки до момента, когда данные зальются в целевую таблицу?
Не, наоборт, нужно блокировки делать если фактически есть что писать или считывать.
Мне нужно, что бы не было лишних блокировок, что бы данные другие процедуры (тоже массовые) могли использовать и не ожидать просто так :)

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

АС

Алексей Савин... in SqlCom.ru - Стиль жизни SQL
Marat
if exists (select * from temp)
Сейчас попробовал, реально если 0 записей не отрабатывает, не знал, спасибо. В копилку знаний закину :)
источник

M

Marat in SqlCom.ru - Стиль жизни SQL
Алексей Савин
Не, наоборт, нужно блокировки делать если фактически есть что писать или считывать.
Мне нужно, что бы не было лишних блокировок, что бы данные другие процедуры (тоже массовые) могли использовать и не ожидать просто так :)

Т.е. я как в голове строю...
Я пишу данные в тэмп таблицу и блокирую только построчно.
Потом я смотрю есть ли данные в таблице, если да, то накладываю блокировку на запись
все верно, если хотите чтобы ваш процесс других не лочил, то ваш подход бить на  транзакции это норм. но с rowlock я бы глянул сколько строк, если много лучше убрать его
источник