Сообщения

Сообщения за июль, 2022

SQL. Очистка записей из связанных таблиц

Дано: Есть 2 таблицы "Сообщения" и "Архив сообщений", вторая содержит только ссылку на первую и дату отправки в архив. Задача:  Почистить сообщения. Решение: Для решения можно было написать 2 скрипта, которые сначала удаляют записи из таблицы "Архив сообщений", а потом из таблицы "Сообщения" (такая очередность обусловлена тем, что в архиве сообщения есть ссылки FK). Выглядеть это будет так: DELETE FROM ARCHIVEMAILUSER WHERE MAIL_ID IN (SELECT ID FROM MAIL WHERE CREATE_DATE >= to_date ('01.01.2022', 'dd.mm.yyyy') AND CREATE_DATE < to_date ('02.02.2022', 'dd.mm.yyyy')); DELETE FROM MAIL WHERE CREATE_DATE >= to_date ('01.01.2022', 'dd.mm.yyyy') AND CREATE_DATE < to_date ('02.02.2022', 'dd.mm.yyyy'); - Но что, делать если связанных таблиц больше? - Использовать PL/SQL! Запрос будет выглядеть следующим образом: --#ORACLE begin for cur in (SELECT id FROM MAIL WHERE CREATE_DA

Oracle. Импорт схем с исключением больших таблиц

Изображение
Восстановление дампа размером 98 Гб занимает примерно 233 минут (03:53). Довольно длительное время, а с учетом того что схемы ресторятся часто и при этом содержат практически одни и те же данные (дампы за разные даты), то получаем как минимум 2 проблемы: Большой объем схемы, который занимает табличное пространство и дисковое пространство Грустные сотрудники 😞, которые ожидают окончания рестора БД В связи с этим, было решено восстанавливать схемы исключая из них часть таблиц, особенно больших размеров. Логично, что данное решение имеет недостаток - в случае, если понадобятся данные из исключенной таблицы, то придется выполнять доимпорт схемы . Но это не страшно, дабы эти данные бывают нужны в 1 из 10 случаев. После исключения таблиц - время рестора уменьшилось до 100 минут (01:40). Довольно хороший результат 💪 С учетом, что рестор выполняется скриптом (sh), то в коде используется следующая команда: # Импорт таблиц за исключением некоторых, чтобы ускорить рестор (EXCLUDE) $CMD $SYSUSER

Python. DPI-1047 ошибка с работой Oracle

При запуске python-скрипта возникает ошибка: PS > python test.py File "...\test.py", line 3, in <module> cx_Oracle.DatabaseError: DPI-1047: Cannot locate a 64-bit Oracle Client library: "The specified module could not be found". See https://cx-oracle.readthedocs.io/en/latest/user_guide/installation.html for help Причина: Отсутствуют необходимые библиотеки Oracle Как решить: Скачиваем instantclient basic для Windows тут Файлы библиотек переносим в каталог с Python (лучше в каталоге venv ): oci.dll ocijdbc21.dll ociw32.dll oramysql.dll orannzsbb.dll oraocci21.dll oraocci21d.dll oraociei.dll orasql.dll