Note : At the bottom of this post, you'll find links to more (subsequent) posts on this topic.
Some testing I'd done with Flashback Data Archive (henceforth called FBDA in this and subsequent posts, if any) in 11.2.0.4 left me with uncertainty about the automatic purging of data beyond the Retention Period. I might return to testing 11.2.0.4, but here I shall begin testing in 12.1.0.2 (NonCDB).
Setting up FBDA :
Note the Flashback Archive history table corresponding to TEST_FBDA doesn't get created immediately.
So, it took some time for the flashback archive history table (identified on the basis of the OBJECT_ID) to appear. The background fbda process seems to run (wakeup) every 5minutes although it may wake up more frequently if there is more activity in the database.
Notice that not all 1000 rows got copied to the FBDA. Only the 450 rows that I updated were copied in. They are tracked by SCN-Timestamp. (The "DATE_INSERTED" column is my own date column, Oracle wouldn't be using that column to track DML dates for rows as the values in that column are controlled by me -- the application or developer, not Oracle).
Note : The History Table is not supposed to be directly queried in the manner I have shown here.
Tomorrow : More Rows, and some DDLs as well.
Post 2 here. It covers some of the architectural components and support for ADD / DROP column DDL.
Post 3 here. It shows support for TRUNCATEs.
Post 4 here. On Partitions and Indexes.
Post 5 here. On (Auto)Purging.
Post 6 here. On Bug Notes
Post 7 here. Maintainig Partitioned Source Table
.
.
.
Some testing I'd done with Flashback Data Archive (henceforth called FBDA in this and subsequent posts, if any) in 11.2.0.4 left me with uncertainty about the automatic purging of data beyond the Retention Period. I might return to testing 11.2.0.4, but here I shall begin testing in 12.1.0.2 (NonCDB).
Setting up FBDA :
[oracle@ora12102 ~]$ sqlplus system/oracle SQL*Plus: Release 12.1.0.2.0 Production on Sat Apr 2 23:23:53 2016 Copyright (c) 1982, 2014, Oracle. All rights reserved. Last Successful login time: Sat Apr 02 2016 23:20:47 +08:00 Connected to: Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production With the Partitioning, Automatic Storage Management, OLAP, Advanced Analytics and Real Application Testing options SQL> create tablespace fbda ; Tablespace created. SQL> create flashback archive fbda tablespace fbda retention 3 day; Flashback archive created. SQL> create tablespace hemant; Tablespace created. SQL> create user hemant identified by hemant 2 default tablespace hemant; User created. SQL> grant create table to hemant; Grant succeeded. SQL> grant create session to hemant; Grant succeeded. SQL> alter user hemant quota unlimited on hemant; User altered. SQL> alter user hemant quota unlimited on fbda; User altered. SQL> grant flashback archive administer to hemant; Grant succeeded. SQL> grant flashback archive on fbda to hemant; Grant succeeded. SQL> SQL> connect / as sysdba Connected. SQL> grant execute on dbms_flashback_archive to hemant; Grant succeeded. SQL> SQL> connect hemant/hemant Connected. SQL> create table test_fbda (id_column number, data_column varchar2(15), date_inserted date) tablespace hemant; Table created. SQL> alter table test_fbda flashback archive fbda; Table altered. SQL> select table_name from user_tables; TABLE_NAME -------------------------------------------------------------------------------- TEST_FBDA SQL>
Note the Flashback Archive history table corresponding to TEST_FBDA doesn't get created immediately.
SQL> connect hemant/hemant Connected. SQL> insert into test_fbda 2 select rownum , to_char(rownum), trunc(sysdate) 3 from dual connect by level < 1001; 1000 rows created. SQL> commit; Commit complete. SQL> select table_name from user_tables; TABLE_NAME -------------------------------------------------------------------------------- TEST_FBDA SQL> select count(*) from test_fbda; COUNT(*) ---------- 1000 SQL> select flashback_archive_name, retention_in_days, status 2 from user_flashback_archive; FLASHBACK_ARCHIVE_NAME -------------------------------------------------------------------------------- RETENTION_IN_DAYS STATUS ----------------- ------- FBDA 3 SQL> select table_name, flashback_archive_name, archive_table_name, status 2 from user_flashback_archive_tables; TABLE_NAME -------------------------------------------------------------------------------- FLASHBACK_ARCHIVE_NAME -------------------------------------------------------------------------------- ARCHIVE_TABLE_NAME STATUS ----------------------------------------------------- ------------- TEST_FBDA FBDA SYS_FBA_HIST_93250 ENABLED SQL> SQL> !sleep 300 SQL> select table_name from user_tables; TABLE_NAME -------------------------------------------------------------------------------- TEST_FBDA SYS_FBA_DDL_COLMAP_93250 SYS_FBA_HIST_93250 SYS_FBA_TCRV_93250 SQL> SQL> select object_id 2 from user_objects 3 where object_name = 'TEST_FBDA' 4 and object_type = 'TABLE' 5 SQL> / OBJECT_ID ---------- 93250 SQL>
So, it took some time for the flashback archive history table (identified on the basis of the OBJECT_ID) to appear. The background fbda process seems to run (wakeup) every 5minutes although it may wake up more frequently if there is more activity in the database.
SQL> select trunc(date_inserted), count(*) 2 from test_fbda 3 group by trunc(date_inserted) 4 / TRUNC(DAT COUNT(*) --------- ---------- 02-APR-16 1000 SQL> select trunc(date_inserted), count(*) 2 from sys_fba_hist_93250 3 group by trunc(date_inserted) 4 / no rows selected SQL> update test_fbda 2 set data_column = data_column 3 where rownum < 451; 450 rows updated. SQL> commit; Commit complete. SQL> select trunc(date_inserted), count(*) 2 from sys_fba_hist_93250 3 group by trunc(date_inserted) 4 / no rows selected SQL> SQL> !sleep 180 SQL> select trunc(date_inserted), count(*) 2 from sys_fba_hist_93250 3 group by trunc(date_inserted) 4 / TRUNC(DAT COUNT(*) --------- ---------- 02-APR-16 450 SQL> SQL> select scn_to_timestamp(startscn), scn_to_timestamp(endscn), date_inserted, count(*) 2 from sys_fba_hist_93250 3 group by scn_to_timestamp(startscn), scn_to_timestamp(endscn), date_inserted 4 order by 1; SCN_TO_TIMESTAMP(STARTSCN) --------------------------------------------------------------------------- SCN_TO_TIMESTAMP(ENDSCN) --------------------------------------------------------------------------- DATE_INSE COUNT(*) --------- ---------- 02-APR-16 11.32.55.000000000 PM 02-APR-16 11.46.11.000000000 PM 02-APR-16 450 SQL>
Notice that not all 1000 rows got copied to the FBDA. Only the 450 rows that I updated were copied in. They are tracked by SCN-Timestamp. (The "DATE_INSERTED" column is my own date column, Oracle wouldn't be using that column to track DML dates for rows as the values in that column are controlled by me -- the application or developer, not Oracle).
Note : The History Table is not supposed to be directly queried in the manner I have shown here.
Tomorrow : More Rows, and some DDLs as well.
Post 2 here. It covers some of the architectural components and support for ADD / DROP column DDL.
Post 3 here. It shows support for TRUNCATEs.
Post 4 here. On Partitions and Indexes.
Post 5 here. On (Auto)Purging.
Post 6 here. On Bug Notes
Post 7 here. Maintainig Partitioned Source Table
.
.
.
No comments:
Post a Comment