2010-06-27 78 views
0

我有一個新手問題 - 我在網上搜索了很長時間,但找不到任何答案。將數據導出到平面文件

據我所知,所有包,過程和存儲的程序單元都存儲在系統表空間或sysaux表空間中。我的要求是將源數據庫中的一些模式複製到目標數據庫中。足以展示模式並將它們帶入目標數據庫嗎?這是否也會將存儲的程序單元跨越。或者我是否需要導出sys/system模式?我導出了一個模式並在unix中執行了以下操作。

strings expdat.dmp | grep -i「package」但這不會返回任何內容。我也打開了exp文件並搜索了這些軟件包,但無濟於事。所以我創建了一個parfile(tables = somepackagename),但是exp抱怨沒有找到該對象。

任何想法?

回答

1

只要程序/功能屬於您輸出的用戶,它就應該在輸出內。如果您沒有找到「軟件包」,那可能是因爲您導出的用戶沒有託管任何軟件包(但可能只有獨立程序和/或功能)。 根據您的Oracle版本,您可能有expdp和option include。

Nicolas。

0

是的,程序包,過程,函數等等的代碼存儲在SYSTEM表空間中,但是當你導出一個模式時,Oracle並不關心這個問題 - 它捕獲了重新創建新對象所需的DDL數據庫。

正如N. Gasparotto所提到的,確保您輸出的模式實際上擁有感興趣的對象。你可以通過連接到使用具有目錄權限的帳戶源數據庫和發出此查詢所擁有的對象的快速摘要:

select owner, object_type, count(*) 
from dba_objects 
group by owner, object_type 
; 

(例如,您可能會看到只有感興趣,因此架構的同義詞它實際上並不擁有這些軟件包)

較新的expdp/impdp實用程序具有更多功能,但具有需要同時訪問數據庫主機文件系統和創建Oracle目錄對象權限的缺點。 exp/imp應該適合你需要做的事情。