日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

oracle12c 清理归档,Oracle 12c中数据删除(delete)新特性之数据库内归档功能

發布時間:2023/12/19 数据库 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle12c 清理归档,Oracle 12c中数据删除(delete)新特性之数据库内归档功能 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

有些應用有“標記刪除”的概念,即不是刪除數據,而是數據依然保留在表中,只是對應用不可見而已。這種需求通常通過如下方法實現:

1)? 給相關表增加一個另外的列,該列存儲標志數據被刪除的標記。

2)? 給每個語句增加一個謂詞,檢查被刪除行的狀態,像:“WHERE deleted = 'N'”,以便排除被刪除行。 謂詞能被硬編碼進SQL語句中,或動態應用類似VPD的安全策略。

數據庫內歸檔是Oracle12c的新特性,該特性可以對現有代碼做最少改動的情況下,實現了這種“標記刪除”的功能和需求。

1.? 開啟數據庫內歸檔

ROW ARCHIVAL子句被用來開啟數據庫內歸檔。該子句可以用在創建表時用在CREATE TABLE中,也可以在表創建后用在ALTER TABLE中。

DROPTABLE tab1 PURGE;

--創建表并開啟數據庫內歸檔特性

CREATETABLE tab1 (

no? ? ? ? NUMBER,

desc VARCHAR2(50),

CONSTRAINT tab1_pk PRIMARY KEY (no)

)

ROWARCHIVAL;

--禁用并重新開啟數據庫內歸檔特性

ALTERTABLE tab1 NO ROW ARCHIVAL;

ALTERTABLE tab1 ROW ARCHIVAL;

--往表中加入1000行數據。

INSERT INTO tab1

SELECTlevel, 'Description of ' || level

FROM? dual

CONNECTBY level <= 1000;

COMMIT;

--檢查表內容

SELECTCOUNT(*) FROM tab1;

COUNT(*)

----------

1000

SQL>

開啟數據庫內歸檔特性將會引起表另外增加一個叫做“ORA_ARCHIVE_STATE”系統隱藏列。

COLUMNcolumn_name FORMAT A20

COLUMNdata_type FORMAT A20

SELECTcolumn_id,

column_name,

data_type,

data_length,

hidden_column

FROM? user_tab_cols

WHERE? table_name = 'TAB1'

ORDERBY column_id;

COLUMN_ID COLUMN_NAME? ? ? ? DATA_TYPE? ? ? ? ? DATA_LENGTH HID

------------------------------ -------------------- ----------- ---

1NO? ? ? ? ? ? ? ? ? NUMBER? ? ? ? ? ? ? ? ? ? ? 22 NO

2DESC? ? ? ? VARCHAR2? ? ? ? ? ? ? ? ? ? 50 NO

ORA_ARCHIVE_STATE? VARCHAR2? ? ? ? ? ? ? ? ? 4000 YES

SQL>

默認的,該列的每行被填充為‘0’。

COLUMNora_archive_state FORMAT A20

SELECTora_archive_state, COUNT(*)

FROM? tab1

GROUPBY ora_archive_state

ORDERBY ora_archive_state;

ORA_ARCHIVE_STATE? ? ? COUNT(*)

------------------------------

0? ? ? ? ? ? ? ? ? ? ? ? ? 1000

1row selected.

SQL>

2.? 歸檔(刪除)的行

并非刪除不需要的行,而是把ORA_ARCHIVE_STATE系統隱藏列的值更改為‘1’。這將導致應用看不到這些行。

UPDATEtab1

SET? ? ora_archive_state = '1'

WHERE? no BETWEEN 751 and 1000;

COMMIT;

SELECTCOUNT(*) FROM tab1;

COUNT(*)

----------

750

SQL>

其實,可以把ORA_ARCHIVE_STATE列設置為非‘0‘的其他任何字符串值來歸檔這些數據,但DBMS_ILM包使用如下常量。

1)? ARCHIVE_STATE_ACTIVE='0'

2)? ARCHIVE_STATE_ARCHIVED='1'

3.? 顯示歸檔行

通過將ROW_ARCHIVAL_VISIBILITY設置為ALL,可以使得這些隱藏行對會話可見。將該參數設置回ACTIVE可以再次使這些行不可見。

--使歸檔的行可見

ALTERSESSION SET ROW ARCHIVAL VISIBILITY = ALL;

SELECTCOUNT(*) FROM tab1;

COUNT(*)

----------

1000

SQL>

COLUMNora_archive_state FORMAT A20

SELECTora_archive_state, COUNT(*)

FROM? tab1

GROUPBY ora_archive_state

ORDERBY ora_archive_state;

ORA_ARCHIVE_STATE? ? ? COUNT(*)

------------------------------

0? ? ? ? ? ? ? ? ? ? ? ? ? 750

1? ? ? ? ? ? ? ? ? ? ? ? ? 250

2rows selected.

SQL>

--使歸檔行再次不可見

ALTERSESSION SET ROW ARCHIVAL VISIBILITY = ACTIVE;

SELECTCOUNT(*) FROM tab1;

COUNT(*)

----------

750

SQL>

總結

以上是生活随笔為你收集整理的oracle12c 清理归档,Oracle 12c中数据删除(delete)新特性之数据库内归档功能的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。