В версии 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 новый функционал, позволяющий реализовать блокчейн-приложения, либо позволяющий администратору иметь дополнительный инструмент безопасности, позволяющий избежать проблем удаления или искажения аудита по любой из таблиц "ядра", которые не могут быть изменены в базе данных. Очень важно перед применением данного функционала подумать о правильности его применения, поскольку, как уже указывалось, возможно, что таблица, которая изначально задумывалась как не подлежащая удалению/изменению, в силу эволюции приложения, ресурсов и т.д. впоследствии может быть удалена/изменена, и выполнить это действие будет невозможно.