天天看點

Oracle 11g 使用RMAN備份資料庫

使用Oracle自帶的備份恢複工具RMAN(Recovery Manager)具有以下幾種優勢:

支援增量備份

能自動管理備份檔案

自動化備份與恢複

備份的檔案有效性檢查

配置快閃恢複區(flash recovery area)

快閃恢複區是存儲備份和恢複資料檔案以及相關資訊的存儲區。需要設定兩個參數:db_recovery_file_dest_size(快閃恢複區的最大容量),db_recovery_file_dest(快閃恢複區所在的路徑)。

檢視快閃恢複區資訊:

1

2

3

4

5

<code>SQL&gt; show parameter db_recovery_file_dest;</code>

<code>NAME</code>     <code>TYPE VALUE</code>

<code>------------------------------------ ----------- ------------------------------</code>

<code>db_recovery_file_dest     string /data/app/oracle/recovery_area</code>

<code>db_recovery_file_dest_size     big </code><code>integer</code> <code>3882M</code>

修改快閃恢複區大小:

6

7

<code>SQL&gt; </code><code>alter</code> <code>system </code><code>set</code> <code>db_recovery_file_dest_size=2g;</code>

<code>System altered.</code>

<code>db_recovery_file_dest_size     big </code><code>integer</code> <code>2G</code>

檢視使用情況:

<code>SQL&gt; </code><code>select</code> <code>name</code><code>,space_limit,space_used,number_of_files </code><code>from</code> <code>v$recovery_file_dest;</code>

<code>NAME</code>

<code>--------------------------------------------------------------------------------</code>

<code>SPACE_LIMIT SPACE_USED NUMBER_OF_FILES</code>

<code>----------- ---------- ---------------</code>

<code>/data/app/oracle/recovery_area</code>

<code> </code><code>2147483648     0     0</code>

顯示沒有使用。

也可以使用此指令檢視詳細資訊:

<code>SQL&gt; </code><code>select</code> <code>file_type,percent_space_used,percent_space_reclaimable,number_of_files </code><code>from</code> <code>v$flash_recovery_area_usage;</code>

建立RMAN到資料庫的連接配接

建立rman使用者,并授權:

8

<code>[oracle@</code><code>temp</code><code>-test oracle]$ sqlplus /nolog</code>

<code>SQL&gt;  </code><code>connect</code><code>/</code><code>as</code> <code>sysdba</code>

<code>Connected.</code>

<code>SQL&gt; </code><code>create</code> <code>user</code> <code>rman identified </code><code>by</code> <code>oracle;</code>

<code>User</code> <code>created.</code>

<code>SQL&gt; </code><code>grant</code> <code>resource,</code><code>connect</code><code>,dba </code><code>to</code> <code>rman;</code>

<code>Grant</code> <code>succeeded.</code>

<code>SQL&gt; quit</code>

使用rman使用者登入RMAN:

<code>[oracle@</code><code>temp</code><code>-test oracle]$ rman target rman/oracle</code>

<code>Recovery Manager: Release 11.2.0.1.0 - Production </code><code>on</code> <code>Fri Nov 3 16:59:27 2017</code>

<code>Copyright (c) 1982, 2009, Oracle </code><code>and</code><code>/</code><code>or</code> <code>its affiliates.  </code><code>All</code> <code>rights reserved.</code>

<code>connected </code><code>to</code> <code>target </code><code>database</code><code>: ORCL (DBID=1486802665)</code>

<code>RMAN&gt;</code>

也可以使用如下方式登入:

<code>[oracle@</code><code>temp</code><code>-test oracle]$ rman</code>

<code>Recovery Manager: Release 11.2.0.1.0 - Production </code><code>on</code> <code>Fri Nov 3 17:00:35 2017</code>

<code>RMAN&gt; </code><code>connect</code> <code>target system/rman</code>

<code>RMAN&gt; </code><code>connect</code> <code>target rman/oracle</code>

也可以使用作業系統認證連接配接RMAN:

<code>[oracle@</code><code>temp</code><code>-test oracle]$ rman target /</code>

<code>Recovery Manager: Release 11.2.0.1.0 - Production </code><code>on</code> <code>Fri Nov 3 17:02:52 2017</code>

配置RMAN

檢視RMAN的配置參數:

9

10

11

12

13

14

15

16

17

<code>RMAN&gt; show </code><code>all</code><code>;</code>

<code>using target </code><code>database</code> <code>control file </code><code>instead</code> <code>of</code> <code>recovery catalog</code>

<code>RMAN configuration parameters </code><code>for</code> <code>database</code> <code>with</code> <code>db_unique_name ORCL are:</code>

<code>CONFIGURE RETENTION POLICY </code><code>TO</code> <code>REDUNDANCY 1; # </code><code>default</code>

<code>CONFIGURE BACKUP OPTIMIZATION </code><code>OFF</code><code>; # </code><code>default</code>

<code>CONFIGURE </code><code>DEFAULT</code> <code>DEVICE TYPE </code><code>TO</code> <code>DISK; # </code><code>default</code>

<code>CONFIGURE CONTROLFILE AUTOBACKUP </code><code>OFF</code><code>; # </code><code>default</code>

<code>CONFIGURE CONTROLFILE AUTOBACKUP FORMAT </code><code>FOR</code> <code>DEVICE TYPE DISK </code><code>TO</code> <code>'%F'</code><code>; # </code><code>default</code>

<code>CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE </code><code>TO</code> <code>BACKUPSET; # </code><code>default</code>

<code>CONFIGURE DATAFILE BACKUP COPIES </code><code>FOR</code> <code>DEVICE TYPE DISK </code><code>TO</code> <code>1; # </code><code>default</code>

<code>CONFIGURE ARCHIVELOG BACKUP COPIES </code><code>FOR</code> <code>DEVICE TYPE DISK </code><code>TO</code> <code>1; # </code><code>default</code>

<code>CONFIGURE MAXSETSIZE </code><code>TO</code> <code>UNLIMITED; # </code><code>default</code>

<code>CONFIGURE ENCRYPTION </code><code>FOR</code> <code>DATABASE</code> <code>OFF</code><code>; # </code><code>default</code>

<code>CONFIGURE ENCRYPTION ALGORITHM </code><code>'AES128'</code><code>; # </code><code>default</code>

<code>CONFIGURE COMPRESSION ALGORITHM </code><code>'BASIC'</code> <code>AS</code> <code>OF</code> <code>RELEASE </code><code>'DEFAULT'</code> <code>OPTIMIZE </code><code>FOR</code> <code>LOAD</code> <code>TRUE</code> <code>; # </code><code>default</code>

<code>CONFIGURE ARCHIVELOG DELETION POLICY </code><code>TO</code> <code>NONE; # </code><code>default</code>

<code>CONFIGURE SNAPSHOT CONTROLFILE </code><code>NAME</code> <code>TO</code> <code>'/data/app/oracle/product/11.2.0/dbhome_1/dbs/snapcf_orcl.f'</code><code>; # </code><code>default</code>

參數含義:

CONFIGURE RETENTION POLICY TO REDUNDANCY 1

保留的備份副本數量,表示隻保留一個資料檔案的副本,并且保留最新的備份副本。

CONFIGURE DEFAULT DEVICE TYPE TO DISK

資料檔案預設備份到磁盤上,也可以是其他裝置如錄音帶(sbt)

CONFIGURE BACKUP OPTIMIZATION OFF

不使用備份優化,啟用備份優化的作用是如果已經備份了某個檔案的相同版本,則不會再備份該檔案。,隻保留一份備份檔案。

CONFIGURE CONTROLFILE AUTOBACKUP OFF

不啟動控制檔案的自動備份,修改為ON之後,如果資料庫結構發生變化或者在備份資料庫過程中,控制檔案會自動再備份到指定目錄下

CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET

備份通道數量為1,預設使用備份集的方式。通道數量越多,執行任務時間越短。

如果要修改參數,可以執行如下指令:

開啟備份優化:

<code>RMAN&gt; CONFIGURE BACKUP OPTIMIZATION </code><code>ON</code><code>;</code>

<code>new RMAN configuration parameters:</code>

<code>CONFIGURE BACKUP OPTIMIZATION </code><code>ON</code><code>;</code>

<code>new RMAN configuration parameters are successfully stored</code>

設定備份類型為Copy,也就是映像模式:

<code>RMAN&gt; CONFIGURE DEVICE TYPE DISK BACKUP TYPE </code><code>TO</code> <code>COPY;                          </code>

<code>CONFIGURE DEVICE TYPE DISK BACKUP TYPE </code><code>TO</code> <code>COPY PARALLELISM 1;</code>

備份控制檔案到快閃恢複區:

<code>RMAN&gt; backup </code><code>current</code> <code>controlfile;</code>

<code>Starting backup </code><code>at</code> <code>03-NOV-17</code>

<code>using channel ORA_DISK_1</code>

<code>channel ORA_DISK_1: starting datafile copy</code>

<code>copying </code><code>current</code> <code>control file</code>

<code>output</code> <code>file </code><code>name</code><code>=/data/app/oracle/recovery_area/ORCL/controlfile/o1_mf_TAG20171103T180113_dzrhm9vk_.ctl tag=TAG20171103T180113 RECID=3 STAMP=959104874</code>

<code>channel ORA_DISK_1: datafile copy complete, elapsed </code><code>time</code><code>: 00:00:01</code>

<code>Finished backup </code><code>at</code> <code>03-NOV-17</code>

如果沒有指定快閃恢複區也可以用手動指定路徑:

将快閃恢複區改為test目錄

<code>SQL&gt; connect</code><code>/as</code> <code>sysdba</code>

<code>NAME     TYPE VALUE</code>

<code>db_recovery_file_dest     string </code><code>/data/app/oracle/recovery_area</code>

<code>db_recovery_file_dest_size     big integer 2G</code>

<code>SQL&gt; alter system </code><code>set</code> <code>db_recovery_file_dest=</code><code>'/data/app/oracle/test'</code><code>;</code>

<code>NAME                     TYPE   VALUE</code>

<code>db_recovery_file_dest            string     </code><code>/data/app/oracle/test</code>

<code>db_recovery_file_dest_size       big integer 2G</code>

配置控制檔案備份的磁盤類型和備份目錄,路徑以%F結尾:

<code>RMAN&gt; configure controlfile autobackup </code><code>format</code> <code>for</code> <code>device </code><code>type</code> <code>disk to </code><code>'/data/app/oracle/test/%F'</code><code>;</code>

<code>CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO </code><code>'/data/app/oracle/test/%F'</code><code>;</code>

RMAN脫機備份

RMAN脫機備份需要關閉資料庫,啟動資料庫到mount狀态。

<code>SQL&gt; </code><code>connect</code><code>/</code><code>as</code> <code>sysdba</code>

<code>SQL&gt; shutdown immediate;</code>

<code>Database</code> <code>closed.</code>

<code>Database</code> <code>dismounted.</code>

<code>ORACLE instance shut down.</code>

<code>SQL&gt; startup mount;</code>

<code>ORACLE instance started.</code>

<code>Total System </code><code>Global</code> <code>Area 1586708480 bytes</code>

<code>Fixed </code><code>Size</code>         <code>2213736 bytes</code>

<code>Variable </code><code>Size</code>        <code>939526296 bytes</code>

<code>Database</code> <code>Buffers     637534208 bytes</code>

<code>Redo Buffers           7434240 bytes</code>

<code>Database</code> <code>mounted.</code>

進入RMAN,備份資料:

先檢視資料備份的預設參數,備份方式(copy或backupset),和備份格式(disk 或其他)

執行備份指令使用copy方式,映像複制整個庫:

<code>RMAN&gt; backup </code><code>as</code> <code>copy </code><code>database</code><code>;</code>

如果是使用預設的backupset模式,可以使用:

<code>RMAN&gt; backup </code><code>as</code> <code>compressed backupset </code><code>database</code><code>;</code>

備份完成後,打開資料庫:

<code>RMAN&gt; sql </code><code>'alter database open'</code><code>;</code>

<code>sql statement: </code><code>alter</code> <code>database</code> <code>open</code>

RMAN聯機備份整個資料庫

聯機備份必須要設定快閃恢複區,快閃恢複區要足夠大,并且資料庫要置于歸檔模式。在資料庫進行備份的同時,可以進行DML操作,可以正常讀取,新的DML操作記錄會在重做日志檔案中,如果備份時間很長,而且在這個期間産生了大量的資料變化,重做日志會切換進而将這些變化的資料寫到歸檔日志檔案中。這裡的歸檔日志就類似于mysql的binlog,在出現媒體故障的時候,使用備份和歸檔日志記錄和完成資料的全部恢複。

檢視資料庫歸檔模式是否開啟,目前屬于關閉狀态:

<code>SQL&gt; archive log list;</code>

<code>Database log mode       No Archive Mode</code>

<code>Automatic archival       Disabled</code>

<code>Archive destination       USE_DB_RECOVERY_FILE_DEST</code>

<code>Oldest online log sequence     22</code>

<code>Current log sequence       24</code>

開啟日志歸檔:

<code>SQL&gt; alter database archivelog;</code>

<code>alter database archivelog</code>

<code>*</code>

<code>ERROR at line 1:</code>

<code>ORA-01126: database must be mounted </code><code>in</code> <code>this instance and not </code><code>open</code> <code>in</code> <code>any</code>

<code>instance</code>

日志歸檔必須在mount模式,關閉資料庫啟動到mount模式,開啟歸檔模式:

18

19

20

21

22

23

24

25

26

<code>SQL&gt; </code><code>shutdown</code> <code>immediate;</code>

<code>Database closed.</code>

<code>Database dismounted.</code>

<code>SQL&gt; startup </code><code>mount</code><code>;</code>

<code>Total System Global Area 1586708480 bytes</code>

<code>Fixed Size    2213736 bytes</code>

<code>Variable Size 1040189592 bytes</code>

<code>Database Buffers  536870912 bytes</code>

<code>Redo Buffers    7434240 bytes</code>

<code>Database mounted.</code>

<code>Database altered.</code>

<code>SQL&gt; alter database </code><code>open</code><code>;</code>

<code>SQL&gt;  archive log list;</code>

<code>Database log mode       Archive Mode</code>

<code>Automatic archival       Enabled</code>

<code>Next log sequence to archive   24</code>

使用RMAN聯機備份資料庫:

<code>RMAN&gt; backup as compressed backupset database plus archivelog delete all input;</code>

使用備份集格式進行備份,并采用壓縮的方式,壓縮比例大概為5:1。備份資料檔案,同時也備份歸檔日志檔案,備份完成之後會将已經備份的歸檔日志檔案從存儲目錄中删除,清除歸檔空間。

備份表空間:

<code>RMAN&gt; backup tablespace </code><code>users</code><code>;</code>

<code>Starting backup at 06-NOV-17</code>

<code>input datafile </code><code>file</code> <code>number=00004 name=</code><code>/data/app/oracle/oradata/orcl/users01</code><code>.dbf</code>

<code>output </code><code>file</code> <code>name=</code><code>/data/app/oracle/test/ORCL/datafile/o1_mf_users_dzzxzmxv_</code><code>.dbf tag=TAG20171106T134939 RECID=12 STAMP=959348980</code>

<code>Finished backup at 06-NOV-17</code>

使用壓縮:

<code>RMAN&gt; backup as compressed backupset tablespace </code><code>users</code><code>;</code>

使用RMAN備份資料檔案,%U表示自動配置設定一個唯一的命名:

<code>RMAN&gt; backup as backupset datafile 1 </code><code>format</code> <code>'/data/app/backup/datafile_1_%U'</code><code>;</code>

清除指令,慎用

清除舊的備份檔案set格式:

<code>RMAN&gt;  delete obsolete; </code>

<code>RMAN&gt; crosscheck backupset;</code>

<code>RMAN&gt; delete expired backupset;</code>

清楚舊的備份檔案和所有備份,copy模式:

<code>RMAN&gt;  list datafilecopy all;</code>

<code>RMAN&gt; delete expired backupcopy;</code>

<code>RMAN&gt; crosscheck datafilecopy all;</code>

如果是由于快閃恢複區容量限制,可以修改快閃恢複區的路徑和容量:

<code>SQL&gt; </code><code>alter</code> <code>system </code><code>set</code> <code>db_recovery_file_dest_size=10g;</code>

RMAN增量備份

使用backup database時,都是全庫備份,每次這樣備份很耗時也占用磁盤空間,RMAN的增量備份就能解決這些問題。

這裡有兩種備份級别,級别0備份為全庫備份,級别1的備份為增量備份,一般情況下需要對資料進行0級别的備份之後在進行級别1的增量備份。

<code>RMAN&gt; backup incremental level 0 database;</code>

級别1的差異增量備份:

<code>RMAN&gt; backup incremental level 1 database;</code>

對映像副本進行增量備份

<code>RMAN&gt; run {     </code>

<code>2&gt; backup incremental level 1 </code><code>for</code> <code>recover of copy with tag </code><code>'incr_copy_backup'</code> <code>database;</code>

<code>3&gt; recover copy of database with tag </code><code>'incr_copy_backup'</code><code>;</code>

<code>4&gt; }</code>

每次執行這條指令,就可以使用映像的方式對資料庫進行增量備份。

 本文轉自 酥心糖 51CTO部落格,原文連結:http://blog.51cto.com/tryingstuff/1979382