<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Decode360's Blog

    業精于勤而荒于嬉 QQ:150355677 MSN:decode360@hotmail.com

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 ::  :: 管理 ::
      397 隨筆 :: 33 文章 :: 29 評論 :: 0 Trackbacks
    Oracle備份/恢復案例04——不完全恢復
    ?
    一、OS備份下的基于時間的恢復
    ?
    不完全恢復可以分為基于時間的恢復基于改變的恢復基于撤消的恢復,這里以基于時間的恢復為例子來說明不完全恢復過程。

    基于時間的恢復:可以不完全恢復到現在時間之前的某一個時間,對于某些誤操作,如刪除了一個數據表,可以在備用恢復環境上恢復到表的刪除時間之前,然后把該表導出到正式環境,避免一個人為的錯誤。

    1、連接數據庫,創建測試表并插入記錄

    SQL*Plus: Release 9.2.0.1.0 - Production on Tue Jan 13 10:03:27 2009
    Copyright (c) 1982, 2002, Oracle Corporation.? All rights reserved.
    ?
    SQL> connect sys/sys as sysdba;
    Connected.
    SQL> create table test(a int) tablespace users;
    Table created
    SQL> insert into test values(1);
    1 row inserted
    SQL> commit;
    Commit complete

    2、備份數據庫,這里最好備份所有的數據文件,包括臨時數據文件

    SQL> @D:\test\hotbak.sql
    注:冷備份也可以

    3、刪除測試表,假定刪除前的時間為T1,在刪除之前,便于測試,繼續插入數據并應用到歸檔。

    SQL> insert into test values(2);
    1 row inserted
    SQL> commit;
    Commit complete
    SQL> select * from test;
    A
    -----------------------------
    1
    2

    SQL> alter system switch logfile;
    Statement processed.
    SQL> alter system switch logfile;
    Statement processed.

    SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
    TO_CHAR(SYSDATE,'YY
    -------------------
    2009-01-14 08:41:11

    SQL> drop table test;
    Table dropped.

    4、準備恢復到時間點T1,找回刪除的表,先關閉數據庫

    SQL> shutdown immediate;
    Database closed.
    Database dismounted.
    ORACLE instance shut down.

    5、拷貝剛才備份的所有數據文件回來

    C:>copy D:\DATABASE\BACK\*.DBF D:\ORACLE\ORADATA\DODO
    注:此處需要copy所有文件,因為會涉及到系統數據字典

    6、啟動到mount下

    SQL> startup mount;
    ORACLE instance started.
    ?
    Total System Global Area? 135338868 bytes
    Fixed Size?????????????????? 453492 bytes
    Variable Size???????????? 109051904 bytes
    Database Buffers?????????? 25165824 bytes
    Redo Buffers???????????????? 667648 bytes
    Database mounted.

    7、開始不完全恢復數據庫到T1時間

    SQL> recover database until time 2009-01-14 08:41:11';
    ORA-00279: change 5966020159195 generated at 01/13/2009 10:37:39 needed for thread 1
    ORA-00289: suggestion : D:\ORACLE\ORADATA\DODO\ARCHIVE\1_39.DBF
    ORA-00280: change 5966020159195 for thread 1 is in sequence #39
    Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
    auto
    Log applied.
    Media recovery complete.

    8、打開數據庫,檢查數據

    SQL> alter database open resetlogs;
    Database altered.
    SQL> select * from test;
    A
    -----------------------------
    1
    2
    ?

    說明:

    1、不完全恢復最好備份所有的數據,冷備份亦可,因為恢復過程是從備份點往后恢復的,如果其中一個數據文件的時間戳(SCN)大于要恢復的時間點,那么恢復都是不可能成功的。
    2、不完全恢復有三種方式,過程都一樣,僅僅是recover命令有所不一樣,這里用基于時間的恢復作為示例。
    3、不完全恢復之后,都必須用resetlogs的方式打開數據庫,建議馬上再做一次全備份,因為resetlogs之后再用以前的備份恢復是很難了
    4、以上是在刪除之前獲得時間,但是實際應用中,很難知道刪除之前的實際時間,但可以采用大致時間即可,或可以采用分析日志文件(logmnr),取得精確的需要恢復的時間
    5、一般都是在測試機后備用機器上采用這種不完全恢復,恢復之后導出/導入被誤刪的表回生產系統
    ?
    ?
    ?
    二、RMAN備份下的基于改變的恢復

    ?
    以上用OS備份說明了一個基于時間的恢復,現在用RMAN說明一個基于改變的恢復

    1、連接數據庫,創建測試表并插入記錄

    SQL*Plus: Release 9.2.0.1.0 - Production on Tue Jan 13 10:03:27 2009
    Copyright (c) 1982, 2002, Oracle Corporation.? All rights reserved.
    ?
    SQL> connect sys/sys as sysdba;
    Connected.
    SQL> create table test(a int) tablespace users;
    Table created
    SQL> insert into test values(1);
    1 row inserted
    SQL> commit;
    Commit complete

    2、備份數據庫

    C:>rman
    Recovery Manager: Release 9.2.0.1.0 - Production
    Copyright (c) 1995, 2002, Oracle Corporation.? All rights reserved.
    RMAN> connect rcvcat rman/rman
    connected to recovery catalog database
    RMAN> connect target sys/sys
    connected to target database: DODO (DBID=472976704)

    RMAN> run{
    2> allocate channel c1 type disk;
    3> backup full tag 'dbfull' format 'd:backupfull_%u_%s_%p' database
    4> include current controlfile;
    5> sql 'alter system archive log current';
    6> release channel c1;
    7> }

    allocated channel: c1
    channel c1: sid=18 devtype=DISK
    ?
    Starting backup at 2009-01-14
    channel c1: starting full datafile backupset
    channel c1: specifying datafile(s) in backupset
    including current controlfile in backupset
    input datafile fno=00008 name=D:\ORACLE\ORADATA\DODO\WXQ_TBS.ORA
    input datafile fno=00006 name=D:\ORACLE\ORADATA\DODO\USERS01.DBF
    input datafile fno=00001 name=D:\ORACLE\ORADATA\DODO\SYSTEM01.DBF
    input datafile fno=00002 name=D:\ORACLE\ORADATA\DODO\UNDOTBS01.DBF
    input datafile fno=00007 name=D:\ORACLE\ORADATA\DODO\XDB01.DBF
    input datafile fno=00004 name=D:\ORACLE\ORADATA\DODO\INDX01.DBF
    input datafile fno=00003 name=D:\ORACLE\ORADATA\DODO\DRSYS01.DBF
    input datafile fno=00009 name=D:\ORACLE\ORADATA\DODO\RECOVERY_TBS.ORA
    input datafile fno=00005 name=D:\ORACLE\ORADATA\DODO\TOOLS01.DBF
    channel c1: starting piece 1 at 2009-01-14
    channel c1: finished piece 1 at 2009-01-14
    piece handle=D:\DATABASE\RMAN\FULL_1UK4PBLD_62_1 comment=NONE
    channel c1: backup set complete, elapsed time: 00:02:35
    Finished backup at 2009-01-14
    ?
    Starting Control File and SPFILE Autobackup at 2009-01-14
    piece handle=D:\ORACLE\ORADATA\DODO\RMANBACK\CTL_C-472976704-20090114-01 comment=NONE
    Finished Control File and SPFILE Autobackup at 2009-01-14
    ?
    sql statement: alter system archive log current
    ?
    released channel: c1

    3、刪除測試表,在刪除之前,便于測試,繼續插入數據并應用到歸檔,并獲取刪除前的scn號

    SQL> insert into test values(2);
    1 row inserted
    SQL> commit;
    Commit complete
    SQL> select * from test;
    A
    ----------------------
    1
    2

    SQL> alter system switch logfile;
    Statement processed.
    SQL> alter system switch logfile;
    Statement processed.

    SQL> select max(ktuxescnw * power(2, 32) + ktuxescnb) scn from x$ktuxe;
    ??????????? SCN
    ---------------
    ? 5966020192446

    SQL> drop table test;
    Table dropped.

    4、準備恢復到SCN 31014,先關閉數據庫,然后啟動到mount下

    SQL> shutdown immediate;
    Database closed.
    Database dismounted.
    ORACLE instance shut down.

    SQL> startup mount;
    ORACLE instance started.
    Total System Global Area? 135338868 bytes
    Fixed Size?????????????????? 453492 bytes
    Variable Size???????????? 109051904 bytes
    Database Buffers?????????? 25165824 bytes
    Redo Buffers???????????????? 667648 bytes
    Database mounted.

    5、開始恢復到改變點SCN 5966020192446

    RMAN> run{
    2> allocate channel c1 type disk;
    3> restore database;
    4> recover database until scn 5966020192446;
    5> sql 'ALTER DATABASE OPEN RESETLOGS';
    6> release channel c1;
    7> }

    allocated channel: c1
    channel c1: sid=12 devtype=DISK
    ?
    Starting restore at 2009-01-14
    ?
    channel c1: starting datafile backupset restore
    channel c1: specifying datafile(s) to restore from backup set
    restoring datafile 00001 to D:\ORACLE\ORADATA\DODO\SYSTEM01.DBF
    restoring datafile 00002 to D:\ORACLE\ORADATA\DODO\UNDOTBS01.DBF
    restoring datafile 00003 to D:\ORACLE\ORADATA\DODO\DRSYS01.DBF
    restoring datafile 00004 to D:\ORACLE\ORADATA\DODO\INDX01.DBF
    restoring datafile 00005 to D:\ORACLE\ORADATA\DODO\TOOLS01.DBF
    restoring datafile 00006 to D:\ORACLE\ORADATA\DODO\USERS01.DBF
    restoring datafile 00007 to D:\ORACLE\ORADATA\DODO\XDB01.DBF
    restoring datafile 00008 to D:\ORACLE\ORADATA\DODO\WXQ_TBS.ORA
    restoring datafile 00009 to D:\ORACLE\ORADATA\DODO\RECOVERY_TBS.ORA
    channel c1: restored backup piece 1
    piece handle=D:\DATABASE\RMAN\FULL_1UK4PBLD_62_1 tag=DBFULL params=NULL
    channel c1: restore complete
    Finished restore at 2009-01-14
    ?
    Starting recover at 2009-01-14
    ?
    starting media recovery
    ?
    archive log thread 1 sequence 55 is already on disk as file D:\ORACLE\ORADATA\DODO\ARCHIVE\1_55.DBF
    archive log thread 1 sequence 56 is already on disk as file D:\ORACLE\ORADATA\DODO\ARCHIVE\1_56.DBF
    archive log thread 1 sequence 57 is already on disk as file D:\ORACLE\ORADATA\DODO\ARCHIVE\1_57.DBF
    archive log filename=D:\ORACLE\ORADATA\DODO\ARCHIVE\1_55.DBF thread=1 sequence=55
    media recovery complete
    Finished recover at 2009-01-14
    ?
    sql statement: ALTER DATABASE OPEN RESETLOGS
    ?
    released channel: c1

    6、檢查數據

    SQL> select * from test;
    A
    ---------------------
    1
    2

    可以看到,表依然存在
    ?

    說明:
    1、RMAN也可以實現不完全恢復,方法比OS備份恢復的方法更簡單可靠
    2、RMAN可以基于時間,基于改變與基于日志序列的不完全恢復,基于日志序列的恢復可以指定恢復到哪個日志序列,如
    run {
    allocate channel ch1 type disk;
    allocate channel ch2 type 'sbt_tape';
    set until logseq 1234 thread 1;
    restore controlfile to '$ORACLE_HOME/dbs/cf1.f' ;
    replicate controlfile from '$ORACLE_HOME/dbs/cf1.f';
    alter database mount;
    restore database;
    recover database;
    sql "ALTER DATABASE OPEN RESETLOGS";
    }

    3、與所有的不完全恢復一樣,必須在mount下,restore所有備份數據文件,需要resetlogs
    4、基于改變的恢復比基于時間的恢復更可靠,但是可能也更復雜,需要知道需要恢復到哪一個改變號(SCN),在正常生產中,獲取SCN的辦法其實也有很多,如查詢數據庫字典表(V$archived_log or v$log_history),或分析歸檔與聯機日志(logmnr)等。
    ?
    ?
    ?
    posted on 2008-12-17 21:03 decode360 閱讀(241) 評論(0)  編輯  收藏 所屬分類: 09.Recover

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲中文字幕伊人久久无码| 亚洲麻豆精品果冻传媒| 国产综合免费精品久久久| 久久久久亚洲AV片无码下载蜜桃 | 3344免费播放观看视频| 亚洲另类无码专区首页| 国产亚洲色婷婷久久99精品| 18禁免费无码无遮挡不卡网站| 男女超爽视频免费播放| 日韩精品亚洲人成在线观看| 国产一区二区三区无码免费| 久久久久久成人毛片免费看| 99亚洲男女激情在线观看| 亚洲AV乱码一区二区三区林ゆな| 韩国免费三片在线视频| 免费一级毛片无毒不卡| 偷自拍亚洲视频在线观看| 亚洲欧洲精品久久| 国产亚洲av人片在线观看| 最新中文字幕免费视频| 久操视频在线免费观看| 色多多A级毛片免费看| 精品亚洲AV无码一区二区三区| 久久精品国产亚洲精品| 在线观看免费宅男视频| 91人成网站色www免费下载| 国产亚洲精品欧洲在线观看| 亚洲一区在线视频观看| 久久久久亚洲av无码专区蜜芽| 一级毛片直播亚洲| 免费看大美女大黄大色| 亚洲免费人成视频观看| a毛片全部播放免费视频完整18| 免费播放美女一级毛片| 亚洲日韩中文字幕一区| 亚洲一级高清在线中文字幕| 久久91亚洲精品中文字幕| 国产成人99久久亚洲综合精品| 精品国产精品久久一区免费式| 国产曰批免费视频播放免费s| 一级毛片**不卡免费播|