Oracle闪回技术(笔记)
1、設置SQL*Plus提示符
臨時設置
set sqlprompt "_user'@'_connect_identifier>"
永久設置
為了對所有SQL*Plus會話自動設置sqlprompt.將上面的命令放置在ORACLE_HOME_HOME/sqlplus/admin目錄中的glogin.sql文件內
2、查看是否啟用閃回臨視
SQL> select flashback_on from v$database;
?
FLASHBACK_ON
------------------
YES
3、查詢回收站
show recyclebin;會顯示當前的用戶有三個刪除的表并顯示:原先的名稱、回收站名稱以及刪除的時間。
右要了解更詳細的信息,查詢數據字典視圖USER_RECYCLEBIN或DBA_RECYCLEBIN來查看全局視圖
select owner,original_name,type,droptime,can_undrop,space fromdba_recyclebin;
4、PURGE命令永久性地清除刪除的對象
(1)刪除表并且不將它轉移到回收站
drop table <table_name> purge;
(2)從回收站中清除表,如果存在多個具有相同原始名稱的對象,那么將清除時間最久的對象。也可以通過指定回收站名稱來避免這種混淆
purge table <table_name>;
(3)從回收站中清除索引
?purge index<index_name>;
?(4)從表空間中清除所有刪除的對象
?purge tablespace<tablespace_name>;
?(5)從表空間中清除屬于一個用戶的所有刪除的對象
?purge tablespace<tablespace_name> user <user_name>;
?(6)清除您刪除的所有對象
?purge user_recyclebin;
?(7)清除所有刪除的對象,但是執行它需要DBA權限。
?purge dba_recyclebin;
5、配置閃回數據庫
(1)確保數據庫處于歸檔日志模式
歸檔日志模式是啟用閃回數據庫的先決條件
?
SQL> select log_mode from v$database;
?
LOG_MODE
------------
ARCHIVELOG
(2)創建閃回恢復區
SQL> alter system setdb_recovery_file_dest='/opt/oracle/flash_recovery_area';
SQL> alter system set db_recovery_file_dest_size=8G;
(3)設置閃回保留目標時間
SQL> alter system set db_flashback_retention_target=240;
(4)干凈地關閉并加載數據庫
SQL> shutdown immediate
SQL> startup mount;
(5)啟用閃回日志記錄。
SQL> alter database flashback on;
(6)打開數據庫
SQL> alter database open;
6、創建閃回數據歸檔
(1)創建一個供閃回數據庫歸檔使用的表空間:
create tablespace fda datafile 'fda1.dbf'size 10m;
(2)在表空間創建一個保留時間為7年的閃回數據歸檔:
create flashback archive fla1 tablespacefda retention 7 year;
(3)創建用于此練習的模式,并授予它DBA角色:
grant dba to fbdauser identified byfbdauser;
(4)授予用戶操作歸檔的必要權限:
grant flashback archive on fla1 tofbdauser;
(5)作為fbdauser進行連接。創建一個表并為此表啟用閃回數據歸檔:
conn fbdauser/fbdauser
create table t1 as select * from all_users;
alter table t1 flashback archive fla1;
(6)運行這些查詢來確定歸檔創建的對象。可能必須等待幾分鐘,因為對象不是立即創建的。
select object_name,object_type from user_objects;
select segment_name,segment_type from dba_segments wheretablespace_name='FDA';
(7)對保護的表執行一些DML:
delete from t1;
commit;
(8)使用標準的閃回查詢語法對保護的表執行閃回查詢,然后查詢歸檔中的歷史表。
select count(*) from t1;
select count(*) from t1 as of timestamp(sysdate-20/1440);
select ENDSCN,USER_ID,CREATED from SYS_FBA_HIST_75307;
(9)嘗試對保護的表執行一些DDL命令:
alter table t1 drop column created;
truncate table t1;
drop table t1;
作為SYSDBA連接,并嘗試執行如下命令:
drop user fbdauser cascade;
drop tablespace fda including contents and datafiles;
注意,這些命令將會生成與歸檔和保護的表的存在有關的錯誤。
(10)刪除表的除歸檔保護:
alter table fdbauser.t1 no flashbackarchive;
(11)刪除閃回數據歸檔
drop flashback archive fla1;
(12)重新運行步驟(9)中的所有命令。
7、閃回查詢實驗
(1)記錄時間
SCOTT@orcl>select sysdate from dual;
?
SYSDATE
-------------------
2015-10-06 18:46:43
(2)從表中刪除一些行,并提交更改。
SCOTT@orcl>delete from regions where region_name like 'A%';
?
2 rows deleted.
?
SCOTT@orcl>commit;
?
Commit complete.
(3)查詢確認表中只有兩行。
SCOTT@orcl>select * from regions;
?
?REGION_ID REGION_NAME
---------- --------------------------------------------------
?????? ?1 Europe
?????? ?4 Middle East and Africa
(4)查詢針對以前某個時間的表
SCOTT@orcl>select * from regions as of timestampto_timestamp('2015-10-06 18:46:43','yyyy-mm-dd hh24:mi:ss');
?
?REGION_ID REGION_NAME
---------- --------------------------------------------------
?????? ?1 Europe
?????? ?2 Americas
?????? ?3 Asia
?????? ?4 Middle East and Africa
?
SCOTT@orcl>select * from regions as of timestampto_timestamp('2015-10-06 18:46:43','yyyy-mm-dd hh24:mi:ss') minus select * fromregions;
?
?REGION_ID REGION_NAME
---------- --------------------------------------------------
?????? ?2 Americas
?????? ?3 Asia
8、通過SQL*Plus使用閃回刪除
在本練習中創建一個新的模式并在該模式內創建一個表,然后使用flashback drop恢復它
(1)作為用戶SYSTEM使用SQL*Plus連接數據庫
(2)創建一個用戶
SYS@orcl>create user dropper identified by dropper;
SYS@orcl>grant create session,resource to dropper;
SYS@orcl>conn dropper/dropper
(3)創建一個帶有索引和約束的表,并插入一行:
DROPPER@orcl>create table names (name varchar2(10));
DROPPER@orcl>create index name_idx on names(name);
DROPPER@orcl>alter table names add (constraint name_uunique(name));
DROPPER@orcl>insert into names values('John');
DROPPER@orcl>commit;
(4)確認模式的內容
DROPPER@orcl>select object_name,object_type from user_objects;
DROPPER@orcl>select constraint_name,constraint_type,table_namefrom user_constraints;
(5)刪除該表:
DROPPER@orcl>drop table names;
(6)重新運行步驟(4)中的查詢。注意,已從user_objects中刪除了對象,但是仍存在采用系統生成的約束。
(7)查詢回收站以查看原始的名稱到回收站名稱的映射:
DROPPER@orcl>select object_name,original_name,type fromuser_recyclebin;
注意,該視圖并沒有顯示約束
(8)這表明可以查詢回收站但是無法對它執行DML。
DROPPER@orcl>select * from"BIN$IVfJDb9uy+zgVQAAAAAAAQ==$0";
?
NAME
----------
John
(9)使用flashback drop恢復表:
DROPPER@orcl>flashback table names to before drop;
轉載于:https://blog.51cto.com/corasql/1700513
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的Oracle闪回技术(笔记)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MATLAB - 为什么imshow(g
- 下一篇: Web APi之认证(Authentic