使用 Oracle 資料庫 10g 資料泵重新啟動功能

bfc99發表於2014-04-02
以下轉自:http://blog.csdn.net/kai27ks/article/details/8520760  作者:kai27ks
Oracle 資料泵是 Oracle 資料庫 10g 的一個新特性,該特性實現了資料庫間資料與後設資料的高速移動。此技術是 Oracle 新的資料移動實用程式“資料泵匯出”和“資料泵匯入”的基礎。 資料泵一個非常卓越的特性就是重新啟動作業的能力。重新啟動“資料泵匯出”或“資料泵匯入”作業的功能對於那些負責移動大量資料尤其是需要很長時間才能完成的大型作業的 DBA 來說意義非常重大。資料泵作業在發生意外故障或從“匯入”或“匯出”互動模式發出 STOP_JOB 引數後會重新啟動,但不會丟失或毀壞資料。


重新啟動資料泵作業的一個非常常見的原因是某個故障(如電源故障、內部錯誤,或者某個意外的例項回彈)導致作業無法繼續。發生故障的常見原因還可能是系統資源問題,如轉儲檔案空間不足(在“資料泵匯出”情況下),或者表空間資源不足(“資料泵匯入”情況下)。發生資料泵作業故障時,DBA 或使用者能夠進行干預以修正問題。然後,可以發出資料泵重新啟動命令 (START_JOB),使作業從發生故障的位置繼續進行。


本技術說明用兩個示例介紹資料泵重新啟動功能,這兩個示例分別使用“資料泵匯出”和“資料泵匯入”命令列實用程式。在這兩個示例中,都需要為轉儲檔案定義一個目錄物件 DATA_PUMP_DIR。而且,資料泵使用者(在我們的示例中為 SYSTEM)需要具備 exp_full_database 和 imp_full_database 角色。重新啟動對於沒有許可權的使用者同樣起作用。(有關資料泵以及其目錄物件用法的其他資訊,請參閱 Oracle 資料庫實用程式 10g Release 1 (10.1)。)


示例 1:重新啟動“資料泵匯出”


我們的第一個示例演示如何在“資料泵匯出”過程中使用重新啟動功能。我們將執行 HR 方案的“資料泵匯出”,同時指定轉儲檔案的最大大小。資料泵使用者通常將指定最大轉儲檔案大小 (filesize) 作為一個管理磁碟資源的機制。在此示例中,我們的作業會因為指定的轉儲檔案大小太小而發生故障。


第 1 步:啟動匯出


在此示例中,我們將使用“expdp”客戶機介面。在命令列指定了一個 job_name(可選),這樣可以使您能夠在稍後按照名稱更容易地找到和連線該作業。


下面是匯出命令:
 > expdp system/manager  schemas=hr  directory=data_pump_dir  
logfile=example1.log filesize=300000 dumpfile=example1.dmp  
job_name=EXAMPLE1 
輸出將如下所示:
 Export:Release 10.1.0.2.0 - Production on Tuesday, 06 July, 2004 6:37
.
.
.
Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
Processing object type SCHEMA_EXPORT/ROLE_GRANT
.
. . exported "HR"."COUNTRIES"        6.078 KB      25 rows
. . exported "HR"."DEPARTMENTS"      6.632 KB      27 rows

ORA-39095:Dump file space has been exhausted:Unable to allocate 217088 bytes
Job "SYSTEM"."EXAMPLE1" stopped due to fatal error at 06:38
>  
第 2 步:連線作業


我們的匯出作業 (EXAMPLE1) 遇到了嚴重錯誤,客戶機已經返回了作業系統提示符 (>)。我們可以通過呼叫下列查詢來檢查作業狀態:
 SQL> select job_name,state from dba_datapump_jobs;

JOB_NAME         STATE
------------------------------ ------------------------------
EXAMPLE1         NOT RUNNING  
在這個簡單的示例中,可以很明顯地看出問題所在。對於該 HR 方案來說,指定的轉儲檔案太小。我們可以通過檢視顯示在螢幕上或者資料泵日誌檔案中的客戶機輸出來確定該錯誤的原因。


為了修復此問題,我們需要再新增一個轉儲檔案。我們使用名稱“EXAMPLE1”來連線作業。成功連線作業時,會顯示作業狀態以及有關該作業的其他令人感興趣的資訊。
 >expdp system/manager attach=EXAMPLE1 
Export:Release 10.1.0.2.0 - Production on Tuesday, 06 July, 2004 6:38
.
.
.
Job:EXAMPLE1
Owner:SYSTEM
Operation:EXPORT
   .
   .
   .
Total Objects: 7 Worker Parallelism: 1
第 3 步:新增轉儲檔案


此時,可以在 Export> 提示符下發出 ADD_FILE 指令來新增轉儲檔案。新的轉儲檔案將自動建立在與原始轉儲檔案相同的目錄 (DATA_PUMP_DIR) 中。
Export>add_file=hr1.dmp
接下來,我們可以執行 status 命令,看到現在顯示出這個新增的轉儲檔案。
 Export>status
Job:EXAMPLE1
Operation:EXPORT
Mode:SCHEMA
State:IDLING
Bytes Processed: 55,944
Percent Done: 99
Current Parallelism: 1
Job Error Count: 0
Dump File:/work1/private/oracle/rdbms/log/example1.dmp
size: 303,104
bytes written: 163,840
Dump File:/work1/private/oracle/rdbms/log/hr1.dmp
bytes written: 4,096 
第 4 步:重新啟動/繼續作業


最後,我們發出 CONTINUE_CLIENT 命令。作業 EXAMPLE1 此時將恢復執行。
 Export>continue_client

Export> Job EXAMPLE1 has been reopened at Tuesday, 06 July, 2004 6:38
Restarting "SYSTEM"."EXAMPLE1":system/******** schemas=hr 
directory=data_pump_dir logfile=example1.log filesize=300000 
dumpfile=example1.dmp job_name=EXAMPLE1
Master table "SYSTEM"."EXAMPLE1" successfully loaded/unloaded
******************************************************************************
Dump file set for SYSTEM.EXAMPLE1 is:
/work1/private/oracle/rdbms/log/example1.dmp
/work1/private/oracle/rdbms/log/hr1.dmp
Job "SYSTEM"."EXAMPLE1" completed with 1 error(s) at 06:38 
我們也可以使用 START_JOB 命令。CONTINUE_CLIENT 命令將模式從互動式命令模式更改為記錄模式,然後執行 START_JOB。


示例 2:重新啟動資料泵匯入 - 可恢復的等待超時


在示例 2 中,我們將通過執行重新對映表空間匯入操作演示資料泵重新啟動功能。我們的資料泵作業將經歷一次所謂的可恢復等待。這種等待是由於目標表空間資源不足造成的。我們會說明 DBA 如何通過為資料庫再新增一個檔案來進行干預,並隨後重新啟動匯入作業。


第 1 步:建立新的表空間


我們的轉儲檔案包含了幾個不同的方案,我們要將這些方案匯入到一個新的表空間。我們已經啟動並執行了目標資料庫。首先,DBA 必須為我們的匯入方案建立新的表空間。我們需要啟動 SQL*Plus,並執行下列命令:
SQL> create tablespace example2
datafile '/work1/private/rdbms/dbs/example2.f'
size 1M extent management local
 
第 2 步:啟動匯入作業


既然已經建立了目標表空間,我們就可以使用下列命令執行“資料泵匯入”作業了:
>impdp system/manager dumpfile=example2.dmp       
remap_tablespace=system:example2  logfile=example2imp.log 
job_name=example2

Import:Release 10.1.0.2.0 - Production on Tuesday, 06 July, 2004 6:54
.
.
.
Processing object type SCHEMA_EXPORT/TABLE/TABLE

ORA-39171:Job is experiencing a resumable wait.
ORA-01658:unable to create INITIAL extent for segment in tablespace EXAMPLE2 
第 3 步:停止作業 - 新增表空間檔案


我們的匯入作業已經進入了可恢復等待狀態,並且已經掛起。此作業將保持可恢復等待狀態,直到停止該作業或者可恢復等待期間(預設為兩個小時)到期。此時,DBA 可以通過向 EXAMPLE2 表空間再新增一個檔案來進行干預。停止作業的一個十分充分的理由就是,DBA 在新增第二個轉儲檔案時需要對磁碟子系統進行維護。一般情況下沒必要停止作業。


在我們的示例中,我們要在可恢復等待到期之前使用 Control-C 停止該作業。
^C
Import>stop_job=immediate
第 4 步:向表空間新增檔案


我們可以呼叫 SQL*Plus,向 EXAMPLE2 表空間新增檔案。
SQL>alter tablespace example2 add datafile '/work1/private/rdbms/dbs/example2b.f'
size 1m autoextend on maxsize 50m;
第 5 步:連線作業


現在,我們就可以連線作業,並重新啟動匯入了。請注意,我們是按 job_name 連線作業的;在這裡為 EXAMPLE2。
 >impdp system/manager attach=example2

Import:Release 10.1.0.2.0 - Production on Tuesday, 6 July, 2004 07:01

Copyright (c) 2003, Oracle.All rights reserved.
  .
  .
  .
Job Error Count: 0
Dump File:/work1/private/oracle/rdbms/log/example2.dmp

Worker 1 Status:
State:UNDEFINED
Object Schema:HR
Object Name:COUNTRIES
Object Type:SCHEMA_EXPORT/TABLE/TABLE
Completed Objects: 15
Worker Parallelism: 1 
第 6 步:重新啟動作業


現在我們就可以重新啟動作業了。這次我們將使用 START_JOB。
Import> start_job
第 7 步:檢查作業狀態


我們可以隨意地檢視作業的狀態。
Import> status

Job:EXAMPLE2
Operation:IMPORT
Mode:SCHEMA
State:EXECUTING
Bytes Processed: 2,791,768
Percent Done: 99
Current Parallelism: 1
Job Error Count: 0
Dump File:/work1/private/oracle/rdbms/log/example2.dmp

Worker 1 Status:
State:EXECUTING
Object Type:SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Worker Parallelism: 1 
作業完成後,您可以檢視 example2imp.log 檔案,獲取作業狀態和其他資訊。


在示例 2 中,我們演示瞭如何重新啟動一個資料泵匯入作業。請注意,通常情況下,新增第二個轉儲檔案時沒有必要停止作業(第 3 步)。可以在另一個會話中向表空間新增該檔案。換句話說,我們可以跳過第 3、5、6、7、8 步。在這種情況下將自動恢復作業。


總結


如果您使用資料泵時遇到故障,則可以輕鬆修復該問題,然後使用不會導致任何資料丟失的資料泵重新啟動功能,而不必完全重新執行該操作。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22207394/viewspace-1134994/,如需轉載,請註明出處,否則將追究法律責任。

相關文章