--時間:2020年9月2日 --作者:飛翔的小胖豬 1 備份1.1 備份說明rman可進行熱備和冷備,一般情況下都是進行熱備即不數(shù)據(jù)庫備份,。執(zhí)行的熱備需要數(shù)據(jù)庫處于歸檔模式下,。
1.2 設(shè)置歸檔模式歸檔模式開啟過后,當一個在線重做日志寫滿了過后,,會切換到下一個在線重做日志中進行日志寫入,。之前的在線重做日志會形成歸檔日志存放于歸檔日志目錄中。如果歸檔日志目錄空間使用率100%,,那么整個數(shù)據(jù)庫會無法寫入新數(shù)據(jù)而導(dǎo)致數(shù)據(jù)庫GG,,所以在開啟設(shè)置數(shù)據(jù)庫為歸檔模式后需要定時的檢查歸檔日志目錄剩余空間大小,及時清理過期的數(shù)據(jù)或擴容目錄空間,。 設(shè)置歸檔日志路徑 SQL> alter system set log_archive_dest_1='location=/u01/arch' #設(shè)置為本地目錄作為歸檔日志目錄,,紅色字體根據(jù)自己定義的目錄填寫 SQL> alter system set log_archive_dest_1='location=+DATA/RACDB/ARCH' scope=spfile sid='*'; #使用ASM的環(huán)境下使用此命令 SQL> show parameter log_archive_dest_1; #查看確認設(shè)置的歸檔日志路徑 開啟歸檔 歸檔模式的切換必須處于mount狀態(tài)下,其他狀態(tài)下不行喲,。 SQL> shutdown immediate; #先正常關(guān)閉在用數(shù)據(jù)庫,如果你的數(shù)據(jù)庫正在運行 SQL> startup mount; #啟動數(shù)據(jù)庫到mount階段 SQL> alter database archivelog; #設(shè)置數(shù)據(jù)庫為歸檔模式 SQL> alter database open; #啟動數(shù)據(jù)庫到open狀態(tài) SQL> archive log list; #查看數(shù)據(jù)庫當前是否處于歸檔模式下 關(guān)閉歸檔模式 關(guān)閉歸檔模式和開啟的操作一樣,,只能在mount狀態(tài)下執(zhí)行。 SQL> shutdown immediate; #先正常關(guān)閉在用數(shù)據(jù)庫,如果你的數(shù)據(jù)庫正在運行 SQL> startup mount; #啟動數(shù)據(jù)庫到mount階段 SQL> alter database noarchivelog; #設(shè)置數(shù)據(jù)庫為歸檔模式 SQL> alter database open; #啟動數(shù)據(jù)庫到open狀態(tài) SQL> archive log list; #查看數(shù)據(jù)庫當前是否處于歸檔模式下
1.3 備份腳本腳本中的ORACLE_SID,、ORACLE_BASE,、ORACLE_HOME、PATH這幾個環(huán)境變量請根據(jù)自己的實際情況填寫,。 1 #!/bin/bash 2 export ORACLE_SID=orcl 3 export ORACLE_BASE=/app/oracle 4 export ORACLE_HOME=/app/oracle/product/11.2.0/dbhome_1 5 export PATH=$DB_HOME/bin:/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/oracle/bin 6 export NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS' 7 echo '------------------------------------' >> /tmp/rman_PRD04_full.log 8 echo "Start FULL Backup at `date +%Y-%m-%d:%H:%M:%S` " >> /tmp/rman_PRD04_full.log 9 echo '------------------------------------' >> /tmp/rman_PRD04_full.log 10 11 rman target / log /tmp/rman_PRD04_full.log append <<EOF 12 run{ 13 allocate channel c1 type disk; 14 allocate channel c2 type disk; 15 allocate channel c3 type disk; 16 backup database format '/app/archive_backup/full_%d_%T_%s_%p.bak'; 17 SQL 'alter system archive log current'; 18 SQL 'alter system archive log current'; 19 backup archivelog all format '/app/archive_backup/arch_%d_%T_%s_%p.bak'; 20 backup current controlfile format '/app/archive_backup/ct1_%d_%T_%s_%p.ctl.bak'; 21 backup spfile format '/app/archive_backup/%d_%T_%s_%p.spfile.bak'; 22 } 23 EOF 釋義: 13-15行:打開了三個通道介質(zhì)都為disk,,rman備份建議最多使用4個通道。 16行:定義備份過后的數(shù)據(jù)文件路徑及命名格式,。 17-18行:切換數(shù)據(jù)庫在線重做日志文件,。 19行:定義備份的歸檔日志文件路徑及命名格式。(順序必須在備份數(shù)據(jù)文件之后),,備份的是數(shù)據(jù)庫數(shù)據(jù)文件備份期間產(chǎn)生的歸檔日志,。 20行:定義備份的控制文件路徑及命令格式。 21行:定義備份的spfile文件路徑及命令格式,。
1.4 RMAN基礎(chǔ)操作$rman target / #以數(shù)據(jù)庫的sysdba用戶進入到rman中,,當設(shè)置了ORACLE_SID同時對應(yīng)實例的數(shù)據(jù)庫處于nomount以上的狀態(tài)時,該命令會自動連接到該實例中,。 不然需要使用set dbid 'xxxxxx';設(shè)置連接到哪一個實例中 RMAN> show all; #查看所有配置 釋義: ①configure retention policy to redundancy 1: 是用來決定那些備份不再需要了,,它一共有三種可選項,分別是 復(fù)制代碼 代碼如下: CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS; CONFIGURE RETENTION POLICY TO REDUNDANCY 5; CONFIGURE RETENTION POLICY TO NONE; 第一種recover window是保持所有足夠的備份,,可以將數(shù)據(jù)庫系統(tǒng)恢復(fù)到最近七天內(nèi)的任意時刻,。任何超過最近七天的數(shù)據(jù)庫備份將被標記為obsolete,。 第二種redundancy是為了保持可以恢復(fù)的最新的5份數(shù)據(jù)庫備份,任何超過最新5份的備份都將被標記為redundancy,。它的默認值是1份,。 第三種不需要保持策略,clear將恢復(fù)回默認的保持策略,。 一般最安全的方法是采用第二種保持策略,。 ②CONFIGURE BACKUP OPTIMIZATION OFF 默認值為關(guān)閉,如果打開,,rman將對備份的數(shù)據(jù)文件及歸檔等文件進行一種優(yōu)化的算法,。 ③Configure default device type to disk: 是指定所有I/O操作的設(shè)備類型是硬盤或者磁帶,默認值是硬盤 磁帶的設(shè)置是CONFIGURE DEFAULT DEVICE TYPE TO SBT; ④CONFIGURE CONTROLFILE AUTOBACKUP OFF 強制數(shù)據(jù)庫在備份文件或者執(zhí)行改變數(shù)據(jù)庫結(jié)構(gòu)的命令之后將控制文件自動備份,,默認值為關(guān)閉,。這樣可以避免控制文件和catalog丟失后,控制文件仍然可以恢復(fù),。 ⑤CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F' 是配置控制文件的備份路徑和備份格式 ⑥CONFIGURE DEVICE TYPE DISK PARALLELISM 1; 是配置數(shù)據(jù)庫設(shè)備類型的并行度,并行的數(shù)目決定了開啟通道的個數(shù),。 ⑦CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1 是否啟動復(fù)合備份,向指定的i/o設(shè)備中指定的位置生成指定的份數(shù),。缺省為1.這個配置僅用于數(shù)據(jù)文件和歸檔文件,,并且,只有在自動分配通道時才會生效,! ⑧CONFIGURE SNAPSHOT CONTROLFILE NAME TO 'C:ORACLE…SNCFTEST.ORA' 是配置控制文件的快照文件的存放路徑和文件名,,這個快照文件是在備份期間產(chǎn)生的,用于控制文件的讀一致性,。 ⑨CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT 'C:...%d_DB_%u_%s_%p'; 是配置備份文件的備份路徑和備份格式 ⑩CONFIGURE EXCLUDE FOR TABLESPACE <tablespace> [CLEAR]; 此命令用于將指定的表空間不備份到備份集中,, 此命令對只讀表空間是非常有用的。 校驗備份數(shù)據(jù) 校驗的目的是檢測當前以存在rman備份數(shù)據(jù)是否有效等功能,。 檢驗操作不會對以備份數(shù)據(jù)造成影響,。可以放心大膽的使用,。 RMAN> crosscheck backup; #校驗所有備份數(shù)據(jù)信息
RMAN> crosscheck backup of database; #校驗數(shù)據(jù)庫備份數(shù)據(jù)信息
RMAN> crosscheck backup of tablespacesystem; #校驗數(shù)據(jù)庫表空間備份數(shù)據(jù)信息
RMAN> crosscheck backup of controlfile; #校驗控制文件備份信息
RMAN> crosscheck backup of spfile; #檢驗數(shù)據(jù)庫配置文件備份信息
RMAN> crosscheck archivelog all; #檢驗歸檔日志文件數(shù)據(jù)信息
RMAN> crosscheck backup of archivelog all; #檢驗歸檔日志文件備份信息
查看備份數(shù)據(jù) 查看rman中備份文件信息,,為保證數(shù)據(jù)的準確性,在執(zhí)行查看前請先使用crosscheck命令對備份數(shù)據(jù)進行一次檢驗,。 查看命令是無害的隨意用,,不會修改任何東西。 RMAN> list backup; #查看所有備份數(shù)據(jù) RMAN> list backup of database; #查看數(shù)據(jù)庫備份數(shù)據(jù) RMAN> list backup of tablespacetable_name; #查看表空間備份數(shù)據(jù) RMAN> list backup of controlfile; #查看控制文件備份數(shù)據(jù) RMAN> list backup of spfile; #查看數(shù)據(jù)庫配置文件備份數(shù)據(jù) RMAN> list backupset id; #這里ID指的是備份集的ID號 比如2,、3. RMAN> list archivelog all; #查看所有的歸檔日志文件 刪除歸檔及備份文件 為了避免備份文件過多導(dǎo)致存儲壓力可以制定計劃定時清理備份數(shù)據(jù),,在rman中刪除數(shù)據(jù)時請先使用crosscheck命令對備份數(shù)據(jù)進行一次檢驗。 刪除命令威力還是很大的,,一定要按照生產(chǎn)規(guī)范執(zhí)行數(shù)據(jù)保留策略,。在進行清理操作時請多次確認。在執(zhí)行刪除操作時請小心,!小心,!小心!不要誤操作了,。 刪除歸檔日志 RMAN> delete expired archivelog all,; #刪除過期的歸檔日志 RMAN> DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7'; #刪除7天前的歸檔日志 RMAN> DELETE ARCHIVELOG FROM TIME 'SYSDATE-7'; #刪除七天內(nèi)的歸檔 RMAN> report obsolete; #報告陳舊備份 RMAN> delete obsolete; #刪除陳舊備份 RMAN> delete expired backup; #刪除過期的數(shù)據(jù),,和rman的保留策略設(shè)置有關(guān) RMAN> delete expired copy ; #刪除EXPIRED副本 RMAN> delete backupset 9; #刪除備份集編號9的 RMAN> delete backuppiece ¨F:\backup\DEMO_9.bak¨; #刪除特定備份片 RMAN> delete backup; #刪除所有備份 RMAN> RMAN> delete copy; #刪除映象副本 RMAN> delete datafilecopy ¨F:\backup\DEMO_9.bak¨ #刪除特定映象副本
2 RMAN恢復(fù)數(shù)據(jù)2.1 恢復(fù)說明數(shù)據(jù)庫啟動需要經(jīng)過: close 階段 ----> nomount階段 -----> mount階段 ----> open階段 close階段: 狀態(tài):數(shù)據(jù)庫程序未運行,。 恢復(fù)內(nèi)容:可以進行物理文件的移動拷貝。創(chuàng)建啟動前必要的文件夾,、物理拷貝spfile文件到正確目錄,。 nomount階段: 狀態(tài):oracle程序數(shù)據(jù)庫中必要的文件夾存及特定文件存在,該階段不會去檢測控制文件和數(shù)據(jù)庫數(shù)據(jù)文件是否存在,。但是如spfile文件丟失是無法啟動到nomount狀態(tài),。 恢復(fù)內(nèi)容:可以進行控制文件的恢復(fù),如從備份位置恢復(fù)控制文件或使用命令重建控制文件等操作,。 mount階段: 狀態(tài):階段需要有控制文件,。能夠正常讀取讀取控制文件中的數(shù)據(jù)庫信息如數(shù)據(jù)文件路徑,當前scn號等信息,。 恢復(fù)內(nèi)容:該階段組要可以對具體的數(shù)據(jù)文件進行恢復(fù)及redo 日志文件丟失重建等操作 open: 狀態(tài):數(shù)據(jù)庫的最終狀態(tài),。控制文件中的所有文件及scn號一致的情況下可以啟動成功,,如果scn號不一致可能需要進行實例恢復(fù),。
2.2 恢復(fù)控制文件(有備份)思路: 強制關(guān)閉數(shù)據(jù)庫,手動啟動數(shù)據(jù)庫到mount階段,,恢復(fù)丟失的控制文件,,然后在mount階段恢復(fù)同步一下數(shù)據(jù)庫最后打開數(shù)據(jù)庫。 步驟: 1.強制關(guān)閉數(shù)據(jù)庫 2.啟動數(shù)據(jù)庫到nomount狀態(tài) 3.使用rman連接數(shù)據(jù)庫 4.使用備份文件恢復(fù)control文件 5.在rman管理器中啟動數(shù)據(jù)庫到mount階段 6.執(zhí)行恢復(fù)數(shù)據(jù)庫 7.打開數(shù)據(jù)庫 #強制關(guān)閉數(shù)據(jù)庫 SQL> shutdown abort;
2.3 重建控制文件(沒有備份)在異常斷電可能導(dǎo)致控制文件丟失或GG了,,又沒有備份那么只有嘗試重建控制文件,。 控制文件丟失數(shù)據(jù)庫是無法啟動到mount狀態(tài)的。在rac環(huán)境中需要設(shè)置cluster_database為False,show parameter cluster_database 思路: 備份現(xiàn)有數(shù)據(jù)庫配置文件,,通過配置文件找到數(shù)據(jù)庫名和具體的數(shù)據(jù)存放路徑,,在nomount階段下獲取字符集,使用獲取到的數(shù)據(jù)填充命令重建數(shù)據(jù)庫控制文件,。 步驟: 1.強制關(guān)閉數(shù)據(jù)庫 2.啟動數(shù)據(jù)庫到nomount狀態(tài) 3.備份spfile文件 4.獲取數(shù)據(jù)文件列表,、數(shù)據(jù)庫實例名、字符集等信息 5.完善控制文件重建命令 6.打開數(shù)據(jù)庫 備份spfile文件 備份spfile文件,,如果spfile不小心被你玩崩了那么你可以使用 startup pfile='pfile路徑'指定之前備份的,。 使用服務(wù)器參數(shù)文件spfile創(chuàng)建文本參數(shù)文件pfile: spfile丟失過后可以直接復(fù)制,,也可以使用如下命令恢復(fù)spfile文件。 SQL> create spfile from pfile='/app/oracle/product/11.2.0/dbhome_1/dbs/bakpfile.ora';
獲取數(shù)據(jù)庫名,,在spfile文件中 在文件中查看 db_name= 行內(nèi)容并記錄下來,。 [oracle@localhost dbs]$ cat spfileorcl.ora| more b_cache_size=637534208 orcl.__java_pool_size=16777216 orcl.__large_pool_size=33554432 orcl.__oracle_base='/app/oracle'#ORACLE_BASE set from environment orcl.__pga_aggregate_target=637534208 orcl.__sga_target=922746880 orcl.__shared_io_pool_size=0 orcl.__shared_pool_size=218103808 orcl.__streams_pool_size=0 *.audit_file_dest='/app/oracle/admin/orcl/adump' *.audit_trail='db' *.compatible='11.2.0.4.0' *.control_files='/app/oracle/oradata/orcl/control01.ctl','/app/oracle/fast_recC *.db_block_size=8192 *.db_domain='' *.db_name='orcl' *.db_recovery_file_dest='/app/oracle/fast_recovery_area' *.db_recovery_file_dest_size=4385144832 *.diagnostic_dest='/app/oracle' *.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)' *.log_archive_dest_1='location=/app/archive_data' *.memory_target=1547698176 *.open_cursors=300 *.processes=150 *.remote_login_passwordfile='EXCLUSIVE' *.undo_tablespace='UNDOTBS1' 獲取字符集,很重要(在nomount狀態(tài)) SQL> select userenv('language') from dual;
獲取數(shù)據(jù)文件列表 一般在$ORACLE_BASE/oradata/實例名/下ASM除外,。記錄下所有的文件依次填寫在命令中,。 $ ll $ORACLE_BASE/oradata/orcl/ -rw-r----- 1 oracle oinstall 9.3M Sep 1 11:58 control01.ctl.bak -rw-r----- 1 oracle oinstall 331M Sep 1 11:57 example01.dbf drwxr-x--- 3 oracle oinstall 4.0K Aug 20 06:25 ORCL -rw-r----- 1 oracle oinstall 501M Sep 1 11:54 redo01.log -rw-r----- 1 oracle oinstall 501M Sep 1 11:57 redo02.log -rw-r----- 1 oracle oinstall 501M Sep 1 11:54 redo03.log-rw-r----- 1 oracle oinstall 541M Sep 1 11:57 sysaux01.dbf -rw-r----- 1 oracle oinstall 751M Sep 1 11:57 system01.dbf -rw-r----- 1 oracle oinstall 21M Sep 1 11:54 temp01.dbf -rw-r----- 1 oracle oinstall 101M Sep 1 11:57 undotbs01.dbf -rw-r----- 1 oracle oinstall 5.1M Sep 1 11:57 users01.dbf 生成控制文件 在nomount中執(zhí)行命令,按照之前查看到的文件填寫??刂莆募蛇^后會自動啟動到mount狀態(tài),。 #紅色字體部分請按照自己實際環(huán)境填寫。 打開數(shù)據(jù)庫 在成功執(zhí)行了控制文件重建操作后,數(shù)據(jù)庫會自動啟動到mount狀態(tài),。此時可以嘗試open數(shù)據(jù)庫,。如果無法直接open嘗試recover一下再open。 SQL> alter database open;
2.4 恢復(fù)丟失的數(shù)據(jù)文件如果沒有備份至故障期間的歸檔重做日志,那么只能恢復(fù)到備份的時候,,不能進行完全恢復(fù),。 思路: 強制關(guān)閉數(shù)據(jù)庫,在rman中啟動數(shù)據(jù)庫到nomount狀態(tài),,恢復(fù)控制文件(可選),啟動數(shù)據(jù)庫到mount階段,,恢復(fù)相關(guān)數(shù)據(jù)文件,recover一下數(shù)據(jù),,最后打開數(shù)據(jù)庫,。 步驟: 1.強制關(guān)閉數(shù)據(jù)庫 2.啟動數(shù)據(jù)庫到nomount狀態(tài) 3.恢復(fù)控制文件(可選) 4.切換數(shù)據(jù)庫到mount模式,,restore數(shù)據(jù)文件 5.recover數(shù)據(jù)文件 6.打開數(shù)據(jù)庫
2.5 恢復(fù)丟失的某個數(shù)據(jù)文件思路: 離線丟失的數(shù)據(jù)文件,,在rman中恢復(fù)丟失的數(shù)據(jù)文件,,recover一下恢復(fù)的數(shù)據(jù)文件,最后上線數(shù)據(jù)文件,。 步驟: 1.離線丟失數(shù)據(jù)文件 2.使用備份數(shù)據(jù)恢復(fù)丟失文件 3.recover剛才恢復(fù)的文件 4.上線數(shù)據(jù)文件 關(guān)閉數(shù)據(jù)庫 啟動到mount狀態(tài),,也可以嘗試啟動到open狀態(tài)(一般啟動open的過程中會提示文件offline) offline指定的數(shù)據(jù)庫文件 SQL> alter database datafile '/app/oracle/oradata/orcl/example01.dbf' offline; SQL> alter database open;
從rman中恢復(fù)數(shù)據(jù)文件 RMAN> restore datafile '/app/oracle/oradata/orcl/example01.dbf';
獲取實際的數(shù)據(jù)文件路徑 SQL> set linesize 200; SQL> col file_name for a40; SQL> select file_name,file_id,tablespace_name,status,online_status from dba_data_files
查看到offline的文件實際路徑,為了保證scn號一致還需要獲取到文件路徑在rman中執(zhí)行恢復(fù),。 RMAN> recover datafile '/app/oracle/oradata/orcl/example01.dbf';
online數(shù)據(jù)文件,,重啟數(shù)據(jù)庫 SQL> alter database datafile '/app/oracle/oradata/orcl/example01.dbf' online; SQL> shutdown immediate SQL> startup
|
|