2007年10月24日 星期三

搞定ORACLE資料庫物理備份

忙了快一個月,
總算ORACLE 10g的主機備份弄出個頭緒了。
記得網路上有提到ORACLE DB資料,
可以用物理備份的方法來執行。
以為我們可以用像ghost的方式來做,
結果發現ORACLE的運作方式,
我們根本没有考慮到。
造成就算是磁區備份成了,但倒回去還是不能動。
因為資料庫的運作機制,
redofile,controlfile,datafile...
都要能對映起來,
絶對不是單純的把partition拷貝起來就OK的。

不過,只要把ORACLE的運作原理稍有了解,
還是能用SysmanTec ghost,Acronis TrueImagePartimage等軟體,
把資料備起來的!
在linux的環境下,只要好好運用tar指令,
也是能做好oracle的備份的。

ORACLE 10g自有一套備份還原的機制,
物理備份,只是把機器掛掉的風險減少些許而己,
但資料庫運作的備份還原若不深入研究一番的話。
日後資料出問題,物理備份!只能救機器而己吧。

在linux的環境下,怎麼做ORACLE的物理備份?
坦白說,在linux環境下安裝ORACLE是比在windows環境難多了,
但你以為會用linux安裝ORACLE,就算是個DBA,就很厲害了嗎?
嘿嘿!千萬別這麼自以為是,日後可是會吃苦頭的。

來,吳大最近研究了一下ORACLE的備份機制,
什麼exp/imp,expdb/impdb的,實在不好懂,
但我趕著要把資料庫先備份一下,
免得在我這個DBA新手不當操作之下,造成資料庫損毀,
那可就準備收拾細軟,回來吃自己啦!

如果你會Partimage或是SysmanTec ghost,Acronis TrueImage等軟體的話最好!
Partimage是GPL軟體,你可以儘管試用沒關係,
但SysmanTec ghost和Acronis TrueImage就不行了,
它們是商用軟體,濫用會被罰錢甚至吃上官司的。
在此我推薦Acronis TrueImage,由於我是在linux環境進行,
據了解,它的執行效果不錯,
想像一下,若是你的資料庫己經大到幾十G的空間,
若是工具不好的話,你得等上一兩天才做好硬碟備份,
我想任何人都受不了的!

接下來,資料庫的啓動和關閉你會吧!
什麼,還不會,天哪!資料庫主機處境危險哦。
趕快去找書看吧,不然找一下google!
還好開關資料庫還下是很難,
如果你的系統建置廠商有把oracle帳號環境設好的話,
你就可以以linux主機系統認可的方式,直接進oracle DB!
指令是sqlplus "/ as sysdba",雙引號可以省去没關係。
[oracle@macrodbbk oracle]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Thu Oct 25 14:46:18 2007

Copyright (c) 1982, 2005, Oracle. All rights reserved.


Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL>

OK!看到SQL>表示成功連接資料庫系統了,
接下來要啓動資料庫,指令是startup。
SQL> startup
ORA-01081: cannot start already-running ORACLE - shut it down first
SQL>

因為我們之前己經啓動好了!所以出現ORA-01081的錯誤訊息。關掉它吧!
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>
看到shut down表示成功關閉,没有異常。
好,再次啓動!
SQL> startup
ORACLE instance started.

Total System Global Area 1828716544 bytes
Fixed Size 1219976 bytes
Variable Size 201327224 bytes
Database Buffers 1610612736 bytes
Redo Buffers 15556608 bytes
Database mounted.
Database opened.
SQL>

呼!Safe,啓動成功!
之前我經歷了一次資料庫幾乎損毀的狀況歷鍊,
所以現在看資料庫成功無誤的關閉或啓動,
心中總是感慨萬千啊!

注意啦!接下來才進入重點...

SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------
/u02/db/NICE/system01.dbf
/u02/db/NICE/UNDOTBS1.dbf
/u02/db/NICE/sysaux01.dbf
/u02/db/NICE/users01.dbf
/u02/db/NICE/ZGT.dbf
/u02/db/NICE/ZGTIDX.dbf
/u02/db/NICE/EIP.dbf


7 rows selected.

SQL>

看到没,那句select語法,把你的資料庫檔案放那裡給指出來了。
所以呢!我們若是要進行partition備份,/u02就是其中之一了。了解否!

SQL> select name from v$controlfile;

NAME
--------------------------------------------------------------------------------
/u02/db/NICE/control01.ctl
/u02/db/NICE/control02.ctl
/u02/db/NICE/control03.ctl

SQL> select member from v$logfile;

MEMBER
--------------------------------------------------------------------------------
/u02/db/NICE/redo03.log
/u02/db/NICE/redo02.log
/u02/db/NICE/redo01.log

SQL>

再來我又用了兩句select把控制檔和還原用的日誌檔位置找出來了。
總上所述,你要想盡辦法,把那些.dbf,.ctl,.log的檔案備份下來就是了。
再加上$ORACLE_HOME裡頭所有的檔案好,那就是完整的資料庫物理備份了。
怎麼做?工具的使用,我再找時間寫吧。
還有,我之前就提到了,linux的tar指令只要用得好,那些工具軟體就不需要囉。
最後再加註一點,既然你要做物理備份,你的硬碟一定要够大,
不然備份這遊戲,你是玩不起來的。

對了,我最最後再強調一點,物理備份一定要在資料庫關閉的狀況下執行。
在資料庫還在啓動的狀態下做物理備份也是會成功,
只是你還原回去,資料庫還是會因為那些.dbf,.ctl,.log檔案,
有你執行備份的時間差,而湊不起來的。
ORACLE的DBA!!不容易啊!

4 則留言:

匿名 提到...

請問一下關於這篇ORACLE 10G備份的後續,請問還會繼續嗎?

Unknown 提到...

請問你想知道什麼樣的技術?
我這篇只點出DB部份的物理備份作法概念。
OS層的話,要再另外處理哦。
我曾經改成以虚擬機器的環境,
把正式DB移入,並成功開啓,但一定還要些許調整。
主要就是運用物理備份的概念!

匿名 提到...

因為公司剛開始接觸oracle,現在又要我做db的備份,我一點頭緖也沒有。有爬過文10g有data guard可以用,教學文件少之又少,又不用說對剛接觸oracle的新手,簡直瞎子摸象。我大概想知道的是,如果我要做備援,需要的硬體設備,還有需要使用哪些軟體最快最好上手的。如果大大可以推薦書藉或網址、論壇等,小的感激不盡。

Unknown 提到...

Data Guard是用來「備援」的哦!
比「備份」要高級一些。
運用時機是主DB掛了,Data Guard可以用來救資料,甚至取代!
若是備份作業,10g版本我建議你可以從data pump著手!
網路也能找到不少利用舊的exp/imp指令的備份命令稿。
書嘛!記得悅知和旗標有出有關10g管理的書。去書店應該還很好找才對。
10g備份學習的順序我的看法是:
exp/imp -> rman -> data guard ...

一開始就要搞Data Guard可能太難了點!

搜尋此網誌

本站大事記

這個部落格(網站)內容以分享LINUX和延伸出的技術文章為主!
特別是為了工作和進修需要,搜集了不少網站連結。
希望對來這裡觀文的朋友們,有提供一些有用的資訊或文章。
但這裡的文章中,也包含個人的心情扎記和隨興言談……
若是當中沒有對上你的口味,請多包涵!

原「琳娜絲與希斯寇的邂逅」,改名為「愛上琳娜絲」!

原「琳娜絲與希斯寇的邂逅」,改名為「愛上琳娜絲」!
--原序文--
就是當LINUX遇上CISCO啦!他們的結合還能作什麼事…不就是讓這個世界的網路,串…串起來啊…不然你們那能上這網站看部落格!