国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

在Flashback數據庫上獲得較高可用性

2024-07-21 02:32:55
字體:
來源:轉載
供稿:網友
      簡介   Flashback數據庫是一種時點(PIT)數據庫恢復的方式。這種不完全的恢復策略可以用于恢復由于人為錯誤導致邏輯損壞的數據庫。在10g中引入之后,它的設計目標就是以縮減恢復時間而獲得最大的可用性。這篇文章將會探索Flashback數據庫,將其與傳統的恢復方法相比較,并且演示一下如何配置和執行重現恢復。  傳統恢復vs.重現數據庫  導致停機的第一個原因就是人為錯誤導致的邏輯損壞,這一點已經被廣泛承認。關于邏輯損壞的例子,從用戶不正確的更新數據和截取表,到批處理任務錯誤運行2次或者打亂順序,比比皆是。結果都是相同的——數據庫損壞,并且范圍廣闊且難以辨認。Oracle通過了兩種策略來將數據庫返回到先前的某個時點上:傳統恢復和重現數據庫。  不完全的恢復是數據庫恢復到先前某個狀態的恢復。這個過程有兩個步驟:重新存儲數據,并向前恢復事務活動到某個你想要的時間。傳統恢復和重現數據庫之間的主要區別就是,傳統恢復從重新存儲所有的數據文件開始,然后才恢復到某個想要的恢復時間,而重現數據庫則是在損壞之后通過重新存儲被改變的塊來向后操作。從這個角度考慮問題的話,讓我們想想在一個10TB的數據庫上,有1MB的數據損壞了。傳統的恢復從開始重新存儲10TB的應用程序數據開始,而重現數據庫則是取回這1MB的應用程序數據,從而達到損壞前的那個點。現在我們分別看看每一種策略。  傳統恢復  在Oracle 10g之前,將由于人為錯誤導致問題的數據庫恢復到先前某個時點的唯一選項就是傳統恢復。這個策略包括了從備份中取出并重新存儲所有的數據庫數據文件,然后再執行向前恢復到某個想要的時間點。媒體恢復可以基于服務器(RMAN),也可以基于用戶(操作系統工具)。  下圖演示了這個復雜的、成本高昂的、效率極低的多步驟恢復策略。       在Flashback數據庫上獲得較高可用性(圖一)  現在我們看一下用戶執行了SQL并且損壞了數據庫的情況。用戶通知了命令中心并且報告了錯誤。系統分析師通過與公司不同部門的另外一些人協商治理這次事件。恢復通過從備份中重新存儲所有的數據文件并且向前回滾redo日志到希望的時間點而完成。恢復時間與數據庫的規模成正比,而不是需要恢復的更改的數量。這就意味著恢復時間(MTTR)實際上隨著數據庫的規模增長而不斷增加。  重現數據庫  在Oracle 10g中,一項新的重現技術特性,稱為Flashback Database(重現數據庫)的,作為傳統恢復的替代品引入了。重現數據庫可以讓你快速恢復整個數據庫到先前的某個時間點,而不需要從備份中重新存儲數據庫。在數據庫中經常被描述為倒轉按鈕,它只是將那些被修改的數據塊恢復到你希望的恢復時間之前。然后應用Redo更改記錄來達到希望的恢復時間點。這個被修改的數據塊就叫做重現日志。  重現數據庫提供了相對于傳統數據庫非常明顯的優勢。對于分析型數據庫則沒有這么明顯的優勢。在數據倉庫中,塊的操作通常是以不記錄日志的模式執行的。在重現數據庫中,只要數據庫運行的是文檔日志模式,它就可以返回到塊操作之前的某個狀態,因為被修改的塊可以通過恢復而撤銷執行的操作。  注重:雖然重現數據庫是集成到數據庫中的,但是它在Oracle的 EXPRess Edition (XE)中是不可用的。      在Flashback數據庫上獲得較高可用性(圖二)  這里我們看一下用戶執行了SQL并且損壞了數據庫的情況。用戶通知了應用程序數據庫治理員,他執行了重現數據庫命令,數據庫自動恢復到損壞之前的某個點。重現數據庫很快,使因為它只針對被修改的數據進行操作。重現的時間與犯錯誤的數量有關,而與數據庫的規模無關。   配置重現數據庫  以下的例子演示了命令行配置。這也可以用企業治理器來完成。  在我們配置重現數據庫之前,我們需要照顧以下一些先決條件。  Flash Recovery Area   首先,我們需要配置一個Flash Recovery Area (FRA)。在10g中,這是個新東西,FRA只不過是一個恢復相關文件的磁盤定位。對于重現數據庫,一個新的后臺進程,名為Recovery Writer (RVWR),在來自SGA的數據庫重現緩存的映像之前,階段性地寫入磁盤,作為FRA中的重現日志。重現日志是在FRA中由Oracle數據庫自動治理的。
  重現日志的成本是以空間和性能來衡量的。空間是數據庫寫密度的一個因素。一個24小時運行的,以5%的數據塊寫入作為重現日志的方式必然會導致磁盤整體空間的5%的增長。因為塊是以規律的間隔寫入的,而不是事務的一部分,所以對性能的影響是可以忽略不計的。  要配置FRA,你需要設置如下的初始化參數: alter system set db_recovery_file_dest=
  'C:/oracle/prodUCt/10.2.0/flash_recovery_area' scope=both;
alter system set db_recovery_file_dest_size = 10G scope=both;  存檔  接下來,我們需要配置存檔。再一次,我們需要使用FRA作為我們的文檔日志目的地。與傳統恢復類似,重現數據庫需要存檔以向前恢復提交的事務,在重現日志重新存儲了希望時間之前的時點之后。  要最小化配置存檔,執行如下的命令,按照順序: SQL> startup mount
ORACLE instance started.
.
.
.
Database mounted.SQL> alter database archivelog;Database altered.SQL> alter database open;Database altered.SQL> archive log listDatabase log mode              Archive Mode
Automatic archival             Enabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     2
Next log sequence to archive   4
Current log sequence           4  重現數據庫  配置了這些先決條件之后,我們預備好配置重現數據庫了。  首先,我們需要設置重現保持目標。這個初始化參數,以分鐘來計算,代表我們可以把數據庫返回到多長時間之前。它的值決定了FRA中重現日志的數量和時間段。下面我們的例子將其設置為24小時。要理解這個保持時間段并不是保證是非常重要的。假如FRA需要空間,重現日志將會自動刪除目標保持時間點之前的記錄。稍后我們會看到,我們保證重現日志的方式在FRA中進行維護。有了保持時間段設置,重現數據庫可以激活。 SQL> startup mount;
ORACLE instance started.
.
.
.
Database mounted.SQL> alter system set db_flashback_retention_target = 1440 scope=both;System altered.
SQL> alter database flashback on;Database altered.SQL> alter database open;Database altered.SQL> select flashback_on from v$database;FLASHBACK_ON
------------------
YES   重現數據庫示例  下面的例子用于演示,它想要描述單個表之外的損壞。 45. 監控FRA
46. select name,space_limit,space_used, space_reclaimable from v$recovery_file_dest;
47. 
48. NAME                                         SPACE_LIMIT SPACE_USED SPACE_RECLAIMABLE
49. -------------------------------------------- ----------- ---------- -----------------
50. C:/oracle/product/10.2.0/flash_recovery_area 2147483648  166646272                 0
51. 
52. 
53. select * from v$flash_recovery_area_usage;
54. 
55. FILE_TYPE    PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES
56. ------------ ------------------ ------------------------- ---------------
57. CONTROLFILE                   0                         0               0
58. ONLINELOG                     0                         0               0
59. ARCHIVELOG                 7.38                         0              29
60. BACKUPPIECE                   0                         0               0
61. IMAGECOPY                     0                         0               0
62. FLASHBACKLOG                .38                         0               1
63. 在表的映像之前顯示
64. select c1, ora_rowscn from my_table;
65. 
66.         C1 ORA_ROWSCN
67. ---------- ----------
68.          1    1320954
69. 判定數據庫的時間點
  在10gR1中,你有兩種選擇來捕捉你的數據庫的PIT:時間戳和系統修改號碼(SCN)。這個信息是作為重現操作的一部分要求的。 捕捉到提交的SCN或者稍后的非常重要,而不是數據治理語言操作。Oracle提供了一種比較笨拙的方式來捕捉提交的SCN,通過userenv('commitscn')函數。我們的示例在發生損壞的數據治理語言操作之前捕捉到了這個信息。 select current_scn from v$database;CURRENT_SCN
-----------
    1321065
or
select to_char(sysdate,'YYYY-MM-DD:HH24:MI:SS')
  "Recover Time" from v$database;Recover Time
-------------------
2006-09-23:20:13:48  在10gR2中,Oracle通過重新存儲點簡化了這個過程。一個重新存儲點就是一個用戶定義的與數據庫PIT相關連的名字,可以在時間戳或者SCN中使用。可以認為重新存儲點是一個redo歷史的參考標記。重新存儲點保留在控制文件中,直到重新存儲點被刪除或者重現日志被刪除。第二個例子保證了重現數據庫對于恢復是可用的。 create restore point my_restore_point;Operation 206 succeeded.  或者  創建重新存儲點my_restrore_point來保證重現數據庫;  注重:重新存儲點并不會保證所有的事務都在那個時間點上提交。它不應該與DB2的關系型數據庫治理系統中的靜默點混淆了。  模擬數據庫損壞 70. 模擬數據庫損壞
71. insert into my_table values (2);
72. 
73. 1 row created.
74. 
75. commit;
76. 
77. 提交完成
78. 判定數據庫是否由于人為錯誤導致邏輯損壞。
79. select c1, ora_rowscn from my_table;
80. 
81.         C1 ORA_ROWSCN
82. ---------- ----------
83.          1    1320954
84.          2    1321231   注重:在默認情況下,Oracle在時鐘級別上檢索SCN。當然,時鐘當中的所有行都有一樣的SCN。激活行級別的SCN檢索,可以在CREATE TABLE命令中使用ROWDEPENDENCIES要害字。  檢驗重現數據庫是可能的。 判定你可以重現的最早的時間。
SELECT OLDEST_FLASHBACK_SCN
      ,to_char(OLDEST_FLASHBACK_TIME,'YYYY-MM-DD:HH24:MI:SS')
      "OLDEST_FLASHBACK_TIME"
  FROM V$FLASHBACK_DATABASE_LOG;OLDEST_FLASHBACK_SCN OLDEST_FLASHBACK_TI
-------------------- -------------------
             1319629 2006-09-23:19:51:56
判定你是否有重新存儲點。
select name, scn, time from v$restore_point;NAME                    SCN TIME
---------------- ---------- ----------------------------
MY_RESTORE_POINT 1321136 23-SEP-06 08.16.24.000000000 PM
這里是一些你感愛好的視圖  重現數據庫  你可以在SQL*Plus 或者 RMAN中執行重現數據庫。重現數據庫可以是基于修改和重新存儲點的時間。RMAN提供了額外的基于選項的日志順序。  使用先前創建的重新存儲點來重現數據庫。 SQL> shutdown immediate;Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.
.
.
.
Database mounted.SQL> flashback database to restore point my_restore_point;Flashback complete.
在警告日志中檢查重現數據庫消息
.
.
.
Sat Sep 23 20:38:11 2006
flashback database to restore point my_restore_point
Sat Sep 23 20:38:12 2006
Flashback Restore Start
Flashback Restore Complete
Flashback Media Recovery Start
 parallel recovery started with 2 processes
Sat Sep 23 20:38:14 2006
Recovery of Online Redo Log: Thread 1 Group 2 Seq 33 Reading mem 0
  Mem# 0 errs 0:
C:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO02.LOG
Sat Sep 23 20:38:16 2006
Incomplete Recovery applied until change 1321137
Flashback Media Recovery Complete
Completed: flashback database to restore point my_restore_point
  驗證你的數據庫恢復到你想要的狀態  假如你不滿足,你可以再次重現,把數據庫向前恢復,直到或者執行了完全恢復:recover database.  注重:重現數據庫可以通過RESETLOGS執行。 SQL> alter database open read only;Database altered.SQL> select c1, ora_rowscn from my_table;        C1 ORA_ROWSCN
---------- ----------
         1    1321002  為一般用途打開數據庫  對我們的恢復滿足了之后,為了一般用途打開數據庫。 SQL> shutdown;Database closed.
Database dismounted.
ORACLE instance shut down.SQL> startup mount;ORACLE instance started.
.
.
.
Database mounted.SQL> alter database open resetlogs;Database altered.  結論  重現數據庫將會成為我最喜歡的Oracle10g特性之一。無論你是否糾正了用戶的錯誤,只是看看先前的數據庫狀態,或者在衰退測試之后回到測試環境中,這個特性都是減少恢復時間的最好策略。我們看到這項技術很輕易使用,比傳統的恢復更快,并且最好的是,它是免費的!我希望你也會認為重現數據庫是可用性體系結構中的一項主要組件。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 台中县| 阿拉尔市| 潢川县| 进贤县| 南陵县| 陈巴尔虎旗| 滕州市| 颍上县| 饶平县| 沾益县| 英吉沙县| 绥阳县| 九寨沟县| 鄂伦春自治旗| 邵阳市| 蒲城县| 华蓥市| 新安县| 天长市| 新乐市| 白水县| 德格县| 尤溪县| 榆中县| 岳西县| 延川县| 丰原市| 内黄县| 烟台市| 南昌县| 鄂尔多斯市| 潜山县| 胶州市| 阳江市| 同德县| 稻城县| 博野县| 贵港市| 林西县| 娄底市| 祁连县|