Oracle 12c 新特性之 資料庫內歸檔(In-Database Archiving)
Oracle Database 12c中引入了 In-Database Archiving的新特性, 該特性允許使用者透過對錶上的資料行標記為inactive不活躍的,以歸檔資料。 這些inactive的資料行可以透過壓縮排一部最佳化,且對應用來說預設不可見。該特性可以對現有程式碼做最少改動的情況下,實現了這種“標記刪除”的功能和需求。
12c之前:
有些應用有“標記刪除”的概念,即不是刪除資料,而是資料依然保留在表中,只是對應用不可見而已。這種需求通常透過如下方法實現:
1) 給相關表增加一個另外的列,該列儲存標誌資料被刪除的標記。
2) 給每個語句增加一個謂詞,檢查被刪除行的狀態,像:“WHERE deleted = 'N'”,以便排除被刪除行。 謂詞能被硬編碼進SQL語句中,或動態應用類似VPD的安全策略。
12c之後:
1. 開啟資料庫內歸檔
ROW ARCHIVAL子句被用來開啟資料庫內歸檔。該子句可以用在建立表時用在CREATE TABLE中,也可以在表建立後用在ALTER TABLE中。
--建立表並開啟資料庫內歸檔特性
SQL>grant select on dba_objects to c##andy container=all;
SQL> conn c##andy/andy
Connected.
SQL>create table ida as select object_name,object_id from dba_objects where 1=2;
SQL>insert into ida select object_name,object_id from dba_objects order by object_id fetch first 10 percent rows only;
7281 rows created.
SQL> alter table ida ROW ARCHIVAL; 或者在建表的時候指定 create table (XXX) ROWARCHIVAL;
Table altered.
--檢查表內容
SQL>SELECT COUNT(*) FROM ida;
COUNT(*)
----------
7281
SQL> desc ida;
Name Null? Type
----------------------------------------- -------- ----------------------------
OBJECT_NAME VARCHAR2(128)
OBJECT_ID NUMBER
開啟資料庫內歸檔特性將會引起表另外增加一個叫做“ORA_ARCHIVE_STATE”系統隱藏列。
SQL>
COL column_name FORMAT A20;
COL data_type FORMAT A20;
SELECT column_id,
column_name,
data_type,
data_length,
hidden_column
FROM user_tab_cols
WHERE table_name = 'IDA'
ORDER BY column_id;
COLUMN_ID COLUMN_NAME DATA_TYPE DATA_LENGTH HID
---------- -------------------- -------------------- ----------- ---
1 OBJECT_NAME VARCHAR2 128 NO
2 OBJECT_ID NUMBER 22 NO
SYS_NC00003$ RAW 126 YES
ORA_ARCHIVE_STATEVARCHAR2 4000 YES
預設的,該列的每行被填充為‘0’。
SQL>
COL ora_archive_state FORMAT A20;
SELECT ora_archive_state,COUNT(*)
FROM ida
GROUP BY ora_archive_state
ORDER BY ora_archive_state;
ORA_ARCHIVE_STATE COUNT(*)
-------------------- ----------
0 7281
2. 歸檔(刪除)的行
並非刪除不需要的行,而是把ORA_ARCHIVE_STATE系統隱藏列的值更改為‘1’。這將導致應用看不到這些行。
SQL>
UPDATE ida
SET ora_archive_state ='1'
WHERE object_id>7000;
284 rows updated.
SQL>COMMIT;
SQL>SELECT COUNT(*) FROM ida;
COUNT(*)
----------
6997 > 已經出現隱藏列了
3. 顯示歸檔行
透過將ROW_ARCHIVAL_VISIBILITY設定為ALL,可以使得這些隱藏行對會話可見。將該引數設定回ACTIVE可以再次使這些行不可見。
--使歸檔的行可見
SQL>ALTER SESSION SET ROW ARCHIVAL VISIBILITY = ALL;
SQL>SELECT COUNT(*) FROM ida;
COUNT(*)
----------
SQL>ALTER SESSION SET ROW ARCHIVAL VISIBILITY = ACTIVE;
SQL>SELECT COUNT(*) FROM ida;
COUNT(*)
----------
6997 > 隱藏行對會話不可見
--禁用並重新開啟資料庫內歸檔特性
SQL>ALTER TABLE ida NO ROW ARCHIVAL;
SQL>ALTER TABLE ida ROW ARCHIVAL;
12c之前:
有些應用有“標記刪除”的概念,即不是刪除資料,而是資料依然保留在表中,只是對應用不可見而已。這種需求通常透過如下方法實現:
1) 給相關表增加一個另外的列,該列儲存標誌資料被刪除的標記。
2) 給每個語句增加一個謂詞,檢查被刪除行的狀態,像:“WHERE deleted = 'N'”,以便排除被刪除行。 謂詞能被硬編碼進SQL語句中,或動態應用類似VPD的安全策略。
12c之後:
1. 開啟資料庫內歸檔
ROW ARCHIVAL子句被用來開啟資料庫內歸檔。該子句可以用在建立表時用在CREATE TABLE中,也可以在表建立後用在ALTER TABLE中。
--建立表並開啟資料庫內歸檔特性
SQL>grant select on dba_objects to c##andy container=all;
SQL> conn c##andy/andy
Connected.
SQL>create table ida as select object_name,object_id from dba_objects where 1=2;
SQL>insert into ida select object_name,object_id from dba_objects order by object_id fetch first 10 percent rows only;
7281 rows created.
SQL> alter table ida ROW ARCHIVAL; 或者在建表的時候指定 create table (XXX) ROWARCHIVAL;
Table altered.
--檢查表內容
SQL>SELECT COUNT(*) FROM ida;
COUNT(*)
----------
7281
SQL> desc ida;
Name Null? Type
----------------------------------------- -------- ----------------------------
OBJECT_NAME VARCHAR2(128)
OBJECT_ID NUMBER
開啟資料庫內歸檔特性將會引起表另外增加一個叫做“ORA_ARCHIVE_STATE”系統隱藏列。
SQL>
COL column_name FORMAT A20;
COL data_type FORMAT A20;
SELECT column_id,
column_name,
data_type,
data_length,
hidden_column
FROM user_tab_cols
WHERE table_name = 'IDA'
ORDER BY column_id;
COLUMN_ID COLUMN_NAME DATA_TYPE DATA_LENGTH HID
---------- -------------------- -------------------- ----------- ---
1 OBJECT_NAME VARCHAR2 128 NO
2 OBJECT_ID NUMBER 22 NO
SYS_NC00003$ RAW 126 YES
ORA_ARCHIVE_STATEVARCHAR2 4000 YES
預設的,該列的每行被填充為‘0’。
SQL>
COL ora_archive_state FORMAT A20;
SELECT ora_archive_state,COUNT(*)
FROM ida
GROUP BY ora_archive_state
ORDER BY ora_archive_state;
ORA_ARCHIVE_STATE COUNT(*)
-------------------- ----------
0 7281
2. 歸檔(刪除)的行
並非刪除不需要的行,而是把ORA_ARCHIVE_STATE系統隱藏列的值更改為‘1’。這將導致應用看不到這些行。
SQL>
UPDATE ida
SET ora_archive_state ='1'
WHERE object_id>7000;
284 rows updated.
SQL>COMMIT;
SQL>SELECT COUNT(*) FROM ida;
COUNT(*)
----------
6997 > 已經出現隱藏列了
3. 顯示歸檔行
透過將ROW_ARCHIVAL_VISIBILITY設定為ALL,可以使得這些隱藏行對會話可見。將該引數設定回ACTIVE可以再次使這些行不可見。
--使歸檔的行可見
SQL>ALTER SESSION SET ROW ARCHIVAL VISIBILITY = ALL;
SQL>SELECT COUNT(*) FROM ida;
COUNT(*)
----------
7281 > 隱藏行對會話可見
--使歸檔行再次不可見SQL>ALTER SESSION SET ROW ARCHIVAL VISIBILITY = ACTIVE;
SQL>SELECT COUNT(*) FROM ida;
COUNT(*)
----------
6997 > 隱藏行對會話不可見
--禁用並重新開啟資料庫內歸檔特性
SQL>ALTER TABLE ida NO ROW ARCHIVAL;
SQL>ALTER TABLE ida ROW ARCHIVAL;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31383567/viewspace-2138786/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle Database 12c新特性 In-Database Archiving資料庫內歸檔OracleDatabase資料庫
- oracle 12c 資料歸檔 即Using In-Database Archiving featureOracleDatabase
- Oracle12c中資料刪除(delete)新特性之資料庫內歸檔功能Oracledelete資料庫
- Oracle 12C 新特性之資料檔案線上遷移Oracle
- Oracle 12c 新特性之 PDB 級別閃回資料庫Oracle資料庫
- Oracle 資料庫12c新特性總結(一)Oracle資料庫
- ORACLE 12C 開啟資料庫歸檔模式Oracle資料庫模式
- 【12C】Oracle 12C 新特性“可插拔資料庫”功能體驗Oracle資料庫
- [20130817]Oracle 12c new feature In-Database Archiving.txtOracleDatabase
- Oracle 12C 新特性:關於歸檔日誌的備份Oracle
- 12c新特性,線上move資料檔案
- G009-ORACLE-ASK Using In-Database ArchivingOracleDatabase
- Oracle 12c新特性之Sequence的Session特性OracleSession
- Oracle 12C 資料泵新特性測試Oracle
- Oracle 12c 新特性之 temp undoOracle
- ORACLE資料庫歸檔改為非歸檔Oracle資料庫
- Oracle 12C 新特性之線上重新命名、遷移活躍的資料檔案Oracle
- oracle 12c 新特性之一:線上重新命名資料檔案Oracle
- 11g新特性--Oracle 11g 閃回資料歸檔Oracle
- Oracle 12C 新特性之級聯truncateOracle
- Oracle 12C 新特性之 恢復表Oracle
- Oracle 12c新特性Oracle
- Oracle資料庫開啟歸檔Oracle資料庫
- 開啟oracle資料庫歸檔Oracle資料庫
- Oracle Database 12c 資料庫32個新特性與案例總結(轉)OracleDatabase資料庫
- Oracle 11g新特性--閃回資料歸檔(flashback data archive)[zt]OracleHive
- Oracle 12C 新特性之擴充套件資料型別(extended data type)Oracle套件資料型別
- Oracle 資料庫12c 16大新特性總結Oracle資料庫
- Oracle 12C新特性-資料泵新引數(LOGTIME)Oracle
- Oracle 12C新特性-資料泵新引數(VIEWS_AS_TABLES)OracleView
- oracle 12c 新特性之不可見欄位Oracle
- oracle 12C 新特性之臨時undo控制Oracle
- oracle資料庫更改歸檔路徑Oracle資料庫
- oracle 修改資料庫為歸檔模式Oracle資料庫模式
- Oracle資料庫切換歸檔模式Oracle資料庫模式
- Oracle 12c 新特性(四)Oracle
- Oracle 12c 新特性(三)Oracle
- Oracle 12c 新特性(二)Oracle