91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

聊聊數據庫閃回技術

發布時間:2020-07-03 23:26:19 來源:網絡 閱讀:1061 作者:三國冷 欄目:數據庫

  提到閃回技術,工作這么久了我也很少用到, 以至于我都快忘記閃回技術都有哪些東西了。今天得空,就來復習一下數據庫中的閃回技術。

  即使不看書,我印象中的閃回技術分這么幾種,閃回數據庫、閃回刪除、閃回查詢。閃回技術相比于數據庫不完全恢復,其特點里速度快,影響層面小。


一、閃回數據庫

  閃回數據庫是把數據庫整體狀態恢復到過去某一時間點或者某一系統更改號(SCN),是實施數據庫不完全恢復的一種快速方式。

1.1使用要求:

1)必須有SYSDBA的權限

2)啟用了recovery area

3)數據庫處于FLASHBACK模式

4)數據庫處于mount狀態


此外,

5)數據庫必須處理歸檔模式;

6)控制文件不能是備份的控制文件或者重建的控制文件;

7)數據庫不包含處于FLASHBACK OFF的表空間。


1.2 語法

聊聊數據庫閃回技術


說明:

FLASHBACK DATABASE:當使用flashback database命令時,數據庫驗證所要求的歸檔日志和聯機重做日志是否可用。如果它們可用,那么它將數據庫中的所有當前聯機數據文件恢復為SCN或此語句中指定的時間。

數據庫中保留的閃回數據量由DB_FLASHBACK_RETENTION_TARGET初始化參數和快速恢復區的大小控制。可以通過查詢V$FLASHBACK_DATABASE_LOG視圖來確定多長時間后可以閃回數據庫。


STANDBY:指定STANDBY以將備用數據庫還原到較早的SCN或時間。如果數據庫不是備用數據庫,則數據庫返回錯誤。如果省略此子句,則數據庫可以是主數據庫或備用數據庫。

TO SCN語句:

 TO SCN將數據庫恢復為其在指定SCN的狀態。

 TO BEFORE SCN將數據庫恢復到緊靠指定SCN之前的系統更改號的狀態。


TO TIMESTAMP語句:

 TO TIMESTAMP:將數據庫恢復為其在指定時間戳的狀態。

 TO BEFORE TIMESTAMP:將數據庫恢復到指定時間戳之前一秒的狀態。


TO RESTORE POINT語句:指定此子句以將數據庫閃回到指定的還原點。 是未啟用閃回數據庫唯一可以使用的語句。

RESETLOGS

將數據庫閃回到剛好在最后一次resetlogs操作(ALTER DATABASE OPEN RESETLOGS)之前。


知道了閃回數據庫的要求以及語法之后,就可以操作數據庫的閃回模式了。(測試環境:ORACLE 11GR2)

1)使用數據庫管理員登錄數據庫

SQL> conn /as sysdba


2)查看數據庫是否啟用閃回模式

 

SQL>  select flashback_on from v$database;
 
FLASHBACK_ON
------------------
NO


數據庫未啟用,則使用如下命令:

ALTER DATABASE FLASHBACK ON; #實際測試過程中,執行該命令時沒有重啟數據庫。



3) 查看是否啟用數據庫閃回區

SQL> show parameter recovery
NAME                      TYPE     VALUE
----------------------------------- ----------- ------------------------------
db_recovery_file_dest          string    /u01/app/oracle/flash_recovery_area
db_recovery_file_dest_size       big integer  3882M
recovery_parallelism           integer     0

#修改方式:

#調整閃回區的大小及位置

#SQL> alter system set db_recovery_file_dest_size=5g scope=spfile;

#設置閃回區位置:

#SQL> alter system set db_recovery_file_dest='/app/flash_recovery_area' scope=spfile;


4) 查看 DB_FLASHBACK_RETENTION_TARGET參數(單位:分鐘)

SQL> show parameter db_flashback_retention_target
 
NAME                      TYPE      VALUE
------------------------------------ ----------- ------------------------------
db_flashback_retention_target      integer    1440

修改方式:

#SQL> alter system set db_flashback_retention_target=7200 scope=spfile;

5)查看是否處于歸檔模式

SQL> archive log list;
Database log mode       Archive Mode
Automatic archival       Enabled
Archive destination       USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     10
Next log sequence to archive   12
Current log sequence       12


已啟用歸檔模式



3)和4)中的參數可以根據實際需要修改

6) 查看V$FLASHBACK_DATABASE_LOG,查看是否有數據生成

SQL> select * from V$FLASHBACK_DATABASE_LOG;
 
OLDEST_FLASHBACK_SCN OLDEST_FLASHBACK_TIME RETENTION_TARGET FLASHBACK_SIZE ESTIMATED_FLASHBACK_SIZE
-------------------- --------------------- ---------------- -------------- ------------------------
1025623              2017/1/13 11:11:05    1440        8192000     0

7)閃回數據庫

創建測試表:

SQL> create table scott.test_1113_1 as select * from v$logfile;
 
Table created
 
SQL> create table scott.test_1113_2 as select * from v$logfile;
 
Table created
 
SQL> select dbms_flashback.get_system_change_number,SCN_TO_TIMESTAMP(dbms_flashback.get_system_change_number)  from dual;  
 
GET_SYSTEM_CHANGE_NUMBER SCN_TO_TIMESTAMP(DBMS_FLASHBAC
------------------------ --------------------------------------------------------------------------------
1026334                  13-1月 -17 11.21.50.000000000 上午

此時的系統更改點是1026334,之后數據庫會恢復到這個點。表scott.test_1113_1和scott.test_1113_2都應該存在。

SQL> drop table scott.test_1113_1;
 
Table dropped
 
SQL> drop table scott.test_1113_2;
 
Table dropped
 
SQL> shutdown abort;
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.
Total System Global Area  776646656 bytes
Fixed Size    2217384 bytes
Variable Size  511707736 bytes
Database Buffers  260046848 bytes
Redo Buffers    2674688 bytes
Database mounted.
SQL> flashback database to scn 1026334;
Flashback complete.
SQL> alter database open resetlogs;
Database altered.
SQL> select count(1) from scott.test_1113_1;
 
  COUNT(1)
----------
   3
 
SQL> select count(1) from scott.test_1113_2;
 
  COUNT(1)
----------
   3

閃回數據庫后,scott.test_1113_1和scott.test_1113_2都存在。


二、閃回表

  使用flashback table 命令,可以將數據庫的表恢復到之前某一個時刻的狀態,至于能恢復到什么時間點,則依賴于回滾段的數據量。flashback table 操作不可回滾。

2.1 使用要求

  具有該表的FLASHBACK權限或者有 FLASHBACK ANY TABLE的權限,此外,還必須有SELECT, INSERT, DELETE, and ALTER的權限。

  使用flashback table的表必須開啟row movement(從回收站閃回的表例外)。

  要將表閃回到還原點,必須具有SELECT ANY DICTIONARY或FLASHBACK ANY TABLE的系統特權或SELECT_CATALOG_ROLE角色。    

2.2 語法

聊聊數據庫閃回技術


  在Oracle閃回表操作期間,Oracle數據庫會在閃回列表中指定的所有表上獲取獨占DML鎖。當這些表恢復到其早期狀態時,這些鎖阻止對表的任何操作。

  閃回表操作在單個事務中執行,而與閃回列表中指定的表數無關。 所有表都恢復到早期狀態,或者它們都不恢復。如果閃回表操作在任何表上失敗,則整個語句將失敗。

  在完成閃回表操作時,表中的數據與早期的表一致。 但是,FLASHBACK TABLE TO SCN或TIMESTAMP不保留rowid,而FLASHBACK TABLE TO BEFORE DROP不會恢復之前引用的約束。

  Oracle數據庫不會將與表關聯的統計信息還原到之前的表單。當前存在的表上的索引將被還原,并反映閃回點處的表的狀態。 如果索引現在存在,但在閃回點尚不存在,則數據庫更新索引以反映閃回點處的表的狀態。 但是,在閃回點和當前時間之間的間隔期間丟棄的索引不會恢復。

schema:表的擁有者

table:指定包含要還原到早期版本的數據的一個或多個表的名稱。

  限制:

  1)閃回表操作對以下類型對象無效:作為集群一部分的表,物化視圖,高級排隊(AQ)表,靜態數據字典表,系統表,遠程表,對象表,嵌套表或單個表 分區或子分區。

  2)以下DDL操作更改表的結構,以便以后無法使用TO SCN或TO TIMESTAMP子句將表閃回到操作之前的某個時間:升級,移動或截斷表; 向表添加約束,向集群添加表; 修改或丟棄柱; 改變列加密密鑰; 添加,刪除,合并,拆分,合并或截斷分區或子分區(除了添加范圍分區)。(upgrading, moving, or truncating a table; adding a constraint to a table, adding a table to a cluster; modifying or dropping a column; changing a column encryption key; adding, dropping, merging, splitting, coalescing, or truncating a partition or subpartition (with the exception of adding a range partition).

TO RESTORE POINT:指定要將表閃回的恢復點。 還原點必須已創建。

ENABLE | DISABLE TRIGGERS:默認關閉觸發器

TO BEFORE DROP:從回收站中還原表。

可以指定表的原始名稱或分配給該對象的系統名稱;

如果存在多個同名表,將還原最晚刪除的表,即后進先出。

RENAME TO:重命名。


2.3 例子

1)創建新的測試表

SQL> create table scott.test_1114_1 as select * from v$logfile;
SQL> select * from scott.test_1114_1;
 
GROUP#     STATUS  TYPE  MEMBER                     IS_RECOVERY_DEST_FILE
---------- ------- ------- ------------------------------------------------- ---------------------
3      ONLINE          /u01/app/oracle/oradata/orcl/redo03.log  NO
2      ONLINE          /u01/app/oracle/oradata/orcl/redo02.log  NO
1      ONLINE          /u01/app/oracle/oradata/orcl/redo01.log  NO

2)獲取當前SCN和時間戳,最后該表數據會恢復到當前的時間點。

SQL> select dbms_flashback.get_system_change_number,SCN_TO_TIMESTAMP(dbms_flashback.get_system_change_number) timestamp  from dual;
 
GET_SYSTEM_CHANGE_NUMBER TIMESTAMP
------------------------ --------------------------------------------------------------------------------
1031289                  14-1月 -17 09.13.59.000000000 上午

3)刪除該表中的記錄

SQL> delete from scott.test_1114_1; 
SQL> select count(1) from scott.test_1114_1;
 
  COUNT(1)
----------
   0

4)閃回表

SQL> alter table scott.test_1114_1 enable row movement;
 
Table altered
SQL> flashback table scott.test_1114_1 to scn 1031289;
 
Done
 
SQL> select * from scott.test_1114_1;
 
GROUP#   STATUS  TYPE  MEMBER                              IS_RECOVERY_DEST_FILE
---------- ------- ------- --------------------------------------- --------------------
3       ONLINE       /u01/app/oracle/oradata/orcl/redo03.log NO
2      ONLINE           /u01/app/oracle/oradata/orcl/redo02.log NO
1      ONLINE           /u01/app/oracle/oradata/orcl/redo01.log NO

表已恢復

5)多次刪除與創建該表

SQL> drop table  scott.test_1114_1;
 
Table dropped
 
SQL> create table scott.test_1114_1 as select * from v$logfile;
 
Table created
 
SQL> drop table  scott.test_1114_1;
 
Table dropped
 
SQL> create table scott.test_1114_1 as select * from v$logfile;
 
Table created
 
SQL> drop table  scott.test_1114_1;
 
Table dropped

6)查看回收站

SQL> select object_name,original_name,droptime from dba_recyclebin;
 
OBJECT_NAME             ORIGINAL_NAME              DROPTIME
------------------------------ -------------------------------- -------------------
BIN$RgTFmsLNhcHgUKjAyX44MA==$0 TEST_1114_1               2017-01-14:09:21:37
BIN$RgTFmsLOhcHgUKjAyX44MA==$0 TEST_1114_1               2017-01-14:09:21:58
BIN$RgTFmsLPhcHgUKjAyX44MA==$0 TEST_1114_1               2017-01-14:09:22:01


7)恢復表

SQL> flashback table scott.test_1114_1 to before drop;
 
Done
 
SQL> select object_name,original_name,droptime from dba_recyclebin;
 
OBJECT_NAME              ORIGINAL_NAME              DROPTIME
------------------------------ -------------------------------- -------------------
BIN$RgTFmsLNhcHgUKjAyX44MA==$0 TEST_1114_1               2017-01-14:09:21:37
BIN$RgTFmsLOhcHgUKjAyX44MA==$0 TEST_1114_1               2017-01-14:09:21:58


最晚被刪除的表被還原。

SQL> flashback table scott.test_1114_1 to before drop rename to test_1114_2;
 
Done
 
SQL> select object_name,original_name,droptime from dba_recyclebin;
 
OBJECT_NAME             ORIGINAL_NAME              DROPTIME
------------------------------ -------------------------------- -------------------
BIN$RgTFmsLNhcHgUKjAyX44MA==$0 TEST_1114_1               2017-01-14:09:21:37

三、閃回查詢

  要使用閃回查詢,必須要有表的查詢權限,以及該表的FLASHBACK 權限或FLASHBACK ANY TABLE的系統權限。

  閃回查詢有兩種,一種是查詢某一時間點的的數據(as of),另一種查詢某一時間段內數據的操作(versions between)。閃回查詢并不會影響到當前表中的數據。

1)閃回時間點查詢

select * from <table_name>  as of  timestamp to_timestamp(timestamp,'yyyy-mm-dd hh34:mi:ss');
select * from <table_name>  as of  scn scn_number;


2) 閃回版本查詢

SELECT versions_startscn, versions_starttime, versions_endscn, versions_endtime, versions_xid, versions_operation, t.*
FROM <table_name> t
VERSIONS BETWEEN TIMESTAMP BeginTimestamp and EndTimestamp;
SELECT versions_startscn, versions_starttime, versions_endscn, versions_endtime, versions_xid, versions_operation, t.*
FROM <table_name> t
VERSIONS BETWEEN scn begin_scn and end_scn;



例子:

1)獲取當前的SCN

SQL> select dbms_flashback.get_system_change_number,SCN_TO_TIMESTAMP(dbms_flashback.get_system_change_number) timestamp  from dual;
 
GET_SYSTEM_CHANGE_NUMBER TIMESTAMP
------------------------ --------------------------------------------------------------------------------
1032595                  14-1月 -17 09.47.57.000000000 上午

2)增加test_1114_1表中的數據

SQL> insert into scott.test_1114_1 select * from scott.test_1114_1;
3 rows inserted

3)閃回時間點查詢

SQL> select * from scott.test_1114_1 as of scn 1032595;
 
GROUP#     STATUS  TYPE    MEMBER                      IS_RECOVERY_DEST_FILE
---------- ------- ------- ----------------------------------------- ---------------------
3       ONLINE          /u01/app/oracle/oradata/orcl/redo03.log  NO
2       ONLINE          /u01/app/oracle/oradata/orcl/redo02.log  NO
1       ONLINE          /u01/app/oracle/oradata/orcl/redo01.log  NO
 
SQL> select * from scott.test_1114_1;
 
GROUP#     STATUS  TYPE    MEMBER                      IS_RECOVERY_DEST_FILE
---------- ------- ------- ----------------------------------------- ---------------------
3       ONLINE          /u01/app/oracle/oradata/orcl/redo03.log  NO
2       ONLINE          /u01/app/oracle/oradata/orcl/redo02.log  NO
1       ONLINE          /u01/app/oracle/oradata/orcl/redo01.log  NO
3       ONLINE          /u01/app/oracle/oradata/orcl/redo03.log  NO
2       ONLINE          /u01/app/oracle/oradata/orcl/redo02.log  NO
1       ONLINE          /u01/app/oracle/oradata/orcl/redo01.log  NO
 
6 rows selected

4)閃回版本查詢

SQL> select dbms_flashback.get_system_change_number,SCN_TO_TIMESTAMP(dbms_flashback.get_system_change_number) timestamp  from dual;
 
GET_SYSTEM_CHANGE_NUMBER  TIMESTAMP
------------------------  -------------------------------------------------------------------------------
1032939                   14-1月 -17 09.52.42.000000000 上午
SQL> SELECT versions_startscn, versions_starttime, versions_endscn, versions_endtime, versions_xid, versions_operation, group#,status,type,member ,is_recovery_dest_file
  2  FROM scott.test_1114_1
  3  VERSIONS BETWEEN scn 1032595 and  1032939;
 
VERSIONS_STARTSCN VERSIONS_STARTTIME      VERSIONS_ENDSCN VERSIONS_ENDTIME  VERSIONS_XID   VERSIONS_OPERATION  GROUP#     STATUS  TYPE   MEMBER                     IS_RECOVERY_DEST_FILE
----------------- ----------------------- --------------- ----------------- ---------------- ------------------ ---------- ------- ------- ------------------------------------- ---------------------
                                                                           3       ONLINE         /u01/app/oracle/oradata/orcl/redo03.log    NO
                                                                           2       ONLINE         /u01/app/oracle/oradata/orcl/redo02.log    NO
                                                                           1       ONLINE         /u01/app/oracle/oradata/orcl/redo01.log    NO
1032882          14-1月 -17 09.50.06 上午                       030001002F030000 I             3       ONLINE         /u01/app/oracle/oradata/orcl/redo03.log    NO
1032882          14-1月 -17 09.50.06 上午                       030001002F030000 I             2       ONLINE         /u01/app/oracle/oradata/orcl/redo02.log    NO
1032882          14-1月 -17 09.50.06 上午                       030001002F030000 I             1       ONLINE         /u01/app/oracle/oradata/orcl/redo01.log    NO
 
6 rows selected

閃回版本查詢查到了SCN為1032595表的數據狀態,又查到了3條insert的記錄。


四、總結

  到目前為止,所接觸到的關于閃回的技術就是這些。分別是閃回數據庫[1種],閃回表[2種方式],閃回查詢[2種方式]。

參考資料:

1.《Database SQL Language Reference》.


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

嵊泗县| 镇远县| 玉山县| 环江| 沧源| 锡林浩特市| 嘉祥县| 长宁区| 德庆县| 民权县| 霍邱县| 沙湾县| 佛冈县| 双牌县| 长子县| 攀枝花市| 财经| 谷城县| 库尔勒市| 黎川县| 麻江县| 高碑店市| 鸡泽县| 郸城县| 休宁县| 来凤县| 息烽县| 手游| 鞍山市| 鄂托克前旗| 习水县| 永德县| 阿图什市| 玉田县| 叶城县| 吉林省| 桂东县| 宁阳县| 胶南市| 凌源市| 家居|