Oracle 20c 新特性:區塊鏈表提供基於 Oracle 的集中式區塊應用

導讀:區塊鏈表是僅插入表(Only-Insert),將行組織成許多鏈。通過使用加密哈希將鏈中除第一行之外的每一行鏈接到鏈中的前一行。


在2020年2月14日,Oracle 正式宣佈在 Oracle Cloud 發佈 Database 20c 的預覽版,同時發佈了所有的官方文檔。


為了和大家及時分享關於 Oracle 20c 引人矚目的新特性,我們特別邀請了 楊廷琨 老師,將於2月18日,進行關於 20c 新特性的在線直播,報名地址:

https://www.modb.pro/event/103


另外,我將20c的官方文檔轉存了一份到百度雲,如果你下載官網緩慢,在公眾號後臺回覆:20cDoc 你能找到下載鏈接。


本文介紹Oracle 20c 新特性之區塊鏈表提供基於 Oracle 的集中式區塊應用。以下為正文:



區塊鏈表中的行是防篡改的。每行包含一個密碼哈希值,該值基於該行中的數據和鏈中上一行的哈希值。如果某行被篡改,則該行的哈希值會更改,這會導致鏈中下一行的哈希值發生更改。為了增強欺詐保護,可以將可選的用戶簽名添加到行中。如果您在區塊鏈表行上簽名,則必須使用數字證書。在驗證區塊鏈表中的鏈時,數據庫需要證書來驗證行簽名。

下圖是區塊鏈表的示意圖:

Oracle 20c 新特性:區塊鏈表提供基於 Oracle 的集中式區塊應用

可以對區塊鏈表進行索引和分區。您可以通過建表時的選項控制是否以及何時從區塊鏈表中刪除行。您還可以控制是否可以刪除區塊鏈表。區塊鏈表可與事務和查詢中的(常規)表一起使用。

區塊鏈表用於實施集中式區塊鏈應用程序,其中中央權限是Oracle數據庫。集中式區塊鏈為組織提供了更大的可定製性和控制力,因為他們可以決定誰可以加入網絡。參與者是不同的數據庫用戶,他們信任Oracle數據庫來維護交易的防篡改區塊鏈。所有參與者都必須具有將數據插入到區塊鏈表中的特權。區塊鏈的內容由應用程序定義和管理。與分散式區塊鏈相比,集中式區塊鏈在與基於共識的分佈式區塊鏈相比首選更高吞吐量和更低交易延遲的場景中很有用。

Oracle 20c 新特性:區塊鏈表提供基於 Oracle 的集中式區塊應用

以下測試,展示了區塊鏈表的基本用法。

首先創建一個區塊鏈表,指定不可DROP,不可 DELETE 的基本約束:

<code>SQL> select banner from v$version;BANNER--------------------------------------------------------------------------------Oracle Database 20c Enterprise Edition Release 20.0.0.0.0 - ProductionSQL> create blockchain table yhem  2  (  3  id              number primary key,  4  name             varchar2(20),  5  join_date             date)  6  NO DROP UNTIL 30 DAYS IDLE  7  NO DELETE LOCKED  8  HASHING USING "SHA2_512" VERSION "v1";Table created./<code>

插入區塊記錄:

<code>SQL> insert into yhem values(1,'EYGLE',to_date('2010-08-08','yyyy-mm-dd'));1 row created.SQL> insert into yhem values(2,'KAMUS',to_date('2010-08-08','yyyy-mm-dd'));1 row created.SQL> insert into yhem values(3,'ORA-600',to_date('2010-08-08','yyyy-mm-dd'));1 row created.SQL> insert into yhem values(4,'YANGTINGKUN',to_date('2010-08-08','yyyy-mm-dd'));1 row created.SQL> commit;Commit complete./<code>


這個區塊鏈表,除了插入操作,刪除、更新,以及DROP 操作,都是禁止的:

<code>SQL> delete yhem where id=1;delete yhem where id=1       *ERROR at line 1:ORA-05715: operation not allowed on the blockchain tableSQL> update yhem set name='Guoqiang,Gai' where id=1;update yhem set name='Guoqiang,Gai' where id=1       *ERROR at line 1:ORA-05715: operation not allowed on the blockchain tableSQL> drop table yhem;drop table yhem           *ERROR at line 1:ORA-05723: drop blockchain table YHEM not allowed/<code>


Oracle 還提供了 PACKAGE 去校驗數據的一致性:

<code>SQL> set serveroutput onSQL> DECLARE  2           verified_rows NUMBER :=0;  3  BEGIN  4           DBMS_BLOCKCHAIN_TABLE.VERIFY_ROWS('EYGLE','YHEM',number_of_rows_verified=> verified_rows);  5           DBMS_OUTPUT.PUT_LINE('Number of rows verified =' || verified_rows);  6  END;  7  /Number of rows verified =4PL/SQL procedure successfully completed./<code>

保留週期對於區塊鏈表是最重要的選項,NO DROP UNTIL 30 DAYS IDLE 指定在數據表IDLE多長時間後可以刪除,這個設置可以增大,但是不可以減少(天數的最小值是16天):

<code>SQL> ALTER TABLE yhem NO DROP UNTIL 18 DAYS IDLE;ALTER TABLE yhem NO DROP UNTIL 18 DAYS IDLE*ERROR at line 1:ORA-05732: retention value cannot be loweredSQL> ALTER TABLE yhem NO DROP UNTIL 31 DAYS IDLE;Table altered./<code>

而對於DELETE來說,NO DELETE LOCKED 是指數據不允許刪除,對於刪除的約束,還可以設置約定天數的保留週期,例如設置20天,當數據超過20天未插入後,可以通過PACKAGE進行刪除清理:

<code>SQL> ALTER TABLE yhem NO DELETE UNTIL 20 DAYS AFTER INSERT LOCKED;ALTER TABLE ENMOTECH NO DELETE UNTIL 20 DAYS AFTER INSERT LOCKED*ERROR at line 1:ORA-05731: blockchain table yhem cannot be altered/<code>


Oracle 的區塊鏈表,是對於集中式互信應用,提供了一個選擇。
出處:https://www.modb.pro/db/21547(點擊左下角“閱讀原文”或者複製鏈接到瀏覽器中可打開)


想了解更多關於數據庫、雲技術的內容嗎?

快來關注“數據和雲"、"雲和恩墨,"公眾號及"雲和恩墨"官方網站,我們期待大家一同學習與進步!

Oracle 20c 新特性:區塊鏈表提供基於 Oracle 的集中式區塊應用

小程序”DBASK“在線問答,隨時解惑,歡迎瞭解和關注!

Oracle 20c 新特性:區塊鏈表提供基於 Oracle 的集中式區塊應用


分享到:


相關文章: