NBA新赛季赛程安排/辽宁男篮比赛/江苏足球队/nba历史得分

  • 4006-091-190
    咨詢熱線:4006-091-190
    一對一貼心咨詢
    最新優惠活動推薦
    全方位產品溝通
    精準細化解決方案
  • 公眾號
    掃一掃關注官方微信
    獲取更多資訊
    掃一掃關注官方微博
    獲取更多動態

返回 Oracle數據庫邏輯備份的實現

2023-03-30
    EXP和IMP是Oracle提供的一種邏輯備份工具。邏輯備份創建數據庫對象的邏輯拷貝并存入一個二進制轉儲文件。這種邏輯備份需要在數據庫啟動的情況下使用, 其導出實質就是讀取一個數據庫記錄集(甚至可以包括數據字典)并將這個記錄集寫入一個文件,這些記錄的導出與其物理位置無關,導入實質就是讀取轉儲文件并執行其中的命令。此備份方式是通過Oracle的實用工具export和import來實施的, export是把數據庫中的數據導出,import是把export卸出的數據導入數據庫中。通過此工具可以衍生出多種功能, 比如整個數據庫的備份、表結構重建、數據的傳輸、用戶的改變等等。

    Oracle Export/Import工具提供了靈活多樣的功能和導出/導入模式,最常使用的三種模式是User、table和full database。除此以外,還可以在導出/導入時決定是否包含與對象有關的數據字典信息,如索引、約束、權限等等。
    注意:通過邏輯備份可以備份整個數據庫, 或僅備份部分重要數據。因為是邏輯上的備份,故只能用于邏輯的恢復數據, 一旦數據庫被物理損壞, 導致不能啟動,邏輯備份的數據不能幫助恢復數據庫。
    1. Export/Import的使用舉例:    
    (1). 將一個用戶的對象導入到另一個用戶模式中:    
把數據庫中原有的用戶Export至一個dmp文件(如把用戶olduser的對象導出到文件olduser0701.dmp中):    
    $ exp sys/password file= olduser0701 owner=olduser grant=N indexes=Y rows=Y     
    從dmp文件中把一個用戶的對象import至一個用戶的模式中(從olduser0701.dmp中,把用戶olduser的對象導入到用戶newuser中):    
    $imp sys/password file=olduser0701 fromuser=olduser touser=newuser indexes=Y rows=Y
    (2). 導入時避免出現ORA-00942(表或是圖不存在)錯誤:    
    因為,導出是按照在數據庫中對象建立的順序進行的,從而在導入時,數據庫對象之間的依賴性會引起某些先導入對象找不到其依賴對象(如view、procedure等等),就會引起ORA-00942(表或是圖不存在)錯誤。通常解決這種問題的方法是,做兩次導入工作,第一遍導入時設置如下:    
    $ imp sys/password file=demo0701 full=Y commit=y rows=Y    
    導入時如果出現錯誤,就修改設置:rows=n,ignore=n:    
    $ imp sys/password file=demo0701 full=Y rows=N commit=Y ignore=N    
    (3). 做無增量的全數據庫備份及恢復的例子:    
    全數據庫Export至dmp文件(如sidfull0701.dmp):    
    $ exp sys/password file=sidfull0701.dmp Full=y -- rows確省為Y    
    把整個數據庫備份的sidfull0701.dmp文件至數據庫中:    
    $ imp sys/password file=sidfull0701.dmp ignore=y full=y-- rows確省為Y    
    注意:導入/導出是最徹底的減少磁盤碎片的方法。
    2. 備份策略和綜合應用舉例:    
    (1). 做全數據庫增量備份和恢復的方法:    
    全數據庫Export至dmp文件(如sidfull0701.dmp):    
    $ exp sys/manager file= sidfull0701.dmp Full=y inctype=complete    
    第一天增量備份Export至dmp文件(如sidincr1.dmp):    
    $ exp sys/manager file= sidincr1.dmp inctype=incremental    
    第二天增量備份Export至dmp文件(如sidincr2.dmp):    
    $ exp sys/manager file= sidincr2.dmp inctype=incremental    
    第三天增量備份Export至dmp文件(如sidincr3.dmp):    
    $ exp sys/manager file= sidincr3.dmp inctype=incremental    
    現假設Oracle數據庫在第三天被破壞了重新建一個Oracle數據庫,先把最后的一個dmp文件imp至數據庫中:    
    $ imp sys/manager file= sidincr3.dmp full=y ignore=y inctype=system    
    把整個數據庫備份的dmp文件imp至數據庫中:    
    $ imp sys/manager file= sidfull0701.dmp ignore=y full=y inctype=restore    
    把第一天增量備份的dmp文件imp至數據庫中:    
    $ imp sys/manager file= sidincr1.dmp ignore=y full=y inctype=restore    
    把第二天增量備份的dmp文件imp至數據庫中:    
    $ imp sys/manager file= sidincr2.dmp ignore=y full=y inctype=restore    
    把第三天增量備份的dmp文件imp至數據庫中    
    $ imp sys/manager file= sidincr3.dmp ignore=y full=y inctype=restore
        (2). 數據庫邏輯備份策略的制定:    
    數據庫管理員可以排定一個備份日程表,結合數據導出的三個不同方式合理、高效、可靠地完成。比如數據庫的備份任務可作如下安排:    
    星期一:完全導出(A)    
    星期二:增量導出(B)    
    星期三:增量導出(C)    
    星期四:增量導出(D)    
    星期五:累計導出(E)    
    星期六:增量導出(F)    
    星期日:增量導出(G)    
    如果在星期日,數據庫遭到意外破壞,數據庫管理員可按以下步驟來恢復數據庫:    
    第一步:用命令CREATE DATABASE重新生成數據庫結構;    
    第二步:創建一個足夠大的附加回滾段。    
    第三步:完全增量導入A:    
    $ imp system/manager inctype=RECTORE FULL=Y FILE=A    
    第四步:累計增量導入E:    
    $ imp system/manager inctype=RECTORE FULL=Y FILE =E    
    第五步:最近增量導入F:    $ imp system/manager inctype=RESTORE FULL=Y FILE=F    
    注: 備份文件的命名最好加上日期,這樣便于以后的恢復工作。    
    (3). 利用cron定時備份數據庫:    
    Linux、Unix提供了定時服務cron程序,能夠在確定的時間中執行一系列任務,因此數據庫的備份必須和cron合作來完成,或者使用/etc下的daily,weekly,monthly文件做定時的數據庫備份操作。    
   (4).使用Export/Import的注意事項:    
    在做Export和Import的時候千萬請注意您的字符集設置,如果在做Export或Import的時候,UINX的環境變量如果和字符集設置不一致的話, 將導致數據庫恢復的信息不能正確讀取,特別是數據庫采用的非缺省值的中文字符集。切記一定要求保持一致,如果有特殊的要求請先聯系Oracle售后支持部。下面介紹怎樣確定Oracle數據庫的字符集設置和操作系統的環境變量:
    $ sqlplus sys/manager
    SQL> select * from NLS_DATABASE_PARAMETERS;
    PARAMETER VALUE
    ------------------------- -----------------------------
    NLS_LANGUAGE AMERICAN
    NLS_TERRITORY AMERICANLS_CHARACTERSET UTF8    
    環境變量應設置
    $ export NLS_LANG=American_america.UTF8    
    Export/Import支持的增量和累計備份實際上是表級的,即上一次備份之后變化的表將全表卸載,而不是變化的記錄。因此,在以OLTP應用為主的數據庫中,由于保存主要業務數據的表處于頻繁的錄入和更新之中,增量和累計卸載并不能顯著提高備份的效率。
    在做整個數據庫Import時,缺省狀態下以一個Table為一個Transaction,所以如果存在一些表的數據量很大, 建議使用commit=y并且要提供一個較大的buffer值,同時建立一個臨時Rollback segment ,它的default storage參數initial 和 next要設置大一些,并要將這個Rollback Segment Online,同時offline 其他小的rollback segments。確保一個Table能完整import 。因為在做import時, 數據庫將自動創建索引,及完整性約束, 為了加快數據加載的速度及一次成功的概率,可以考慮在export之前首先disable所有的完整性約束, 在import之后在enable所有的完整性約束。而對索引,可以考慮單獨export索引。通過使用命令 "imp indexfile=……" 在import數據之后來單獨創建索引。
    如果希望在export數據庫時,直接將產生的dmp文件寫到外設上, 你可以使用 " exp file=設備名… Volsize=設備的容量"。
    由于export出來的文件可能較大,而某些操作系統(如Linux)對文件大小有限制,如不能大于2G。因此可將dmp文件設置為指定大小的若干文件。如:
    $exp sys/manager buffer=4096000 file=(full1.dmp,full2.dmp,full3.dmp,full4.dmp) filesize=2G Full=y inctype=complete log=full.log

分享到:
?