Oracle備份的其它手段
前言
Oracle還提供了另外兩種方式來備份資料,一種是使用者管理備份,另一種是利用資料泵匯出資料。
使用使用者管理備份即使用SQLPLUS工具來備份,這種方式需要與作業系統的拷貝命令結合使用,如果是裸裝置或者ASM用起來就不是很方便了。在SQLPLUS工具中只有RECOVER命令,沒有RESTORE命令,這是因為使用者管理備份需要通過作業系統的拷貝命令還原資料庫,使用SQLPLUS工具的RECOVER命令恢復資料庫,使用者管理備份也是一種物理備份。使用EXPDP或者傳統的EXP備份稱為邏輯備份,這隻能是物理備份的輔助方式,不能作為資料庫備份的主要方式。
一、 使用者管理備份
使用使用者管理備份與使用RMAN備份方式的不同:
? 如果資料檔案有大量空塊,RMAN只會備份非空塊;如果是增量備份,那麼只會備份被修改的塊。而使用者管理備份無法實現增量備份去,且備份的時候會將資料檔案的所有塊包括空塊進行拷貝備份。
? 在資料庫開啟的情況下使用使用者管理備份,會有大量Redo日誌產生。
? 使用者管理備份無法檢測到損壞的塊。
如下為在資料庫開啟的狀態下,使用者管理備份情況:
1. 產生大量Redo日誌的原因
當資料庫在OPEN狀態時,使用使用者管理方式備份資料庫期間會產生大量的聯機Redo日誌,這是因為Oracle為了避免出現split block,將在備份期間修改的塊整個寫到聯機Redo日誌中,而不像正常情況下,只將修改的資料寫到聯機Redo日誌中。
預設情況下,資料庫塊大小為8KB,通常情況下Linux檔案系統的塊小於8KB,那麼存放在Linux檔案系統中的Oracle資料庫檔案的一個資料塊就對應了作業系統的多個塊。在作業系統中使用cp命令對檔案進行復制,是以作業系統塊為單位進行復制的。也就是說,對於Oracle資料庫檔案中一個8KB塊的複製,使用作業系統cp命令可能要拷貝多次才能完成一個Oracle資料塊的複製,如果在Oracle資料塊進行作業系統複製期間修改了這個資料塊,那麼原有資料塊和使用作業系統命令拷貝的塊可能就出現了不一致的情況,這就被稱為split block,Oracle認為這是不正確的塊。
為了避免split block的出現,在使用使用者管理備份之前,需要執行BEGIN BACKUP命令;命令執行以後發生的資料塊改變,Oracle都會將整個塊的資料記錄到Redo日誌中,這樣在恢復的時候,如果出現split block現象,就能從聯機Redo日誌中直接把整個資料塊拷貝回來。使用者管理備份結束後,執行END BACKUP命裡結束使用者管理備份,那麼聯機Redo日誌又將恢復到正常的記錄方式。
使用RMAN進行備份是以Oracle資料塊作為備份的基本單位,所以並不會出現split block想想,不會產生比平時多的聯機Redo日誌,這也是RMAN的優勢之一。
2. 使用者管理備份例項
使用使用者管理備份要求資料庫必須在歸檔模式下,執行以下步驟完成使用者管理方式的備份。
步驟1 啟動使用者管理備份
SQL> alter database begin backup;
步驟2 使用作業系統的cp命令拷貝資料庫所有資料檔案到備份目的地。
步驟3 結束使用者管理備份
SQL> alter database end backup;
步驟4 關閉資料庫例項
SQL> shutdown immediate;
步驟5 刪除所有的資料檔案
步驟6 啟動資料庫例項
SQL> startup
此時將會收到報錯。
步驟7 還原資料檔案
使用作業系統的cp命令將之前備份的資料檔案拷貝回原有目錄。
步驟8 再次開啟資料庫
執行一下命令嘗試再次開啟資料庫,提示需要介質恢復
SQL> alter database open;
步驟9 執行介質恢復
如果相關的歸檔Redo日誌和連線Redo日誌檔案都存在,那麼執行以下介質恢復命令:
SQL> RECOVER database;
步驟10 開啟資料庫
SQL> alter database open;
二、 匯入/匯出工具之資料泵
資料泵是Oracle最常用的資料匯入/匯出工具。資料泵工具的效能要比傳統EXP/IMP工具好的多,兩種工具之間的DUMP檔案完全不同,相互之間不能相容。資料泵匯出的知識表的資料,由於資料匯入之後實體地址發生了變化,所有索引在匯入的時候會重建。為了提高索引建立的效率,應該採用並行模式匯入。設定並行引數是提高資料泵效能最有效的手段,使用的並行可根據伺服器的CPU情況來決定。
資料泵是伺服器工具,備份檔案只能儲存在伺服器端,無法通過網路匯出到客戶端,但是資料泵匯出的DUMP檔案可以跨越所有平臺,匯入到不同平臺不同版本的資料中。使用IMPDP工具的NETWORK_LINK引數可以實現兩個資料庫之間的直接複製,這是非常有用的資料庫匯入技術。
資料泵在匯出過程中會用到UNDO表空間確保資料匯出的一致性,所以對大表的匯出可能會出現ORA-01555的錯誤。資料泵是邏輯備份,沒有物理備份的恢復過程,從這一點來說也需要保證資料的一致性。
對於跨位元組儲存順序的平臺來說,資料泵也有非常重要的地位,一方面在於資料泵匯出的DUMP檔案能夠跨平臺匯入,另一方面執行跨平臺的可傳輸表空間也需要用到資料泵工具。
三、 跨平臺資料遷移
Oracle支援在所有主流平臺上安裝部署,由於不同平臺資料儲存的位元組順序是不同的,簡單的遠端複製並不能完成資料庫的跨平臺遷移,因此平臺間的資料庫遷移自然就是面臨的問題之一。
1. 平臺位元組儲存順序
通過檢視V$TRANSPORTABLE_PLATFORM檢視可以檢視到Oracle支援的平臺及平臺的位元組儲存順序:
SQL> select * from v$transportable_platform order by platform_id;
PLATFORM_ID PLATFORM_NAME ENDIAN_FORMAT
----------- ---------------------------------- --------------------
1 Solaris[tm] OE (32-bit) Big
2 Solaris[tm] OE (64-bit) Big
3 HP-UX (64-bit) Big
4 HP-UX IA (64-bit) Big
5 HP Tru64 UNIX Little
6 AIX-Based Systems (64-bit) Big
7 Microsoft Windows IA (32-bit) Little
8 Microsoft Windows IA (64-bit) Little
9 IBM zSeries Based Linux Big
10 Linux IA (32-bit) Little
11 Linux IA (64-bit) Little
PLATFORM_ID PLATFORM_NAME ENDIAN_FORMAT
----------- ---------------------------------- --------------------
12 Microsoft Windows x86 64-bit Little
13 Linux x86 64-bit Little
15 HP Open VMS Little
16 Apple Mac OS Big
17 Solaris Operating System (x86) Little
18 IBM Power Based Linux Big
19 HP IA Open VMS Little
20 Solaris Operating System (x86-64) Little
21 Apple Mac OS (x86-64) Little
20 rows selected.
SQL>
從上面的查詢可以看出,不同平臺的ENDIAN值有兩種:Little和Big,如果兩個平臺的ENDIAN相同,那麼在它們之間執行資料遷移就與相同平臺間的資料遷移是一樣的,不需要特別的轉換步驟。如果兩個平臺的ENDIAN不同,那麼需要使用RMAN工具對不同的ENDIAN_FORMAT格式的檔案進行格式轉換,轉換之後的檔案才能用於跨平臺的資料傳送。
2. 跨平臺資料遷移方式的選擇
對於使用那種方式實現跨平臺的資料遷移,應該考慮實際環境的情況,使用RMAN和EXPDP的備份檔案恢復資料需要考慮需要恢復時的效能問題,如果伺服器之間通訊網速足夠快,使用可傳輸表空間可能有更少的時間消耗,但是由於可傳輸表空間傳送的是表空間對應的資料檔案,資料檔案包含著未使用的空塊,如果這部分空間過大會造成不必要的時間消耗。另外傳輸表空間在表空間轉換的時候需要變成只讀狀態,這對系統的使用會帶來影響。
四、 可傳輸表空間
可傳輸表空間是在跨位元組儲存順序的平臺之間遷移業務資料的方法,是一種物理的遷移方式。需要使用RMAN工具轉換位元組儲存順序,使用EXPDP/IMPDP工具備份和恢復後設資料。
1. 可傳輸表空間的限制
使用可傳輸表空間進行跨平臺的傳遞除了ENDIAN值要相同或經過轉換外,還有包含如下限制:
? 源資料庫和目標資料庫必須具有相同的資料字符集和國際字符集。
? 不能將表空間搬移到具有相同名稱表空間的目標資料庫中。
? 不能搬移SYSTEM表空間和SYS使用者物件所在的表空間。
? 如果要將表空間搬移到其它OS平臺,必須將初始化引數compatible設定為10.0以上。
? 如果沒有傳輸整個表,就不能傳輸表的一個分割槽。
2. 可傳輸表空間例項
跨平臺傳輸表空間環境資訊
資料庫型別 |
平臺 |
資料庫版本 |
資料儲存方式 |
ENDIAN_FORMAT |
源資料庫 |
AIX-Based System(64-bit) |
10.2.0.4 |
裸裝置 |
Big |
目標資料庫 |
Microsoft Windows IA(32-bit) |
11.2.0.1 |
檔案系統 |
Little |
步驟1 確定表空間是自包含
所謂表空間自包含指的是表空間包含的表及表的索引、分割槽及其他相關的段都儲存在該表空間中,如果表的索引或者表的某個分割槽或相關的其他段儲存在另外的表空間中,就認為該表空間非自包含。
執行包DBMS_TTS的過程TRANSPORT_SET_CHECK(需要具有EXECUTE_CATALOG_ROLE角色)確定表空間是否是自包含:
SQL> execute sys.dbms_tts.transport_set_check(‘test’,true);
查詢違反表空間自包含規則的相信資訊:
SQL> select * from sys.transport_set_violations;
確保查詢沒有任何記錄返回,如果有記錄返回表示表空間是非自包含表空間,需要手動處理顯示出來的問題。
注意:如果傳遞多個表空間可以dbms_tts.transport_set_check(‘test_1,test_2’,true);
步驟2 設定源資料庫表空間為只讀表空間
SQL> alter tablespace test read only;
使用傳輸表空間的一大缺點就在於,在執行可傳輸表空間的相關步驟之前需要將傳輸的表間設定為只讀,這對於系統使用會帶來一定的影響。
步驟3 匯出表空間的後設資料資訊
匯出使用者必須具有EXP_FULL_DATABASE角色許可權,執行一下命令匯出test表空間後設資料資訊:
$ expdp \’/ as sysdba \’ directory=dump_dir dumpfile=test.dmp transport_tablespace=test
注意:也可以直接在目標資料庫建立Database Link,在目標資料庫使用impdp工具中的network_link引數直接將源資料庫中相關表空間的後設資料匯入目標資料庫。
步驟4 使用RMAN將資料檔案轉換為支援相應平臺
由於AIX平臺到Windows平臺是跨位元組儲存順序的,所以不能直接進行傳輸,需要使用RMAN工具進行位元組儲存順序的轉換。使用RMAN連結到源資料庫,執行以下命令:
RMAN> convert tablespace test to platform ‘Microsoft Windows IA (32-bit)’ format=’/u01/test.dbf’;
注意:RMAN的轉換會將資料檔案對應的所有塊全部轉換,包塊未使用的空塊。
步驟5 傳輸轉儲檔案
將上面test表空間的後設資料轉儲檔案和資料檔案傳輸到目標資料庫。
步驟6 建立使用者
首先在目標資料庫上建立好test表空間對一個的所有使用者:
SQL> create user test identified by test;
步驟7 將表空間匯入目標資料庫
執行以下命令將傳輸的表空間後設資料匯入目標資料庫,執行使用者必須具有IMP_FULL_DATABASE許可權:
>impdp ‘ / as sysdba’ directory=dump_dir dumpfile=test.dmp transport_datafile=D:\app\oradata\orcl\test.dbf
步驟8 設定test表空間為可讀寫表空間
SQL> alter tablespace test read write;
該操作是要在源資料庫和目標資料庫都要執行的。
注意:使用資料泵工具完成的資料匯入匯出,或者使用資料泵工具完成的表空間傳輸都是可以在不同版本的資料庫之間完成的,但是RMAN備份、恢復和使用者管理備份的物理備份、恢復必須在相同的資料庫版本之間完成。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29339097/viewspace-1061332/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- rman備份的其它特性
- oracle的熱備份和冷備份Oracle
- oracle備份--離線備份Oracle
- Oracle裡邏輯備份、物理備份、Rman備份的區別Oracle
- oracle 備份Oracle
- oracle備份Oracle
- Oracle冷備份和熱備份的處理Oracle
- Oracle 熱備份和冷備份的區別Oracle
- oracle 如何不備份已經備份的歸檔Oracle
- Oracle資料庫的備份方法-冷備份(轉)Oracle資料庫
- ORACLE備份的分類Oracle
- Oracle備份及備份策略及基於Linux下 Oracle 備份策略(RMAN)OracleLinux
- Oracle 冷備份Oracle
- Oracle 熱備份Oracle
- oracle rac 備份Oracle
- ORACLE備份策略Oracle
- ORACLE 備份表Oracle
- Oracle 聯機備份 離線備份 物理備份 恢復Oracle
- Oracle的差異增量備份和累積增量備份Oracle
- Oracle 11g RMAN備份-增量備份Oracle
- 揭祕ORACLE備份之--冷備份(也叫離線備份)Oracle
- 揭祕ORACLE備份之--熱備份(也叫聯機備份)Oracle
- ORACLE備份中的壓縮Oracle
- 搭建Oracle的exp備份機Oracle
- Oracle冷備份級冷備份的不完全恢復Oracle
- oracle聯機熱備份的原理,及rman增量備份原理Oracle
- Oracle的差異增量備份和累積增量備份(zt)Oracle
- Oracle聯機熱備份的原理及rman增量備份原理Oracle
- linux定時備份mysql並同步到其它伺服器LinuxMySql伺服器
- oracle資料庫備份之exp增量備份Oracle資料庫
- Oracle 11g RMAN備份-備份標籤Oracle
- 揭祕ORACLE備份之--邏輯備份(EXP)Oracle
- 揭祕ORACLE備份之--邏輯備份(EXPDP)Oracle
- Oracle冷備份(一致備份)指令碼Oracle指令碼
- ORACLE備份策略(轉)Oracle
- ORACLE備份指令碼Oracle指令碼
- oracle之rman備份Oracle
- ORACLE備份策略(1)Oracle