Flashback( default : 사용안함 )
- table 의 특정 부분만 찾아서 변경하는 방법
- 이기능은 Undo Data 의 정보를 이요함.
- 만약 Undo Segment를 다른 Transaction 에서 재사용하면 이기능으로 Flash back 할수 없음
- table 의 구조가 변경되어도 Flashback 할수 없음
- 9i에서 지원되는 Flashback Query + 10g지원하는 Flashback 기능을 통하여 특정 시점의
특정 Segment 데이터까지도 Online 복구가 가능하게 되었음.
△ 9i : Flashback query
△ 10g : Flashback Database
Flashback Drop
Flashback Version Query
Flashback Transaction Query
Flashback Table
* 종류
1) Row level Flashback : 특정 row 만 과거시점으로 되돌리기 기능, commit 된 데이터만 flashback 할수 있음.
2) table level Flashback : 특정 table 만 과거 시점으로 되돌리기 기능.
3) database level Flashback : 테이터베이스 전체를 특정 시점으로 되돌리는 기능, 불안전 복구와 유사함.
* 기존 복구 방식.
Redo, Archive Log 를 이용한 복구, 복구 후 재차 복구 불가능 (resetlogs)
* Flashback database 복구 방식.
1) Flashback Log를 이용한 복구, 필요에 따라 Redo log 사용, 복구 후 재차 복구 가능(Flashbackup 쿼리 재차 수행가능)
*Flashback Log File 이란 ?
- 오라클 Database 를 구성하는 Block(변경 전 Block)을 저장하는 로그 파일.
- 10g에서 새롭게 소개 됨 -> 데이터베이스 복구영역 (database recovery area) 에 생성됨
* 기존 Redo log 차이점.
- Redo log 의 경우 archive 기능이 있었음.
- Flashback log 의 경우 archive 기능이 따로 제공될 필요가 없음.
(db_recovery_file_dest, db_recovery_file_dest_size)
물리적인 database 복구는 사용되지 못함.
* 주의점.
- mount 상태에서 작업 (flashback mode on , 테이블 레벨 복구시)
- dba 권한을 가지고 수행. (권한을 부여하면 구지 dba 권한이 필요치 않음)
- 불완전 복구 처럼 특정 시간으로 돌림 -> resetlogs 오픈 필요. (database level 복구시)
- drop useer / truncate table 장애시 -> flashback database 명령어 사용.
* Flashback 명령어를 수행할수 없는 경우
- 물리적 장애 -> 파일이 삭제된 경우
- system tablespace에 있던 테이블이 삭제되면 flashback table to before drop 안됨
- control file 재생성하면 flashback database 명령어 사용 못함
- tablespace drop 되면 flashback 명령어로 복구 안됨
- datafile shrunk 되면 flashback database 명령어로 복구 못함
- alter table 로 테이블 구조 변경시 version query 로 복구 안됨
- system tables와 통계정보는 flashback 명령어로 복구 안됨
- purge 된 테이블도 flashback 명령어로 복구 안됨
- 테이블과 별도로 삭제된 인덱스는 복구 안됨
---------------------------------------------------------------------
1. 아카이브 모드, 플래쉬백 모드 확인 쿼리
---------------------------------------------------------------------
SYS@ORCL AS SYSDBA> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /u01/app/oracle/oradata/orcl
Oldest online log sequence 1
Next log sequence to archive 3
Current log sequence 3
SYS@ORCL AS SYSDBA> select flashback_on from v$database;
FLASHBACK_ON
------------------
NO
SYS@ORCL AS SYSDBA> alter database flashback on; << Flashback 모드 활성화
Database altered.
SYS@ORCL AS SYSDBA> select flashback_on from v$database;
FLASHBACK_ON
------------------
YES
---------------------------------------------------------------------
2. Undo 확인
---------------------------------------------------------------------
SYS@ORCL AS SYSDBA> show parameter undo;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_management string AUTO
undo_retention integer 900
undo_tablespace string UNDOTBS1
---------------------------------------------------------------------
3. Parameter 설정.
---------------------------------------------------------------------
/u01/app/oracle/product/11.2.0/dbs
db_recovery_file_dest : 파일 저장 경로
db_recovery_file_dest_size : 공간 크기 (기본값 2G)
db_flashback_retention_target : 분단위 파라미터. 지정한 시간안에 복구가능. 시간을 많이 주면 용량이 커짐
저장되는 파일들은
- flashback log file (.flb)
- archive redo log file
- RMAN backup file
DB_RECOVERY_FILE_DEST 크기 조회
select * from v$recovery_file_dest ;
DB_RECOVERY_FILE_DEST 사용량조회
select * from v$flash_recovery_area_usage ;
DB_RECOVERY_FILE_DEST 크기 변경
alter system set db_recovery_file_dest_size=크기 ;
SELECT object_type, message_type, message_level, reason, suggested_action
FROM dba_outstanding_alerts ;
ex)
---------------------------------------------------------------------
파라미터 파일 확인 및 수정
---------------------------------------------------------------------
vi /u01/app/oracle/product/11.2.0/dbs/initORCL.ora
*.db_flashback_retention_target=30
*.db_recovery_file_dest='/u01/app/oracle/flash_recovery_area'
*.db_recovery_file_dest_size=5368709120
SYS@ORCL AS SYSDBA> select flashback_on from v$database;
FLASHBACK_ON
------------------
YES
---------------------------------------------------------------------
#flashback log 확인
---------------------------------------------------------------------
[oracle@DBTEST flashback]$ pwd
/u01/app/oracle/flash_recovery_area/ORCL/flashback
[oracle@DBTEST flashback]$ ll -al
total 15584
drwxr-x--- 2 oracle oinstall 4096 Mar 25 11:45 .
drwxr-x--- 3 oracle oinstall 4096 Mar 25 11:45 ..
-rw-r----- 1 oracle oinstall 15949824 Mar 25 11:46 o1_mf_ch99lb41_.flb
---------------------------------------------------------------------
# DB_RECOVERY_FILE_DESC 크기 조회
---------------------------------------------------------------------
SYS@ORCL AS SYSDBA> select * from v$recovery_file_dest;
NAME SPACE_LIMIT SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES
----------------------------------- ----------- ---------- ----------------- ---------------
/u01/app/oracle/flash_recovery_area 5368709120 15941632 0 1
---------------------------------------------------------------------
# DB_RECOVERY_FILE_DEST 사용량 조회
---------------------------------------------------------------------
SYS@ORCL AS SYSDBA> SELECT * FROM V$FLASH_RECOVERY_AREA_USAGE;
FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES
-------------------- ------------------ ------------------------- ---------------
CONTROL FILE 0 0 0
REDO LOG 0 0 0
ARCHIVED LOG 0 0 0
BACKUP PIECE 0 0 0
IMAGE COPY 0 0 0
FLASHBACK LOG .3 0 1
FOREIGN ARCHIVED LOG 0 0 0
7 rows selected.
---------------------------------------------------------------------
# DB_RECOVERY_FILE_DEST 크기 변경
---------------------------------------------------------------------
SYS@ORCL AS SYSDBA> ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE=4G;
System altered.
SYS@ORCL AS SYSDBA>
SYS@ORCL AS SYSDBA> select * from v$recovery_file_dest;
NAME SPACE_LIMIT SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES
----------------------------------- ----------- ---------- ----------------- ---------------
/u01/app/oracle/flash_recovery_area 4294967296 15941632 0 1
---------------------------------------------------------------------
# Flashback Data Archive - 11g
---------------------------------------------------------------------
10g
DML 처리중 undo Data 를 사용해 다른 사용자가 undo segment 를 덮어 쓴다면 Flashback 기능을 사용 할 수 없음.
11g 이후
online redo log archiving 같이
undo segment 에 있는 commit된 내용을 특정 테이블 스페이스에 archaving 해서 영구적으로 저장하는 기능.
즉. Flashback Data Archive(FBDA)기능이 추가됨
*Flashback Data Archive(FBDA) 백그라운드 프로세스 원리
- Undo Segment 내용을 비정기적으로 특정 테이블 스페이스에 저장.
- 기본 disable
- undo segment 내용을 모두 기록하기전에는 Undo Segment 절대 재활용하지 않음.
특정시간(기본값 5분) 이 지나면 내려씀
1) DML (DB Buffer Cache 데이터 변경)
2) Undo Segment
3) FBDA
*Flashback Data Archive(FBDA) 활성화
1) Flashback history table 지정할 테이블스페이스 생성
2) Flashback data archive 관리할 관리자 계정 생성
3) 관리자 계정에 권한 할당
> grant resource ,connect to 계정
> grant flashback archive administer to 계정;
-> flashback archive administer 권한 :
flashback data archive 를 관리하기 위한 권한
flashback history table 을 생성하고 관리 할 수 있음.
retention time 도 관리 가능.
4) 관리자 계정으로 로그인 후 Flashback history table 생성
> create flashback archive flashback_archive_이름 tablesapce 테이블페이스 명 retention 기간 day;
> 30 day 입력시 history table 에 저장되는 undo data 의 저장기간이 30일. (30일 지나면 삭제)
상태 조회
SELECT owner_name, flashback_archive_name, retention_in_days, status
FROM dba_flashback_archive ;
일반계정에서 flashback history table 을 사용하려면 권한이 필요.
> grant flashback archive on tablespace명칭 to 계정;
테이블 생성시 'flashback archive 테이블스페이스명칭'
> create table 테이블명 () FLASHBACK ARCHIVE 테이블스페이스명칭;
Flashback Data Archive 사용 테이블 삭제
> alter table 테이블명 no flashback archive;
> drop table 테이블명
Flashback history table 조회
> select * from dba_flashback_archive_tables;
ex)
----------------------------------------------------------
# flashback history table 저장할 TBS 선정
----------------------------------------------------------
SYS@ORCL AS SYSDBA> select tablespace_name, bytes/1024/1025 MB, file_name from dba_data_files;
TABLESPACE_NAME MB FILE_NAME
--------------- ---------- ------------------------------------------------
RC_TBS01 9.9902439 /u01/app/oracle/oradata/orcl/rc_tbs.dbf
TBS_TEST 99.902439 /u01/app/oracle/oradata/orcl/TBS_TEST01.dbf << flashback history table 저장할 TBS
TBS_SCOTT_IDX 199.804878 /u01/app/oracle/oradata/orcl/scott_idx01.dbf
DATA01 99.902439 /u01/app/oracle/oradata/orcl/DATA01.dbf
TBS_TEST 4.99512195 /u01/app/oracle/oradata/orcl/TBS_TEST02.dbf
PBJ_TEMP 99.902439 /u01/app/oracle/oradata/orcl/pbj_temp01.dbf
TBS_RMAN 9.9902439 /u01/app/oracle/oradata/orcl/TBS_RAMN01.dbf
TBS_D 78.9229268 /u01/app/oracle/oradata/orcl/tbs_d_01.dbf
TBS_C 99.902439 /u01/app/oracle/oradata/orcl/tbs_c_01.dbf
UNDOTBS2 84.9170732 /u01/app/oracle/oradata/orcl/undotbs02_2.dbf
UNDOTBS2 84.9170732 /u01/app/oracle/oradata/orcl/undotbs02.dbf
TBS_B 49.9512195 /u01/app/oracle/oradata/orcl/tbs_b_01.dbf
TBS_A 99.902439 /u01/app/oracle/oradata/orcl/tbs_a_02.dbf
TBS_A 99.902439 /u01/app/oracle/oradata/orcl/tbs_a_01.dbf
USERS 364.643902 /u01/app/oracle/oradata/orcl/users01.dbf
UNDOTBS1 999.02439 /u01/app/oracle/oradata/orcl/undotbs01.dbf
SYSAUX 1498.53659 /u01/app/oracle/oradata/orcl/sysaux01.dbf
SYSTEM 999.02439 /u01/app/oracle/oradata/orcl/system01.dbf
----------------------------------------------------------
# flash data archive 관리할 계정 생성 및 권한 부여
----------------------------------------------------------
SYS@ORCL AS SYSDBA> create user fda
2 identified by fda
3 default tablespace TBS_TEST;
User created.
SYS@ORCL AS SYSDBA> grant resource, connect to fda;
Grant succeeded.
SYS@ORCL AS SYSDBA> grant flashback archive administer to fda;
Grant succeeded.
----------------------------------------------------------
# 관리계정( fda ) 에서 flashback history table 생성 및 flashback data archive 상태 조회
----------------------------------------------------------
SYS@ORCL AS SYSDBA> conn fda/fda
Connected.
FDA@ORCL > create flashback archive fda01 tablespace TBS_TEST retention 30 day;
Flashback archive created.
FDA@ORCL > select owner_name, flashback_archive_name, retention_in_days, status
from dba_flashback_archive;
OWNER_NAME FLASHBACK_ RETENTION_IN_DAYS STATUS
---------- ---------- ----------------- ----------
FDA FDA01 30
----------------------------------------------------------
flashback history table 을 생성 및 조회
----------------------------------------------------------
*테이블 ftest1 생성 후 flashback datqa archive 를 fda01 로 사용하도록 설정.
FDA@ORCL > create table ftest1(no number, name varchar2(10)) flashback archive fda01;
Table created.
FDA@ORCL > select * from dba_flashback_archive_tables;
TABLE_NAME OWNER_NAME FLASHBACK_ ARCHIVE_TABLE_NAME STATUS
---------- ---------- ---------- -------------------- ----------
FTEST1 FDA FDA01 SYS_FBA_HIST_90174 ENABLED
----------------------------------------------------------
flashback history table drop
----------------------------------------------------------
* 삭제가 되지 않음. -> flashback archive 기능이 활성중임.
FDA@ORCL > drop table ftest1;
drop table ftest1
*
ERROR at line 1:
ORA-55610: Invalid DDL statement on history-tracked table
FDA@ORCL > alter table ftest1 no flashback archive;
Table altered.
FDA@ORCL >
FDA@ORCL >
FDA@ORCL > select * from dba_flashback_archive_tables;
no rows selected
FDA@ORCL > drop table ftest1;
Table dropped.
---------------------------------------------------------------------
## row level flashback ##
- 테이블의 데이터 update 시 복구.
1) 데이터 생성
2) 잘못된 update
3) Flashback version query 이용한 scn 확인
4) scn 을 통한 시간 확인
5) transaction query 를 통해 복구 update 문 도출
6) 복구
---------------------------------------------------------------------
CREATE TABLE tb (
user_id VARCHAR2(20) NOT NULL,
user_nm VARCHAR2(20) NOT NULL,
email VARCHAR2(100) NOT NULL,
CONSTRAINT pk_tb_id PRIMARY KEY (user_id)
);
INSERT INTO tb (user_id, user_nm, email) VALUES ('test01', 'user01', 'test1');
INSERT INTO tb (user_id, user_nm, email) VALUES ('test02', 'user02', 'test2');
INSERT INTO tb (user_id, user_nm, email) VALUES ('test03', 'user03', 'test3');
INSERT INTO tb (user_id, user_nm, email) VALUES ('test04', 'user04', 'test4');
INSERT INTO tb (user_id, user_nm, email) VALUES ('test05', 'user05', 'test5');
INSERT INTO tb (user_id, user_nm, email) VALUES ('test06', 'user06', 'test6');
INSERT INTO tb (user_id, user_nm, email) VALUES ('test07', 'user07', 'test7');
INSERT INTO tb (user_id, user_nm, email) VALUES ('test08', 'user08', 'test8');
INSERT INTO tb (user_id, user_nm, email) VALUES ('test09', 'user09', 'test9');
INSERT INTO tb (user_id, user_nm, email) VALUES ('test10', 'user10', 'test10');
FDA@ORCL > update tb set user_nm='PBJ02' WHERE USER_ID='test02';
1 row updated.
FDA@ORCL > update tb set user_nm='PBJ03' WHERE USER_ID='test03';
1 row updated.
FDA@ORCL > COMMIT;
Commit complete.
Flashback version query
* 제일 아래가 오래된 것. -> 맨 위가 최근.
FDA@ORCL > select versions_startscn startscn, versions_endscn endscn,
2 versions_xid, versions_operation operation, user_id
3 from tb versions between scn minvalue and maxvalue
4 where email='test5';
STARTSCN ENDSCN VERSIONS_XID O USER_ID
---------- ---------- ---------------- - --------------------
14695595906832 05000800BE190000 U test05
14695595802673 14695595906832 04001900B6120000 I test05
Flashback version query 사용. U : update, I = Insert
--------------------------------------------------------------
select versions_startscn startscn, versions_endscn endscn,
versions_xid, versions_operation operation, user_id
from tb_user versions between scn minvalue and maxvalue
where email='test2@beany.co.kr';
---------------------------------------------------------------
*scn 을 시간으로 확인.
select scn_to_timestamp(14695595802673) from dual;
FDA@ORCL > select scn_to_timestamp(14695595802673) from dual;
SCN_TO_TIMESTAMP(14695595386595)
---------------------------------------------------------------------------
2016/03/25 16:49:06
*변경사항을 취소 시켜 이전 값으로 돌리기 ( 권한필요 > grant select any transaction to 유저;)
TRANSACTION QUERY
---------------------------------------------------------
SELECT undo_sql
FROM flashback_transaction_query
WHERE table_name='TB'
AND commit_scn between 14695595802673 and 14695595906832
ORDER BY start_timestamp desc ;
---------------------------------------------------------
update 문이 보여야하는데... 보이지 않는다... 멀까.
## 해당 옵션은 flashback 기능이 꺼져도 undo 에 데이터가 있다면 복구가 가능하다.
실질적으로 운영중 개발자의 실수로 인해 데이터가 drop, delete 의 경우 timestamp 를 이용하여
데이터 복구를 많이 한다.
---------------------------------------------------------------------
## Table level Flashback ##
Truncate 장애 복구
scott.ft 테이블의 데이터 truncate 시 복구.
---------------------------------------------------------------------
1) timestamp 이용
1-1) 테이블 생성 및 데이터 입력
1-2) 시점 확인
1-3) truncate
1-4) shutdown -> mount
1-5) open resetlogs
1-6) flashback 을 이용한 특정 시점 장애복구
2) scn 이용
2-1) 테이블 생성 및 데이터 입력
2-2) scn 확인
2-3) update
2-4) flashback 을 이용한 scn 시점으로 복구.
3) drop 된 테이블 복구. ( recyclebin : 휴지통 )
----------------------------------------------------------------------------------------
timestamp 이용
----------------------------------------------------------------------------------------
CREATE TABLE tb_user (
user_id VARCHAR2(20) NOT NULL,
user_nm VARCHAR2(20) NOT NULL,
email VARCHAR2(100) NOT NULL,
CONSTRAINT pk_user_id PRIMARY KEY (user_id)
);
INSERT INTO tb_user (user_id, user_nm, email) VALUES ('test01', 'user01', 'test1@beany.co.kr');
INSERT INTO tb_user (user_id, user_nm, email) VALUES ('test02', 'user02', 'test2@beany.co.kr');
INSERT INTO tb_user (user_id, user_nm, email) VALUES ('test03', 'user03', 'test3@beany.co.kr');
INSERT INTO tb_user (user_id, user_nm, email) VALUES ('test04', 'user04', 'test4@beany.co.kr');
INSERT INTO tb_user (user_id, user_nm, email) VALUES ('test05', 'user05', 'test5@beany.co.kr');
INSERT INTO tb_user (user_id, user_nm, email) VALUES ('test06', 'user06', 'test6@beany.co.kr');
INSERT INTO tb_user (user_id, user_nm, email) VALUES ('test07', 'user07', 'test7@beany.co.kr');
INSERT INTO tb_user (user_id, user_nm, email) VALUES ('test08', 'user08', 'test8@beany.co.kr');
INSERT INTO tb_user (user_id, user_nm, email) VALUES ('test09', 'user09', 'test9@beany.co.kr');
INSERT INTO tb_user (user_id, user_nm, email) VALUES ('test10', 'user10', 'test10@beany.co.kr');
SCOTT@ORCL > DELETE FROM tb_user WHERE user_id IN ('test02', 'test08', 'test10');
3 rows deleted.
SCOTT@ORCL >
SCOTT@ORCL > commit;
Commit complete.
SCOTT@ORCL >
SCOTT@ORCL >
SCOTT@ORCL >
SCOTT@ORCL > select * from tb_user;
USER_ID USER_NM EMAIL
-------- -------- -------------------------
test01 user01 test1@beany.co.kr
test03 user03 test3@beany.co.kr
test04 user04 test4@beany.co.kr
test05 user05 test5@beany.co.kr
test06 user06 test6@beany.co.kr
test07 user07 test7@beany.co.kr
test09 user09 test9@beany.co.kr
7 rows selected.
@@@ << 중요 많이 사용함
create table [복구된 테이블]
select * from [복구할 테이블] OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '3' MINUTE);
-- 3분전 데이터로
-- MINUTE 대신 DAY 가능
----------------------------------------------------------------------------------------
3분전 데이터 확인.
----------------------------------------------------------------------------------------
SELECT *FROM tb_user AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '3' MINUTE);
USER_ID USER_NM EMAIL
-------- -------- -------------------------
test01 user01 test1@beany.co.kr
test02 user02 test2@beany.co.kr
test03 user03 test3@beany.co.kr
test04 user04 test4@beany.co.kr
test05 user05 test5@beany.co.kr
test06 user06 test6@beany.co.kr
test07 user07 test7@beany.co.kr
test08 user08 test8@beany.co.kr
test09 user09 test9@beany.co.kr
test10 user10 test10@beany.co.kr
10 rows selected
----------------------------------------------------------------------------------------
3분전 데이터 복구
----------------------------------------------------------------------------------------
OF TIMESTAMP(TO_TIMESTAMP('20180726 140000','YYYYMMDD HH24MISS'))
SCOTT@ORCL > FLASHBACK TABLE tb_user TO TIMESTAMP (SYSTIMESTAMP - INTERVAL '3' MINUTE);
FLASHBACK TABLE tb_user TO TIMESTAMP (SYSTIMESTAMP - INTERVAL '3' MINUTE)
*
ERROR at line 1:
ORA-08189: cannot flashback the table because row movement is not enabled
=> ROW MOVEMENT 비활성화 되어 있기 때문.
FDA@ORCL > alter table tb_user enable row movement;
Table altered.
FDA@ORCL > FLASHBACK TABLE tb_user TO TIMESTAMP (SYSTIMESTAMP - INTERVAL '3' MINUTE);
Flashback complete.
FDA@ORCL > select * from tb_user;
USER_ID USER_NM EMAIL
-------------------- -------------------- ----------------------------------------------------------------------------------------------------
test01 user01 test1@beany.co.kr
test03 user03 test3@beany.co.kr
test04 user04 test4@beany.co.kr
test05 user05 test5@beany.co.kr
test06 user06 test6@beany.co.kr
test07 user07 test7@beany.co.kr
test09 user09 test9@beany.co.kr
test08 user08 test8@beany.co.kr
test10 user10 test10@beany.co.kr
test02 user02 test2@beany.co.kr
10 rows selected.
FDA@ORCL > commit;
Commit complete.
----------------------------------------------------------------------------------------
# 2) scn 이용
----------------------------------------------------------------------------------------
FDA@ORCL > create table test01 (no number);
Table created.
FDA@ORCL > insert into test01 values (1);
1 row created.
FDA@ORCL > insert into test01 values (2);
1 row created.
FDA@ORCL >
FDA@ORCL > commit;
Commit complete.
FDA@ORCL > select * from test01;
NO
----------
1
2
FDA@ORCL > select current_scn from v$database;
CURRENT_SCN
-----------
14695595383525
FDA@ORCL > update test01 set no=123;
2 rows updated.
FDA@ORCL > select * from test01;
NO
----------
123
123
FDA@ORCL > commit;
Commit complete.
FDA@ORCL > flashback table test01 to scn '14695595383525';
flashback table test01 to scn '14695595383525'
*
ERROR at line 1:
ORA-08189: cannot flashback the table because row movement is not enabled
FDA@ORCL > alter table test01 enable row movement;
Table altered.
FDA@ORCL > flashback table test01 to scn '14695595383525';
flashback table test01 to scn '14695595383525'
*
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-25153: Temporary Tablespace is Empty
=> 템포러리 테이블스페이스가 빔...
확인 결과 불완전 복구로 인해.. 템포러리 .dbf 파일 다 지움...
이참에 tempgroup 제거 및 기본 템포러리 지정.
ALTER TABLESPACE temp2 TABLESPACE GROUP '';
ALTER TABLESPACE temp3 TABLESPACE GROUP '';
ALTER TABLESPACE temp4 TABLESPACE GROUP '';
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE TEMP
FDA@ORCL > select * from test01;
NO
----------
1
2
----------------------------------------------------------------------------------------
3) drop 된 테이블 복구. ( recyclebin : 휴지통 )
----------------------------------------------------------------------------------------
FDA@ORCL > select * from test01;
NO
----------
1
2
FDA@ORCL > drop table test01 purge;
Table dropped.
FDA@ORCL > create table test02(no number);
Table created.
FDA@ORCL > drop table test02;
Table dropped.
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
FTEST1 BIN$Ltm7QXKcSjTgUAAK2XE+TQ==$0 TABLE 2016-03-25:14:21:12
TEST02 BIN$LtqwI+oBXnTgUAAK2XFAoA==$0 TABLE 2016-03-25:15:29:41
FDA@ORCL > select * from tab;
TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
BIN$Ltm7QXKcSjTgUAAK2XE+TQ==$0 TABLE
BIN$LtqwI+oBXnTgUAAK2XFAoA==$0 TABLE
* 휴지통에서 삭제.
FDA@ORCL > purge table FTEST1;
Table purged.
FDA@ORCL > show recyclebin;
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
TEST02 BIN$LtqwI+oBXnTgUAAK2XFAoA==$0 TABLE 2016-03-25:15:29:41
* 휴지통에서 복구
FDA@ORCL > flashback table test02 to before drop;
Flashback complete.
FDA@ORCL > select * from test02;
no rows selected
휴지통 비우기.
FDA@ORCL > purge recyclebin;
Recyclebin purged.
FDA@ORCL > show recyclebin;
FDA@ORCL >
recyclebin 비활성화
FDA@ORCL > alter session set recyclebin=off;
Session altered.
recyclebin 활성화
FDA@ORCL > alter session set recyclebin=on;
Session altered.
----------------------------------------------------------
## database level flashback 복구 ##
----------------------------------------------------------
- truncate table 장애 복구
- 특점 시점 으로 데이터베이스 전체 를 되돌림 (reset)
- parameter 파일 수정 (db_flashback_retention_target 설정)
- mount 단계에서 flashback on 설정
방법
시간 (sysdate) : mount 상태
# 1) timestamp 이용 ( mount)
SYS@ORCL AS SYSDBA> create table scott.ft (no number);
Table created.
SYS@ORCL AS SYSDBA> insert into scott.ft values (1);
1 row created.
SYS@ORCL AS SYSDBA> insert into scott.ft values (2);
1 row created.
SYS@ORCL AS SYSDBA> commit;
Commit complete.
SYS@ORCL AS SYSDBA> select * from scott.ft;
NO
----------
1
2
SYS@ORCL AS SYSDBA> select to_char(sysdate, 'YYYY-MM-DD HH24:MI:SS') as time from dual;
TIME
-------------------
2016-03-25 10:53:32
SYS@ORCL AS SYSDBA> truncate table scott.ft;
Table truncated.
SYS@ORCL AS SYSDBA> select * from scott.ft;
no rows selected
SYS@ORCL AS SYSDBA> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SYS@ORCL AS SYSDBA> startup mount
ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance
ORACLE instance started.
Total System Global Area 3290345472 bytes
Fixed Size 2217832 bytes
Variable Size 3154118808 bytes
Database Buffers 117440512 bytes
Redo Buffers 16568320 bytes
Database mounted.
SYS@ORCL AS SYSDBA> flashback database to timestamp timestamp '2016-03-25 10:53:32';
Flashback complete.
SYS@ORCL AS SYSDBA> alter database open resetlogs;
Database altered.
SYS@ORCL AS SYSDBA> select * from scott.ft;
NO
----------
1
2
'Oracle > etc' 카테고리의 다른 글
Redefinition (0) | 2022.01.26 |
---|---|
ogg(Oracle Golden Gate) (0) | 2022.01.26 |
db_link (0) | 2022.01.26 |
compress (0) | 2022.01.26 |
Reorg (0) | 2022.01.26 |