OracleDatabase Backup策略的相關概念及使用

來源:互聯網
上載者:User
這篇論壇文章主要介紹了OracleDatabase Backup策略的相關概念及使用中的注意事項,詳細內容請大家參考下文

一、瞭解備份的重要性

可以說,從電腦系統出世的那天起,就有了備份這個概念,電腦以其強大的速度處理能力,取代了很多人為的工作,但是,往往很多時候,它又是那麼弱不禁風,主板上的晶片、主板電路、記憶體、電源等任何一項不能正常工作,都會導致電腦系統不能正常工作。當然,這些損壞可以修複,不會導致應用和資料的損壞。但是,如果電腦的硬碟損壞,將會導致資料丟失,此時必須用備份恢複資料。

其實,在我們的現實世界中,已經就存在很多備份策略,如RAID技術,雙機熱備,叢集技術發展的不就是電腦系統的備份和高可用性嗎?有很多時候,系統的備份的確就能解決Database Backup的問題,如磁碟介質的損壞,往往從鏡相上面做簡單的恢複,或簡單的切換機器就可以了。

但是,上面所說的系統備份策略是從硬體的角度來考慮備份與恢複的問題,這是需要代價的。我們所能選擇備份策略的依據是:丟是資料的代價與確保資料不丟失的代價之比。還有的時候,硬體的備份有時根本滿足不了現實需要,假如你誤刪了一個表,但是你又想恢複的時候,資料庫的備份就變的重要了。Oracle本身就提供了強大的備份與恢複策略,這裡我們只討論ORACLE備份策略,以下的備份都是指OracleDatabase Backup,恢複將放到下一講中。

所謂備份,就是把資料庫複寫到傾印裝置的過程。其中,傾印裝置是指用於放置資料庫拷貝的磁帶或磁碟。

能夠進行什麼樣的恢複依賴於有什麼樣的備份。作為 DBA,有責任從以下三個方面維護資料庫的可恢複性:

·使資料庫的失效次數減到最少,從而使資料庫保持最大的可用性;

·當資料庫不可避免地失效後,要使恢復減到最少,從而使恢複的效率達到最高;

·當資料庫失效後,要確保盡量少的資料丟失或根本不丟失,從而使資料具有最大的可恢複性。

災難恢複的最重要的工作是設計充足頻率的硬碟備份過程。備份過程應該滿足系統要求的可恢複性。例如,如果資料庫可有較長的關機時間,則可以每周進行一次冷備份,並歸檔重做日誌,對於24*7的系統,或許我們考慮的只能是熱備份。 如果每天都能備份當然會很理想,但要考慮其現實性。企業都在想辦法降低維護成本,現實的方案才可能被採用。只要仔細計劃,並想辦法達到資料庫可用性的底線,花少量的錢進行成功的備份與恢複也是可能的。

二、瞭解Oracle的運行方式

ORACLE資料庫有兩種運行方式:一是歸檔方式(ARCHIVELOG),歸檔方式的目的是當資料庫發生故障時最大限度恢複資料庫,可以保證不丟失任何已提交的資料;二是不歸檔方式(NOARCHIVELOG),只能恢複資料庫到最近的回收點(冷備份或是邏輯備份)。我們根據資料庫的高可用性和使用者可承受丟失的工作量的多少,對於生產資料庫,強烈要求採用為歸檔方式;那些正在開發和調試的資料庫可以採用不歸檔方式。

如何改變資料庫的運行方式,在建立資料庫時,作為建立資料庫的一部分,就決定了資料庫初始的存檔方式。一般情況下為NOARCHIVELOG方式。當資料庫建立好以後,根據我們的需要把需要運行在歸檔方式的資料庫改成ARCHIVELOG方式。

1、改變不歸檔方式為為歸檔方式

a.關閉資料庫,備份已有的資料,改變資料庫的運行方式是對資料庫的重要改動,所以要對資料庫做備份,對可能出現的問題作出保護。

b. 修改初試化參數,使能自動封存

修改(添加)初始設定檔案init[SID].ora參數:

log_archive_start=true #啟動自動歸檔

log_archive_format=ARC%T%S.arc #歸檔檔案格式

log_archive_dest=/arch12/arch #歸檔路徑

在8i中,可以最多有五個歸檔路徑,並可以歸檔到其它伺服器,如備用資料庫(standby database)伺服器

c.啟動Instance到Mount狀態,即載入資料庫但不開啟資料庫:

$》SVRMGRL

SVRMGRL 》connect internal

SVRMGRL 》startup mount

d.發出修改命令

SVRMGRL 》alter database archivelog;

SVRMGRL》alter database open;

2、改變歸檔狀態為不歸檔狀態

與以上步驟相同,但有些操作不一樣,主要是在以上的b操作中,現在為刪除或注釋該參數,在d操作中,命令為

SVRMGRL 》alter database noarchivelog;

注意,從歸檔方式轉換到非歸檔方式後一定要做一次資料庫的全冷備份,防止意外事件的發生。

三、Oracle備份的分類

簡單的按照備份進行的方式,可以分為邏輯備份、冷備份(離線備份)、熱備份(聯機備份),其實冷備份與熱備份又可以合稱為物理備份

按照備份的工具,可以分為EXP/IMP備份、OS拷貝、RMAN、第三方工具,如VERITAS

以下我們將從多個角度來說明以上的各種備份方式

1、EXP/IMP邏輯備份

匯入/匯出是ORACLE倖存的最古老的兩個命令列工具了,其實我從來不認為Exp/Imp是一種好的備份方式,正確的說法是Exp/Imp只能是一個好的轉儲工具,特別是在小型資料庫的轉儲,資料表空間的遷移,表的抽取,檢測邏輯和物理衝突等中有不小的功勞。當然,我們也可以把它作為小型資料庫的物理備份後的一個邏輯輔助備份,也是不錯的建議。

對于越來越大的資料庫,特別是TB級資料庫和越來越多資料倉儲的出現,EXP/IMP越來越力不從心了,這個時候,資料庫的備份都轉向了RMAN和第三方工具。下面我們還是簡要介紹一下EXP/IMP的使用。

i、使用方法

Exp parameter_name=value

Or Exp parameter_name=(value1,value2……)

只要輸入參數help=y就可以看到所有協助

如:

C:\》set nls_lang=simplified chinese_china.zhs16gbk

C:\》exp -help

Export: Release 8.1.6.0.0 - Production on 星期四 4月 10 19:09:21 2003

(c) Copyright 1999 Oracle Corporation. All rights reserved.

通過輸入 EXP 命令和使用者名稱/口令,您可以

在使用者 / 口令之後的命令:

執行個體: EXP SCOTT/TIGER

或者,您也可以通過輸入跟有各種參數的 EXP 命令來控制“匯出”

的運行方式。要指定參數,您可以使用關鍵字:

格式: EXP KEYWORD=value 或 KEYWORD=(value1,value2,。..,valueN)

執行個體: EXP SCOTT/TIGER GRANTS=Y TABLES=(EMP,DEPT,MGR)

或 TABLES=(T1: P1,T1: P2),如果 T1 是分區表

USERID 必須是命令列中的第一個參數。

關鍵字 說明(預設) 關鍵字 說明(預設)

--------------------------------------------------------------------------

USERID 使用者名稱/口令 FULL 匯出整個檔案 (N)

BUFFER 資料緩衝區的大小 OWNER 所有者使用者名稱列表

FILE 輸出檔案 (EXPDAT.DMP) TABLES 表名列表

COMPRESS 匯入一個範圍 (Y) RECORDLENGTH IO 記錄的長度

GRANTS 匯出許可權 (Y) INCTYPE 增量匯出類型

INDEXES 匯出索引 (Y) RECORD 跟蹤增量匯出 (Y)

ROWS 匯出資料行 (Y) PARFILE 參數檔案名稱

CONSTRAINTS 匯出限制 (Y) CONSISTENT 交叉表一致性

LOG 螢幕輸出的記錄檔 STATISTICS 分析對象 (ESTIMATE)

DIRECT 直接路徑 (N) TRIGGERS 匯出觸發器 (Y)

FEEDBACK 顯示每 x 行 (0) 的進度

FILESIZE 各轉儲檔案的最大尺寸

QUERY 選定匯出表子集的子句

下列關鍵字僅用於可傳輸的資料表空間

TRANSPORT_TABLESPACE 匯出可傳輸的資料表空間中繼資料 (N)

TABLESPACES 將傳輸的資料表空間列表

在沒有警告的情況下成功終止匯出。

C:\》

協助已經很詳細的說明了參數的意義和使用方法,並列舉了幾個簡單的例子,注意的是,從8i開始,已經開始支援資料子集的方法,就是可以指定自己的Where條件,可以從表中匯出一行或多行資料。

注意上面的set nls_lang=simplified chinese_china.zhs16gbk,通過設定環境變數,可以讓exp的協助以中文顯示,如果set nls_lang=American_america.字元集,那麼你的協助就是英文的了。

增量和累計匯出必須在全庫方式下才有效,而且,大多數情況下,增量和累計匯出並沒有想象中的那麼有效。ORACLE從9i開始,不再支援增量匯出和累計匯出。

ii、資料表空間傳輸

資料表空間傳輸是8i新增加的一種快速在資料庫間移動資料的一種辦法,是把一個資料庫上的格式資料檔案附加到另外一個資料庫中,而不是把資料匯出成Dmp檔案,這在有些時候是非常管用的,因為傳輸資料表空間移動資料就象複製檔案一樣快。

關於傳輸資料表空間有一些規則,即:

·來源資料庫和目標資料庫必須運行在相同的平台上。

·來源資料庫與目標資料庫必須使用相同的字元集。

·來源資料庫與目標資料庫一定要有相同大小的資料區塊(9i已經不用)

·目標資料庫不能有與遷移資料表空間同名的資料表空間

·SYS的對象不能遷移

·必須傳輸自包含的對象集

·有一些對象,如物化視圖,基於函數的索引等不能被傳輸

可以用以下的方法來檢測一個資料表空間或一套資料表空間是否符合傳輸通訊協定:

exec sys.dbms_tts.transport_set_check(‘tablespace_name’,true);

select * from sys.transport_set_violation;

如果沒有行選擇,表示該資料表空間只包含表資料,並且是自包含的。對於有些非自包含的資料表空間,如資料資料表空間和索引資料表空間,可以一起傳輸。

以下為簡要使用步驟,如果想參考詳細使用方法,也可以參考ORACLE線上說明。

a.設定資料表空間為唯讀(假定資料表空間名字為APP_Data 和APP_Index)

alter tablespace app_data read only;

alter tablespace app_index read only;

b.發出EXP命令

SQL》host exp userid=”””sys/password as sysdba”””

transport_tablespace=y tablespace=(app_data, app_index)

以上需要注意的是

·為了在SQL中執行EXP,USERID必須用三個引號,在UNIX中也必須注意避免“/”的使用

·在816和以後,必須使用sysdba才能操作

·這個命令在SQL中必須放置在一行(這裡是因為顯示問題放在了兩行)

c.拷貝資料檔案到另一個地點,即目標資料庫

可以是cp(unix)或copy(windows)或通過ftp傳輸檔案(一定要在bin方式)

d.把本地的資料表空間設定為讀寫

e.在目標資料庫附加該資料檔案

imp file=expdat.dmp userid=”””sys/password as sysdba”””

transport_tablespace=y

“datafile=(c:\temp\app_data,c:\temp\app_index)”

f.設定目標資料庫資料表空間為讀寫

alter tablespace app_data read write;

alter tablespace app_index read write;

iii、匯出/匯入與字元集

明白ORACLE的多國語言設定,ORACLE多國語言設定是為了支援世界範圍的語言與字元集,一般對語言提示,貨幣形式,排序方式和CHAR,VARCHAR2,CLOB,LONG欄位的資料的顯示等有效。ORACLE的多國語言設定最主要的兩個特性就是國家語言設定與字元集設定,國家語言設定決定了介面或提示使用的語言種類,字元集決定了資料庫儲存與字元集有關資料(如文本)時候的編碼規則。正如剛才上面的一個小例子,環境變數NLS_LANG的不同,導致EXP協助發生變化,這就是多國語言設定的作用(NLS_LANG包含國家語言設定與字元集設定,這裡起作用的是國家語言設定,而不是字元集)。

ORACLE字元集設定,分為資料庫字元集和用戶端字元集環境設定。在資料庫端,字元集在建立資料庫的時候設定,並儲存在資料庫props$表中,對於8i以上產品,已經可以採用“Alter database character set 字元集”來修改資料庫的字元集,但也僅僅是從子集到超集,不要通過update props$來修改字元集,如果是不支援的轉換,可能會失去所有與字元集有關的資料,就是支援的轉換,也可能導致資料庫的不正常工作。字元集分為單一位元組字元集與多位元組字元集,US7ASCII就是典型的單一位元組字元集,在這種字元集中length=lengthb,而ZHS16GBK就是常用的雙位元組字元集,在這裡lengthb=2*length。

在用戶端的字元集環境比較簡單,主要就是環境變數或登錄機碼NLS_LANG,注意NLS_LANG的優先順序別為:參數檔案à註冊表à環境變數àalter session。NLS_LANG的組成為“國家語言設定。字元集”,如nls_lang=simplified chinese_china.zhs16gbk。用戶端的字元集最好與資料庫端一樣(國家語言設定可以不一樣,如zhs16gbk的字元集,用戶端可以是nls_lang =simplified chinese_china.zhs16gbk或Ameircan_America.zhs16gbk,都不影響資料庫字元的正常顯示),如果字元集不一樣,而且字元集的轉換也不相容,那麼用戶端的資料顯示與匯出/匯入的與字元集有關的資料將都是亂碼。

使用一點點技巧,就可以使匯出/匯入在不同的字元集的資料庫上轉換資料。這裡需要一個2進位檔案編輯工具即可,如uedit32。用編輯方式開啟匯出的dmp檔案,擷取2、3位元組的內容,如00 01,先把它轉換為10進位數,為1,使用函數NLS_CHARSET_NAME即可獲得該字元集:

SQL》 select nls_charset_name(1) from dual;

NLS_CHARSET_NAME(1)

-------------------

US7ASCII

可以知道該dmp檔案的字元集為US7ASCII,如果需要把該dmp檔案的字元集換成ZHS16GBK,則需要用NLS_CHARSET_ID擷取該字元集的編號:

SQL》 select nls_charset_id(‘zhs16gbk’) from dual;

NLS_CHARSET_ID(‘ZHS16GBK’)

--------------------------

852

把852換成16進位數,為354,把2、3位元組的00 01換成03 54,即完成了把該dmp檔案字元集從us7ascii到zhs16gbk的轉化,這樣,再把該dmp檔案匯入到zhs16gbk字元集的資料庫就可以了。(注意,十進位數與十六進位之間的轉換,想明白其中的道理)

Iv、跨版本使用Exp/Imp

Exp/Imp很多時候,可以跨版本使用,如在版本7與版本8之間匯出匯入資料,但這樣做必須選擇正確的版本,規則為:

·總是使用IMP的版本匹配資料庫的版本,如果要匯入到816,則使用816的匯入工具。

·總是使用EXP的版本匹配兩個資料庫中低的那個版本,如在815與816之間互導,則使用815的EXP工具。

2、OS備份

作業系統備份有兩類,冷備份(Cold backup)與熱備份(Hot backup),作業系統備份與以上的邏輯備份有本質的區別。邏輯備份提取資料庫的資料內容,而不備份物理資料區塊。而作業系統備份則是拷貝整個的資料檔案。

i、冷備份

在檔案級備份開始前資料庫必須徹底關閉。關閉操作必須用帶有normal、immediate、transaction選項的shutdown來執行。

資料庫使用的每個檔案都被備份下來,這些檔案包括:

☆所有資料檔案

☆所有控制檔案

☆所有聯機REDO LOG 檔案

☆INIT.ORA檔案(可選)

作冷備份一般步驟是:

a.正常關閉要備份的執行個體(instance);

b.備份整個資料庫到一個目錄

c.啟動資料庫

SVRMGRL》connect internal

SVRMGRL 》shutdown immediate

SVRMGRL 》! cp

SVRMGRL 》!tar cvf /dev/rmt/0 /u01/oradata/prod

SVRMGRL 》startup

注意:如果利用指令碼對資料庫進行冷備份,必須對關閉資料庫的命令進行邏輯檢查,如果發生關閉資料庫的命令不能正常執行而導致資料庫沒有正常關閉,那麼,所有的冷備份將回是無效的。

ii、熱備份

熱備份是當資料庫開啟並對使用者有效是的OS級的資料備份。熱備份只能用於ARCHIVELOG方式的資料庫。在資料檔案備份之前,對應的資料表空間必須通過使用ALTER TABLESPACE …… BEGIN BACKUP以備份方式放置。然後組成資料表空間的資料檔案可以使用類似冷備份的作業系統命令進行拷貝。在資料檔案用作業系統命令拷貝後,應使用ALTER TABLESPACE …… END BACKUP命令使資料表空間脫離熱備份方式。

熱備份沒有必要備份聯機日誌,但必須是歸檔狀態,在執行個體恢複的時候,可能需要用到歸檔日誌。當前聯機日誌一定要保護好或是處於鏡相狀態,當前聯機日誌的損壞,對於資料庫的損壞是巨大的,只能以資料的丟失來進行資料庫的恢複工作。

對於暫存資料表空間,存放的是臨時資訊,在熱備份是也可以考慮不用備份,如果臨時檔案發生故障,可以刪除該資料檔案與資料表空間,重建一個暫存資料表空間。

熱備份的優點是顯而易見的

---- a.可在資料表空間或資料檔案級備份,備份時間短。

---- b.備份時資料庫仍可使用。

---- c.可達到秒級恢複(恢複到某一時間點上)。

---- d.可對幾乎所有資料庫實體作恢複。

---- e.恢複是快速的,在大多數情況下在資料庫仍工作時恢複。

作業系統作熱備份的一般步驟為:

①串連資料庫

SVRMGRL》connect internal;

②將需要備份的資料表空間(如User)設定為備份方式

SVRMGRL》Alter tablespace User begin backup;

③拷貝資料檔案

SVRMGRL》!cp /u01/oradata/prod/user01.ora /backup/prod/user01.ora

Or

$cp cp /u01/oradata/prod/user01.ora /backup/prod/user01.ora

④在資料檔案拷貝完成後,將資料表空間拖體備份方式

SVRMGRL》Alter tablespace User end backup;

⑤對所有需要備份的資料表空間重複2,3,4

⑥使用如下的命令備份控制檔案ALTER DATABSE …… BACKUP CONTROLFILE

如備份成二進位檔案

alter database backup controlfile to ‘new fielname’;

備份成文字檔

alter database backup controlfile to trace;

因為熱備份的時候,使用者還在操作資料庫,所以,最好是每個資料表空間處於備份狀態的時間最短,這樣就要求一個資料表空間一個資料表空間的備份,不要一起使資料表空間處於備份狀態而同時拷貝資料檔案。



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.