標籤:
原文:Oracle基礎 Database Backup和恢複
一、為什麼需要資料備份
造成資料丟失的主要原因:
1、介質故障。
2、使用者的錯誤操作。
3、伺服器的徹底崩潰。
4、電腦病毒。
5、不可預料的因素。
Oracle中故障類型分為以下4種。
1、語句故障:
執行SQL語句過程發生的邏輯故障可導致語句故障。如果使用者編寫的SQL語句無效,就會發生語句故障。Oracle可自我修複語句故障,撤銷語句產生的而印象,並將控制權交給應用程式。
2、使用者進程故障
當使用者程式出錯而無法訪問Oracle資料庫時,就會發生使用者進程故障。使用者進程故障只會導致目前使用者無法操作資料庫,但不會印象其他使用者進程,當使用者進程出現故障時,進程監控程式(PMON)會自動執行進程恢複。
3、執行個體故障
當Oracle 資料庫執行個體由於硬體或軟體問題而無法繼續運行時,就會發生執行個體故障。硬體問題包括意外斷電,而然間問題可能是伺服器作業系統崩潰。如果發現執行個體故障,Oracle會自動完成執行個體修複。執行個體修複將資料庫恢複到與故障之前的事務一致狀態,Oracle會自動復原未提交的資料。
4、介質故障
介質故障是當一個資料庫檔案或者磁碟不能讀或者不能寫時出現的故障。
二、備份
備份就是把建立一個資料庫副本到磁碟。從不同角度分類如下:
1、從物理角度與邏輯角度分類:
(1)物理備份:對資料庫作業系統的物理檔案(如資料檔案、控制檔案和記錄檔等)的備份。物理備份又可分為離線備份(冷備份)和聯機備份(熱備份),前者是在關閉資料庫的時候進行的,後者對運行在歸檔日誌方式的資料庫進行備份。
(2)邏輯備份:對資料庫邏輯組件(如表和預存程序等資料對象)的備份。
2、從資料庫的備份策略角度分類:
(1)完全備份:每次對資料進行完整備份。
(2)增量備份:值有那些在上次完全備份或者增量備份後備修改的檔案才會被備份。優點是備份資料量小,需要的時間短,缺點是恢複的時候需要依賴之前的備份記錄,出問題的風險較大。例如:如果在星期一進行完全備份,在星期二至星期五進行增量備份。如果星期五資料被破壞了,則資料恢複需要星期一的完全備份和從星期二至星期五的所有增量備份。
(3)差異備份:備份那些從上次完全備份之後被修改過得檔案。因此從差異備份中恢複資料的時間長短,因此只需要兩份資料(最後一次完全備份和最後一次差異備份),缺點是每次備份的時間較長。例如:如果在星期一進行完全備份,在星期二到星期五進行了差異備份,如果星期五資料被破壞了,則資料恢複只需要星期的完全備份和星期四的差量備份。
增量備份和差異備份的區別:增量備份需要保留所有增量備份的資料;差異備份只需要保留最後一次差異備份的資料。
三、恢複
恢複就是發生故障後,利用已備份的資料檔案或控制檔案,重建立立一個完整的資料庫。恢複分為兩種類型:
1、執行個體恢複:當Oracle執行個體出現失敗後,Oracle自動進行的恢複。
2、介質恢複:當存放資料庫的介質出現故障時所做的恢複。介質恢複又分為完全恢複和不完全恢複。
完全恢複:將資料庫恢複到資料庫失敗時的狀態。
不完全恢複:將資料庫恢複到資料庫失敗前的某一時刻的狀態。
四、匯出
(一)使用資料泵技術:
1、expdp的匯出方式:
1)資料庫方式:整個資料被匯入到作業系統檔案中。
2)使用者模式:匯出一個或者多個使用者下的所有資料和中繼資料。
3)表方式:到處一組表的所有資料和中繼資料。
4)資料表空間方式:用於提取一個資料表空間中所有的資料和中繼資料,另外還提取依賴於指定資料表空間列表中所有對象的任何依賴對象。
轉儲檔案:由資料泵到處程式所建立的檔案成為轉儲檔案,在單個資料泵匯出作業期間所有的轉儲檔案稱為轉儲檔案集。
2、基於命令列匯出
文法:
c:\expdb system/password directory=pbdir dumpfile=pb.dmp full=y tables=table_list tablespaces=tablesapce_list schemas=schema_list remap_schema=user1:user2 nologfile=y sqlfile=pb.sql
system/passwrod:使用者名稱和密碼
directory:資料庫目錄對象
dumpfile:指定轉儲檔案
full=y:表示實施的全部匯入
tables=table_list:表示匯入表的列表
schemas=schema_list:表示匯入的使用者模式
tablespaces=tablesapce_list:表示匯入的資料表空間
remap_schema=user1:user2:表示從user1匯入到user2中
nologfile=y:表示不進行日誌操作
sqlfile:表示將中繼資料(DDL語句)寫入到指定檔案中。
注意:如果需要匯出完全資料庫,必須具備exp_full_database許可權。
1)資料庫方式:
注意:如果需要匯出完全資料庫,必須具備exp_full_database許可權。
expdp scott/[email protected] directory=dump_dir dumpfile=full.dmp full=y
2)使用者模式方式:
expdp scott/[email protected] directory=dump_dir dumpfile=scottschema.dmp schemas=scott
3)表匯出方式:
expdp scott/[email protected] directory=dump_dir dumpfile=tables.dmp tables=emp,dept,bonus,salgrade content=data_only
說明:
content=data_only:data_only表示只匯出表中的資料,不匯出中繼資料;metadata_only:則表示只匯出中繼資料而不匯出表中的資料。如果不寫,則兩者全部匯出。
4)資料表空間匯出方式:
expdp scott/[email protected] directory=dump_dir dumpfile=tablespace.dmp tablespaces=users
3、DBMS_DATAPUMP進行資料泵匯出
使用這種方式比直接使用命令方式要麻煩一些,但是卻從資料庫作業調度中安排資料泵匯出作業的運行議程提供了方便,為資料泵匯出提供了更好的功能度和控制度。
declare --建立資料泵工作控制代碼 h1 NUMBER;begin --建立一個使用者定義的資料泵做schema的方案備份。 h1 := DBMS_DATAPUMP.open(operation => ‘export‘,job_mode => ‘schema‘); --定義隱藏檔 DBMS_DATAPUMp.add_file(handle => h1,filename => ‘es_shop.dmp‘); --定義過濾條件 DBMS_DATAPUMP.metadata_filter(handle => h1,name => ‘schema_expr‘,value => ‘in‘‘SHOP_USER‘‘‘); --啟動資料泵會話 DBMS_DATAPUMP.start_job(handle => h1); --斷開資料泵會話 DBMS_DATAPUMP.detach(handle => h1);end;--預設儲存路徑:C:\Oracle11g\admin\orcl\dpdump
五、匯入
(一)資料泵匯入模式
1、匯出方式
1)全部匯入模式:一個匯出檔案集的全部內容被裝入,該匯出檔案集不一定是全資料庫方式進行匯出的。
2)使用者模式:指定檔案集中的一個使用者列表的全部內容被匯入。
3、表模式:指定表和相依對象從匯出檔案中得到匯入。
4、資料表空間模式:指定檔案集中屬於資料表空間列表內的所有內容都被匯入。
2、使用命令列匯入
文法:
c:\impdp system/password directory=pbdir dumpfile=pb.dmp full=y tables=table_list tablespaces=tablesapce_list schemas=schema_list remap_schema=user1:user2 nologfile=y sqlfile=pb.sql
system/passwrod:使用者名稱和密碼
directory:資料庫目錄對象
dumpfile:指定轉儲檔案
full=y:表示實施的全部匯入
tables=table_list:表示匯入表的列表
schemas=schema_list:表示匯入的使用者模式
tablespaces=tablesapce_list:表示匯入的資料表空間
remap_schema=user1:user2:表示從user1匯入到user2中
nologfile=y:表示不進行日誌操作
sqlfile:表示將中繼資料(DDL語句)寫入到指定檔案中。
例:
1)匯入整個資料庫:
impdp scott/scott@accp directory=dump_dir dumpfile=FULL.DMP full=y
2)匯入資料表空間:
impdp scott/scott@accp directory=dump_dir dumpfile=tablespace.DMP tablespaces=mytest
3)匯入scott使用者下的所有表:
impdp scott/scott@accp directory=dump_dir dumpfile=TABLES.DMP tables=emp,dept,bonus,salgrade
4)將匯出的scott使用者下的dept和emp表匯入到mytest使用者下
impdp scott/[email protected] directory=dump_dir dumpfile=SCHEMA.DMP tables=dept,emp remap_schema=scott:mytest
3、DBMS_DATAPUMP進行資料泵匯入
declare --建立資料泵控制代碼 h1 NUMBER; begin --建立一個使用者定義的資料泵通過資料泵串連orcllib進行訪問。 h1 := DBMS_DATAPUMP.open(operation => ‘IMPORT‘,job_mode => ‘schema‘,remote_link => ‘orcllib‘); --把shop_dev_data對象模式匯入到shop_back對象模式中。 DBMS_DATAPUMP.metadata_remap(handle => h1,name => ‘REMAP_SCHEMA‘,old_value => ‘SHOP_DEV_DATA‘,value => ‘SHOP_BACK‘); --將日誌寫入shop.log檔案中 DBMS_DATAPUMP.add_file(handle => h1,filename => ‘shop.log‘,filetype => DBMS_DATAPUMP.KU$_FILE_TYPE_LOG_FILE); --啟動資料泵 DBMS_DATAPUMP.start_job(handle => h1); --斷開資料泵串連 DBMS_DATAPUMP.detach(handle => h1);end;
Oracle基礎 Database Backup和恢複