Oracle9i 自己管理undo表空間

2021-03-31 08:56:58 字數 4669 閱讀 8737

-- 建立undo表空間

create undo tablespace undo_tbs datafile 『』 size 500m;

-- 切換undo表空間

alter system set undo_tablespace = undo_tbs scope = both;

求教:關於估算undo表空間》

在資料上看到估算undo表空間的大小的指令碼如下:

select (ur * (ups * dbs)) + (dbs * 24) as "bytes"

from (select value as ur

from v$parameter

where name = 'undo_retention'),

(select (sum(undoblks)/sum

(((end_time-begin_time)*86400))) as ups

from v$undostat),

(select value as dbs

from v$parameter

where name = 'db_block_size');

oracle9i資料庫打破了時間障礙,提供不使用回滾**返)段而實現資料恢復的功能。

oracle9i資料庫乙個曾被重點預告的特點是提供稱之為"閃回"式查詢的能力。這種查詢可以在資料庫中查詢過去某些時間的資料。閃回式查詢是使用相同的"撤消(undo)"資料來實現的。這種"撤消(undo)"資料已被oracle9i資料庫維護,以提供事務處理支援和保證多使用者讀取資料的一致性。

為了進行閃回式查詢,需要使用自動撤消管理。也就是說必須把資料庫設定為將回滾資料寫入"撤消(undo)"表空間,而不是寫入回滾段。oracle9i資料庫自動管理"撤消(undo)"表空間,所以你不必再為建立回滾段和為其設定合適的大小而操心。需要做的全部工作就是確定所需"撤消(undo)"空間的總量,並據此來設定"撤消(undo)"表空間的大小。

web 定位器 jonathan gennick在

.gennick.***上提供了有關資訊和鏈結。

關於閃回式查詢的更多資訊及例項,請參見

/oramag/oracle/jan02/flashback.html?_template=/o***/o***_item_templates/print.

otn中關於pl/sql的更多資訊,請參見:

otn.oracle.***/tech/pl_sql/

購買oracle9i

/oramag/store.html?_template=/o***/o***_item_templates/print

關於pl/sql的多**報道

/oramag/ebusiness.html?_template=/o***/o***_item_templates/print

oracle.***上關於 pl/sql的前沿技術

/database/

oracle publishing發表的關於pl/sql的文章

/oramag/oracle/01-jul/o41xml.html

當執行dml語句時,oracle9i資料庫將"撤消(undo)"資訊寫入"撤消(undo)"表空間。該"撤消(undo)"資訊將保留一段時間,時間長短由使用者指定。這種保留保證了閃回式查詢機制的實現。回滾段不支援保留時間,這就是為什麼在使用閃回查詢前要將"撤消(undo)"資訊寫入"撤消(undo)"表空間。

自動撤消管理是oracle9i資料庫的新特性。切換到自動撤消管理狀態的過程相當簡單,首先建立乙個"撤消(undo)"表空間:

create undo    tablespace undodatadatafile   '/oradata/undodata01.dbf'size 40m;
建立了"撤消(undo)"表空間之後,在使用前,還需要對資料庫例項進行一些設定:指定保留時間,將資料庫例項切換到自動撤消管理模式--通過設定三個初始化引數來完成,如下例所示:

undo_management = autoundo_retention = 1800undo_tablespace = undodata
undo_retention引數指明來自提交的事務處理的撤消資訊在允許改寫之前需保留的時間。指定保留時間以秒為單位。預設值為900秒(15分),本文設定為1800秒(30分)。

undo_retention 和 undo_tablespace是兩個動態引數,而undo_management則不然。所以,為使切換到自動撤消管理的設定生效,需要關閉並重新啟動資料庫例項。

正確是設定"撤消(undo)"表空間的大小非常重要。oracle9i資料庫中的新特性--v$undostat檢視對此很有幫助。v$undostat每10分鐘返回一行過去24小時保留的資料。從undoblks列可以知道在每個時間間隔內,"撤銷"資料所占用的資料塊的數目。我們來看一下"撤消(undo)"率和乙個因數:希望"撤消(undo)"資料保留的時間,並增加乙個足夠大的安全係數。例如,在我的測試例項中,在任乙個10分鐘內,"撤消(undo)"耗費最大為189塊。考慮到三個10分鐘間隔即為保留時間30分鐘,可知,我所需要的"撤消(undo)"表空間如下所示:

189 * 8k (block size) * 3 (10-minute 	intervals) = 4,644,864 bytes
它遠低於我在建立"撤消(undo)"表空間時所分配的40mb。

使用oracle9i資料庫閃回式查詢的另乙個必備條件是你必須擁有對dbms_flashback包的execute訪問授權。該軟體包為sys所有。以sys登入後,按如下方式授權:

grant execute on dbms_flashback   to gennick;
為了進行閃回式查詢,需將你的查詢作為引數,呼叫dbms_flashback軟體包的兩個過程。從過程中返回時,可依據指定的date/time值返回,也可按照系統改變量(s**)返回。為指定date/time值,可使用dbms_flashback.enable_at_time,如清單1所示。下一節中的清單2 將說明如何進行基於s**的閃回式查詢。

如清單1所示,執行於dbms_flashback.enable_at_time和dbms_flashback.disable的查詢返回過去的10分鐘的正確結果。啟動閃回式查詢模式後,只能執行select語句。在使用dbms_flashback.disable退出閃回式查詢模式前,不能執行insert, update和delete語句。

清單1中所用技巧的用途很有限。它允許檢視過去的資料,卻不能將這些資料恢復為當前資料。而閃回式查詢的真正強大之處正在於它能在過去的資料與當前資料之間建立關係,或者將過去的資料再次恢復成為當前資料。

同時處理過去資料與當前資料的關鍵是游標(cursors)。在閃回查詢狀態下開啟乙個游標之後,即使呼叫了dbms_flashback.disable,該游標也仍處於該狀態。這樣,要將過去的資料恢復為當前資料,應該啟動閃回式查詢模式,開啟乙個游標以返回想要處理的資料,然後執行閃回查詢模式。游標會繼續返回過去的資料,同時,現在建立的dml語句也會影響到當前資料。

清單2 中給出了乙個使用閃回式查詢恢復被意外刪除的資料的示例。在該例中,首先記錄當前的s**(可從dbms_flashback.get _system_ change_number得到)。s**是返回到撤消誤刪除(delete)時的基礎。注意過程性pl/sql的用法。這種情況下,必須使用過程編碼。因為游標必須在閃回式查詢模式下開啟,而必須在結束閃回式查詢模式後才能執行dml語句以恢復丟失的資料。不能通過任何型別的insert...select from語句來恢復丟失的資料。

閃回式查詢的結果本質上總是建立在s**的基礎上。oracle9i資料庫每5分鐘跟蹤一次s**,並記錄最近5天的操作資訊。enable_at_time利用該記錄檢視與你所指定時間相關的s**,並將此s**作為所建立的閃回查詢的基礎。這裡有兩種情況。一種情況是,如果希望返回到五天以前的狀態,則必須確定並使用s**。另一種情況是,你傳送給enable_at_time的時間值在最近的五天之內。這一情況如清單3所示。請注意:儘管我返回到下午2:37--該時間晚於我刪除表中全部資料行的操作,但閃回查詢仍然顯示了乙個不為零的行數。有效閃回時間在早於我所指定的時間之前就結束了。如果希望在返回時得到精確資料,就需要使s**。

清單4 說明sysdate函式總是返回當前的系統日期,即使用於閃回式查詢也是如此。使用sysdate時,查詢的結果有多種。如果有乙個返回今天執行的全部事務處理的查詢,而該查詢使用sysdate來確定"今天(today)",那麼,如果你閃回到了昨天,則會得到什麼樣的結果呢?這就需要考慮在所執行的所有閃回式查詢中使用sysdate的影響。

與sysdate函式相似,不管是否處於閃回查詢模式,dbms_flashback.get_system_change_number函式總是返回當前的s**。

只能在事務處理開始時進入閃回式查詢模式。如果已經使用dml語句來更改資料,則必須將其執行***mit後才能進行閃回查詢。另外,如果對錶結構進行了修改,那麼返回的時間不能早於最後一次更改的時間。這是因為閃回查詢使用當前資料字典中的資料。即使只是對某列的資料型別進行簡單的更改也會限制閃回式查詢的能力。

很顯然,閃回查詢對於查詢最近的資料是非常有用的。然而,在某些應用軟體中(如對醫學記錄進行跟蹤的軟體),就需要保留所有的歷史資料。這些應用軟體就必須依靠觸發器和審核表(或類似的機制)來跟蹤過去所有的更改。

閃回式查詢能否使使用者自己恢復丟失或損壞的資料,而不必在半夜去喚醒dba?答案是肯定的。但它不會象安裝oracle9i資料庫或授權訪問dbms_flashback那樣容易。為了使這一特性對終端使用者真正有用,程式設計師應該特意編寫帶有閃回式查詢功能的軟體。

Oracle9i管理的使用者

system 使用者 1.使用者密碼 system 使用者預設的密碼為 manager 2.使用者許可權 system 使用者具有 sysdba 許可權,即資料庫管理員許可權,包括。開啟資料庫伺服器 關閉資料庫伺服器 備份資料庫 恢復資料庫 日誌歸檔 會話限制 管理功能 建立資料庫 sys 使用者 ...

解除安裝Oracle 9i

1 停止所有oracle服務 2 刪除登錄檔中的所有關於oracle項 1 在hkey local machine software下,刪除oracle目錄 2 在hkey local machine system controlset001 services下,刪除所有oracle項 3 在hke...

oracle9i解除安裝

今天裝了oracle 9i,後來重灌遇到問題因為解除安裝未乾淨。幾經周折終於成功,現將解除安裝步驟供以後參考 1 停止服務 開啟 服務 然後停止所有oracle服務 2 刪除程式 3 刪除登錄檔中的所有關於oracle項 1 在hkey local machine software下,刪除oracl...