oracle 原始的表,如何在不知道原始表空間的情況下導入Oracle DMP文件?

使用案例:客戶將他們的數據庫備份發送到dmp文件。這就是他們會發送的。如何在不知道原始表空間的情況下導入Oracle DMP文件?

我正在構建一個腳本,該腳本將使用DBMS_DATAPUMP將該dmp文件導入到Oracle中。但是,由於我不知道原始表空間名稱,因此我收到以下錯誤: ORA-39083:對象類型USER:「XXXXX」未能創建,錯誤: ORA-00959:表空間'XXXXXXX'不存在

這是我的PL/SQL程序:

PROCEDURE IMPORTING

(

DMPFILES IN VARCHAR2,

FROMSCHEMA IN VARCHAR2,

TOSCHEMA IN VARCHAR2

) AS

ind NUMBER; -- Loop index

h1 NUMBER; -- Data Pump job handle

percent_done NUMBER; -- Percentage of job complete

job_state VARCHAR2(30); -- To keep track of job state

le ku$_LogEntry; -- For WIP and error messages

js ku$_JobStatus; -- The job status from get_status

jd ku$_JobDesc; -- The job description from get_status

sts ku$_Status; -- The status object returned by get_status

array apex_application_global.vc_arr2;

BEGIN

h1 := DBMS_DATAPUMP.open('IMPORT','FULL',NULL,'EXAMPLE1');

dbms_datapump.add_file(handle => h1, filename => 'IMPORT.LOG', directory => 'DATA_PUMP_DIR', filetype => 3);

-- usign this function to split the files passed as a String to an array

array := apex_util.string_to_table(DMPFILES, ',');

for i in 1 .. array.count loop

DBMS_DATAPUMP.ADD_FILE(h1,array(i),'DATA_PUMP_DIR');

end loop;

DBMS_DATAPUMP.METADATA_REMAP(h1,'REMAP_SCHEMA',FROMSCHEMA,TOSCHEMA);

dbms_datapump.set_parameter(handle => h1, name =>

'INCLUDE_METADATA', value => 1);

dbms_datapump.set_parameter(handle => h1, name =>

'DATA_ACCESS_METHOD', value => 'AUTOMATIC');

dbms_datapump.set_parameter(handle => h1, name =>

'REUSE_DATAFILES', value => 0);

dbms_datapump.set_parameter(handle => h1, name =>

'SKIP_UNUSABLE_INDEXES', value => 0);

DBMS_DATAPUMP.START_JOB(h1);

-- The import job should now be running. In the following loop, the job is

-- monitored until it completes. In the meantime, progress information is

-- displayed. Note: this is identical to the export example.

percent_done := 0;

job_state := 'UNDEFINED';

while (job_state != 'COMPLETED') and (job_state != 'STOPPED') loop

dbms_datapump.get_status(h1,

dbms_datapump.ku$_status_job_error +

dbms_datapump.ku$_status_job_status +

dbms_datapump.ku$_status_wip,-1,job_state,sts);

js := sts.job_status;

-- If the percentage done changed, display the new value.

if js.percent_done != percent_done

then

dbms_output.put_line('*** Job percent done = ' ||

to_char(js.percent_done));

percent_done := js.percent_done;

end if;

-- If any work-in-progress (WIP) or Error messages were received for the job,

-- display them.

if (bitand(sts.mask,dbms_datapump.ku$_status_wip) != 0)

then

le := sts.wip;

else

if (bitand(sts.mask,dbms_datapump.ku$_status_job_error) != 0)

then

le := sts.error;

else

le := null;

end if;

end if;

if le is not null

then

ind := le.FIRST;

while ind is not null loop

dbms_output.put_line(le(ind).LogText);

ind := le.NEXT(ind);

end loop;

end if;

end loop;

-- Indicate that the job finished and gracefully detach from it.

dbms_output.put_line('Job has completed');

dbms_output.put_line('Final job state = ' || job_state);

dbms_datapump.detach(h1);

END IMPORTING;

所以基本上我的問題是: 有沒有辦法導入的dmp文件到Oracle數據庫,不知道原始表...?

在此先感謝您的幫助。

更新: 我在使用這個腳本時發現,我也需要知道模式名稱。所以這將在腳本上進行以下更改:

PROCEDURE IMPORTING

(

DMPFILES IN VARCHAR2,

FROMSCHEMA IN VARCHAR2,

TOSCHEMA IN VARCHAR2,

FROMTABLESPACE IN VARCHAR2,

TOTABLESPACE IN VARCHAR2

) AS

ind NUMBER; -- Loop index

h1 NUMBER; -- Data Pump job handle

percent_done NUMBER; -- Percentage of job complete

job_state VARCHAR2(30); -- To keep track of job state

le ku$_LogEntry; -- For WIP and error messages

js ku$_JobStatus; -- The job status from get_status

jd ku$_JobDesc; -- The job description from get_status

sts ku$_Status; -- The status object returned by get_status

array apex_application_global.vc_arr2;

BEGIN

h1 := DBMS_DATAPUMP.open('IMPORT','FULL',NULL,'EXAMPLE1');

dbms_datapump.add_file(handle => h1, filename => 'IMPORT.LOG', directory => 'DATA_PUMP_DIR', filetype => 3);

-- usign this function to split the files passed as a String to an array

array := apex_util.string_to_table(DMPFILES, ',');

for i in 1 .. array.count loop

DBMS_DATAPUMP.ADD_FILE(h1,array(i),'DATA_PUMP_DIR');

end loop;

DBMS_DATAPUMP.METADATA_REMAP(h1,'REMAP_TABLESPACE',FROMTABLESPACE,TOTABLESPACE);

DBMS_DATAPUMP.METADATA_REMAP(h1,'REMAP_SCHEMA',FROMSCHEMA,TOSCHEMA);

dbms_datapump.set_parameter(handle => h1, name =>

'INCLUDE_METADATA', value => 1);

dbms_datapump.set_parameter(handle => h1, name =>

'DATA_ACCESS_METHOD', value => 'AUTOMATIC');

dbms_datapump.set_parameter(handle => h1, name =>

'REUSE_DATAFILES', value => 0);

dbms_datapump.set_parameter(handle => h1, name =>

'SKIP_UNUSABLE_INDEXES', value => 0);

DBMS_DATAPUMP.START_JOB(h1);

-- The import job should now be running. In the following loop, the job is

-- monitored until it completes. In the meantime, progress information is

-- displayed. Note: this is identical to the export example.

percent_done := 0;

job_state := 'UNDEFINED';

while (job_state != 'COMPLETED') and (job_state != 'STOPPED') loop

dbms_datapump.get_status(h1,

dbms_datapump.ku$_status_job_error +

dbms_datapump.ku$_status_job_status +

dbms_datapump.ku$_status_wip,-1,job_state,sts);

js := sts.job_status;

-- If the percentage done changed, display the new value.

if js.percent_done != percent_done

then

dbms_output.put_line('*** Job percent done = ' ||

to_char(js.percent_done));

percent_done := js.percent_done;

end if;

-- If any work-in-progress (WIP) or Error messages were received for the job,

-- display them.

if (bitand(sts.mask,dbms_datapump.ku$_status_wip) != 0)

then

le := sts.wip;

else

if (bitand(sts.mask,dbms_datapump.ku$_status_job_error) != 0)

then

le := sts.error;

else

le := null;

end if;

end if;

if le is not null

then

ind := le.FIRST;

while ind is not null loop

dbms_output.put_line(le(ind).LogText);

ind := le.NEXT(ind);

end loop;

end if;

end loop;

-- Indicate that the job finished and gracefully detach from it.

dbms_output.put_line('Job has completed');

dbms_output.put_line('Final job state = ' || job_state);

dbms_datapump.detach(h1);

END IMPORTING;

我測試了用導出的dmp,因此我知道TableSpace和Schema名稱。

摘要:然後通過任何方式知道dmp文件中的表空間名稱和模式名稱?

謝謝。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值