ORACLE備份二(ORACLE BACKUP STRATEGY)
2024-08-29 13:37:00
供稿:網友
 
             
  iii、導出/導入與字符集
  
  明白Oracle的多國語言設置,ORACLE多國語言設置是為了支持世界范圍的語言與字符集,一般對語言提示,貨幣形式,排序方式和CHAR,VARCHAR2,CLOB,LONG字段的數據的顯示等有效。                                                                                            ORACLE的多國語言設置最主要的兩個特性就是國家語言設置與字符集設置,國家語言設置決定了界面或提示使用的語言種類,字符集決定了數據庫保存與字符集有關數據(如文本)時候的編碼規(guī)則。正如剛才上面的一個小例子,環(huán)境變量NLS_LANG的不同,導致EXP幫助發(fā)生變化,這就是多國語言設置的作用(NLS_LANG包含國家語言設置與字符集設置,這里起作用的是國家語言設置,而不是字符集)。
  
  ORACLE字符集設定,分為數據庫字符集和客戶端字符集環(huán)境設置。在數據庫端,字符集在創(chuàng)建數據庫的時候設定,并保存在數據庫PRops$表中,對于8i以上產品,已經可以采用“Alter database character set 字符集”來修改數據庫的字符集,但也僅僅是從子集到超集,不要通過update props$來修改字符集,假如是不支持的轉換,可能會失去所有與字符集有關的數據,就是支持的轉換,也可能導致數據庫的不正常工作。字符集分為單字節(jié)字符集與多字節(jié)字符集,US7ASCII就是典型的單字節(jié)字符集,在這種字符集中l(wèi)ength=lengthb,而ZHS16GBK就是常用的雙字節(jié)字符集,在這里lengthb=2*length。
  
  在客戶端的字符集環(huán)境比較簡單,主要就是環(huán)境變量或注冊表項NLS_LANG,注重NLS_LANG的優(yōu)先級別為:參數文件à注冊表à環(huán)境變量à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字節(jié)的內容,如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字節(jié)的00 01換成03 54,即完成了把該dmp文件字符集從us7ascii到zhs16gbk的轉化,這樣,再把該dmp文件導入到zhs16gbk字符集的數據庫就可以了。(注重,十進制數與十六進制之間的轉換,想明白其中的道理)
  
  Iv、跨版本使用Exp/Imp
  
  Exp/Imp很多時候,可以跨版本使用,如在版本7與版本8之間導出導入數據,但這樣做必須選擇正確的版本,規(guī)則為:
  
  ·總是使用IMP的版本匹配數據庫的版本,假如要導入到816,則使用816的導入工具。
  
  ·總是使用EXP的版本匹配兩個數據庫中低的那個版本,如在815與816之間互導,則使用815的EXP工具。
  
  2、OS備份
  
  操作系統(tǒng)備份有兩類,冷備份(Cold backup)與熱備份(Hot backup),操作系統(tǒng)備份與以上的邏輯備份有本質的區(qū)別。邏輯備份提取數據庫的數據內容,而不備份物理數據塊。而操作系統(tǒng)備份則是拷貝整個的數據文件。
  
  i、冷備份
  
  在文件級備份開始前數據庫必須徹底關閉。關閉操作必須用帶有normal、immediate、transaction選項的shutdown來執(zhí)行。
  
  數據庫使用的每個文件都被備份下來,這些文件包括:
  
  ☆所有數據文件
  ☆所有控制文件
  ☆所有聯(lián)機REDO LOG 文件
  ☆INIT.ORA文件(可選)
  
  作冷備份一般步驟是:
  
  a.正常關閉要備份的實例(instance);
  
  b.備份整個數據庫到一個目錄
  
  c.啟動數據庫
  
  如
  SVRMGRL>connect internal
  SVRMGRL >shutdown immediate
  SVRMGRL >! cp <file> <backup Directory>
  
  或
  SVRMGRL >!tar cvf /dev/rmt/0 /u01/oradata/prod
  SVRMGRL >startup
  
  注重:假如利用腳本對數據庫進行冷備份,必須對關閉數據庫的命令進行邏輯檢查,假如發(fā)生關閉數據庫的命令不能正常執(zhí)行而導致數據庫沒有正常關閉,那么,所有的冷備份將回是無效的。
                         
  
  ii、熱備份
  
  熱備份是當數據庫打開并對用戶有效是的OS級的數據備份。熱備份只能用于ARCHIVELOG方式的數據庫。在數據文件備份之前,對應的表空間必須通過使用ALTER TABLESPACE …… BEGIN BACKUP以備份方式放置。然后組成表空間的數據文件可以使用類似冷備份的操作系統(tǒng)命令進行拷貝。在數據文件用操作系統(tǒng)命令拷貝后,應使用ALTER TABLESPACE …… END BACKUP命令使表空間脫離熱備份方式。
  
  熱備份沒有必要備份聯(lián)機日志,但必須是歸檔狀態(tài),在實例恢復的時候,可能需要用到歸檔日志。當前聯(lián)機日志一定要保護好或是處于鏡相狀態(tài),當前聯(lián)機日志的損壞,對于數據庫的損壞是巨大的,只能以數據的丟失來進行數據庫的恢復工作。
  
  對于臨時表空間,存放的是臨時信息,在熱備份是也可以考慮不用備份,假如臨時文件發(fā)生故障,可以刪除該數據文件與表空間,重建一個臨時表空間。
  
  熱備份的優(yōu)點是顯而易見的
  
  ---- a.可在表空間或數據文件級備份,備份時間短。
  ---- b.備份時數據庫仍可使用。
  ---- c.可達到秒級恢復(恢復到某一時間點上)。
  ---- d.可對幾乎所有數據庫實體作恢復。
  ---- e.恢復是快速的,在大多數情況下在數據庫仍工作時恢復。
  
  操作系統(tǒng)作熱備份的一般步驟為:
  
  ①連接數據庫
  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;
  
  因為熱備份的時候,用戶還在操作數據庫,所以,最好是每個表空間處于備份狀態(tài)的時間最短,這樣就要求一個表空間一個表空間的備份,不要一起使表空間處于備份狀態(tài)而同時拷貝數據文件。
  
  注重:假如在熱備份的時候假如數據庫中斷(如斷電),那么在重新啟動數據庫的時候,數據庫將提示有數據文件需要恢復,你需要把正在斷電時候的處于備份狀態(tài)的數據文件通過ALTER TABLESPACE …… END BACKUP結束備份方式。具體哪個數據文件或表空間處于備份狀態(tài),可以通過v$backup與v$datafile來獲得。
  
  3、RMAN(備份與恢復治理器)
  
  i.使用RMAN進行備份
  
  Recovery manager(RMAN)是ORACLE提供的DBA工具,用語治理備份和恢復操作。RMAN只能用于ORACLE8或更高的版本中。它能夠備份整個數據庫或數據庫部件,其中包括表空間、數據文件,控制文件和歸檔文件。RMAN可以按要求存取和執(zhí)行備份和恢復。
  
  RMAN備份有如下優(yōu)點
  
  ☆支持在線熱備份
  ☆支持多級增量備份
  ☆支持并行備份、恢復
  ☆減少所需要備份量
  ☆備份、恢復使用簡單
  
  重要的是,使用恢復治理器答應您進行增量數據塊級的備份(這個與導出/導入的增量截然不同)。增量RMAN備份是時間和空間有效的,因為他們只備份自上次備份以來有變化的那些數據塊。另一個空間有效的RMAN特性是它只備份數據文件中使用的數據塊,忽略空的,未用的數據塊,這個對于預分配空間的表空間有很大的好處。
  
  從9i開始,還增加了RMAN的數據塊級別的恢復,可以進一步減少數據庫恢復時間。
  
  RMAN支持以下不同類型的備份
  
  FULL                數據庫全備份,包括所有的數據塊
  INCREMENTAL            增量備份,只備份自上次增量備份以來修改過的數據塊。需要一個0級的增量作為增量的基礎,可以支持5級增量。
  OPEN                 在數據庫打開的時候使用
  CLOSED               在數據庫安裝(MOUNT)但不打開的時候備份,關閉備份可以是CONSISTENT或IN CONSISTENT類型的。
  CONSISTENT             在數據庫安裝,單不打開,并且在安裝之前數據庫被徹底關閉(而不是被破壞或異常退出)時使用。CONSISTENT備份可以簡單的進行復原(RESTORE)而不是恢復(RECOVER)
  INCONSISTENT           在數據庫打開或安