DATABASE(oracleDB 11g)/DBA

[Oracle DBA]Flashback 기술02

SEUNGSAMI 2019. 5. 3. 09:44
Flashback 기술02



Flashback Transaction Backout
  • 과거 Transation이 수행하였던 Operation을 되돌립니다(Backout)
  • 수행조건
      • COMPATIBLE >= 11.1.0.0
      • Archived Log Mode
      • 추가의 Log 기록
      • ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
      • ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
      • SELECT ANY TRANSACTION 권한
      • DBMS_FLASHBACK 패키지를 수행할 권한
-- SELECT ANY TRANSACTION 권한
HR@orcl2> select * from session_privs;

PRIVILEGE
----------------------------------------
CREATE SESSION
ALTER SESSION
UNLIMITED TABLESPACE
CREATE TABLE
CREATE CLUSTER
CREATE SYNONYM
CREATE VIEW
CREATE SEQUENCE
CREATE DATABASE LINK
CREATE PROCEDURE
CREATE TRIGGER
CREATE TYPE
CREATE OPERATOR
CREATE INDEXTYPE

14 rows selected.
>없는 것 확인

HR@orcl2> select * from user_sys_privs;

USERNAME                       PRIVILEGE                                ADM
------------------------------ ---------------------------------------- ---
HR                             CREATE VIEW                              NO
HR                             UNLIMITED TABLESPACE                     NO
HR                             CREATE DATABASE LINK                     NO
HR                             CREATE SEQUENCE                          NO
HR                             CREATE SESSION                           NO
HR                             ALTER SESSION                            NO
HR                             CREATE SYNONYM                           NO

7 rows selected.
>없는 것 확인

SYS@orcl2> grant select any transaction to hr;
Grant succeeded.
> 권한 주기


HR@orcl2> select * from user_sys_privs;

USERNAME                       PRIVILEGE                                ADM
------------------------------ ---------------------------------------- ---
HR                             CREATE VIEW                              NO
HR                             UNLIMITED TABLESPACE                     NO
HR                             CREATE DATABASE LINK                     NO
HR                             CREATE SEQUENCE                          NO
HR                             CREATE SESSION                           NO
HR                             ALTER SESSION                            NO
HR                             CREATE SYNONYM                           NO
HR                             SELECT ANY TRANSACTION                   NO



-- DBMS_FLASHBACK 패키지를 수행할 권한

HR@orcl2> select * from user_tab_privs;

GRANTEE                        OWNER                          TABLE_NAME
------------------------------ ------------------------------ ------------------------------
GRANTOR                        PRIVILEGE                                GRA HIE
------------------------------ ---------------------------------------- --- ---
HR                             SYS                            DBMS_STATS
SYS                            EXECUTE                                  NO  NO


OE                             HR                             COUNTRIES
HR                             SELECT                                   NO  NO


OE                             HR                             COUNTRIES
HR                             REFERENCES                               NO  NO


OE                             HR                             LOCATIONS
HR                             SELECT                                   NO  NO


OE                             HR                             LOCATIONS
HR                             REFERENCES                               NO  NO


OE                             HR                             DEPARTMENTS
HR                             SELECT                                   NO  NO


OE                             HR                             JOBS
HR                             SELECT                                   NO  NO


OE                             HR                             EMPLOYEES
HR                             SELECT                                   NO  NO


OE                             HR                             EMPLOYEES
HR                             REFERENCES                               NO  NO


OE                             HR                             JOB_HISTORY
HR                             SELECT                                   NO  NO


SYS@orcl2> grant execute on dbms_flashback to hr;
Grant succeeded.


SYS@orcl2> select * from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
PL/SQL Release 11.2.0.1.0 - Production
CORE    11.2.0.1.0      Production
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production


SYS@orcl2> archive log list;
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /home/oracle/arch2
Oldest online log sequence     20
Next log sequence to archive   22
Current log sequence           22


SYS@orcl2> select supplemental_log_data_min, supplemental_log_data_pk
           from v$database;

SUPPLEME SUP
-------- ---
YES      YES

====================================================================================================
안되있을 경우
SYS@orcl2> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
Database altered.


SYS@orcl2> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
Database altered.
====================================================================================================

#Session 1
SYS@orcl2> insert into hr.student
           values(1, 'ALLEN', 'OCP', 1000);
1 row created.


SYS@orcl2> commit;
Commit complete.


#Session 2
SYS@orcl2> update hr.student
           set class='OCA'
           where student_id=1;
1 row created.


SYS@orcl2> commit;
Commit complete.


#Session 1
SYS@orcl2> delete hr.student
           where student_id=1;
1 row updated.

           
SYS@orcl2> commit;
Commit complete.


SYS@orcl2> select student_id, class, versions_xid, versions_operation
           from hr.student
           versions between timestamp minvalue and maxvalue
           where student_id=1
           order by versions_endscn;
           
           
STUDENT_ID CLASS                          VERSIONS_XID     V
---------- ------------------------------ ---------------- -
         1 OCP                            0200120037030000 I
         1 OCA                            0400180081020000 U    <------------
         1 OCA                            06000E004C030000 D


SYS@orcl2> DECLARE
                TRANS_ARR        XID_ARRAY := XID_ARRAY();
           BEGIN
                TRANS_ARR.EXTEND;
                TRANS_ARR(1) := '0400180081020000';
                DBMS_FLASHBACK.TRANSACTION_BACKOUT(
                        NUMTXNS => 1,
                        XIDS => TRANS_ARR,
                        OPTIONS => DBMS_FLASHBACK.NOCASCADE
                );
            END;
            /
            
DECLARE
*
ERROR at line 1:
ORA-55504: Transaction conflicts in NOCASCADE mode
ORA-06512: at "SYS.DBMS_FLASHBACK", line 37
ORA-06512: at "SYS.DBMS_FLASHBACK", line 70
ORA-06512: at line 6

====================================================================================================
NOCASCADE     : 연관있는 TX이 있으면 ERROR
NOCASCADE_FORCE : 연관있는 TX이 있어도 BACKOUT
NOCONFLICT_ONLY    : 다른 TX과 연관 없는 OPERATION만 BACKOUT
CASCADE        : 연관있는 다른 TX들도 같이 BACKOUT
====================================================================================================

SYS@orcl2> DECLARE
                TRANS_ARR        XID_ARRAY := XID_ARRAY();
           BEGIN
                TRANS_ARR.EXTEND;
                TRANS_ARR(1) := '0400180081020000';
                DBMS_FLASHBACK.TRANSACTION_BACKOUT(
                        NUMTXNS => 1,
                        XIDS => TRANS_ARR,
                        OPTIONS => DBMS_FLASHBACK.CASCADE
                );
            END;
            /

PL/SQL procedure successfully completed.




SYS@orcl2> select *
           from hr.student;
           
STUDENT_ID NAME                   CLASS                          FEE
---------- --------------------- ------------------------------ ----------
         1                 ALLEN                           OCP        1000
         

SYS@orcl2> commit;
Commit complete.
         
         
SYS@orcl2> drop table hr.student purge;
Table dropped.


SYS@orcl2> alter database drop supplemental log data (primary key) columns;
Database altered.




SYS@orcl2> alter database drop supplemental log data;
Datbase altered.


SYS@orcl2> select supplemental_log_data_min, supplemental_log_data_pk
           from v$database;
         
SUPPLEME SUP
-------- ---
NO       NO


Oracle Total Recall
  • 운영 DB에 대한 변경 사항을 추적
  • FDA에 대해 활성화된 데이터를 자동으로 추적, 저장
  • Flashback 기능 (Flashback Version Query, Flashback Transaction Query, Flashback Table ) 을 위해과거 Oracle Database 10g 에서는 Undo Tablespace 를 사용했던 반면, 11g 의 Flashback Data Archive 는 임의의 Tablespace 의 history
  • 장기간 데이터 변화에 대한 관리 및 추적
  • Information Life Cycle 관리
  • 중요 데이터에 대한 감사
  • 데이터를 저장함으로써 보존 기간에 관련한 불필요한 제약 사항을 제거
      • 간단한 설정
          • 간단한 'enable archive' 커맨드만으로 특정 테이블 또는 전체 테이블에 대한 히스토리 데이터 캡처를 활성화할 수 있습니다.
      • 애플리케이션 변경 작업은 전혀 불필요합니다.
      • 성능 및 저장 효율성
          • 캡처 프로세스는 성능 오버헤드를 최소화할 수 있도록 구현되어 있습니다. 또 스토리지 용량의 절감을 위해 히스토리 데이터는 압축된 형태로 저장됩니다.
      • 실수 또는 악의 에 의한 데이터 변조로부터의 보호
          • 아무도(심지어 관리자라 하더라도) 히스토리 데이터를 직접적으로 변경할 수 없습니다.
      • "AS OF" 플래시백 SQL 구문을 이용하면 과거 특정 시점에 아카이브된 과거 특정시점의 테이블 데이터를 쉽게 조회할 수 있습니다.
      • 히스토리 데이터 관리 작업의 자동화
          • Oracle Database 11g는 자동으로 룰을 적용하고 경고를 발생시킴으로써 관리자의 업무 오버헤드를 최소화 합니다.
1. flashback data archive 를 위한 테이블스페이스 생성
SYS@orcl2> !mkdir /home/oracle/BACKUP

SYS@orcl2> DROP TABLESPACE fla_tbs1 INCLUDING CONTENTS and datafiles;


SYS@orcl2> CREATE SMALLFILE TABLESPACE fla_tbs1
           DATAFILE '$HOME/BACKUP/fla_tbs01.dbf'
           SIZE 10M REUSE AUTOEXTEND ON NEXT 640K MAXSIZE 32767M
           NOLOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;
Tablespace created.


2.  새로운 undo tablespace UNDOTBS2 생성
SYS@orcl2> DROP TABLESPACE undotbs2 INCLUDING CONTENTS and datafiles;


SYS@orcl2> CREATE SMALLFILE UNDO TABLESPACE undotbs2
           DATAFILE '$HOME/BACKUP/undotbs02.dbf'
           SIZE 105M REUSE AUTOEXTEND ON NEXT 5120K MAXSIZE 32767M;
Tablespace created.


3.  ARCHIVE_ADMIN user 생성해서 FLA_TBS1을 디폴트 테이블스페이스로 지정
SYS@orcl2> CREATE USER ARCHIVE_ADMIN PROFILE DEFAULT IDENTIFIED BY oracle
           DEFAULT TABLESPACE FLA_TBS1 TEMPORARY TABLESPACE TEMP
           ACCOUNT UNLOCK;
User created.


SYS@orcl2> GRANT ALTER SESSION TO ARCHIVE_ADMIN;
Grant succeeded.


SYS@orcl2> GRANT CREATE DATABASE LINK TO ARCHIVE_ADMIN;
Grant succeeded.


SYS@orcl2> GRANT CREATE SEQUENCE TO ARCHIVE_ADMIN;
Grant succeeded.


SYS@orcl2> GRANT CREATE SESSION TO ARCHIVE_ADMIN;
Grant succeeded.


SYS@orcl2> GRANT CREATE SYNONYM TO ARCHIVE_ADMIN;
Grant succeeded.


SYS@orcl2> GRANT CREATE VIEW TO ARCHIVE_ADMIN;
Grant succeeded.


SYS@orcl2> GRANT UNLIMITED TABLESPACE TO ARCHIVE_ADMIN;
Grant succeeded.


SYS@orcl2> GRANT EXECUTE ON SYS.DBMS_STATS TO ARCHIVE_ADMIN;
Grant succeeded.


SYS@orcl2> GRANT CONNECT, RESOURCE TO ARCHIVE_ADMIN;
Grant succeeded.


4. archive_admin 유저에게 flashback data archive 를 생성 유지관리 및 삭제하기 위한 관리 권한을 부여한다.
SYS@orcl2> grant flashback archive administer to archive_admin;
Grant succeeded.


5. FLASHBACK DATA ARCHIVE fla1 를 생성한다.
SYS@orcl2> CREATE FLASHBACK ARCHIVE fla1
           TABLESPACE fla_tbs1
           QUOTA 10M
           RETENTION 1 YEAR;
Flashback archive created.


SYS@orcl2> select flashback_archive_name, create_time, status
           from dba_flashback_archive;
           
FLASHBACK_ARCHIVE_NAME              CREATE_TIME                         STATUS
----------------------------------- ----------------------------------- -------
FLA1                                29-APR-19 02.20.33.000000000 PM


6. fla1 archive 사용권한을 hr에게 부여한다. 이제 HR은 flashback archive user 의 롤을 가진다.
SYS@orcl2> GRANT FLASHBACK ARCHIVE on FLA1 to HR;
Grant succeeded.


7. HR로 접속해서 Employees 테이블에 대해 Flashback Data Archive를 활성화한다.
SYS@orcl2> conn hr/hr
Connected.


HR@orcl2> ALTER TABLE hr.employees FLASHBACK ARCHIVE fla1;
Table altered.


8. 데이타를 변경하여 Flashback Data Archive에 작업이 생성되게 한다.
SYS@orcl2> SELECT employee_id, last_name, salary
           FROM   hr.employees
           WHERE  last_name = 'Fox';

EMPLOYEE_ID LAST_NAME                     SALARY
----------- ------------------------- ----------
        170 Fox                             9600


SYS@orcl2> UPDATE hr.employees
           SET salary = salary + 1000
           WHERE last_name = 'Fox';
1 row updated.


SYS@orcl2> COMMIT
Commit complete.


SYS@orcl2> UPDATE hr.employees
           SET salary = salary + 1000
           WHERE last_name = 'Fox';
1 row updated.


SYS@orcl2> COMMIT
Commit complete.


SYS@orcl2> UPDATE hr.employees
           SET salary = salary + 1000
           WHERE last_name = 'Fox';
1 row updated.


SYS@orcl2> COMMIT
Commit complete.


SYS@orcl2> SELECT employee_id, last_name, salary
           FROM   hr.employees
           WHERE  last_name = 'Fox';

EMPLOYEE_ID LAST_NAME                     SALARY
----------- ------------------------- ----------
        170 Fox                            12600



9.아카이브 테이블의 내부 이름을 조회한다.
HR@orcl2> SELECT * FROM USER_FLASHBACK_ARCHIVE_TABLES;

TABLE_NAME                     OWNER_NAME                     FLASHBACK_ARCHIVE_NAME
------------------------------ ------------------------------ -----------------------------------
ARCHIVE_TABLE_NAME                                    STATUS
----------------------------------------------------- --------
EMPLOYEES                      HR                             FLA1
SYS_FBA_HIST_73933                                    ENABLED


HR@orcl2>  select * from sys_fba_hist_73933;

RID
----------------------------------------------------------------------------------------------------
  STARTSCN     ENDSCN XID              O EMPLOYEE_ID FIRST_NAME           LAST_NAME
---------- ---------- ---------------- - ----------- -------------------- -------------------------
EMAIL                     PHONE_NUMBER         HIRE_DATE JOB_ID         SALARY COMMISSION_PCT
------------------------- -------------------- --------- ---------- ---------- --------------
MANAGER_ID DEPARTMENT_ID
---------- -------------
AAAR5VAAFAAAADMABG
   1647561    1647564 0400000086020000 U         170 Tayler               Fox
TFOX                      011.44.1343.729268   24-JAN-06 SA_REP          10600             .2
       148            80


AAAR5VAAFAAAADMABG
   1647564    1647567 070021008B020000 U         170 Tayler               Fox
TFOX                      011.44.1343.729268   24-JAN-06 SA_REP          11600             .2
       148            80


AAAR5VAAFAAAADMABG
              1647561                            170 Tayler               Fox
TFOX                      011.44.1343.729268   24-JAN-06 SA_REP           9600             .2
       148            80


10. 다음 query가 아카이브 테이블을 사용하도록 하려면 언두 테이블스페이스를 전환하고 이전 테이블스페이스를 삭제해야 한다.

SYS@orcl2> ALTER SYSTEM SET UNDO_TABLESPACE=UNDOTBS2;
System altered.


SYS@orcl2> DROP TABLESPACE UNDOTBS1;
DROP TABLESPACE UNDOTBS1
*
ERROR at line 1:
ORA-30013: undo tablespace 'UNDOTBS1' is currently in use


11. HR 유저로 Flashback Data Archive 생성 후와 오류가 있는 DML을 실행하기 전의
시간을 선택합니다. 그 당시 Mr. Fox의 사원 레코드를 보려면 다음 query를
실행합니다('15' MINUTE를 선택한 기록 날짜 형식으로 대체합니다.
예: '50' SECOND, '10' DAY, '5' MONTH):
주: flashback data archive가 시작되기 전의 시간을 지정하면 ORA-1466 오류가
발생합니다. 시간 간격을 줄이고 다시 시도하십시오. 급여가 계속 12600으로
나타나면 시간 간격을 늘리십시오.

SYS@orcl2> SELECT employee_id, last_name, salary
           FROM hr.employees AS OF TIMESTAMP
           (SYSTIMESTAMP - INTERVAL '15' MINUTE)
           WHERE last_name = 'Fox';

EMPLOYEE_ID LAST_NAME                     SALARY
----------- ------------------------- ----------
        170 Fox                             9600


12. HR 유저로 최근 갱신이 실수였음을 알았습니다. 선택한 이력 날짜(예: 10 분 전)에
대해 원래 값으로 복귀하려면 다음 명령을 실행하십시오.(선택한 '15' MINUTE를
선택한 이력 날짜로 바꾸십시오.)

SYS@orcl2> UPDATE hr.employees
           SET salary = (SELECT salary FROM hr.employees
                         AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '15' MINUTE)
                         WHERE last_name = 'Fox')
           WHERE last_name = 'Fox';


SYS@orcl2> select salary from hr.employees where last_name='Fox';

    SALARY
----------
      9600


13.  FDA 관련 데이타 딕셔너리를 조회한다.
SYS@orcl2> SELECT table_name
           FROM dict
           WHERE table_name LIKE '%FLASHBACK_ARCHIVE%';

TABLE_NAME
------------------------------
DBA_FLASHBACK_ARCHIVE
DBA_FLASHBACK_ARCHIVE_TABLES
DBA_FLASHBACK_ARCHIVE_TS
USER_FLASHBACK_ARCHIVE
USER_FLASHBACK_ARCHIVE_TABLES


--  flashback data archive 가 생성된 시간 , 상태
SYS@orcl2> SELECT flashback_archive_name, create_time, status
           FROM   dba_flashback_archive; 

FLASHBACK_ARCHIVE_NAME              CREATE_TIME                         STATUS
----------------------------------- ----------------------------------- -------
FLA1                                29-APR-19 02.20.33.000000000 PM


-- flashback data archive 가 저장된 테이블스페이스 정보 조회
SYS@orcl2> SELECT *
           FROM   dba_flashback_archive_ts;

FLASHBACK_ARCHIVE_NAME              FLASHBACK_ARCHIVE# TABLESPACE_NAME
----------------------------------- ------------------ ------------------------------
QUOTA_IN_MB
----------------------------------------
FLA1                                                 1 FLA_TBS1
10


-- the flashback data archive가 저장된 내부 테이블 정보
SYS@orcl2> SELECT *
           FROM dba_flashback_archive_tables;

TABLE_NAME                     OWNER_NAME                     FLASHBACK_ARCHIVE_NAME
------------------------------ ------------------------------ -----------------------------------
ARCHIVE_TABLE_NAME                                    STATUS
----------------------------------------------------- --------
EMPLOYEES                      HR                             FLA1
SYS_FBA_HIST_73933                                    ENABLED


14. hr 유저로 접속해서 사용할 수 있는 FLASHBACK_ARCHIVE 데이타 딕셔너리 테이블을 알아본다.
SYS@orcl2> SELECT table_name
           FROM dict
           WHERE table_name LIKE '%FLASHBACK_ARCHIVE%';


TABLE_NAME
------------------------------
DBA_FLASHBACK_ARCHIVE
DBA_FLASHBACK_ARCHIVE_TABLES
DBA_FLASHBACK_ARCHIVE_TS
USER_FLASHBACK_ARCHIVE
USER_FLASHBACK_ARCHIVE_TABLES



15. Retention 시간이 만료되면 flashback data archive의 날짜가 자동으로 삭제된다.
그러나 2분 이상 된 데이터를 삭제하기 위해 다음 명령으로 데이터를 명시적으로
삭제할 수 있다.

SYS@orcl2> select * from hr.sys_fba_hist_73933;

RID
----------------------------------------------------------------------------------------------------
  STARTSCN     ENDSCN XID              O EMPLOYEE_ID FIRST_NAME           LAST_NAME
---------- ---------- ---------------- - ----------- -------------------- -------------------------
EMAIL                     PHONE_NUMBER         HIRE_DATE JOB_ID         SALARY COMMISSION_PCT
------------------------- -------------------- --------- ---------- ---------- --------------
MANAGER_ID DEPARTMENT_ID
---------- -------------
AAAR5VAAFAAAADMABG
   1647561    1647564 0400000086020000 U         170 Tayler               Fox
TFOX                      011.44.1343.729268   24-JAN-06 SA_REP          10600             .2
       148            80


AAAR5VAAFAAAADMABG
   1647564    1647567 070021008B020000 U         170 Tayler               Fox
TFOX                      011.44.1343.729268   24-JAN-06 SA_REP          11600             .2
       148            80


AAAR5VAAFAAAADMABG
              1647561                            170 Tayler               Fox
TFOX                      011.44.1343.729268   24-JAN-06 SA_REP           9600             .2
       148            80


SYS@orcl2> ALTER FLASHBACK ARCHIVE fla1 PURGE BEFORE TIMESTAMP (SYSTIMESTAMP - INTERVAL '2' MINUTE);
Flashback archive altered.


SYS@orcl2> select * from hr.sys_fba_hist_73933;
no rows selected


16. 스크립트를 실행하여 SYS 유저로 10MB 테이블스페이스를
추가로 생성합니다

SYS@orcl2> CREATE SMALLFILE TABLESPACE fla_tbs2
           DATAFILE '$HOME/BACKUP/fla_tbs02.dbf'
           SIZE 10M REUSE AUTOEXTEND ON NEXT 640K MAXSIZE 32767M
           NOLOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE
           MANAGEMENT AUTO;
Tablespace created


17. ARCHIVE_ADMIN 유저로 FLA1 Flashback Data Archive에 5MB의 FLA_TBS2
테이블스페이스를 추가합니다.
SYS@orcl2> connect ARCHIVE_ADMIN
Enter password: oracle <<< not displayed
Connected.


ARCHIVE_ADMIN@orcl2> ALTER FLASHBACK ARCHIVE fla1 ADD TABLESPACE fla_tbs2 QUOTA 5M;
Flashback archive altered.


ARCHIVE_ADMIN@orcl2> SELECT *
                     FROM dba_flashback_archive_ts;

FLASHBACK_ARCHIVE_NAME    FLASHBACK_ARCHIVE# TABLESPACE_NAME      QUOTA_IN_MB
------------------------- ------------------ -------------------- ---------------
FLA1                                       1 FLA_TBS1             10
FLA1                                       1 FLA_TBS2             5


18. 한 특정 Flashback Data Archive에 있는 모든 테이블은 동일한 Retention 시간을 가진다.
FLA1 Flashback Data Archive의 Retention 시간을 2년으로 변경한다.

ARCHIVE_ADMIN@orcl2> select * from dba_flashback_archive;

OWNER_NAME                     FLASHBACK_ARCHIVE_NAME    FLASHBACK_ARCHIVE# RETENTION_IN_DAYS
------------------------------ ------------------------- ------------------ -----------------
CREATE_TIME
-----------------------------------
LAST_PURGE_TIME                                                             STATUS
--------------------------------------------------------------------------- -------
SYS                            FLA1                                       1               365
29-APR-19 02.20.33.000000000 PM
29-APR-19 03.05.05.000000000 PM


ARCHIVE_ADMIN@orcl2> ALTER FLASHBACK ARCHIVE fla1 MODIFY RETENTION 2 YEAR;
Flashback archive altered.


ARCHIVE_ADMIN@orcl2> select * from dba_flashback_archive;

OWNER_NAME                     FLASHBACK_ARCHIVE_NAME    FLASHBACK_ARCHIVE# RETENTION_IN_DAYS
------------------------------ ------------------------- ------------------ -----------------
CREATE_TIME
-----------------------------------
LAST_PURGE_TIME                                                             STATUS
--------------------------------------------------------------------------- -------
SYS                            FLA1                                       1               730
29-APR-19 02.20.33.000000000 PM
29-APR-19 03.05.05.000000000 PM


19) 정리 작업
ARCHIVE_ADMIN 유저 또는 SYS 유저로 FLA1 Flashback Data Archive를 삭제한다.
Flashback Data Archive를 삭제하면 내부 이력 테이블도 같이 삭제된다.
감사(audit) 및 보안 요구 사항으로 인해 이 테이블을 직접 삭제할 수 없다.
  주의 ) Flashback Data Archive를 삭제해도 해당 아카이브가 저장된
테이블스페이스는 삭제되지 않는다. 다른 데이터가 포함되어 있을 수도 있기 때문임.


SYS@orcl2> DROP FLASHBACK ARCHIVE fla1;
Flashback archive dropped.


SYS@orcl2> select * from hr.sys_fba_hist_73933;
select * from hr.sys_fba_hist_73933
                 *
ERROR at line 1:
ORA-00942: table or view does not exist


20) 1~2분 정도 기다린 다음 SYS 유저로 연결하고 flada_cleanup.sql
스크립트를 실행하여 환경을 정리합니다.


--------------------
보안의 이유로  HISTORY TABLE을 직접 DELETE 할 수는 없다.
삭제를 위해서는 DISASSOCIATE 작업이 필요하다.
            ( DBMS_FLASHBACK_ARCHIVE.DISASSOCIATE_FBA 사용 )


/* DBMS_FLASHBACK_ARCHIVE.DISASSOCIATE_FBA 사용 */

SYS@orcl2> create table scott.emp2 as select * from scott.emp;
Table created.


SYS@orcl2> alter table scott.emp2 flashback archive fla1;
Table altered.


SYS@orcl2> conn scott/tiger
Connected.


SCOTT@orcl2>  update emp2 set sal=2000 where deptno =20;
5 rows updated.


SCOTT@orcl2>  commit;
Commit complete.


SYS@orcl2> select * from dba_flashback_archive_tables;

TABLE_NAME                     OWNER_NAME                     FLASHBACK_ARCHIVE_NAME
------------------------------ ------------------------------ -------------------------
ARCHIVE_TABLE_NAME                                    STATUS
----------------------------------------------------- --------
EMPLOYEES                      HR                             FLA1
SYS_FBA_HIST_73933                                    ENABLED


EMP2                           SCOTT                          FLA1
SYS_FBA_HIST_74893                                    ENABLED



SYS@orcl2> select * from scott.sys_fba_hist_74893;

RID
----------------------------------------------------------------------------------------------------
  STARTSCN     ENDSCN XID              O      EMPNO ENAME      JOB              MGR HIREDATE
---------- ---------- ---------------- - ---------- ---------- --------- ---------- ---------
       SAL       COMM     DEPTNO
---------- ---------- ----------
AAASSNAAEAAAAKbAAA
              1651005                          7369 SMITH      CLERK           7902 17-DEC-80
       800                    20


AAASSNAAEAAAAKbAAD
              1651005                          7566 JONES      MANAGER         7839 02-APR-81
      2975                    20


AAASSNAAEAAAAKbAAH
              1651005                          7788 SCOTT      ANALYST         7566 19-APR-87
      4000                    20


AAASSNAAEAAAAKbAAK
              1651005                          7876 ADAMS      CLERK           7788 23-MAY-87
      1100                    20


AAASSNAAEAAAAKbAAM
              1651005                          7902 FORD       ANALYST         7566 03-DEC-81
      3000                    20




SCOTT@orcl2> alter table emp2 drop column comm;
Table altered.


SCOTT@orcl2> select * from scott.sys_fba_hist_74893;

RID
----------------------------------------------------------------------------------------------------
  STARTSCN     ENDSCN XID              O      EMPNO ENAME      JOB              MGR HIREDATE
---------- ---------- ---------------- - ---------- ---------- --------- ---------- ---------
       SAL D_1651548_COMM     DEPTNO
---------- -------------- ----------
AAASSNAAEAAAAKbAAA
              1651005                          7369 SMITH      CLERK           7902 17-DEC-80
       800                        20


AAASSNAAEAAAAKbAAD
              1651005                          7566 JONES      MANAGER         7839 02-APR-81
      2975                        20


AAASSNAAEAAAAKbAAH
              1651005                          7788 SCOTT      ANALYST         7566 19-APR-87
      4000                        20


AAASSNAAEAAAAKbAAK
              1651005                          7876 ADAMS      CLERK           7788 23-MAY-87
      1100                        20


AAASSNAAEAAAAKbAAM
              1651005                          7902 FORD       ANALYST         7566 03-DEC-81
      3000                        20


AAASSNAAEAAAAKbAAA
   1651005    1651548 0F00040005000000 U       7369 SMITH      CLERK           7902 17-DEC-80
      2000                        20


AAASSNAAEAAAAKbAAD
   1651005    1651548 0F00040005000000 U       7566 JONES      MANAGER         7839 02-APR-81
      2000                        20


AAASSNAAEAAAAKbAAH
   1651005    1651548 0F00040005000000 U       7788 SCOTT      ANALYST         7566 19-APR-87
      2000                        20


AAASSNAAEAAAAKbAAK
   1651005    1651548 0F00040005000000 U       7876 ADAMS      CLERK           7788 23-MAY-87
      2000                        20


AAASSNAAEAAAAKbAAM
   1651005    1651548 0F00040005000000 U       7902 FORD       ANALYST         7566 03-DEC-81
      2000                        20


AAASSNAAEAAAAKbAAE
              1651548                          7654 MARTIN     SALESMAN        7698 28-SEP-81
      1250           1400         30


AAASSNAAEAAAAKbAAG
              1651548                          7782 CLARK      MANAGER         7839 09-JUN-81
      2450                        10


AAASSNAAEAAAAKbAAC
              1651548                          7521 WARD       SALESMAN        7698 22-FEB-81
      1250            500         30


AAASSNAAEAAAAKbAAB
              1651548                          7499 ALLEN      SALESMAN        7698 20-FEB-81
      1600            300         30


AAASSNAAEAAAAKbAAL
              1651548                          7900 JAMES      CLERK           7698 03-DEC-81
       950                        30


AAASSNAAEAAAAKbAAI
              1651548                          7839 KING       PRESIDENT            17-NOV-81
      5000                        10


AAASSNAAEAAAAKbAAF
              1651548                          7698 BLAKE      MANAGER         7839 01-MAY-81
      2850                        30


AAASSNAAEAAAAKbAAJ
              1651548                          7844 TURNER     SALESMAN        7698 08-SEP-81
      1500              0         30


AAASSNAAEAAAAKbAAN
              1651548                          7934 MILLER     CLERK           7782 23-JAN-82
      1300                        10

19 rows selected.


SYS@orcl2> delete from hr.SYS_FBA_HIST_73933;
delete from hr.SYS_FBA_HIST_73933
               *
ERROR at line 1:
ORA-55622: DML, ALTER and CREATE UNIQUE INDEX operations are not allowed on table
"HR"."SYS_FBA_HIST_73933"


SYS@orcl2> ALTER TABLE scott.sys_fba_hist_74893 DROP COLUMN comm;
ALTER TABLE scott.sys_fba_hist_74893 DROP COLUMN comm
*
ERROR at line 1:
ORA-55622: DML, ALTER and CREATE UNIQUE INDEX operations are not allowed on table
"SCOTT"."SYS_FBA_HIST_74893"


SYS@orcl2> desc scott.sys_fba_hist_74893
Name                                                  Null?    Type
----------------------------------------------------- -------- ------------------------------------
RID                                                            VARCHAR2(4000)
STARTSCN                                                       NUMBER
ENDSCN                                                         NUMBER
XID                                                            RAW(8)
OPERATION                                                      VARCHAR2(1)
EMPNO                                                          NUMBER(4)
ENAME                                                          VARCHAR2(10)
JOB                                                            VARCHAR2(9)
MGR                                                            NUMBER(4)
HIREDATE                                                       DATE
SAL                                                            NUMBER(7,2)
D_1651548_COMM                                                 NUMBER(7,2)
DEPTNO                                                         NUMBER(2)


SYS@orcl2> EXEC DBMS_FLASHBACK_ARCHIVE.DISASSOCIATE_FBA('scott','emp2');
PL/SQL procedure successfully completed.


SYS@orcl2> DELETE FROM scott.SYS_FBA_HIST_74893 WHERE empno=7369;
2 rows deleted.


SYS@orcl2> ALTER TABLE scott.emp2 RENAME COLUMN sal TO salary;
Table altered.


SYS@orcl2> EXEC DBMS_FLASHBACK_ARCHIVE.REASSOCIATE_FBA('scott','emp2');
BEGIN DBMS_FLASHBACK_ARCHIVE.REASSOCIATE_FBA('scott','emp2'); END;


*
ERROR at line 1:
ORA-55636: Flashback Data Archive enabled table "SCOTT"."EMP2" has different definition from its
history table
ORA-06512: at "SYS.DBMS_FLASHBACK_ARCHIVE", line 17
ORA-06512: at line 1


SYS@orcl2>  EXEC DBMS_FLASHBACK_ARCHIVE.DISASSOCIATE_FBA('scott','emp2');
PL/SQL procedure successfully completed.


SYS@orcl2> ALTER TABLE scott.SYS_FBA_HIST_74893 RENAME COLUMN sal TO salary;
Table altered.


SYS@orcl2> EXEC DBMS_FLASHBACK_ARCHIVE.REASSOCIATE_FBA('scott','emp2')
PL/SQL procedure successfully completed.


Recycle bin
  • 자동공간 회수
  • insert tset select 천만건을 할경우
      • 할당된 extents 중에서 진짜 free한 space를 찾는다. 
      • 부족할 경우 Recycle bin에 있는 공간을 사용
      • 부족할 경우 auto extend가 일어나고, auto extend on이 되어있지 않으면 에러발생.
Flashback Drop 및 Recycle bin
FLASHBACK TABLE 명령을 사용하면 Point-in-time Recovery를 사용하지 않고도 DROP TABLE을 복원하는 기능

HR@orcl2> create table temp_emp
           as
           select * from employees;
Table created.


HR@orcl2> alter table temp_emp
          add constraint TEMP_EMP_ID_PK primary key(employee_id);
Table altered.


HR@orcl2> select constraint_name, constraint_type, search_condition, index_name
          from user_constraints
          where table_name='TEMP_EMP';

CONSTRAINT_NAME C SEARCH_CONDITION          INDEX_NAME
--------------- - ------------------------- ------------------------------
SYS_C0011181    C "LAST_NAME" IS NOT NULL
SYS_C0011182    C "EMAIL" IS NOT NULL
SYS_C0011183    C "HIRE_DATE" IS NOT NULL
SYS_C0011184    C "JOB_ID" IS NOT NULL
TEMP_EMP_ID_PK  P                           TEMP_EMP_ID_PK


HR@orcl2> select index_name, column_name
          from user_ind_columns
          where table_name='TEMP_EMP';

INDEX_NAME           COLUMN_NAME
-------------------- --------------------
TEMP_EMP_ID_PK       EMPLOYEE_ID


HR@orcl2> DROP TABLE TEMP_EMP;
Table dropped.


HR@orcl2> select * from temp_emp;
FROM    temp_emp
        *
ERROR at line 2:
ORA-00942: table or view does not exist


HR@orcl2> select constraint_name, constraint_type, search_condition, index_name
          from user_constraints
          where table_name='TEMP_EMP';

no rows selected


HR@orcl2> select index_name, column_name
          from user_ind_columns
          where table_name='TEMP_EMP';

no rows selected


ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------TEMP_EMP         BIN$h6dnUFH5MX3gUAB/AQAt/A==$0 TABLE        2019-04-29:16:40:51


HR@orcl2> select count(*)
          from "BIN$h6dnUFH5MX3gUAB/AQAt/A==$0";
          
  COUNT(*)
----------
       107


HR@orcl2> FLASHBACK TABLE TEMP_EMP TO BEFORE DROP;
Flashback complete.


HR@orcl2> SHOW RECYCLEBIN
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------


HR@orcl2> select count(*) from temp_emp;

  COUNT(*)
----------
       107


HR@orcl2> select constraint_name, constraint_type, search_condition, index_name
          from user_constraints
          where table_name='TEMP_EMP';

CONSTRAINT_NAME C SEARCH_CONDITION          INDEX_NAME
--------------- - ------------------------- ------------------------------
BIN$h6dnUFHzMX3 C "LAST_NAME" IS NOT NULL
gUAB/AQAt/A==$0

BIN$h6dnUFH0MX3 C "EMAIL" IS NOT NULL
gUAB/AQAt/A==$0

BIN$h6dnUFH1MX3 C "HIRE_DATE" IS NOT NULL
gUAB/AQAt/A==$0

BIN$h6dnUFH2MX3 C "JOB_ID" IS NOT NULL
gUAB/AQAt/A==$0

BIN$h6dnUFH3MX3 P                           BIN$h6dnUFH4MX3gUAB/AQAt/A==$0
gUAB/AQAt/A==$0
-- 제약조건의 이름들이 이상해졌다.


HR@orcl2> select index_name, column_name
          from user_ind_columns
          where table_name='TEMP_EMP';

INDEX_NAME                     COLUMN_NAME
------------------------------ -------------------------
BIN$h6dnUFH4MX3gUAB/AQAt/A==$0 EMPLOYEE_ID
-- 인덱스의 이름도 이상해졌다.


HR@orcl2> alter table temp_emp
          rename constraint "BIN$h6dnUFH3MX3gUAB/AQAt/A==$0"
          to TEMP_EMP_ID_PK;
Table altered.
-- 제약조건 이름 변경


HR@orcl2> select constraint_name, constraint_type, search_condition, index_name
          from user_constraints
          where table_name='TEMP_EMP';

CONSTRAINT_NAME C SEARCH_CONDITION          INDEX_NAME
--------------- - ------------------------- ------------------------------
BIN$h6dnUFHzMX3 C "LAST_NAME" IS NOT NULL
gUAB/AQAt/A==$0

BIN$h6dnUFH0MX3 C "EMAIL" IS NOT NULL
gUAB/AQAt/A==$0

BIN$h6dnUFH1MX3 C "HIRE_DATE" IS NOT NULL
gUAB/AQAt/A==$0

BIN$h6dnUFH2MX3 C "JOB_ID" IS NOT NULL
gUAB/AQAt/A==$0

TEMP_EMP_ID_PK  P                           BIN$h6dnUFH4MX3gUAB/AQAt/A==$0
-- 바뀐 것을 확인


HR@orcl2> ALTER INDEX "BIN$h6dnUFH4MX3gUAB/AQAt/A==$0" RENAME TO TEMP_EMP_ID_PK;
Index altered.


HR@orcl2> select index_name, column_name
          from user_ind_columns
          where table_name='TEMP_EMP';

INDEX_NAME                     COLUMN_NAME
------------------------------ -------------------------
TEMP_EMP_ID_PK                 EMPLOYEE_ID


HR@orcl2> DROP TABLE TEMP_EMP;
Table dropped.


HR@orcl2> show recyclebin
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
TEMP_EMP         BIN$h6dnUFIAMX3gUAB/AQAt/A==$0 TABLE        2019-04-29:16:51:52


HR@orcl2> create table temp_emp
          as
          select *
          from employees
          where rownum < 4;
Table created.


HR@orcl2> select count(*) from temp_emp;

  COUNT(*)
----------
         3
-- 이름은 temp_emp와 같지만 내용은 전혀 다른 객체를 생성


HR@orcl2> DROP TABLE TEMP_EMP;
Table dropped.


HR@orcl2> SHOW RECYCLEBIN
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
TEMP_EMP         BIN$h6dnUFIFMX3gUAB/AQAt/A==$0 TABLE        2019-04-29:16:54:09
TEMP_EMP         BIN$h6dnUFIAMX3gUAB/AQAt/A==$0 TABLE        2019-04-29:16:51:52
-- 가장 나중에 들어간 테이블을 가지고 나온다.


HR@orcl2> FLASHBACK TABLE TEMP_EMP TO BEFORE DROP;
Flashback complete.


HR@orcl2> select count(*) from temp_emp;

  COUNT(*)
----------
         3

HR@orcl2> SHOW RECYCLEBIN
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
T1               BIN$hq+1i9zTIEXgUAB/AQAczQ==$0 TABLE        2019-04-17:10:21:46
TEMP_EMP         BIN$h6dnUFIKMX3gUAB/AQAt/A==$0 TABLE        2019-04-29:16:55:51
TEMP_EMP         BIN$h6dnUFIAMX3gUAB/AQAt/A==$0 TABLE        2019-04-29:16:51:52


-- 오래된 테이블을 가지고 나올경우
HR@orcl2> select *
          from "BIN$h6dnUFIAMX3gUAB/AQAt/A==$0";

EMPLOYEE_ID FIRST_NAME           LAST_NAME                 EMAIL
----------- -------------------- ------------------------- -------------------------
PHONE_NUMBER         HIRE_DATE JOB_ID         SALARY COMMISSION_PCT MANAGER_ID DEPARTMENT_ID
-------------------- --------- ---------- ---------- -------------- ---------- -------------
        198 Donald               OConnell                  DOCONNEL
650.507.9833         21-JUN-07 SH_CLERK         2600                       124            50


        199 Douglas              Grant                     DGRANT
650.507.9844         13-JAN-08 SH_CLERK         2600                       124            50


        200 Jennifer             Whalen                    JWHALEN
515.123.4444         17-SEP-03 AD_ASST          4400                       101            10


        201 Michael              Hartstein                 MHARTSTE
515.123.5555         17-FEB-04 MK_MAN          13000                       100            20
............



HR@orcl2> FLASHBACK TABLE TEMP_EMP TO BEFORE DROP;
Flashback complete.


HR@orcl2> select count(*) from temp_emp;

  COUNT(*)
----------
         3


HR@orcl2> FLASHBACK TABLE TEMP_EMP TO BEFORE DROP;
FLASHBACK TABLE TEMP_EMP TO BEFORE DROP
*
ERROR at line 1:
ORA-38312: original name is used by an existing object


HR@orcl2> SHOW RECYCLEBIN
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------TEMP_EMP         BIN$h6dnUFIAMX3gUAB/AQAt/A==$0 TABLE        2019-04-29:16:51:52



HR@orcl2> FLASHBACK TABLE TEMP_EMP TO BEFORE DROP
          RENAME TO EMP_TEMP;

Flashback complete.


HR@orcl2> SELECT COUNT(*) FROM EMP_TEMP;

  COUNT(*)
----------
       107


HR@orcl2> show recyclebin
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
T1               BIN$hq+1i9zTIEXgUAB/AQAczQ==$0 TABLE        2019-04-17:10:21:46
TEMP_EMP         BIN$h6dnUFIPMX3gUAB/AQAt/A==$0 TABLE        2019-04-29:17:00:42


HR@orcl2> drop table temp_emp purge;
Table dropped.


HR@orcl2 drop table emp_temp purge
Table dropped.

HR@orcl2> purge recyclebin;
Recyclebin purged.


HR@orcl2> show recyclebin
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------


====================================================================================================
<<<Recycle bin에 있는 객체 삭제하는 방법>>>
PURGE TABLE hr.emp; 지정된 테이블을 영구히 삭제, FIFO(First In First Out) 선입선출

PURGE INDEX hr.emp_idx; 지정된 인덱스를 영구히 삭제

PURGE TABLESPACE users; 지정된 테이블스페이스 내의 모든 객체 영구히 삭제

PURGE RECYCLEBIN은 현재 유저에게 속한 모든 객체 영구히 삭제 RECYCLEBIN과 USER_RECYCLEBIN은 동일합니다.

PURGE DBA_RECYCLEBIN은 모든 객체를 삭제
====================================================================================================



Flashback Database
  • Logical Failure 시 Incomplete Recovery에 사용
  • 수행조건
      • Archivelog Mode
      • Flashback Log
      • FAST RECOVERY AREA


SYS@orcl2> SHOW PARAMETER DB_RECOVERY_FILE_DEST

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest                string      /u01/app/oracle/flash_recovery
                                                 _area
db_recovery_file_dest_size           big integer 3852M


SYS@orcl2> select log_mode, flashback_on from v$database;

LOG_MODE     FLASHBACK_ON
------------ ------------------
ARCHIVELOG   NO


SYS@orcl2> ALTER DATABASE FLASHBACK ON;
Database altered.


SYS@orcl2> select log_mode, flashback_on from v$database;

LOG_MODE     FLASHBACK_ON ==> flashback log 사용중
------------ ------------------
ARCHIVELOG   YES


SYS@orcl2> create table hr.emp_flash_db
           as
           select employee_id, last_name, salary
           from hr.employees
           where department_id=60;
Table created.


SYS@orcl2> select * from hr.emp_flash_db;

EMPLOYEE_ID LAST_NAME                     SALARY
----------- ------------------------- ----------
        103 Hunold                          9000
        104 Ernst                           6000
        105 Austin                          4800
        106 Pataballa                       4800
        107 Lorentz                         4200


SYS@orcl2> select current_scn
           from v$database;

CURRENT_SCN
-----------
    1656949


SYS@orcl2> update hr.emp_flash_db
           set salary=500000;
           
5 rows updated.


SYS@orcl2> select * from hr.emp_flash_db;

EMPLOYEE_ID LAST_NAME                     SALARY
----------- ------------------------- ----------
        103 Hunold                        500000
        104 Ernst                         500000
        105 Austin                        500000
        106 Pataballa                     500000
        107 Lorentz                       500000


SYS@orcl2> commit;
Commit complete.


SYS@orcl2> create table hr.emp_flash_db1
                   as
                   select *
                   from hr.employees;
Table created.


SYS@orcl2> select current_scn
           from v$database;

CURRENT_SCN
-----------
    1657061


SYS@orcl2> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.


SYS@orcl2> startup mount
ORACLE instance started.
Total System Global Area  431038464 bytes
Fixed Size                  1337016 bytes
Variable Size             155191624 bytes
Database Buffers          268435456 bytes
Redo Buffers                6074368 bytes
Database mounted.


SYS@orcl2> flashback database to scn 1656949;
Flashback complete.


SYS@orcl2> alter database open read only;
Database altered.


SYS@orcl2> select * from hr.emp_flash_db;

EMPLOYEE_ID LAST_NAME                     SALARY
----------- ------------------------- ----------
        103 Hunold                          9000
        104 Ernst                           6000
        105 Austin                          4800
        106 Pataballa                       4800
        107 Lorentz                         4200


SYS@orcl2> select * from hr.emp_flash_db1;
select * from hr.emp_flash_db1
                 *
ERROR at line 1:
ORA-00942: table or view does not exist


SYS@orcl2> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.


SYS@orcl2> startup mount
ORACLE instance started.
Total System Global Area  431038464 bytes
Fixed Size                  1337016 bytes
Variable Size             155191624 bytes
Database Buffers          268435456 bytes
Redo Buffers                6074368 bytes
Database mounted.


SYS@orcl2> ALTER DATABASE OPEN RESETLOGS;
Database altered.


SYS@orcl2> select * from v$FLASHBACK_DATABASE_LOG;

OLDEST_FLASHBACK_SCN OLDEST_FL RETENTION_TARGET FLASHBACK_SIZE ESTIMATED_FLASHBACK_SIZE
-------------------- --------- ---------------- -------------- ------------------------
             1656851 29-APR-19             1440        8192000                        0


SYS@orcl2> select * from V$FLASHBACK_DATABASE_STAT;

BEGIN_TIM END_TIME  FLASHBACK_DATA    DB_DATA  REDO_DATA ESTIMATED_FLASHBACK_SIZE
--------- --------- -------------- ---------- ---------- ------------------------
29-APR-19 29-APR-19         958464          0     168448                        0


SYS@orcl2> SELECT flashback_size FROM V$FLASHBACK_DATABASE_LOG;

FLASHBACK_SIZE
--------------
       8192000


SYS@orcl2> ALTER DATABASE FLASHBACK OFF;
Database altered.