中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

備份與恢復—RMAN1

發布時間:2020-08-11 00:53:21 來源:ITPUB博客 閱讀:151 作者:zhangzlIN 欄目:關系型數據庫
[TOC]

RMAN備份

1. 什么是RMAN?

官方定義RMAN:

備份與恢復—RMAN1

首先RMAN是一個與Oracle數據庫集成的程序相當于數據庫的一個功能不需要被單獨安裝。
備份與恢復—RMAN1
RMAN的最小單位是文件,也就是說他是針對文件進行備份而不可以是某個表。


RMAN的連接方式:
1)本地連接:

[oracle@server1 app]$ echo $ORACLE_SID
proe
[oracle@server1 app]$ rman target /
Recovery Manager: Release 11.2.0.4.0 - Production on Tue Jul 7 16:48:27 2020
Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.
connected to target database: PROE (DBID=485315595)
RMAN>

2)網絡連接:

[oracle@server1 ~]$ rman target sys/oracle@192.168.0.50:1521/server1

3)服務名連接:

[oracle@server1 ~]$ rman target sys/oracle@proe
2. RMAN備份的幾種類別:

1)backupset:備份集,只針對數據進行備份。
-compress buckupset,壓縮備份集,只將備份目標文件中的數據部分抽取出來,不包含數據的地方跳過。
備份集:備份集是邏輯上的,它是所有備份片的集合,備份片才是物理上的,piece handle。
2)image copy:鏡像拷貝,和原數據完全一樣包括結構,可以讓備份文件直接代替原文件。
測試這幾種類別最終的大小:

鏡像拷貝:
RMAN> backup as copy tablespace example format '/u01/app/backup/example_copy_%T';
Starting backup at 07-JUL-20
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile copy
input datafile file number=00005 name=/u01/app/oracle/oradata/proe/example01.dbf
output file name=/u01/app/backup/example_copy_20200707 tag=TAG20200707T171203 RECID=3 STAMP=1045156330
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:07
Finished backup at 07-JUL-20
備份集:
RMAN> backup as backupset tablespace example format '/u01/app/backup/example_bs_%T';
Starting backup at 07-JUL-20
using channel ORA_DISK_1
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00005 name=/u01/app/oracle/oradata/proe/example01.dbf
channel ORA_DISK_1: starting piece 1 at 07-JUL-20
channel ORA_DISK_1: finished piece 1 at 07-JUL-20
piece handle=/u01/app/backup/example_bs_20200707 tag=TAG20200707T171524 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:03
Finished backup at 07-JUL-20
不加 as backupset也可以,默認就是這個。
壓縮備份集:
RMAN> backup as compressed backupset tablespace example format '/u01/app/backup/example_c_bs_%T';
Starting backup at 07-JUL-20
using channel ORA_DISK_1
channel ORA_DISK_1: starting compressed full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00005 name=/u01/app/oracle/oradata/proe/example01.dbf
channel ORA_DISK_1: starting piece 1 at 07-JUL-20
channel ORA_DISK_1: finished piece 1 at 07-JUL-20
piece handle=/u01/app/backup/example_c_bs_20200707 tag=TAG20200707T171834 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:03
Finished backup at 07-JUL-20

查看一下這3個備份的大小:
備份與恢復—RMAN1
還是有一些差距的。
查看備份:
備份集:
備份與恢復—RMAN1
鏡像備份:
備份與恢復—RMAN1
注意:如果這個備份文件已經在系統層面刪除了,在這里還是會存在。
備份與恢復—RMAN1
這樣再查看就不會存在了:
備份與恢復—RMAN1

3. RMAN支持哪些文件備份:
SYS@proe>select * from v$rman_backup_type;
    WEIGHT INPUT_TYPE
---------- -------------
         1 BACKUPSET    備份集
         2 SPFILE    spfile
         3 CONTROLFILE    控制文件
         4 ARCHIVELOG    歸檔日志文件
         5 DATAFILE INCR    數據文件增量備份
         6 DATAFILE FULL    數據文件全量備份
         7 DB INCR    整庫增量備份
         8 RECVR AREA    閃回區備份
         9 DB FULL    數據庫全備(0級)
9 rows selected
4. 數據庫各類文件備份操作:
  • 參數文件的備份與恢復:
    Oracle中參數文件按照是否可以直接修改分為了動態參數文件和靜態參數文件,動態參數文件是二進制的無法直接修改也就是spfile是可以通過RMAN進行備份的,靜態參數文件pfile只能通過物理備份copy的形式來做。
    備份與恢復—RMAN1
    如上,命令和最終備份片的位置。
    模擬參數文件丟失場景:
    將spfile文件修改名字模擬spfile損壞(pfile,spfile有一個就可以啟動數據庫所以都要改一下):
    備份與恢復—RMAN1
    然后啟動就會報錯,
    備份與恢復—RMAN1
    通過RMAN進行恢復:
    啟動偽實例(僅用于參數文件恢復)
    備份與恢復—RMAN1
    備份與恢復—RMAN1
    再重新查看發現文件已經生成:
    備份與恢復—RMAN1

  • 控制文件備份與恢復:
    控制文件進行備份:
    備份與恢復—RMAN1
    查看關于控制文件的備份信息:
    備份與恢復—RMAN1
    整體恢復方式和參數文件恢復類似,但是由于控制文件中記錄著數據庫的變化所以在恢復之前一定要更新SCN號,使用recover。

    RMAN> alter database open resetlogs;
    使用resetlogs的原因是recover命令只能修復控制文件中數據庫物理結構信息,而無法修改控制文件中的當前重做日志的
    序列號等信息,recover命令執行完畢后,控制文件中當前在線日志序列號仍然是陳舊的。雖然使用了resetlogs,但是因
    為recover database命令成功執行已提交的事務不會丟失,resetlogs僅僅是為了照顧還原的控制文件,與不完全恢復的
    resetlogs是不同的。
    
  • 數據文件的備份與恢復:
    需要使用rman備份的時候數據庫必須是歸檔模式
    備份數據文件的類型:文件級別,表空間級別,整庫級別

1)備份系統表空間system:
備份與恢復—RMAN1
對system表空間下的表做一些操作:
備份與恢復—RMAN1
切換幾次日志:
備份與恢復—RMAN1
模擬系統表空間文件損壞:
備份與恢復—RMAN1
此時系統出現問題崩潰:
備份與恢復—RMAN1
從下面的圖片來看,系統表空間文件是關鍵性的系統數據文件,一旦損壞數據庫可以啟動到mount狀態但是無法打開。也就是說這個時候元數據信息是可以看到的因為已經mount數據庫了。
備份與恢復—RMAN1

接下來進行RMAN恢復。
查看關于系統表空間的備份信息:
備份與恢復—RMAN1
還原system表空間:
備份與恢復—RMAN1
修復system表空間:
備份與恢復—RMAN1
啟動即可:
備份與恢復—RMAN1
再次查看表信息:
備份與恢復—RMAN1
備份后刪除的表不存在了,說明表空間恢復并不涉及表空間下的表。表仍需單獨備份。
查看數據文件信息:
備份與恢復—RMAN1
已經恢復。

2)非關鍵性數據文件:
模擬普通數據文件損壞如何通過RMAN備份進行恢復。
首先創建模擬需要的表:testtable,testtable2并相應的插入一些數據。
備份與恢復—RMAN1
可以看到在TEST_1這個表空間下存在兩個測試用的表。
對這個表空間進行RMAN備份
備份與恢復—RMAN1
查看RMAN備份信息可以看到備份已經成功。
備份與恢復—RMAN1
備份已經完成,接下來對這個表空間里面的表進行一些操作使其內容發生一些變化。我們插入一些數據。
備份與恢復—RMAN1
然后我們需要將這個表空間的表的數據文件進行破壞掉。
首先查找這個表空間的數據文件在哪里。
備份與恢復—RMAN1
確定文件位置后進行模擬刪除。建議使用cp復制模擬刪除。
備份與恢復—RMAN1
數據文件模擬刪除后,需要把數據庫緩存刷新掉,把內存緩沖區數據寫回到數據文件,然后ckpt進程就會發現錯誤,實例從而崩潰。
備份與恢復—RMAN1
此時查看數據庫的狀態:
備份與恢復—RMAN1
為打開狀態未崩潰,說明此時數據文件已經同步想要從數據文件讀數據到緩沖區時才發現文件錯誤,并不會導致實例崩潰。

進入RMAN恢復階段
此時實例未崩潰所以需要將這個表空間先做離線處理。注意immediate直接離線避免臟塊寫入。
備份與恢復—RMAN1
進行表空間還原操作:
備份與恢復—RMAN1
而后進行表空間修復:
備份與恢復—RMAN1
最后將表空間置于在線即可。
備份與恢復—RMAN1
查看表數據可以看到后期插入的數據也已經還原。
備份與恢復—RMAN1

另外一種情況就是,當數據文件損壞時實例直接崩潰,失去連接。重新連接并啟動,只能將數據庫啟動到mount狀態。這個時候直接進入RMAN進行上述表空間還原操作和表空間修復操作即可。然后將數據庫open。

  • 歸檔日志文件備份:
    RMAN默認就是識別歸檔日志的。
    查看所有的歸檔日志:
    備份與恢復—RMAN1
    查看所有RMAN備份的歸檔日志:
    備份與恢復—RMAN1
    通過RMAN備份所有的歸檔日志:
    備份與恢復—RMAN1
    刪除備份的歸檔日志:
    備份與恢復—RMAN1
    通過指定備份歸檔日志的SCN來確定起始點備份:
    備份與恢復—RMAN1
    指定scn范圍進行歸檔日志恢復:
    備份與恢復—RMAN1
5. RMAN備份的幾個恢復場景:
  • 不完全恢復:
    首先先做一下數據庫的全備:(全備針對數據文件和參數文件及文件)
    備份與恢復—RMAN1
    接著查詢一下系統當前的SCN:
    備份與恢復—RMAN1
    人為模擬一下誤操作。這是當前employees表的情況。
    備份與恢復—RMAN1
    將這個表進行truncate操作:

這里出現一些問題,表因為主鍵被其他表的外鍵所引用所以無法進行truncate操作,解決辦法就是,讓這個表主鍵臨時失效,執行完再重新使其生效。

HR@proe>truncate table HR.employees;
truncate table HR.employees
                  *
ERROR at line 1:
ORA-02266: unique/primary keys in table referenced by enabled foreign keys
HR@proe>alter table employees disable primary key cascade;
Table altered.
HR@proe>HR@proe>truncate table employees;
Table truncated. 
HR@proe>alter table employees enable primary key;
Table altered.

執行完誤操作此時表是這個狀態:
備份與恢復—RMAN1
接下來通過RMAN進行不完全恢復操作,重新獲取正確的數據:
使用RMAN進行一致性關庫:
備份與恢復—RMAN1
在RMAN中啟動數據庫到mount狀態:
備份與恢復—RMAN1
還原數據庫:
備份與恢復—RMAN1
修復數據庫到指定的SCN:
備份與恢復—RMAN1
這個時候查詢這個數據庫:
備份與恢復—RMAN1
因為此時數據庫還是處于mount狀態但是不可以直接open需要執行resetlogs。因為不完全恢復的日志并不是連續的所以需要將日志重置。
在RMAN中修改數據庫的狀態使其啟動:
備份與恢復—RMAN1
重新查詢這個表的信息可以看到已經恢復:
備份與恢復—RMAN1

  • 整個數據庫的完全恢復:
    注意:備份在數據庫open狀態,恢復是在數據庫的mount狀態。
    整庫備份需要備份的文件:
    ??所有的數據文件,日志文件,控制文件,參數文件

模擬過程:
開始備份:
1)確定當前數據庫的狀態:(需要處于open狀態)
備份與恢復—RMAN1
2)進入RMAN開始備份:

RMAN> sql'alter system archive log current';
sql statement: alter system archive log current
## 這里額外說明一下'alter system archive log current'和'alter system switch logfile'的區別。從表面來看,前者會對數據庫中所有實例執行日志切換,后者只會針對單實例數據庫或者RAC中的當前實例進行日志切換。所以在RAC中進行日志切換時往往會使用前者。更深層次的來看,前者需要數據庫開啟歸檔,不開啟歸檔的話需要指定到具體的日志組才行并且這個日志組不可以是當前日志組。同時這個命令中的current是指當前的日志組,所以在歸檔之前一定會先切換日志,所以這個命令伴隨著日志組的切換。而后者主要針對的是日志組與是否開啟歸檔無關,主要作用就是強制切換日志組。如果開啟了歸檔發生了日志組的切換那么必然會發生歸檔,如果沒開啟數據庫歸檔那么歸檔肯定不能發生但是日志組還是會被強制切換。
RMAN> crosscheck archivelog all;#校驗控制文件和實際物理文件差別。這個命令和下面的命令往往一起使用,單純的校驗并不會影響最終備份的結果。
released channel: ORA_DISK_1
allocated channel: ORA_DISK_1
...
archived log file name=/u01/app/oracle/fast_recovery_area/PROE/archivelog/2020_07_13/o1_mf_1_1_hjr1nnno_.arc RECID=50 STAMP=1045666836
Crosschecked 12 objects
RMAN> delete expired archivelog all;#進行控制文件和物理文件同步,關于這兩個RMAN管理維護命令以后會繼續細講。
released channel: ORA_DISK_1
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=572 device type=DISK
specification does not match any archived log in the repository
RMAN> sql'alter system switch logfile';#強制切換日志。
sql statement: alter system switch logfile

備份數據文件:
備份與恢復—RMAN1
關于plus archivelog,這個命令會讓RMAN首先備份歸檔日志,然后切換當前的在線日志并歸檔這個日志,然后再把最新的歸檔日志進行備份。
備份與恢復—RMAN1
備份與恢復—RMAN1
備份與恢復—RMAN1

備份參數文件:
備份與恢復—RMAN1

備份控制文件:
備份與恢復—RMAN1


注意:
如果在使用db_recovery_file_dest作為備份文件生成的路徑情況下,生成備份文件的副本那么將產生ORA-19806錯誤。
RMAN-03009: failure of backup command on ORA_DISK_1 channel
ORA-19806: cannot make duplex backups in recovery area
解決方式,將備份路徑指定為非db_recovery_files_dest的目錄
RMAN> backup tablespace users format ‘/home/oracle/%U.dbf’;


開始恢復:
查看當前備份路徑下有哪些文件:
備份與恢復—RMAN1
可以看到進行數據文件備份時生成了兩個文件,所以這也是為什么命名后綴為%U的原因,因為在進行數據庫全備的時候,控制文件會自動備份當前數據庫的控制文件和參數文件也就是上面較小的database文件,如果名稱重復則會在這里報錯。
1)首先恢復參數文件。
查看當前用戶的SID。
備份與恢復—RMAN1
進入RMAN,啟動偽實例數據庫到nomount狀態后恢復參數文件。
備份與恢復—RMAN1
這里可能會出現了一個報錯,具體原因查看 https://www.cnblogs.com/plutozzl/p/13293789.html
參數文件恢復成功,關閉偽實例重新啟動到nomount狀態。
備份與恢復—RMAN1可以看到沒有報錯了。

2)恢復控制文件:
此時數據庫處于nomount狀態。mount會報錯
備份與恢復—RMAN1
所以仍然需要恢復控制文件:
備份與恢復—RMAN1
恢復成功,這個時候可以將數據庫mount并查看備份信息。
備份與恢復—RMAN1

3)恢復數據文件:
還原數據庫:
備份與恢復—RMAN1
修復數據庫:
備份與恢復—RMAN1

4)整庫恢復完成打開數據庫即可:
備份與恢復—RMAN1
這里還是需要加上resetlogs參數的,因為控制文件也是恢復而來的所以日志需要重置。
恢復成功:
備份與恢復—RMAN1
這種方式可以用來進行數據庫的遷移,但是如果在一個新庫中恢復RMAN備份的路徑必須一致。

向AI問一下細節

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

AI

石景山区| 安顺市| 五河县| 柳州市| 丰县| 克拉玛依市| 台湾省| 广宁县| 金平| 潮州市| 交城县| 喜德县| 新密市| 威信县| 葫芦岛市| 南雄市| 蓝田县| 永济市| 额济纳旗| 利津县| 安图县| 保定市| 固镇县| 邯郸县| 北票市| 江城| 民勤县| 青神县| 揭阳市| 通河县| 沙湾县| 秭归县| 鄂伦春自治旗| 临沂市| 长治市| 渝北区| 温州市| 嵩明县| 呼玛县| 济源市| 绥德县|