oracle如何設(shè)置回滾 oracle表結(jié)構(gòu)修改后如何回滾

如何使用Oracle回滾段

Oracle缺省用的是專用服務(wù)器模式,也就是說一個用戶連接進(jìn)程對應(yīng)一個服務(wù)器的進(jìn)程.

創(chuàng)新互聯(lián)建站主營西平網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,重慶APP軟件開發(fā),西平h5小程序制作搭建,西平網(wǎng)站營銷推廣歡迎西平等地區(qū)企業(yè)咨詢

記得某大醫(yī)院剛啟用的時候,我們曾經(jīng)試過MTS.因為聽說MTS在不增加內(nèi)存和CPU的情況下連接更多的客戶端,結(jié)果并不是我們預(yù)期的那樣.

因為我們對MTS不了解,并不是它有問題,而是它不是用來在這種情況下做這件事的.

oracle 提交之后怎么回滾

execute執(zhí)行后

可以回滾

commit提交后

不可以回滾

其實Oracle提交數(shù)據(jù)是分兩步操作的,第一步execute執(zhí)行,第二步commit提交。對應(yīng)的PL\SQL也是要先點execute執(zhí)行,執(zhí)行后再點commit提交。

但是

commit提交后

可以用閃回查詢恢復(fù)原來的數(shù)據(jù)

因為oracle會將近期的數(shù)據(jù)保存到快照中

如:

SELECT

*

FROM

TABLE_1

AS

OF

TIMESTAMP

TO_TIMESTAMP('20080606

20:00:00','YYYYMMDD

HH24:MI:SS');

這里'20080606

20:00:00'就是你想恢復(fù)數(shù)據(jù)到哪個時間狀態(tài)

TABLE_1是數(shù)據(jù)庫的表名

這樣查詢到的數(shù)據(jù)就是執(zhí)行更新操作之前的數(shù)據(jù)

oracle 提交數(shù)據(jù),怎么回滾

execute執(zhí)行后 可以回滾

commit提交后 不可以回滾

其實Oracle提交數(shù)據(jù)是分兩步操作的,第一步execute執(zhí)行,第二步commit提交。對應(yīng)的PL\SQL也是要先點execute執(zhí)行,執(zhí)行后再點commit提交。

但是 commit提交后 可以用閃回查詢恢復(fù)原來的數(shù)據(jù) 因為oracle會將近期的數(shù)據(jù)保存到快照中 如:

SELECT * FROM TABLE_1 AS OF TIMESTAMP TO_TIMESTAMP('20080606 20:00:00','YYYYMMDD HH24:MI:SS');

這里'20080606 20:00:00'就是你想恢復(fù)數(shù)據(jù)到哪個時間狀態(tài) TABLE_1是數(shù)據(jù)庫的表名 這樣查詢到的數(shù)據(jù)就是執(zhí)行更新操作之前的數(shù)據(jù)

Oracle回滾段管理

回滾段管理一直是ORACLE數(shù)據(jù)庫管理的一個難題 本文通過實例介紹ORACLE回滾段的概念 用法和規(guī)劃及問題的解決 回滾段概述回滾段用于存放數(shù)據(jù)修改之前的值(包括數(shù)據(jù)修改之前的位置和值) 回滾段的頭部包含正在使用的該回滾段事務(wù)的信息 一個事務(wù)只能使用一個回滾段來存放它的回滾信息 而一個回滾段可以存放多個事務(wù)的回滾信息 回滾段的作用事務(wù)回滾 當(dāng)事務(wù)修改表中數(shù)據(jù)的時候 該數(shù)據(jù)修改前的值(即前影像)會存放在回滾段中 當(dāng)用戶回滾事務(wù)(ROLLBACK)時 ORACLE將會利用回滾段中的數(shù)據(jù)前影像來將修改的數(shù)據(jù)恢復(fù)到原來的值 事務(wù)恢復(fù) 當(dāng)事務(wù)正在處理的時候 例程失敗 回滾段的信息保存在重做日志文件中 ORACLE將在下次打開數(shù)據(jù)庫時利用回滾來恢復(fù)未提交的數(shù)據(jù) 讀一致性 當(dāng)一個會話正在修改數(shù)據(jù)時 其他的會話將看不到該會話未提交的修改 而且 當(dāng)一個語句正在執(zhí)行時 該語句將看不到從該語句開始執(zhí)行后的未提交的修改(語句級讀一致性) 當(dāng)ORACLE執(zhí)行SELECT語句時 ORACLE依照當(dāng)前的系統(tǒng)改變號(SYSTEM CHANGE NUMBER SCN)來保證任何前于當(dāng)前SCN的未提交的改變不被該語句處理 可以想象 當(dāng)一個長時間的查詢正在執(zhí)行時 若其他會話改變了該查詢要查詢的某個數(shù)據(jù)塊 ORACLE將利用回滾段的數(shù)據(jù)前影像來構(gòu)造一個讀一致性視圖 事務(wù)級的讀一致性O(shè)RACLE一般提供SQL語句級(SQL STATEMENT LEVEL)的讀一致性 可以用以下語句來實現(xiàn)事務(wù)級的讀一致性 SET TRANSACTION READ ONLY 或 SET TANNSACTION SERIALIZABLE 以上兩個語句都將在事務(wù)開始后提供讀一致性 需要注意的是 使用第二個語句對數(shù)據(jù)庫的并發(fā)性和性能將帶來影響 回滾段的種類系統(tǒng)回滾段 當(dāng)數(shù)據(jù)庫創(chuàng)建后 將自動創(chuàng)建一個系統(tǒng)回滾段 該回滾段只用于存放系統(tǒng)表空間中對象的前影像 非系統(tǒng)回滾段 擁有多個表空間的數(shù)據(jù)庫至少應(yīng)該有一個非系統(tǒng)回滾段 用于存放非系統(tǒng)表空間中對象的數(shù)據(jù)前影像 非系統(tǒng)回滾段又分為私有回滾段和公有回滾段 私有回滾段應(yīng)在參數(shù)文件的ROLLBACK SEGMENTS參數(shù)中列出 以便例程啟動時自動使其在線(ONLINE) 公有回滾段一般在OPS(ORACLE并行服務(wù)器)中出現(xiàn) 將在例程啟動時自動在線 DEFERED回滾段 該回滾段在表空間離線(OFFLINE)時由系統(tǒng)自動創(chuàng)建 當(dāng)表空間再次在線(ONLINE)時由系統(tǒng)自動刪除 用于存放表空間離線時產(chǎn)生的回滾信息 回滾段的使用分配回滾段 當(dāng)事務(wù)開始時 ORACLE將為該事務(wù)分配回滾段 并將擁有最少事務(wù)的回滾段分配給該事務(wù) 事務(wù)可以用以下語句申請指定的回滾段 SET TRANSTRACTION USE ROLLBACK SEGMENT rollback_segment事務(wù)將以順序 循環(huán)的方式使用回滾段的區(qū)(EXTENTS) 當(dāng)當(dāng)前區(qū)用滿后移到下一個區(qū) 幾個事務(wù)可以寫在回滾段的同一個區(qū) 但每個回滾段的塊只能包含一個事務(wù)的信息 例如(兩個事務(wù)使用同一個回滾段 該回滾段有四個區(qū)) 事務(wù)在進(jìn)行中 它們正在使用回滾段的第三個區(qū) 當(dāng)兩個事務(wù)產(chǎn)生更多的回滾信息 它們將繼續(xù)使用第三個區(qū) 當(dāng)?shù)谌齻€區(qū)滿后 事務(wù)將寫到第四個區(qū) 當(dāng)事務(wù)開始寫到一個新的區(qū)時 稱為翻轉(zhuǎn)(WRAP) 當(dāng)?shù)谒膫€區(qū)用滿時 如果第一個區(qū)是空閑或非活動(使用該區(qū)的所有事務(wù)完成而沒有活動的事務(wù))的 事務(wù)將接著使用第一個區(qū) 回滾段的擴(kuò)張(EXTEND)當(dāng)當(dāng)前回滾段區(qū)的所有塊用完而事務(wù)還需要更多的回滾空間時 回滾段的指針將移到下一個區(qū) 當(dāng)最后一個區(qū)用完 指針將移到第一個區(qū)的前面 回滾段指針移到下一個區(qū)的前提是下一個區(qū)沒有活動的事務(wù) 同時指針不能跨區(qū) 當(dāng)下一個區(qū)正在使用時 事務(wù)將為回滾段分配一個新的區(qū) 這種分配稱為回滾段的擴(kuò)展 回滾段將一直擴(kuò)展到該回滾段區(qū)的個數(shù)到達(dá)回滾段的參數(shù)MAXEXTENTS的值時為止 回滾段的回收和OPTIMAL參數(shù)OPTIMAL參數(shù)指明回滾段空閑時收縮到的位置 指明回滾段的OPTIMAL參數(shù)可以減少回滾段空間的浪費 創(chuàng)建回滾段語法 CREATE [PUBLIC] ROLLBACK SEGMENT rollback_segment [TABLESPACE tablespace] [STORAGE ([INITIAL integer[K|M]] [NEXT integer[K|M]] [MINEXTENTS integer] [MAXTENTS {integer|UNLIMITED}] [OPTIMAL {integer[K|M]|NULL}]) ]注 回滾段可以在創(chuàng)建時指明PRIVATE或PUBLIC 一旦創(chuàng)建將不能修改 MINEXTENTS 必須大于等于 PCTINCREASE必須是 OPTIMAL如果要指定 必須大于等于回滾段的初始大?。ㄓ蒑INEXTENTS指定)建議 一般情況下 INITIAL=NEXT設(shè)置OPTIMAL參數(shù)來節(jié)約空間的使用不要設(shè)置MAXEXTENTS為UNLIMITED回滾段應(yīng)創(chuàng)建在一個特定的回滾段表空間內(nèi)例 CREATE ROLLBACK SEGMENT rbs TABLESPACE rbs STORAGE ( INITIAL K NEXT K MINEXTENTS MAXEXTENTS OPTIMAL K);使回滾段在線當(dāng)回滾段創(chuàng)建后 回滾段是離線的 不能被數(shù)據(jù)庫使用 為了使回滾段被事務(wù)利用 必須將回滾段在線 可以用以下命令使回滾段在線 ALTER ROLLBACK SEGMENT rollback_segment ONLINE;例 ALTER ROLLBACK SEGMENT rbs ONLINE 為了使回滾段在數(shù)據(jù)庫啟動時自動在線 可以在數(shù)據(jù)庫的參數(shù)文件中列出回滾段的名字 例如在參數(shù)文件中加入以下一行 ROLLBACK_SEGMENT=(rbs rbs )修改回滾段的存儲參數(shù)可以使用ALTER ROLLBACK SEGMENT命令修改回滾段的存儲參數(shù)(包括OPTIMAL MAXEXTENTS) 語法 ALTER ROLLBACK SEGMENT rollback_segment[STORAGE ([NEXT integer[K|M]] [MINEXTENTS integer] [MAXEXTENTS {integer|UNLIMITED}] [OPTIMAL {integer[K|M]|NULL}]) ]例 ALTER ROLLBACK SEGMENT rbs STORAGE (MAXEXTENTS );回收回滾段的空間如果指定了回滾段的OPTIMAL參數(shù) ORACLE將自動回收回滾段到OPTIMAL指定的位置 用戶也可以手動回收回滾段的空間 語法 ALTER ROLLBACK SEGMENT rollback_segment SHRINK [TO integer [K|M]];說明 如果不指明TO integer的數(shù)值 ORACLE將試圖回收到OPTIMAL的位置 例 ALTER ROLLBACK SEGMENT rbs SHRINK TO M;使回滾段離線為了達(dá)到以下兩個目的將要回滾段離線 阻止新的事務(wù)使用該回滾段 該回滾段必須刪除 語法 ALTER ROLLBACK SEGMENT rollback_segment OFFLINE;例 ALTER ROLLBACK SEGMENT rbs OFFLINE;說明 如果有事務(wù)正在使用該回滾段 運行該命令后 回滾段的狀態(tài)將是PENDING OFFLINE 事務(wù)結(jié)束后 狀態(tài)將改為OFFLINE 可以通過V$ROLLSTAT查詢回滾段的狀態(tài) 刪除回滾段當(dāng)回滾段不再需要或要重建以改變INITIAL NEXT或MINEXTENTS參數(shù)時 可以將其刪除 要刪除回滾段 不許使該回滾段離線 語法 DROP ROLLBACK SEGMENT rollback_segment;例 DROP ROLLBACK SEGMENT rbs ;查詢回滾段的信息所用數(shù)據(jù)字典 DBA_ROLLBACK_SEGS可以查詢的信息 回滾段的標(biāo)識(SEGMENT_ID) 名稱(SEGMENT_NAME) 所在表空間(TABLESPACE_NAME) 類型(OWNER) 狀態(tài)(STATUS) 例 SQLSELECT segment_name tablespace_name owner status FROM dba_rollback_segs;回滾段的統(tǒng)計信息數(shù)據(jù)字典 V$ROLLNAME V$ROLLSTAT例 SQLSELECT n name s extents s rssize s optsize s hwmsize s xacts s statusFROM v$rollname n v$rollstat sWHERE n usn=s usn;回滾段的當(dāng)前活動事務(wù)數(shù)據(jù)字典 V$SESSION V$TRANSACTION例 SQLSELECT s username t xidusn t ubafil t ubablk t used_ublkFROM v$session s v$transaction tWHERE s saddr=t ses_addr; USERNAMEXIDUSN UBAFIL UBABLKUSED_UBLK SYSTEM SCOTT lishixinzhi/Article/program/Oracle/201311/18942

本文名稱:oracle如何設(shè)置回滾 oracle表結(jié)構(gòu)修改后如何回滾
網(wǎng)頁URL:http://muchs.cn/article44/hgioee.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、定制開發(fā)、網(wǎng)站內(nèi)鏈外貿(mào)建站、網(wǎng)站收錄用戶體驗

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

營銷型網(wǎng)站建設(shè)