• Чем мониторить arp на mikrotik?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Отслеживать - нет.
    Можно написать скрипт, который будет получать текущую таблицу (interface bridge host print либо interface ethernet switch host print) и сравнивать с предыдущей версией. По результатам сравнения сообщать. Период запуска, само собой, меньше времени жизни записи в кэше.
    Хотя разумнее одним скриптом сливать в файл, а потом другим скриптом обрабатывать и кляузничать - но уже не так часто. Или вообще в БД писать, для истории...
    Ответ написан
    Комментировать
  • Начинающий системный администратор. Вопрос по построению сети?

    @Akina
    Сетевой и системный админ, SQL-программист.
    1. Собственный сервер - скорее да, чем нет. На Windows - 33/67 (альтернативы - Linux и NAS). AD - точно нет.
    2. Коммутатор, разделяющий сеть на изолированные сегменты с помощью VLAN. При необходимости ограниченного или контролируемого доступа из сегмента в сегмент - маршрутизация Микротиком.
    3. См. п. 1.
    4. Видео - есть. Полезных - нет.

    Дополнительно. Организация надёжного резервного копирования, и в первую очередь баз 1С, на независимый носитель - критично обязательно.
    Ответ написан
    Комментировать
  • Как правильно настроить мост на Mikrotik?

    @Akina
    Сетевой и системный админ, SQL-программист.
    SNR-SFP-W35-3 1000BASE-X 3km, 6dB TX 1310nm/RX 1550nm - это одномодовый свисток. Одноглазый, кстати.
    ML-SG-2DFM-31LD 1.25G SFP 1310nm 2KM DDM - это многомодовый свисток. Вообще двуглазый.

    Они говорят на разных языках. Работают на разном волокне. И никогда друг друга не поймут.

    Mission impossible.
    Ответ написан
  • Когда каскадное обновление это плохо?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Когда каскадное обновление это плохо?

    Каскадное обновление - в большинстве случаев это... глупо.

    Вспомним, что это вообще такое.

    Имеется связь, реализованная внешним ключом. Некое поле (в общем случае - выражение) основной таблицы, уникально индексированное, является значением, на которое ссылается некое поле (или выражение) подчинённой таблицы (возможно, и той же самой).

    По смыслу в основной таблице это поле - как минимум уникально. То есть с точностью до NULL оно является идентифицирующим - то есть если в этом поле не NULL, то определённое значение однозначно идентифицирует строго одну запись. В большинстве случаев же поле в основной таблице, на которое установлена ссылка в подчинённой таблице, вообще является первичным ключом, соответственно не может быть NULL и является истинно идентифицирующим.

    Что же есть каскадное обновление? Это изменение связанного значения в подчинённой таблице, если изменяется значение основной таблицы. Ну то есть если изменяется (вспоминаем сказанное выше) значение первичного ключа или поля, объявленного уникальным. В основной таблице. Ага...

    Ну то, что изменение/корректировка значения поля первичного ключа есть bad practice (читай - дурь голимая), хорошо известно, обосновано и весьма логично. Нет, реально возможны ситуации, когда такая операция оправдана и имеет смысл - но такая ситуация абсолютно всегда одноразовая, и есть составная часть административного обслуживания. А если подобная надобность возникла на уровне пользователя, в рабочем процессе - то это гарантия наличия серьёзной ошибки в проектировании БД.

    Практически всё то же относится и к корректировке просто уникального поля. За исключением случая, когда выполняется каскадное изменение значения поля, которое в основной таблице получило значение NULL. То есть когда выполняемая операция по смыслу является не обновлением, а "мягким удалением" основной записи с каскадным удалением всех подчинённых. Правда, на вопрос, как отличить мягко каскадно-удалённые подчинённые записи от мягко явно-удалённых, и как определить, с какой основной записью была связана мягко удалённая подчинённая, не залезая в журнал или бэкап, ответа никто не даст. А получается, что даже в случае исключения всё делается через "универсальный интерфейс", то есть косяк в проектировании структуры имеется и в этом случае.

    Резюмирую. Если каскадное обновление необходимо, оно скорее всего маскирует недостатки и ошибки проектирования. А плохо это или хорошо - прикрывать дырку костылём,- решайте сами.
    Ответ написан
    Комментировать
  • Как выполнить обновление поля последней датой по связанным таблицам?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Шаблон:

    UPDATE main_table
    JOIN ( SELECT id, MAX(created_at) AS created_at
           FROM ( SELECT id, created_at from slave1
                  UNION ALL
                  SELECT id, created_at from slave2
                  UNION ALL
                  ...
                  UNION ALL
                  SELECT id, created_at from slaveN             
                  ) AS alldates
           GROUP BY id
           ) AS maxdate USING (id)
    SET main_table.created_at = maxdate.created_at
    Ответ написан
    Комментировать
  • Между маршрутизаторами внутри частной сети WAN или LAN?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Между маршрутизаторами внутри частной сети WAN или LAN?

    Частная - это по-ихнему private.
    Private network - это подсеть, которая не маршрутизируется в Интернете (явно или условно). В первую очередь подсети "серых" адресов (RFC 1918), но вообще таких подсетей (именуемых bogon networks) под полтора десятка.
    Сеть, адресация которой построена на не маршрутизируемых глобально адресах - это LAN.
    Ответ написан
    5 комментариев
  • Как Добавить NekoBox в Автозапуск?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Суёшь линк/ярлык в
    C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
    Ответ написан
    Комментировать
  • Как правильно сделать скрипт для крона?

    @Akina
    Сетевой и системный админ, SQL-программист.
    А к какой заднице тут вообще CRON прислонился?

    Если же имеется в виду, что указанным запросом надо удалять записи регулярно - то CRON для решения такой задачи просто нафиг не нужен..

    Using the Event Scheduler

    PS. И в запросе следует избавиться от WHERE IN и переписать его на обычный JOIN.
    Ответ написан
    Комментировать
  • Есть ли что то наподобие hackerrank sql с ответами?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Ну там не головоломки, а самые обычные задачки.

    Да, сайты, где есть не только SQL-задачи, но и их решения, имеются. Тот же sql-ex, например.. Правда, не припомню таких, где бы предлагалось и объяснялось решение именно авторами сайта - решения (а практически любая задача имеет много альтернативных, порой радикально различающихся подходом, решений) можно найти либо в комментариях пользователей к задаче, либо на прилагаемом форуме.

    Простейший запрос к гуглю, ну типа задачи OR упражнения по sql даст кучу ссылок - что приятно, большинство русскоязычные. Выбирай не хочу.

    И ещё момент. Большинство задач там синтетические, и бывают задачки на довольно странной структуре таблиц, противоречащей всем и всяким правилам и требованиям нормализации. Помните об этом, и не учитесь плохому...
    Ответ написан
    Комментировать
  • Как исправить ошибку с бд?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Представим, что проблему сохранения вы как-то решили... А что вы намерены делать с сохранённым значением?

    Вариант 1 - всегда только извлекать весь массив целиком, в том виде, в каком он сохранялся. Никаких извлечений части массива, никаких по нему поисков, сортировок и прочего. Тогда преобразуйте массив во вменяемый сериализованный формат и сохраняйте в поле БД. Виктор Кожухарь в своём ответе разобрал этот вариант.

    Вариант 2 - возможна какая-то обработка. Извлечение части массива по какому-то критерию (порядковый номер, соответствие шаблону и пр.), поиск в массиве по заданному критерию, сортировка самого массива либо массивов по какому-то критерию.. Тогда однозначно делите массив на отдельные элементы и сохраняйте их по одному (конечно, соответствующим образом должна измениться структура БД). Делить можно и на стороне PHP (как показывает Евгений в своём ответе), и в запросе на запись на стороне MySQL. Первое, как я понимаю, вам проще сделать, но правильно - второй вариант.
    Ответ написан
    Комментировать
  • Как можно заполнить одну из 2 коробок по максимум?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Если вес является единственным параметром, то это "Задача линейного раскроя".

    Ну и нехватает критерия максимума. Например, критерием может быть минимальный остаток допустимого веса, а может быть и максимальный процент заполнения...
    Ответ написан
    Комментировать
  • Lan тестер в активное оборудование? Можно ли прозванивать потенциально активные элементы сети?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Оборудование на другом конце - ситуация штатная. Тестер обязан её предусматривать, в т.ч. и вариант с PoE.

    Про убитый тестером порт даже не слышал. Но если такое произойдёт, то это будет явно следствие неисправности тестера. Либо "после, но не вследствие".

    А вот если на другом конце окажется что-то, что использует витую пару, но сетевым интерфейсом не является (например, порт "дальнобойной" АТС), можно остаться и без тестера...
    Ответ написан
    Комментировать
  • Как заполнить столбец таблицы?

    @Akina
    Сетевой и системный админ, SQL-программист.
    UPDATE test
    JOIN ( SELECT id, ROW_NUMBER() OVER (ORDER BY id) new_id
           FROM test ) AS cte USING (id)
    SET test.new_id = cte.new_id;

    id - UNIQUE NOT NULL, либо вообще PRIMARY KEY. Поле либо выражение.
    Ответ написан
    Комментировать
  • Выбор максимального значения за период и timestamp этого значения. Ошибка sql_mode=only_full_group_by?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Ну типа так:
    SELECT DISTINCT
           MAX(player_count) OVER () AS players_max, 
           FIRST_VALUE(`timestamp`) OVER (ORDER BY player_count DESC) AS players_max_timestamp
    FROM steam_stats 
    WHERE `timestamp` >= '2024-07-01' AND `timestamp` < '2024-08-01'

    Если максимальное значение player_count встречается более чем один раз, то будет выведен случайный timestamp из возможных. Если нужен определённый (например, самый последний из них), расширьте выражение сортировки в определении окна.
    Ответ написан
    1 комментарий
  • Как найти минимальное свободное значение в диапазоне?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Предполагая, что тип данных поля - DECIMAL(xx, 3):
    SELECT MIN(value) + 0.001
    FROM test t1
    WHERE NOT EXISTS (
      SELECT NULL
      FROM test t2
      WHERE t1.value = t2.value - 0.001
      );


    https://dbfiddle.uk/9Yyi-pol

    PS. Возвращаемое значение не может быть меньше минимального из уже имеющихся в таблице.
    Ответ написан
  • Autoincrement или случайная строка в качестве primary key + foreign key?

    @Akina
    Сетевой и системный админ, SQL-программист.
    из той статьи появилось предположение

    Статья однозначно описывает процесс вставки новой записи, намекая на расщепление страницы.
    Что же до пугающей фрагментации данных, то на неё в большинстве случаев можно наплевать ядовитой слюной - ибо запрос типа "дай мне всё, что есть, без фильтраций и сортировок" в основном интерактивен и соответственно редко критичен по скорости.

    Таблица часто join-тся в запросах через hash.

    Что, берутся все записи таблицы, и сортировка выходного набора тоже по этому полю? нет? тогда статья тут близко не лежала.

    "hash" - это primary key и содержит md5 текста

    Тип данных и размер мы должны сами придумать?
    Ответ написан
  • Какое преимущество для текущей конфигурации обеспечивает настройка сетей VLAN?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Какое преимущество для текущей конфигурации обеспечивает настройка сетей VLAN?

    Это же учебное задание, верно? и, поскольку маска у клиентских узлов не указана, следует полагать, что используется классовая адресация, и соответственно все 6 указанных узлов находятся в одной подсети.

    В этом случае деление на VLAN однозначно убирает взаимную "видимость" узлов, включённых в разные VLAN, а также разделяет широковещательный трафик. Опять же безопасность и всё такое...

    Можно же взять S1 и подключить к нему PC1, PC4 и т.д.

    Это же учебное задание, верно? ну так если имеется именно показанная схема, без обозначенных пространственных зон, то однозначно предполагается, что подключение клиентских узлов к другим коммутаторам - невозможно физически.

    Так что никаких "можно же взять" - нельзя, и точка.
    Ответ написан
    Комментировать
  • Как проранжировать данные таким образом, чтобы не менялся номер по определенному условию?

    @Akina
    Сетевой и системный админ, SQL-программист.
    WITH cte AS (
      SELECT *,
             SUM((flag IS NULL) :: INT) OVER (PARTITION BY user_id ORDER BY product_id ASC) grp
      FROM test
      )
    SELECT product_id, user_id, flag,
           DENSE_RANK() OVER (PARTITION BY user_id ORDER BY grp ASC) "rank"
    FROM cte
    ORDER BY 1,2;

    fiddle
    Ответ написан
    2 комментария
  • Принцип работы с vlan?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Или же есть какие-то регламенты или негласные правила при создании вланов на сети?

    Есть неписанные правила, которые никто не обязан соблюдать. У каждого они свои. Вот, скажем. мой наборчик:

    0. Структура VLAN должна формироваться до создания сети. Любые изменения на уже существующей архитектуре будут достаточно проблемны и болезненны, особенно если сеть 24*7.

    1. Default VLAN (он же VLANID = 1) не должен использоваться в сети. Мягкий вариант - в данном VLAN нет ни одного порта, жёсткий - все порты Forbidden.

    Исключения:
    а) в сети вообще не используются VLAN;
    б) имеется оборудование, которое (вопреки документации) не работает правильно без включения транковых портов в default VLAN - например, DES-3028P.

    2. Сходные по назначению VLAN образуют группы, в которых VLANID помогает идентифицировать назначение VLAN.

    Пример 1: группы с VLANID = 2-99 и 4001-4095 используются как администрирующие (доступ к интерфейсу управления и мониторинга коммутаторов), управляющие (скажем, для MSTP, MPLS и прочих протоколов, требующих отдельного управляющего VLAN) или для какого-нибудь вендор-специфического межкоммутаторного обмена.
    Пример 2: группа с VLANID (например) 2x01-2x48 используется в гостинице для обеспечения проводного интернета (клиентского, SmartTV, IP-телефония), соответственно вторая цифра указывает на этаж, а 3-4 цифры на номер комнаты.

    Относительно правила "в каждом VLAN строго одна подсеть"... кому-то это абсолютная истина, а кому-то пустой звук. Я отношусь ко второй группе. Хотя и признаю, что есть архитектуры, когда такое соответствие оправдано.
    Ответ написан
  • Как обновить столбец таблицы учитывая агрегатные функции?

    @Akina
    Сетевой и системный админ, SQL-программист.
    По-моему, достаточно вычисляемого столбца:

    "Итог" numeric GENERATED ALWAYS AS ( COALESCE("Январь", 0) + 
                                         COALESCE("Февраль", 0) + 
                                         COALESCE("Март", 0) + 
                                         COALESCE("Апрель", 0) + 
                                         COALESCE("Май", 0) + 
                                         COALESCE("Июнь", 0) + 
                                         COALESCE("Июль", 0) + 
                                         COALESCE("Август", 0) + 
                                         COALESCE("Сентябрь", 0) + 
                                         COALESCE("Октябрь", 0) + 
                                         COALESCE("Ноябрь", 0) + 
                                         COALESCE("Декабрь", 0) ) STORED


    fiddle

    И запросов вообще никаких не нужно.

    PS. Но вообще такая форма хранения находится в вопиющем противоречии с нормальными формами. Настоятельно рекомендую переделать, пока не поздно.
    Ответ написан
    2 комментария