قابلیتهای جدید اوراکل 23c برای جداول Blockchain و Immutable

در این مطلب سعی داریم تعدادی از قابلیتهای جدید اوراکل 23c در زمینه جداول Blockchain و Immutable را مرور کنیم.

امکان حذف  و اضافه کردن ستون به جداول Blockchain و Immutable

در نسخه 23c می توان به جداول Blockchain ستونی را اضافه کرد(البته در version v2 این نوع از جداول):

SQL> create blockchain table blockchaintb1 (
  id    number(10),
  desc1 varchar2(100)
)
no drop until 20 days idle
no delete until 20 days after insert
hashing using "SHA2_512" version "v2";  
Table created.
SQL> alter table blockchaintb1 add (desc2 varchar2(1000));
Table altered.

حذف ستون هم در این نسخه امکان پذیر است:

SQL>  alter table blockchaintb1 drop column desc2;
Table altered.

در صورت درج اطلاعات در این نوع از جداول، باز هم می توان عملیات فوق را تکرار کرد:

SQL> insert into blockchaintb1 values(1,'Amir Hozhabri','Sori Masoud');
1 row created.
SQL> commit;
Commit complete.
SQL>  alter table blockchaintb1 drop column desc2;
Table altered.

نکته: برای مشاهده version هر کدام از Blockchain Tableها می توان از ویوی user_blockchain_tables استفاده کرد(user_blockchain_tables.TABLE_VERSION).

قابلیت فوق برای version V2 جداول immutable هم به وجود آمد:

SQL> create immutable table Immtb1 (
  id    number(10),
  desc1 varchar2(100)
)
no drop until 200 days idle
no delete until 200 days after insert
version "v2";
Table created.
SQL> alter table Immtb1 add (desc2 varchar2(1000));
Table altered.
SQL> alter table Immtb1 drop column desc2;
Table altered.

 

تنظیم حداکثر مدت زمان برای idle retention

تنظیم اشتباه Idle Retention Time می تواند چالش ساز باشد در نسخه 23c، اوراکل پارامتر جدیدی را در این زمینه ارائه کرده است که از طریق آن می توانیم سقفی را برای مدت زمان no drop until .. days idle اعمال کنیم:

SQL> alter system set BLOCKCHAIN_TABLE_RETENTION_THRESHOLD=45;
System altered.

با تنظیم این پارامتر، اگر کاربر مجوز TABLE RETENTION نداشته باشد، نمی تواند جدول زیر را ایجاد کند:

SQL> create blockchain table blkchaintb1 (
  id    number(10),
  desc1 varchar2(100)
)
no drop until 2000 days idle
no delete until 30 days after insert
hashing using "SHA2_512" version "v1";
ORA-05807: Blockchain or immutable table "USEF"."BLKCHAINTB1" cannot have idle retention greater than 45 days.
SQL> create blockchain table blkchaintb1 (
  id    number(10),
  desc1 varchar2(100)
)
no drop until 44 days idle
no delete until 30 days after insert
hashing using "SHA2_512" version "v1";
Table created.

با دادن مجوز TABLE RETENTION به کاربر، پارامتر تنظیم شده نادیده گرفته خواهد شد:

SQL> grant TABLE RETENTION to usef;
Grant succeeded.
SQL> conn usef/a@OEL8:1521/TEST
Connected.
SQL> create blockchain table blkchaintb1 (
  id    number(10),
  desc1 varchar2(100)
)
no drop until 2000 days idle
no delete until 30 days after insert
hashing using "SHA2_512" version "v1";
Table created.

 

قابلیت Blockchain Table Row Versions

همانطور که می دانید امکان بروزرسانی رکوردهای جداول از نوع Blockchain وجود ندارد:

SQL> create blockchain table blkchaintb1 (
  id    number(10),
  desc1 varchar2(100)
)
no drop until 2000 days idle
no delete until 30 days after insert
hashing using "SHA2_512" version "v1";
Table created.
SQL> insert into blkchaintb1 values(1,'usefzadeh.co');
1 row created.
SQL> update blkchaintb1 set desc1='usefzadeh.com' where id=1;
ORA-05715: operation not allowed on the blockchain or immutable table

برای این نوع از جداول تنها گزینه موجود insert است! بنابرین برای اصلاح کردن اطلاعاتی که به اشتباه ثبت شده اند و یا اطلاعاتی که به هر دلیلی نیاز به update دارند، باید اطلاعات اصلاح شده را مجددا در جدول درج کنیم.

در این صورت، تشخیص آخرین نسخه هر کدام از رکوردها به عنوان چالش اصلی محسوب خواهد شد.

تشخیص آخرین نسخه با قابلیت جدید اوراکل در نسخه 23c امکان پذیر است و با ارائه قابلیت Row Versions در این نسخه می توان به این هدف رسید. برای استفاده از این قابلیت باید عبارت with row version and user chain را به دستور create table اضافه کرد با این کار، ویویی با نام $ctable>_last> ایجاد خواهد شد که اخرین نسخه هر رکورد را نمایش خواهد داد.

SQL> create blockchain table blkchaintb3 (
  id    number(10),
  desc1 varchar2(100)
)
no drop until 2000 days idle
no delete until 30 days after insert
hashing using "SHA2_512"
with row version and user chain fruit_chain (id)
version "v2";  
Table created.
SQL> insert into blkchaintb3 values(1,'usefzadeh.co');
1 row created.
SQL> insert into blkchaintb3 values(1,'usefzadeh.com');
1 row created.
SQL> insert into blkchaintb3 values(2,'test');
1 row created.
SQL> commit;
Commit complete.

برای جدول فوق ویویی با نام blkchaintb3_last$ ایجاد شده است که اخرین نسخه هر id را نمایش می دهد:

SQL>  desc blkchaintb3_last$;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ID                                                 NUMBER(10)
 DESC1                                              VARCHAR2(100)
SQL> select * from blkchaintb3_last$;
        ID DESC1
---------- ---------------
         1 usefzadeh.com
         2 test

 

ارائه خدمات مشاوره ، پشتیبانی و نصب و راه اندازی پایگاه داده اوراکل در سراسر کشور...................... تلفن: 09128110897 ایمیل:vahidusefzadeh@gmail.com

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *