1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Blockchain Tableを試す(2) (Oracle Database 19c)

Last updated at Posted at 2021-07-02

前記事ではBlockchain Tableの作成を試したので、本記事ではBlockchain Tableに対する操作を行います。

DMLの制約

INSERT文の実行

INSERT文には制約はありません。トランザクション制御にも変更はありません。

SQL> INSERT INTO block1 VALUES (100, 'data1');

1行が作成されました。

SQL> COMMIT;

コミットが完了しました。

SQL> SELECT * FROM block1;

        C1 C2
---------- ----------
       100 data1

UPDATE文の実行

UPDATE文は更新対象のレコード有無にかかわらず失敗します。下記の例では更新対象レコード(WHERE c1=300)は存在しませんが、エラーORA-05715が発生しています。

SQL> UPDATE block1 SET c2='update' WHERE c1=300;
UPDATE block1 SET c2='update' WHERE c1=300
       *
行1でエラーが発生しました。:
ORA-05715: operation not allowed on the blockchain or immutable table

DELETE文の実行

DELETE文の実行は失敗します。レコードの削除はDBMS_BLOCKCHAIN_TABLEパッケージのDELETE_EXPIRED_ROWSプロシージャで行います。

SQL> DELETE FROM block1 WHERE c1=100;
DELETE FROM block1 WHERE c1=100
            *
行1でエラーが発生しました。:
ORA-05715: operation not allowed on the blockchain or immutable table

DDLの制約

TRUNCATE文の実行

TRUNCATE TABLE文は実行できません。

SQL> TRUNCATE TABLE block1;
TRUNCATE TABLE block1
               *
行1でエラーが発生しました。:
ORA-05715: operation not allowed on the blockchain or immutable table

DROP TABLE文の実行

 テーブル作成直後の場合、DROP TABLE文は成功します。

SQL> CREATE BLOCKCHAIN TABLE block2 (c1 NUMBER, c2 VARCHAR2(10))
  2        NO DROP UNTIL 1 DAYS IDLE
  3        NO DELETE UNTIL 16 DAYS AFTER INSERT
  4        HASHING USING sha2_512 VERSION v1
  5        TABLESPACE blockts1;

表が作成されました。

SQL> DROP TABLE block2;

表が削除されました。

しかしレコードが格納された状態ではDROP TABLE文は指定された期間失敗します。

SQL> DROP TABLE block1;
DROP TABLE block1
           *
行1でエラーが発生しました。:
ORA-05723: drop blockchain or immutable table BLOCK1 not allowed

ALTER TABLE文の実行

列の追加や削除は失敗しますが、制約の追加/削除は成功します。

SQL> ALTER TABLE block1 DROP COLUMN c2;
ALTER TABLE block1 DROP COLUMN c2
*
行1でエラーが発生しました。:
ORA-05715: operation not allowed on the blockchain or immutable table

SQL>  ALTER TABLE block1 ADD (c3 VARCHAR2(10));
 ALTER TABLE block1 ADD (c3 VARCHAR2(10))
*
行1でエラーが発生しました。:
ORA-05715: operation not allowed on the blockchain or immutable table

SQL> ALTER TABLE block1 ADD CONSTRAINT pk_block1 PRIMARY KEY (c1);

表が変更されました。

テーブル削除の制限期間はデフォルト設定では変更することができます。しかし現在の値よりも短くすることはできません。

SQL> ALTER TABLE block1 NO DROP UNTIL 2 DAYS IDLE;

表が変更されました。

SQL> SELECT table_name, table_inactivity_retention FROM user_blockchain_tables;

TABLE_NAME                     TABLE_INACTIVITY_RETENTION
------------------------------ --------------------------
BLOCK1                                                  2

SQL> ALTER TABLE block1 NO DROP UNTIL 1 DAYS IDLE;
ALTER TABLE block1 NO DROP UNTIL 1 DAYS IDLE
*
行1でエラーが発生しました。:
ORA-05732: retention value cannot be lowered

強制削除

期限が来ていないBlockchain Tableを強制的に削除する方法を探ります。

ユーザーの削除

DROP USER文を使ってBlockchain Tableを削除しようとすると失敗します。

SQL> DROP USER scott CASCADE;
DROP USER scott CASCADE
*
行1でエラーが発生しました。:
ORA-00604: 再帰SQLレベル1でエラーが発生しました。 ORA-05723: drop
blockchain or immutable table BLOCK1 not allowed

表領域の削除

DROP TABLESPACE文を使ってBlockchain Tableを含む表領域の削除も失敗します。

SQL> DROP TABLESPACE blockts1 INCLUDING CONTENTS AND DATAFILES;
DROP TABLESPACE blockts1 INCLUDING CONTENTS AND DATAFILES
*
行1でエラーが発生しました。:
ORA-00604: 再帰SQLレベル1でエラーが発生しました。 ORA-05723: drop
blockchain or immutable table BLOCK1 not allowed

PLUGGABLE DATABASEの削除

Blockchain Tableを含むPLUGGABLE DATABASEの削除は成功します。

SQL> ALTER PLUGGABLE DATABASE pdb1 CLOSE;

プラガブル・データベースが変更されました。

SQL> DROP PLUGGABLE DATABASE pdb1 INCLUDING DATAFILES;

プラガブル・データベースが削除されました。
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?