Таблицы Oracle - избегайте сбросов и удалений (таблицы блокчейна)

В версии 19c Oracle представила очень интересную возможность, дающую администратору возможность создавать таблицы, в которых разрешены только операции вставки, удаление строк запрещено или может быть ограничено на определенное время, а также ограничивать удаление таблицы.

Важно добавить, что для использования этой возможности необходимо, чтобы база данных была версии 19.10, был применен патч 32431413 и параметр COMPATIBLE базы данных был установлен на версию 19.10.0 или выше. Начиная с версии 19.11 при изменении параметра COMPATIBLE установка патча не требуется.

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

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

CREATE BLOCKCHAIN TABLE clauses:
* NO DROP определяет, как долго наша таблица будет защищена от оператора удаления "drop".

NO DROP [ UNTIL number DAYS IDLE ]

  • NO DROP : Таблица не может быть удалена.
  • NO DROP UNTIL number DAYS IDLE : Таблица не может быть удалена до тех пор, пока в течение указанного количества дней не будут вставлены новые строки.ификаты.

* NO DELETE определяет период времени, в течение которого строки не могут быть удалены.

NO DELETE { [ LOCKED ] | (UNTIL number DAYS AFTER INSERT [ LOCKED ]) }

  • NO DELETE  O DELETE LOCKED: строки не могут быть удалены.
  • NO DELETE UNTIL number DAYS AFTER INSERT: Строки не могут быть удалены до истечения X дней, в течение которых эти строки были вставлены, можно изменить срок хранения с помощью команды ALTER TABLE.
  • NO DELETE UNTIL x DAYS AFTER INSERT LOCKED: строки не могут быть удалены до истечения X количества дней, в которые эти строки были вставлены, и изменить срок хранения с помощью команды ALTER TABLE невозможно . Минимальное количество дней - 16, иначе при выполнении команды будет выдана ошибка.

*HASHING USING sha2_512 VERSION v1

Положение о формате хэш-алгоритма.

Пример:
Создадим тестовую таблицу в соответствии с описанными выше спецификациями:

В нашем случае мы создали таблицу "oracleconraul", оставили ее такой, чтобы ее можно было удалить, так как это тестовая среда, и указали, что до удаления данных из таблицы должно пройти 16 дней - минимально возможное значение.

Вставляем тестовые значения.

Мы проверяем правильность вставки записей:

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



ALTER в таблице BLOCKCHAIN

В нашем примере мы могли бы выполнить командуdrop на созданной нами таблице, как будет показано ниже, поскольку таблица была создана с условием "NO DROP UNTIL 0 DAYS IDLE", что для тестовой среды может быть наиболее логичным.

Выполнение команды на нашей таблице с текущими значениями:


В нашем случае, чтобы не удалять таблицу, мы выполняем следующую команду:

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

Исполнения:

insert into raul.oracleconraul values(200,'RAUL');
Создана 1 строка.
commit;


SQL> delete raul.oracleconraul where test_id=200;
delete raul.oracleconraul where test_id=200
*
ERROR at line 1:
ORA-05715: operation not allowed on blockchain or immutable table

SQL> drop table raul.oracleconraul;
drop table raul.oracleconraul
*
ERROR at line 1:
ORA-05723: drop blockchain or immutable table ORACLECONRAUL not allowed

Чтобы проверить, все ли правильно, можно запустить следующий запрос:
В нем мы можем определить, какие таблицы мы создали как "блокчейн"-таблицы, и их характеристики.


Одним словом, Oracle предлагает с версии 19.10 новый функционал, позволяющий реализовать блокчейн-приложения, либо позволяющий администратору иметь дополнительный инструмент безопасности, позволяющий избежать проблем удаления или искажения аудита по любой из таблиц "ядра", которые не могут быть изменены в базе данных. Очень важно перед применением данного функционала подумать о правильности его применения, поскольку, как уже указывалось, возможно, что таблица, которая изначально задумывалась как не подлежащая удалению/изменению, в силу эволюции приложения, ресурсов и т.д. впоследствии может быть удалена/изменена, и выполнить это действие будет невозможно.

Прокрутка к верху