Blockchain таблицы в Oracle Database 19c: особенности работы на примере

Blockchain таблицы в Oracle 19c
Андрей Васенин

Андрей Васенин

Автор статьи. Сфера интересов: ИТ-специалист (программирование, администрирование, DBA). Кандидат экономических наук. Подробнее .

Чтобы иметь возможность использовать таблицу Blockchain в релизе Oracle 19c, вам нужно будет применить последние исправления (патчи) и изменить значение параметра совместимости (что необычно). Функция блокчейна была впервые представлена в релизе Oracle 21c и перенесена на 19c с патчем 19.10 RU  в январском CPU 2021 года. Итак, изучим эту возможность на примере пропатченной базы данных Oracle до версии 19.11 (CPU апреля 2021 года).

Шаг 1. Чтобы поднять параметр совместимости, отключаем базу данных:

SQL> shutdown immediate;

Шаг 2. Затем отредактируем файл init.ora и изменим значение параметра совместимости:

compatible=’19.11.0′

Шаг 3. Затем снова запускаем базу данных:

SQL> startup pfile=’D:\WINDOWS.X64_193000_db_home\dbs\init.ora’

Шаг 4. Проверим,  действительно ли применился параметр совместимости:

SQL> SELECT name, value, description FROM v$parameter WHERE name = ‘compatible’;

...
compatible
19.11.0
Database will be completely compatible with this software version

Шаг 5. Создаем Blockchain таблицу. В подключаемой (pluggable) базе данных PDB1 создаем тестовое табличное пространство и пользователя, которого наделяем нужными привилегиями:

CREATE TABLESPACE ledgertbs;

CREATE USER auditor identified by audit_123 DEFAULT TABLESPACE ledgertbs;

GRANT create session, create table, unlimited tablespace TO auditor;

GRANT execute ON sys.dbms_blockchain_table TO auditor;

Шаг 6. Теперь, зайдя в базу PDB1 по учетной записью auditor, мы создадим таблицу блокчейна с именем AUDITOR.LEDGER_EMP, которая будет поддерживать защищенный от несанкционированного доступа реестр текущих и исторических транзакций в PDB1. Строки никогда не могут быть удалены в таблице блокчейна AUDITOR.LEDGER_EMP. Эту таблицу блокчейна можно будет удалить только после истечения 3-х дней при условии отсутствия каких-либо манипуляций с ней.

SQL> CREATE BLOCKCHAIN TABLE ledger_emp (employee_id NUMBER, employee_name varchar2(15), salary NUMBER)

                     NO DROP UNTIL 3 DAYS IDLE

                     NO DELETE LOCKED

                     HASHING USING “SHA2_512” VERSION “v1”;

Проверим имеющиеся блокчейн таблицы, выполнив запрос к user_blockchain_tables:

SQL> SELECT *  FROM   user_blockchain_tables;

 запрос к user_blockchain_tables:

Шаг 7. Теперь давайте вставим 1 запись в таблицу ledger_emp:

SQL> INSERT INTO ledger_emp VALUES (106,’EMAD’,3000);

SQL> COMMIT;

 Шаг 8. Теперь, если попытаться удалить данную таблицу, получим сообщение об ошибке:

ORA-05723: drop blockchain or immutable table LEDGER_EMP not allowed

Шаг 9. Если же попытаться удалить все записи из таблицы, то получим следующую ошибку:

SQL> delete from auditor.ledger_emp;

ORA-05715: operation not allowed on the blockchain or immutable table

Шаг 10. Теперь давайте проверим целостность хеш-значений строки:

SELECT ORABCTAB_CHAIN_ID$ “Chain ID”, ORABCTAB_SEQ_NUM$ “Seq Num”,

               to_char(ORABCTAB_CREATION_TIME$,’dd-Mon-YYYY hh-mi’) “Chain date”,

               ORABCTAB_USER_NUMBER$ “User Num”, ORABCTAB_HASH$ “Chain HASH”,

               employee_id, salary

        FROM   ledger_emp;

 проверим целостность хеш-значений строки

В Oracle 19C есть параметр под названием BLOCKCHAIN_TABLE_MAX_NO_DROP, который определяет время простоя, в течение которого таблица может быть неактивной до возможности ее удаления. Этот параметр может быть очень полезным, если вы хотите защитить таблицу от случайного удаления, установив для параметра nodrop очень высокое значение.

Попробуйте выполнить с уровня PDB:

sqlplus / as sysdba

SQL> alter session set container=PDB1;

SQL> alter system set blockchain_table_max_no_drop=0;

alter system set blockchain_table_max_no_drop=0

*

ERROR at line 1:

ORA-01031: insufficient privileges

Попробуйте выполнить с уровня CDB:

sqlplus / as sysdba

SQL> alter system set blockchain_table_max_no_drop=0;

System altered.

Несмотря на то, что в документации указано, что вы можете изменить его с уровня PDB ?! (видимо это ошибка документации):

select
    name,type,value,ISPDB_MODIFIABLE,ISINSTANCE_MODIFIABLE,ISMODIFIED,ISSYS_MODIFIABLE,DESCRIPTION

from

    v$parameter

where

name=’blockchain_table_max_no_drop’;

проверка документации Оракл

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

SQL> CREATE BLOCKCHAIN TABLE auditor.ledger_emp_n (employee_id NUMBER, employee_name varchar2(15), salary NUMBER)

                         NO DROP UNTIL 4 DAYS IDLE

                         NO DELETE LOCKED

                         HASHING USING “SHA2_512” VERSION “v1”;

CREATE BLOCKCHAIN TABLE auditor.ledger_emp_n (employee_id NUMBER, employee_name varchar2(15), salary NUMBER)

*

ERROR at line 1:

ORA-05747: maximum retention time too high, should be less than or equal to 0

Надеюсь, что приведенные примеры дали наглядное преставление о возможностях работы с Blockchain таблицами в СУБД Oracle Database 19c.

Вас заинтересует / Intresting for you:

Как устроен поиск блоков данны...
Как устроен поиск блоков данны... 4493 просмотров Дэн Wed, 03 Jan 2018, 17:39:13
Как отменить команды SQL в Ora...
Как отменить команды SQL в Ora... 1070 просмотров Андрей Васенин Sat, 05 Jun 2021, 10:14:02
Индексы Oracle
Индексы Oracle 27369 просмотров Игорь Воронов Tue, 21 Nov 2017, 13:18:46
Oracle ASM: Удаление диска из ...
Oracle ASM: Удаление диска из ... 1994 просмотров Андрей Васенин Sun, 22 Nov 2020, 16:35:38
Войдите чтобы комментировать

OraCool аватар
OraCool ответил в теме #10441 2 года 1 мес. назад
Отличный мануал с примерами! Благодарю!
1dz аватар
1dz ответил в теме #10044 2 года 9 мес. назад
Не знала, что блокчейн таблицы можно теперь юзать в Oracle 19C. Думало только с 21 релиза появились. Спасибо за инфо и наглядные примеры.