2009年12月11日 星期五

oracle-xe物理備份

昨晚因為字元集不相符的關係, 無法從舊資料庫轉移到新的資料庫,

簡單的說呢, 就是有執行 imp指令, 但卻無法真正匯入.

推測應該是oracle內部轉換字元集那邊出了問題, 以後有時間再回來研究.

靈機一動, 上網查了oracle 的物理備份.

雖然這不是很好的解法(畢竟我還是沒弄懂字元集那邊的問題),

但至少可以把oracle的備份, 弄得像mysql 的備份機制吧!

假設要備份的主機為A, 目標主機為B, 我們就是要把A機器上的資料, 轉移到B機器上.

在A機器上:

1. 先尋找datafile位置

SQL> select name from v$datafile;
(那句select語法,把你的資料庫檔案放那裡給指出來了。)
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.

2. 尋找 controlfile 位置

SQL> select name from v$controlfile;

NAME
——————————————————————————–
/u02/db/NICE/control01.ctl
/u02/db/NICE/control02.ctl
/u02/db/NICE/control03.ctl

3. 尋找logfile 位置

SQL> select member from v$logfile;

MEMBER
——————————————————————————–
/u02/db/NICE/redo03.log
/u02/db/NICE/redo02.log
/u02/db/NICE/redo01.log

總上所述,你要想盡辦法,把那些.dbf,.ctl,.log的檔案備份下來就是了。
再加上$ORACLE_HOME裡頭所有的檔案好,那就是完整的資料庫物理備份了.

4. 開始進行物理備份

a. 建議先關閉整個資料庫, 以免因為時間差, 有些資料沒有備份到.

[oracle@macrodbbk oracle]$ sqlplus / as sysdba

SQL> shutdown immediate

Database closed.
Database dismounted.
ORACLE instance shut down. (看到此三種訊息, 表示關閉沒有問題!)

b. 將剛剛所查詢的檔案, 通通備份出來.

c. 再把資料庫打開, 已確定沒有異常!

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>

好滴~ 請別太興奮! 我知道那種字元集轉換失敗的感覺很痛苦XDDDD (我奮戰了一晚呀~~~~)

在B機器上

1. 如上, 先關閉資料庫

2.將從A機器物理備份出來的檔案, 看是要覆寫還是如何的, 把資料蓋過去

(建議還是要物理備份一下B機器上面的資料)

如果是在linux主機上面, 要特別注意權限

兩邊的檔案權限與擁有者等的必須要一樣才行.

-bash-3.2$ pwd
/usr/lib/oracle/xe/oradata/XE
-rw-r—– 1 oracle dba 7061504 Nov 16 21:07 control.dbf
-rw-r—– 1 oracle dba 536879104 Nov 16 20:14 xxx.ora
-rw-r—– 1 oracle dba 471867392 Nov 16 20:58 sysaux.dbf
-rw-r—– 1 oracle dba 356524032 Nov 16 21:05 system.dbf
-rw-r—– 1 oracle dba 20979712 Nov 16 12:04 temp.dbf
-rw-r—– 1 oracle dba 183508992 Nov 16 20:58 undo.dbf
-rw-r—– 1 oracle dba 104865792 Nov 16 20:14 users.dbf

-bash-3.2$ pwd

/usr/lib/oracle/xe/app/oracle/flash_recovery_area/XE/onlinelog

-rw-r—– 1 oracle dba 52429312 Nov 16 20:14 xxxxxxxxxxxxxxxx.log
-rw-r—– 1 oracle dba 52429312 Nov 16 21:05 yyyyyyyyyyyyyyyy.log

3.把B資料庫重新打開. 如無異常, 恭喜妳~ 你可以去喝杯咖啡休息一下了!

原文出處:

http://tw.myblog.yahoo.com/bullock0425/article?mid=306&sc=1

沒有留言: