Задать вопрос
  • Как удалить большой снапшот Hyper-V?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Да, избавиться от снапшота в условиях нехватки места не получится. Необходимо любыми способами изыскать том минимум на 14Т свободного пространства на время выполнения операции слияния. Если нет такого накопителя - собрать несколько штук в страйп.

    Если гипервизор не единственный, придётся на рабочем выполнить экспорт, потом перенести накопитель на другой, там импортировать по месту и затем сливать. Если же гипервизор единственный, или придётся собирать страйп, понадобится 18Т пространства (или два тома - 9 для экспорта и 14 для импорта и слияния), потому что нужно будет делать импорт с созданием нового идентификатора и, соответственно, с копированием.

    К слову, все эти операции можно проводить и на примонтированной шаре. Только сетевушку желательно на 10Г, или это будет очень долго.

    Конечно, не исключено, что слияние даст суммарно финальный том не 5+4=9, а меньше... но я бы на это не рассчитывал. А если в процессе кончится место, и слияние оборвётся по ошибке, то виртуалка, скорее всего, умрёт. Именно поэтому операцию следует выполнять на экспортированной и реимпортированной копии.

    Есть и ещё вариант. Выполнить внутри виртуалки бэкап тома с данными на подключенный третий диск. А потом пересоздать рабочий диск и восстановить.

    Либо подключить ещё один, пустой, образ, и внутри виртуалки собрать и синхронизировать софт-mirror, потом развалить, оставив только том-копию, убрать том-оригинал и мигрировать на его место копию. Тогда получится обойтись дополнительным томом на 9Г, но геморроя куда как больше. Зато плюс этого способа - он допускает выполнение всех операций без остановки виртуалки.
    Ответ написан
    Комментировать
  • Почему с фильтром PostgreSQL выдаёт больше записей?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Если у клиента ВСЕ записи ранее текущего года НЕ соответствуют условию WHERE, то эти записи будут отброшены ещё до группировки. И клиент попадёт в выборку, потому что останутся только записи текущего года. Проверять надо после группировки:
    HAVING MAX(   (apps.in_trash is not true 
               and apps.status = 4 
               and apps.filial_id = 1 
               and apps.invoice_id is not null
                   ) :: INT
               ) > 0
    Ответ написан
    Комментировать
  • Как использовать оконные функции в Order By?

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

    С одной стороны, описание окна расположено в правильном месте - строго после HAVING clause (или того места, где бы оно находилось).

    С другой стороны, написан какой-то бред. Что должно означать ORDER BY w? Сортировка по определению окна? Вы же сами приводите правильную цитату:

    Оконные функции разрешается использовать в запросе только в списке SELECT и предложении ORDER BY.


    Где же у вас, собственно говоря, функция?

    Должно быть, ну, скажем, так:
    SELECT sum(num) OVER w 
    FROM my_table 
    WINDOW w AS (PARTITION BY name) 
    ORDER BY MAX(num) OVER w
    Ответ написан
    Комментировать
  • Что будет с пингом, если между пк и роутером, добавить второй роутер?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Пинг гарантированно увеличится. Но при полностью исправном, неперегруженном и правильно настроенном оборудовании зарегистрировать эту разницу не получится.
    Ответ написан
    Комментировать
  • Не правильные или отсутствующие значения sql с использованием mariaDB что с ней не так?

    @Akina
    Сетевой и системный админ, SQL-программист.
    По смыслу происходящего во втором блоке кода - значение в поле SteamID таблицы qq_player_acc должно быть уникальным.

    Соответственно два вопроса.

    1. Объявлено ли указанное поле в структуре указанной таблицы уникальным? Если нет - то почему? Добавьте требование уникальности.

    2. Что мешает выполнить обычный INSERT IGNORE или, если надо обновлять существующую запись введёнными значениями, то INSERT ODKU или REPLACE INTO?

    PS. INSERT {table} .. WHERE EXISTS ( {table} ) - вообще-то недопустимый синтаксис.
    Ответ написан
    Комментировать
  • Как удалить строку из одной таблицы и добавить эту же строку в другую таблицу?

    @Akina
    Сетевой и системный админ, SQL-программист.
    мне необходимо удалить строку из одной таблицы и эту же строку добавить в другую таблицу.

    В PostgreSQL это вообще элементарная операция. Можно удалить запись в CTE и вставить её во внешнем запросе, можно наоборот. То, как выполнять, определяется возможными зависимостями и интерференциями.
    WITH cte AS (
        DELETE
        FROM table1
        WHERE {criteria}
        RETURNING *
    )
    INSERT 
    INTO table2
    SELECT *
    FROM cte;
    
    -- или 
    
    WITH cte AS (
        INSERT 
        INTO table2
        SELECT *
        FROM table1
        WHERE {criteria}
        RETURNING id
    )
    DELETE
    FROM table1
    WHERE id IN (
        SELECT id
        FROM cte
    );

    Sample fiddle

    Само собой, вместо звёзд может быть (даже правильнее сказать - должен быть) перечень определённых полей и выражений.

    PS. Хотя намного разумнее оставить одну таблицу и выполнять "мягкое удаление". Внимательнейшим образом прочитайте ответ alexalexes. При очень большом количестве записей, влияющем на производительность, такую таблицу можно и секционировать.
    Ответ написан
    Комментировать
  • Как передать имя таблицы как параметр?

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

    Вижу два варианта.

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

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

    Отдельно стоИт вариант, который является подвариантом первого, с той лишь особенностью, что тексты запросов абсолютно совпадают. В этом случае возможным решением может служить хранимая процедура, куда передаётся в виде параметров и имя таблицы, и значение критерия, а внутри выбирается либо строится с помощью CASE текст запроса, выполняемый потом динамическим SQL.
    Поясню вариант "строится" - имя таблицы передаётся как параметр хранимой процедуры, там он сравнивается с набором предопределённых литералов, и уже этот предопределённый литерал, а не переданный параметр, участвует в построении текста запроса.

    На строго в рамках PDO - полностью согласен с предыдущим оратором. Никак.
    Ответ написан
    3 комментария
  • Что будет с dhcp если переключить пул?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Первым делом в свойствах старого скопа корректируется время выделения адреса. Для стационарных узлов обычно по умолчанию ставится 5 или 7 дней. Первым делом меняем это время на 1 час. Это не сильно увеличит нагрузку на сеть. Ждём, пока все не перейдут на это время выделения. Затем, непосредственно перед переездом, ужимает это время до 5 минут. И через час начинаем собственно переезд. для чего просто (в зависимости от того, что умеет сервер) либо повышаем приоритет нового скопа относительно старого, либо просто отключаем старый. За час все перепрыгнут в новый скоп. После чего там можно поднять время выделения в новом скопе до старого значения в неделю, а старый вообще удалить.

    Но это просто процесс перевода всех динамиков в новую подсеть. А чтобы всё работало, нужно ещё много предварительных телодвижений, которые обеспечат отсутствие сбоев в работе.

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

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

    @Akina
    Сетевой и системный админ, SQL-программист.
    1) как сделать так, чтобы через "Сеть 2", "рабочая" (Wi-Fi) шёл трафик ТОЛЬКО на определённые сайты/адреса (в принципе, список IP-адресов почти весь есть), и 2) весь остальной трафик шёл ТОЛЬКО через "Сеть 1" (ethernet), и, соответственно, никак не попадал в "Сеть 2"?

    Оставляем Default gateway только через тот роутер, который "Сеть 1" (ethernet). На втором сетевом соединении шлюза по умолчанию быть не должно.
    Прописываем частные маршруты на "ТОЛЬКО определённые сайты" через роутер в "Сеть 2", "рабочая" (Wi-Fi). Если к этим сайтам выполняется обращение по именам - все имена занести в файл HOSTS.

    Всё собственно.

    как оградить "Сеть 2" от попадания в неё трафика из "Сети 1"?

    Убедиться, что служба "Маршрутизация и удалённый доступ" - остановлена.

    не совсем разобрался с метриками в Windows (установлена Win10) - какие параметры нужно задавать для каждой из этих 2 сетей?

    Забудь, это не твой случай.
    Ответ написан
    2 комментария
  • Чем мониторить 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-программист.
    Если вес является единственным параметром, то это "Задача линейного раскроя".

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