MSS使用「數據庫」來引用Oracle中的幾個不同概念。我想也許你的意思是你想要導出一個模式並將其重新導入到具有不同模式名稱的同一個Oracle數據庫中。我通常使用datapump從這個命令行(expdp/impdp)。但是,您可以使用there is a datapump API從SQL shell執行此操作。
-- export
declare
l_dp_handle NUMBER;
BEGIN
l_dp_handle := DBMS_DATAPUMP.open('EXPORT','SCHEMA',null,'MY_EXPORT','LATEST');
DBMS_DATAPUMP.add_file(l_dp_handle,'my_export.dmp','DATA_PUMP_DIR');
DBMS_DATAPUMP.add_file(l_dp_handle,'my_export.log','DATA_PUMP_DIR',null,DBMS_DATAPUMP.KU$_FILE_TYPE_LOG_FILE);
DBMS_DATAPUMP.metadata_filter(l_dp_handle,'SCHEMA_EXPR','= ''OLD_SCHEMA_NAME''');
DBMS_DATAPUMP.start_job(l_dp_handle);
DBMS_DATAPUMP.detach(l_dp_handle);
END;
/
-- check status with:
select * from dba_datapump_jobs;
-- import
declare
l_dp_handle NUMBER;
BEGIN
l_dp_handle := DBMS_DATAPUMP.open('IMPORT','SCHEMA',null,'MY_IMPORT','LATEST');
DBMS_DATAPUMP.add_file(l_dp_handle,'my_export.dmp','DATA_PUMP_DIR');
DBMS_DATAPUMP.add_file(l_dp_handle,'my_export.imp.log','DATA_PUMP_DIR',null,DBMS_DATAPUMP.KU$_FILE_TYPE_LOG_FILE);
DBMS_DATAPUMP.metadata_filter(l_dp_handle,'SCHEMA_EXPR','= ''OLD_SCHEMA_NAME''');
DBMS_DATAPUMP.metadata_remap(l_dp_handle,'REMAP_SCHEMA','OLD_SCHEMA_NAME','NEW_SCHEMA_NAME');
DBMS_DATAPUMP.start_job(l_dp_handle);
DBMS_DATAPUMP.detach(l_dp_handle);
END;
/
請注意,如果要導入到您自己以外的模式中,您將需要DBA權限。您的Oracle用戶還需要在目錄(本例中爲DATA_PUMP_DIR)上的讀/寫權限,對DBMS_DATAPUMP執行權限等。
我*想*這正是我想要的。我要去嘗試一下。 – Darrien
對於第一個add_file行,我被告知我給了一個無效的參數值。這就是我在做的事情:DBMS_DATAPUMP.ADD_FILE(l_dp_handle,'{dbBackup.ToLower()}。dmp','{DbDumpDir}');其中dbBackup是備份的名稱,DbDumpDir是數據庫轉儲的路徑。任何想法我正在犯什麼錯誤? – Darrien
@Damien - 您必須傳遞Oracle目錄對象的名稱,而不是OS目錄路徑。查看'all_directories'來查看你是否有權訪問任何。您可能需要額外的權限(爲此,並創建新用戶)。 –